минусы, список и mpair в ракетке - PullRequest
1 голос
/ 28 февраля 2012

У меня есть следующий код и его оценка в качестве комментария:

(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 Ответ

6 голосов
/ 28 февраля 2012

В качестве общего примера, (list x y z) является сокращением для (cons x (cons y (cons z empty)))(list) - пустой список, то есть empty.Так что (list 'un (list)) - это просто сокращение для (cons 'un (cons empty empty)) - то есть список с двумя элементами: символ 'un и пустой список.mlist аналогично является сокращением для последовательности mcons на empty в самом конце.

...