Lisp 总结

 

基本语法

宏定义
(define pi 3.14)
(define hi "hello")
 
定义一个过程
(define (add a b) (+ a b))
(add 10 20)
 
 
一个序对
(cons 1 2)
(cons 1.1 "aa")
 
定义一个序对
(define x (cons 1 2))
(define y (cons 3 4))
(define z (cons x y))
 
car是Contents of Address part of Register寄存器的地址部分的内容
cdr是Contents of Decrement part of Register寄存器的减量部分的内容
(car (car z))  结果是1
(car (cdr z))  结果是3
 
(define c (cons 11 22))
(define d (cons 33 44))
(define x (cons a b))
(define y (cons c d))
(define z (cons x y))
(((1 . 2) 3 . 4) (11 . 22) 33 . 44)       #z的值
 
# (car z)
((1 . 2) 3 . 4)
 
#(caar z)
(1 . 2)
 
# (caaar z)
1
 
# (cdadr z)   相当于 cdr,car,cdr三个操作,先从cdr开始然后是car最后是cdr
# cdr后就是 (11 . 22) 33 . 44), car后就是(11,22),最后cdr就是22
22
 
# (cddar z)
按照上面的推论结果就是4

#if表达式
(if predicate then_value else_value)

and
or
not
# 条件分支
(define test-age (lambda (age)
  (cond
   ((< age 16) "未成年")
   ((and (> age 16) (< age 28)) "少年先锋队")
   ((and (> age 28) (< age 40)) "成年人")
   ((and (> age 40) (< age 55)) "中年人")
   ((and (> age 55) (< age 70)) "老年人")
   (else "很老的年纪"))
  ))

(test-age 19)

 

let语法

(let ((a 1)
      (b 2))
  (+ a b))

#定义一个lambda再内嵌lambda的函数,其中包含了let定义
(define gg
  (lambda (x)
    (let ((a 10)
          (b 20))
      (lambda (y)
        (let ((c 30)
              (d 40))
          (+ (+ a c) (+ x y)) 
          )))))

(gg 10)
((gg 1) 2)

#结果
3
#<procedure>
43

#实际上,let表达式只是lambda表达式的一个语法糖
(let ((p1 v1) (p2 v2) ...) exp1 exp2 ...)
;⇒
((
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值