lisp 系語言的缺陷

之前很嚮往 lisp 系語言, 像 [[scheme]] 或 [[common lisp]] 。 我在 javascript 中見識到函數式語言的神奇, 但 js 又有一些缺陷,所以前往函數式語言的源頭。

javascript 的問題

js 中的問題是他仍有 運算符 如加減等。 有了運算符語言就不純, 運算符就產生優先問題,使括號產生歧義。

在 es6 中增加的許多新功能,其實都只是 語法糖 , 理論上可以透過巨集實現。 mozilla 有推出一種為 js 打造的巨集系統, 但如同絕大多數語言,該巨集系統必須操作語法樹 AST。

lisp 的改進

lisp 中的抽象語法樹就是列表,結構簡單好操作。 而且 lisp 中不分區運算符和函數, 或說全部都是函數或以函數的語法撰寫。

lisp 的缺陷

不知道叫缺陷妥不妥,總之就是一些不合自己意的地方。

我本來是想學 common lisp, 但發現他的函數命名空間和變數是分開的, 在 js 中都是連在一起,整個崩潰。 要把函數當變數還是 function quote #', 呼叫變成變數的函數也要 funcall 或 apply。

scheme 問題就比較少,但他實在太簡陋了, 沒有 common lisp 那樣完善的標準庫。 如果用 scheme 寫程式應該會很辛苦。

emacs lisp 就不用說了, 連 lexical scope 都沒有, 還能稱作函數式語言嗎?