# not recommand for using, hard to understand

## Lisp850 核心函数说明
1. ‌数值操作与变量赋值‌
(define x 10)           ; 定义变量x并赋值为10
(define y 20)           ; 定义变量y并赋值为20
(define result (+ x y)) ; 将x与y相加的结果赋给result变量


数值支持整数和浮点数：

(define pi 3.14159)
(define total (* 5 2.5))  ; 返回12.5

2. ‌字符串操作‌

Lisp850中字符串作为原子(atom)处理：

(define name "Alice")     ; 定义字符串变量
(define greeting "Hello") 


字符串比较使用eq?函数：

(eq? name "Alice")        ; 如果是"Alice"返回#t，否则返回()

3. ‌条件判断‌

if语句‌：

(if (> x 0)
    "positive"
    "non-positive")


cond语句‌（多条件分支）：

(cond
  ((< score 60) "Fail")
  ((< score 80) "Pass")
  ((< score 90) "Good")
  (else "Excellent"))

4. ‌循环与递归‌

由于没有内建的while循环，使用递归实现循环功能：

递归计数‌：

(define (countdown n)
  (if (> n 0)
    (begin
      (print n)
      (countdown (- n 1)))))


列表遍历‌（通过递归实现while效果）：

(define (sum-list lst total)
  (if (eq? lst '())
      total
      (sum-list (cdr lst) (+ total (car lst)))))
      
(define numbers '(1 2 3 4 5))
(sum-list numbers 0)  ; 返回15

## 新增：‌函数定义与调用示例‌
1. ‌基础函数定义‌

无参数函数‌：

(define (say-hello) "Hello World!")
(say-hello)  ; 返回"Hello World!"


单参数函数‌：

(define (square x) (* x x))
(square 5)   ; 返回25
(square 3.2) ; 返回10.24


多参数函数‌：

(define (add-three a b c) (+ a b c))
(add-three 1 2 3)  ; 返回6
(add-three 10 20 30)  ; 返回60

2. ‌递归函数示例‌

阶乘函数‌：

(define (factorial n)
  (if (<= n 1)
      1
      (* n (factorial (- n 1)))))
      
(factorial 5)  ; 返回120
(factorial 0)  ; 返回1


斐波那契数列‌：

(define (fibonacci n)
  (cond
    ((= n 0) 0)
    ((= n 1) 1)
    (else (+ (fibonacci (- n 1))
             (fibonacci (- n 2))))))
             
(fibonacci 6)  ; 返回8

3. ‌高阶函数（返回函数的函数）‌

虽然Lisp850功能有限，但可以模拟高阶函数：

(define (make-adder n)
  (lambda (x) (+ x n)))
  
(define add5 (make-adder 5))
(define add10 (make-adder 10))

(add5 3)   ; 返回8
(add10 3)  ; 返回13

4. ‌使用let*定义局部变量‌

在函数内部使用局部变量‌：

(define (circle-area radius)
  (let* ((pi 3.14159)
         (area (* pi radius radius)))
    area))
    
(circle-area 10)  ; 返回314.159


多步骤计算‌：

(define (quadratic a b c x)
  (let* ((x-squared (* x x))
         (term1 (* a x-squared))
         (term2 (* b x))
         (result (+ term1 term2 c)))
    result))
    
(quadratic 2 3 4 5)  ; 返回69 (2*25 + 3*5 + 4)

5. ‌实际应用示例‌

温度转换函数‌：

(define (celsius-to-fahrenheit celsius)
  (let* ((fahrenheit (+ (* celsius 9/5) 32)))
    fahrenheit))
    
(celsius-to-fahrenheit 0)    ; 返回32
(celsius-to-fahrenheit 100)  ; 返回212


列表操作函数‌：

(define (length lst)
  (if (eq? lst '())
      0
      (+ 1 (length (cdr lst)))))
      
(define (reverse lst)
  (if (eq? lst '())
      '()
      (append (reverse (cdr lst)) (list (car lst)))))
      
(define (list n)
  (if (= n 0)
      '()
      (cons n (list (- n 1)))))

6. ‌函数组合调用‌

链式函数调用‌：

(define (calculate x y)
  (let* ((sum (+ x y))
         (product (* x y))
         (average (/ sum 2)))
    (list sum product average)))
    
(calculate 10 20)  ; 返回(30 200 15)


嵌套函数定义‌：

(define (outer x)
  (define (inner y)
    (* x y))
  (inner 10))
  
(outer 5)  ; 返回50

内存使用说明

每次执行表达式后，系统会自动执行垃圾回收。提示符中的数字sp-hp/8表示可用内存单元数，数字越大表示可用内存越多。

错误处理

未定义的变量或类型错误会返回ERR符号：

(undefined-function 1 2 3)  ; 返回ERR
(car 42)                    ; 返回ERR（不能对数字执行car操作）

交互式使用技巧
多行表达式‌：Lisp表达式使用括号自动确定边界
退出程序‌：Ctrl+C或Ctrl+D
环境保存‌：变量定义保存在全局环境env中

这个Lisp850实现虽然功能有限，但包含了Lisp编程的核心特性，适合学习和理解函数式编程的基本概念。