完整的emacs and lisp的學習集合整理如下:
https://github.com/GreyZhang/g_lisp
繼續emacs以及lisp的學習,這次來看幾個common lisp中的查詢函數。
從上面的結果可以看出,查詢成功的時候返回相應的查詢數值。查詢失敗的時候,返回nil。
同樣的功能,也可以用於列表的查詢。
這個查詢功能在使用的時候還能夠傳入一個函數用來處理列表中的各個元素。其中,第一個元素就是查找對象。
但是,類似的功能在列表中可能會出問題。上面的測試中,從提示的信息看,列表的子元素是不會自動展開的。這樣,在執行相應功能的時候就可能出現類型不匹配的錯誤。如何進行類似功能的測試操作呢,接下來做一個相關的測試。
從上面測試記錄,看得出如果使用了一個可以接收不同的類型的函數,則可以進行各種相應的判斷。
此外,還有一個test-not的函數參數。這個是用來尋找第一個不滿足條件的元素的。
還有一個start的屬性,可以用來只是從哪個index開始進行搜索。
除此之外,還有一個可以用於指定結束index的屬性。從上面的結果看,其實這個行爲我 還是很熟悉的,在什麼地方呢?在python的數組切片功能中。
Find-f的功能與find其實是類似的,但是更加簡潔一些。傳入參入的順序也有一些不同。
還有一個與之相反的操作,find-if-not。
Find-f還有一個用法,可以類似find一樣,傳入一個屬性參數,這樣可以用來處理更加複雜的數據結構。
此外還有一個position函數,這個可以搜索出內容的位置。不過,這個不同於find,似乎傳入的第一個函數是不起作用的。除了position之外,其實還有一個position-if和一個position-if-not。兩個函數的使用類似前面的find,這裏不再繼續作相應的演示了。
完整的emacs and lisp的學習集合整理如下: