球拍,列表和球拍

时间:2012-02-28 03:15:42

标签: scheme racket

我有以下代码及其评价为评论:

(require scheme/mpair)

(list)                   ;; '()
(mlist)                  ;; '()

(cons 'un (list))        ;; '(un)
(list 'un (list))        ;; '(un ())

(mcons 'un (mlist))      ;; (mcons 'un '())
(mlist 'un (mlist))      ;; (mcons 'un (mcons '() '()))

我的问题:

  1. 为什么第3个表达式不会返回'()而不是'(un . ())

  2. 为什么第5个表达式和第6个表达式不会返回相同的东西?

1 个答案:

答案 0 :(得分:6)

作为一般示例,(list x y z)(cons x (cons y (cons z empty)))的缩写。 (list)是一个空列表,即empty。所以(list 'un (list))只是(cons 'un (cons empty empty))的缩写 - 即。包含两个元素的列表:符号'un和空列表。 mlist同样是最后mconsempty的序列的缩写。