寫 Emacs-Lisp 的感覺

2018-01-29 22-54-09 的螢幕擷圖

最近閒來很認真寫 Lisp ,是因為想要把 Lisp 練到日常可取用的地步。

理由是:先設想用 C, Java, VB, C# 等各種語言好了,如果你想寫一段程式,目標是心血來潮想要隨手使用一次電腦的運算能力,結果會發現,雖然原初的動機是想要電腦快點執行運算,可是,卻因為每次手一沾上那些語言,首先就在處理系統架構、甚至軟體工程的問題,等到寫到相關程式處都已經累了,或者,我需要寫相對超量的文字(例如定義一個 class 組織)之後,才使得主要程式進展一行。相對的,當我沾上程式語言的 REPL 環境,首先就可以敲打一小段程式片段,然後立刻執行。

選擇 Emacs 做 Lisp 的程式環境,相對是心裡感受負擔比較小的。開著 Emacs ,對我來說只是開著一個文字編輯器,想打字進去就打字,而若是不想開著,隨手關掉也沒關係。 Emacs 沒有讓我需要特地創建一份專案檔、專案目錄,然後才可以做什麼事情。

於是,我開始像以往寫 Erlang 、寫 Python 那樣,寫著 Lisp ,來處理一段由 Facebook Graph API 擷取的一批符號。

我發現,在 Lisp 語言的思維裡,對環境的未知程度相對是高的、但是這是正常的,因為我不能看 Lisp 的語法集合裡有所謂 for, while 之類的他種語言的基本關鍵字,也就是說,當我想要使用類似 for loop 的機能時,可能第一時間不知道該使用什麼 function 或 macro 。不過,我當下可以自行定義出一個 function 是 for loop 的功能,無傷大雅。在 Lisp 語言中的感覺就是,同一段程式,別人寫或者我寫,都沒錯,沒必要在極小的程式區域裡強調所謂『不要重新製造輪子』的樣的看法。

第二個感覺是,在 Lisp 的精簡語法結構裡面,構思程式的過程則純粹是在閱讀括號中的文字,以及依附於括號所引導出來的結構感受。

第三個,是對於 Emacs 環境的感想。由於 Ctrl-x Ctrl-e 組合按鍵的能力,我可以將遊標停在如圖所示的 strip-empty-string 的定義句末尾,按下上述組合按鍵, Emacs 則提示我:這段程式已經生效了,接著,我可以切換到 buffer *scratch* 去敲打簡單的測試句來做單元測試:例如, (strip-empty-string (list 'hello "" "" 'world "") nil)

Emacs 程式環境相當簡便,但相對來看,沒有編譯資訊讓我早先發現哪一段 Lisp function 還沒有寫好。並且, Emacs-Lisp 的內涵與 ANSI Common Lisp 有些差異:例如,對於陣列、字串的表達與處理方式不同,則要更仔細閱讀二方面的書本,綜合學習。

廣告
本篇發表於 Uncategorized。將永久鏈結加入書籤。