這是我以前的問題的後續行動:Why do we need nil?顯然,大部分時間都使用正確的列表。但是,不正確列表的目的是什麼?什麼是不正確的名單?
回答
沒有很好的理由。唯一不正確的列表真正有用的是作爲關聯列表語法的一部分 - 甚至在那裏,鍵值對的自定義語法會更好。任何你認爲不適當列表的用法都可以用記錄類型更好地實現 - 畢竟,包含列表:你可以根據記錄定義Lisp列表,但不能以其他方式定義(因爲列表不允許你定義數據結構的類型與語言中的所有其他類型不相交)。
濫用成對和列表來代表所有類型的數據是我喜歡叫的Lisp程序員的疾病,這真是令人遺憾的是,許多Lisp的倡導者提倡它。我必須多次清理那些東西。
sacundim,感謝您的參與。我一直困惑這個列表vs記錄相當長一段時間。我想了解更多。但是,使用谷歌搜索不會返回任何有用的結果。既然你說過你多次清理過這些東西,如果它存在某處,我想更多地看到它。謝謝。 – day 2012-01-31 08:33:30
非常好的問題! (好吧,我喜歡Chris重寫它,反正......)。根據我的經驗,不正確列表最常見的用法是輕量級的兩元素結構。
推理過程如下:「gee,我需要一個雙元結構哦,等等,爲什麼不用'cons'呢?它是內置的,它的內置引用非常好的支持語法,到底是什麼,我會做的。「
特別是,諸如「assoc」之類的內置操作通常以假定給出不正確的兩元素列表的列表的方式實現。
+1很好的回答! (感謝您的信任投票。:-)) – 2012-01-30 20:45:09
不正確列表的存在是基本構件塊cons
,car
和cdr
存在的自然結果。 Lisp的核心是這三個構成了各種更復雜數據類型的基礎。以某種方式挑出不合適的流放名單將需要施加任意的限制。
不,它不是。這實際上是Lisp動態類型化的事實(或者從lambda演算的角度來看,沒有類型化)。靜態類型的Lisp類似物沒有虛線列表,因爲它們與「cons」相對應的類型將第二個參數限制爲列表。例如,在Haskell中,我們有'(:) :: a - > [a] - > [a]'(':'運算符需要一個'a'和一個'a'列表並返回一個列表'a ')。 – 2012-01-30 23:05:52
嘿,我不同意你們倆:)。建立一個動態類型的語言很容易,其中cons只能在第二個元素是適當的列表時使用。例如,請參閱球拍中的教學語言級別。例如,這與有關+運算符的檢查有點相似。+不適用於字符串,並在應用時檢查。 – 2012-01-31 17:30:45
對於除使用cons
構建的列表以外的任何數據類型,「不正確列表」是一個模糊的術語。
正如John所說的,一個例子是以與使用ML中的元組相同的方式使用cons
對。
另一個例子是作爲列表上的變體。例如,可以如下定義流:
;; A Stream-of-X is one of
;; - null, ie '()
;; - (cons X Stream-of-X)
;; - a procedure taking no arguments and returning a Stream-of-X result
;; nats-from : nat -> Stream-of-nat
(define (nats-from n)
(cons n (lambda() (nats-from (+ n 1)))))
- 1. 什麼是正確的包括訂單
- 2. 什麼是真正在做的名單
- 3. Internet Explorer菜單z-order:爲什麼不是正確的?
- 4. 確保單個課程實例的正確方法是什麼?
- 5. 確定什麼是單元測試,什麼不是
- 6. 什麼是包含雙指針的單鏈表的正確名稱?
- 7. 更改WinForm表單的命名空間的正確方法是什麼?
- 8. 爲什麼wszName不正確?
- 9. 當用戶名和密碼不正確時,爲什麼它確定但不是正確?
- 10. 需要var args的函數的正確PInvoke簽名是什麼?
- 11. 什麼是重命名你的xaml文件的正確方法?
- 12. 什麼是正確的Java命名約定的ID?
- 13. 什麼是掃名單
- 14. 什麼是非MVC ASP.Net代碼的正確名稱?
- 15. 什麼是關聯表的正確名稱(多對多關係)
- 16. 這種節點模塊的正確名稱是什麼?
- 17. android的正確活動名稱是什麼?
- 18. 更改EntityManager服務名稱的正確方法是什麼?
- 19. 網上轉賬服務的正確名稱是什麼?
- 20. 引用路徑和文件名的正確術語是什麼?
- 21. 什麼是T4模板文件的正確文件擴展名?
- 22. c函數中WINAPI標籤的正確名稱是什麼?
- 23. python pandas OLS.predict,什麼是正確的簽名?
- 24. 更改數據庫名稱的正確方法是什麼?
- 25. 什麼是休眠參數名稱的正確格式
- 26. Racket布爾參數的正確命名約定是什麼?
- 27. 布爾參數'needParse'或'isNeedParse'的正確名稱是什麼?
- 28. - >, - > *和。*運算符的正確名稱是什麼?
- 29. 什麼是PowerShell 3.0中[命令]的正確名稱?
「你的_opinion_是什麼?」在你的問題中是一個危險的句子。正如你所知道的,在Stack Overflow上沒有任何意見,只有事實。尋求意見只會讓你的問題關閉。它已經有4票贊成票;進一步的近距離投票會導致你的問題被關閉。 – 2012-01-30 20:19:22
爲了保存這個問題,我會完全重寫這個問題。我希望你能和你在一起。 – 2012-01-30 20:20:15
感謝提醒和編輯,克里斯。我沒有意識到這一點。那麼,但它仍然關閉? – day 2012-01-31 08:23:06