假設我有以下串列:(A B . D).
我如何僅通過使用 list 函式來重現這一點?
(list 'A 'B '. 'D)不管用。
uj5u.com熱心網友回復:
你不能。創建串列的建構式是cons. 正確的串列只是一個空串列或一個或多個鏈,其中cons最后一個具有空串列作為cdr. list只創建適當的串列。例如。
(list 'a 'b 'c)是一個功能(cons 'a (cons 'b (cons c '())))。
(a b . d)是用(cons 'a (cons 'b 'd)). 它不是一個正確的串列,因為它由dand not終止nil。因此,用 . 創建這個結構是不可能的list。
uj5u.com熱心網友回復:
我不確定你在這里真正想要做什么,但這似乎正是
然后很容易看出,沒有b哪個值會導致這樣一個鏈中最后一個 cons 的 cdr 不是nil(aka ())。因此lst,因此list不能構造一個 conses 鏈,其中最后一個 cons 的 cdr 不是nil,這意味著它不能構造一個點串列,因為這是點串列的定義。
uj5u.com熱心網友回復:
我們幾乎可以用 來做到這一點list,但并不完全如此。關鍵是list堅持將 anil放在串列的末尾,但我們希望nil在末尾有一個非值。
因此,除了串列末尾之外,我們可以在任何地方都有一個虛線術語。
我可以為您提供:
(list 'a '(b . c) 'd) ; has a normal list end of 'd -> 'nil
(list 'a '(b . c)) ; looks like b . c is at the end, but actually 'a is
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/435232.html
下一篇:匯總使用樣本
