也許這個問題太籠統了,不過我會嘗試: 有關於常見lisp類型的綜合指南嗎?關於常見lisp類型的綜合指南
我有點困惑這個問題:
爲什麼在make-array
的:element-type
宣佈非原始類型都提升到t
?編譯時或運行時檢查真正的聲明類型是否有可能?
爲什麼CLOS插槽定義的類型不能用作約束,允許將任何類型的值放入插槽中?再次,檢查怎麼樣?
函數的類型聲明與declare
相同。它們只是編譯器的優化提示嗎?
此外,我可以使用自定義類型說明符,包括satisfies
在前面提到的地方進行一些可靠的檢查,或者它們只能用於與typep
e.t.c的顯式檢查?正如你所看到的,我在腦海裏有一些混亂,所以真的很感謝任何精巧的指南(或一套指南)。
我在SBCL上,但也很高興知道實現之間的差異。
在這個問題中可能有太多問題,這使得這個問題有點過於寬泛。但綜合指南可能只是HyperSpec中的部分選擇。例如,對於類型聲明,您可以查看[聲明類型](http://www.lispworks.com/documentation/lw50/CLHS/Body/d_type.htm),它準確描述了類型聲明的含義(非常多如果變量的值實際上不是那種類型,那麼您有未定義的行爲)。但未定義的行爲可能是有用的,因爲編譯器可以:(i)插入類型檢查以提供安全性,並讓您知道是否... –
事情出錯;或者(ii)使用*不會檢查類型的優化代碼,因爲您承諾價值將是正確的類型。它將執行的操作可能取決於其他聲明,例如任何[OPTIMIZE聲明](http://www.lispworks.com/documentation/lw50/CLHS/Body/d_optimi.htm#safety)的值。 –
可能是「綜合指南」的一部分的HyperSpec的另一部分將是章節[4。類型和類](http://www.lispworks.com/documentation/lw50/CLHS/Body/04_.htm)。該部分實際上內容稍微薄弱,但鏈接到幾乎所有相關條目(例如,哪些類型被使用,哪些可以定義它們,如何使用等等)。 –