[译] Lisp之根源(十六)

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

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

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

同样,我们用(list e1 ... en)代表(cons e1 ... (cons en '()) ... )

> (cons 'a (cons 'b (cons 'c '())))
(a b c)

> (lisp 'a 'b 'c)
(a b c)

现在,我们定义一些新的函数。我在函数名的末尾加了句号,以便于和原始的函数区分开。同时也防止和现有的Common Lisp的函数产生冲突。

  1. (null. x)判断参数是否是空列表。
(defun null. (x)
    (eq x '()))

> (null. 'a)
'()

> (null. '())
t
  1. (and. x y),当参数都为true时,返回true,否则返回false(即'())。
(defun and. (x y)
    (cond x (cond (y 't) ('t '())))
    ('t '())))

> (and. (atom 'a) (eq 'a 'a))
t

> (and. (atom 'a) (eq 'a 'b))
()

推荐阅读更多精彩内容

  • 原文地址:https://github.com/JuanitoFatas/slime-user-manual#24...
    四月不见阅读 2,627评论 0 2
  • 3.4 说说相等和内部表示 在Lisp中主要有5种相等断言,因为不是所有的对象被创建的时候都是相等意义上的相等。数...
    AllenChyou阅读 1,539评论 0 6
  • React工作原理: React 会创建一个虚拟 DOM(virtual DOM)。当一个组件中的状态改变时,Re...
    任小宪阅读 142评论 0 0
  • 今天和她下了馆子,吃了顿烤鱼。我不记得上一次下馆子吃大餐是什么时候了。大概是因为穷,其实也没有必要,我对饮食...
    都庞先生阅读 89评论 0 0
  • 好多人想写一写,卢工第一个吧。 真名真姓,卢工,卢建林。我们项目的合作方经理。一个看不出年轻的小伙子,天天加班到深...
    山谷和百合阅读 272评论 1 2