在Racket中创建一个空列表

Dav*_*and 5 null list racket

我正在教自己LISP的在线文本计算机程序的结构和解释,但它与我正在运行的学习LISP的Racket程序的细节不同.例如,SICP表示任何列表的终止元素都是'nil',但是Racket不支持'nil'.如何在Racket中创建一个空列表,以便我可以测试自己的程序?

Sea*_*lin 13

表示空列表'().所以你可以创建一个像这样的列表

(cons 1 (cons 2 (cons 3 '())))
Run Code Online (Sandbox Code Playgroud)

这会生成列表

'(1 2 3)
Run Code Online (Sandbox Code Playgroud)


Chr*_*ung 7

肖恩的回答是正确的.但是,如果您希望能够输入nil,那么这也很容易.只需在会话开始时运行一次:

(define nil '())
Run Code Online (Sandbox Code Playgroud)

  • 还有'null'和/或'empty',具体取决于您使用的是哪种球拍语言. (3认同)

jhr*_*hrr 5

在 Racket 中,空列表被指定为:

'()

或作为:

null

我会说这null可能是两者中更惯用的一种,它与 predicate 一致null?,后者测试空列表。

请参阅文档

  • 我非常喜欢使用 `'()` 而不是 `null`。两个原因: 1. `'()` 是一个数据字面量,而不是像 `null` 这样的标识符。这意味着你_知道_`'()`的内容,不像`null`可以反弹:`(let ((null #f)) null)`。2. `'()` 适用于所有 Scheme 实现。`null` 仅适用于定义它的实现(如 Racket)。 (3认同)