簡體   English   中英

在Lisp中沒有nil的列表

[英]List without nil in Lisp

我知道在Lisp中列表必須以nil結尾,但表達式如此

(print (cons 1 (cons 3 2)))

不會拋出任何錯誤。 它打印:

(1 3 . 2)

這是正確的嗎?

我正在使用GNU Clisp。

在Lisp中, 正確的列表以NIL結尾,但您也有不正確的列表。 一種不正確的列表是其中最后一個cons單元在其CDR具有除NIL之外的原子的列表。 (1 3 . 2)正是這樣一個不合適的清單。

你甚至可以擁有不合適的列表,它根本沒有最后一個單元格。 CARCDR基本上只是指針,所以你可以有圓形列表!

在Common Lisp(這是CLISP實現的語言)中,許多標准函數不適用於不正確的列表作為參數。

你所擁有的是一個虛線列表 ,這是一種不正確的列表

最后一個CDR為NIL的CONS細胞鏈是一個合適的列表

注意評估正確列表時會發生什么情況也很有趣:

;; A proper list
(cons '+ (cons 5 (cons 10 '())))
⇒ (+ 5 10)
(eval (+ 5 10))
⇒ 15

與評估虛線列表:

;; A dotted list
(cons '+ (cons 5 (cons 10 5000)))
⇒ (+ 5 10 . 5000)
(eval (+ 5 10 . 5000))
⇒ 15

它忽略了終止原子。

當您遍歷列表時,您知道在達到nil時達到了結束。 你擁有的是一個帶有汽車和點對的列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM