任何人都可以概述如何在LISP中鏈接列表在計算機的內存中表示嗎?計算機是否利用cpu寄存器來保存指針頭部和列表的其餘部分,或者是堆的用途?在lisp中表示鏈接列表
2
A
回答
4
這在很大程度上取決於所使用的特定編譯器和語言運行庫。但是,通常Lisp-like語言中的數據結構是指向其鄰居的堆分配單元。然後,當函數對數據進行操作時,這些數據會被載入硬件寄存器。
考慮在Haskell鏈表類型:
data [a] = [] | a : [a]
一個給定的列表可能被寫爲:
1:(2:(3:(4:(5:[]))) )
或更簡明:
[1,2,3,4,5]
這被表示爲一個堆的alloc形式的ated對象:
其中箭頭表示的指針;並且(:)
代表「cons小區」,存儲指向當前元素的指針的小結構以及列表的尾部。
現在,當一個函數訪問這種數據結構,它會加載指針結構到寄存器,並從這些指針開始加載數據。其具體細節取決於編譯模型和運行時系統模型。例如。對於GHC Haskell,這由STG Machine給出。另外,指針中的低端位可以用來指示指向的特定構造函數;其評估狀態(評估或未評估),甚至是價值本身(如果它很小)(這是pointer tagging optimization)。
2
取決於。如果你有一個真正的問題,Stackoverflow是最好的。
「LISP」是大型語言系列和數百種不同的實現。
已經嘗試了各種實現鏈表的方法。
有一些關於Lisp實現的書籍,有許多小型和大型的開源Lisp實現可供學習。
相關文獻例如可以在這裏找到:http://library.readscheme.org/page8.html
3
有關Lisp的,最鼓舞人心的來源之一這樣的哲學問題是Anatomy of Lisp。即使現在有點過時了。閱讀它(很多年前)對我來說是一個啓發,不僅關於Lisp,還關於一般編程。另一本關於Lisp實現的優秀書是Lisp in Small Pieces。如果你認真學習Lisp內部知識,這兩個將會幫助你很多。
相關問題
- 1. Lisp鏈接列表仿真Java
- 2. 從鏈接列表中獲取鏈接到鏈接列表中
- 3. 顯示鏈接列表
- 4. 在java中的Lisp列表
- 5. 鏈接列表和雙向鏈表列表示例
- 6. 鏈接列表的鏈接列表
- 7. 如何在鏈接列表中創建鏈接列表?
- 8. 將列表連接到一個列表中,並在c(鏈接列表的鏈表中)中列出列表
- 9. 奇數鏈接列表表示
- 10. 鏈接列表的數組表示
- 11. Ada:Naiditch書中的鏈接列表示例
- 12. 列表和鏈接列表
- 13. 鏈接列表
- 14. 鏈接列表
- 15. 鏈接列表
- 16. 在SQL中表示多重鏈接列表
- 17. 鏈接列表中的排序列表
- 18. 散列表中的鏈接列表
- 19. 鏈接列表中的Java鏈接列表
- 20. Java中鏈接列表的鏈接列表
- 21. 訪問鏈接列表中的鏈接列表變量
- 22. 鏈接列表中的鏈接列表:無法檢索值
- 23. 另一個鏈接列表中的鏈接列表
- 24. 鏈接列表在同一個鏈接列表
- 25. 刪除鏈接列表中的鏈接
- 26. LISP表達式列表
- 27. C++:鏈接表表示
- 28. 子列表Common Lisp中
- 29. Lisp中的列表生成
- 30. 嘗試將序列作爲鏈接列表存儲在鏈接列表中 - Java