Shorthand 汽车和 cdr

Shorthand for car and cdr

我正在尝试 car/cdr 获取列表中的特定元素:

(define x7 '(1 3 (5 7) 9))
; The cdr     (3 (5 7) 9)
; The cddr      ((5 7) 9)
; The caddr      (5 7)
; The cdaddr       (7)

我已经能够深入了解,但是,如果我对结果执行 car 它有效,但如果我在速记形式中添加另一个 a,我得到一个错误:

(car (cdaddr x7)) ; OK
(cadaddr x7)      ; cadaddr: unbound identifier in: cadaddr

简写形式最多只能达到五个 chars/steps,还是我还遗漏了什么?

根据 R6RS report:

Arbitrary compositions, up to four deep, are provided. There are twenty-eight of these procedures in all.

这与 R5RS 和新的 R7RS 报告相同。当然,没有什么可以阻止实现添加更多内容,但是使用这些会降低程序的可移植性,因为其他实现可能只提供所需的 4 深度。

您当然可以提供自己的课程:

(define (cadadadr p)
  (cadar (cdadr p)))

由于 Scheme 没有任何保留字,即使语言或实现决定在以后包含这些保留字,这也应该有效。它永远不会使用新的并使用您的定义。