[英]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)
正是這樣一個不合適的清單。
你甚至可以擁有不合適的列表,它根本沒有最后一個單元格。 CAR
和CDR
基本上只是指針,所以你可以有圓形列表!
在Common Lisp(這是CLISP實現的語言)中,許多標准函數不適用於不正確的列表作為參數。
注意評估正確列表時會發生什么情況也很有趣:
;; 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.