LISP中的基础知识

举报
wh_bn 发表于 2021/12/15 23:04:26 2021/12/15
【摘要】 (quote x)返回x,我们简记为'x (atom x)当x是一个原子或者空表时返回原子t,否则返回空表()。在Lisp中我们习惯用原子t表示真,而用空表()表示假。 > (atom 'a) t > (atom '(a b c)) () > (atom '()) t (eq x y)当x和y的值...

(quote x)返回x,我们简记为'x


(atom x)当x是一个原子或者空表时返回原子t,否则返回空表()。在Lisp中我们习惯用原子t表示真,而用空表()表示假。

> (atom 'a)
t
> (atom '(a b c))
()
> (atom '())
t




  
  1. > (eq 'a 'a)
  2. t
  3. > (eq 'a 'b)
  4. ()
  5. > (eq '() '())
  6. t



  
  1. > (car '(a b))
  2. a



  
  1. > (cdr '(a b c))
  2. (b c)


(cons x y)要求y是一个表,它返回一个表,这个表的第一个元素是x,其后是y中的所有元素,例如:


  
  1. > (cons 'a '(b c))
  2. (a b c)
  3. > (cons 'a (cons 'b (cons 'c ())))
  4. (a b c)


(cond (p1 e1) (p2 e2)...(pn en))
p1到pn为条件,e1到en为结果,cond操作符依次对p1到pn求值,直到找到第一个值为原子t(还
记得吗?)的p,此时把对应的e作为整个表达式的值返回,例如:


  
  1. > (cond ((eq 'a 'b) 'first) ((atom 'a) 'second))
  2. second








取第二个元素

(car (cdr x)) 

可简写成


  
  1. > (cadr '((a b) (c d) e))
  2. (c d)


取第三个元素

(car (cdr (cdr x)))

可简写成

>(caddr '((a b) (c d) e))
 

使用(list e1 e2 ... en)来表示 (cons e1 (cons e2 (... (cons en '())...)))


  
  1. > (cons 'a (cons 'b (cons 'c '())))
  2. (a b c)
  3. > (list 'a 'b 'c)
  4. (a b c)



  
  1. > (null 'a)
  2. ()
  3. > (null '())
  4. t



  
  1. > (and 'a 'b)
  2. t
  3. > (and (atom 'a) (eq 'b 'c))
  4. ()



  
  1. > (not 'a)
  2. ()
  3. > (not (eq 'a 'b))
  4. t



  
  1. > (append '(a b) '(c d))
  2. (a b c d)
  3. > (append '() '(x y))
  4. (x y)




  
  1. > (pair '(a b c) '(x y z))
  2. ((a x) (b y) (c z))




  
  1. > (assoc 'a '((a x) (b y)))
  2. x
  3. > (assoc 'a '((a (foo bar)) (b y) (c z)))
  4. (foo bar)



  
  1. > (subst '(x y) 'b '(a b (a b c) d))
  2. (a (x y) (a (x y) c) d)


文章来源: blog.csdn.net,作者:fengda2870,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/fengda2870/article/details/9075681

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。