完整的emacs and lisp的學習集合整理如下:
https://github.com/GreyZhang/g_lisp
這個在初步分析spacemacs的配置的時候看過了,關於引用。這一次重新趟水common lisp,再做一次小結。
如果說到引用,首先得看看與之相對的求值。如同上面的數字1以及字符串hi的一個求值,我們看到的其實是最後的意義。而第三個測試,foo的引用在REPL中返回的是一個符號。通過類型查看,我們也能夠看得出這個類型,其實如果是輸入foo求值的話,REPL會按照symbol來進行求值,尋找他的綁定值。有意思的是這個表達式,本質上是一個cons結構,這是否意味着cons結構在一定程度上可以變成代碼片段?
如果是嵌套引用,那麼也能夠層層脫殼。在兩次獲取第一個元素的時候,我們也能夠看得出來引用以及後面的信息其實構成一個list。
接下來的測試,首先做了一個加法的運算。解析器首先會尋找+這個函數,然後把參數傳遞給他。如果是引用,那麼REPL返回的僅僅是這個名稱的對象或者數據,沒有求值的過程。
再回到我們剛剛總結過的獲取函數名,#’的等效方式是函數function。在一定程度上,爲function提供了一個簡寫的方式。如果對函數進行引用,那麼得到的是什麼呢?其實也是一個symbol,也就是說如果單純輸入一個print的話,REPL首先應該會按照變量的方式進行解析。
上面的測試可以看得出,REPL確實是按照變量來做了相應的解析,只是失敗了。其實,這也同樣可以讓我們知道函數名是可以跟變量名在字符串形式上重合的。但是,REPL能夠自動分辨其各自的屬性。接下來,做一個測試:
從上面的結果很容易看得出,這個脫離文檔的分析也是說得通的。
完整的emacs and lisp的學習集合整理如下: