Lisp 就是 LISt Processing,誕生於 1958 年 John McCarthy 的設計,是目前年紀第二老的高階程式語言,最老的 Fortran 比它早一年,擅長資料處理。目前 LISP 已經衍生出許多方言,但最通用的是 Common Lisp 及 Scheme (目前比較常用的 scheme compiler 是 chicken)。現今流行的高階程式語言,都有 Lisp 功能的影子,在 1958 年 John McCarthy 設計的 Lisp,其提出的設計概念,普遍用在許多高階程式語言中。
Lisp 一開始只是數學理論,跟 Fortran 不同,Fortran 一開始就是以程式語言的概念設計出來的,也就是說,Fortran 是適應了計算機,刻意設計出來的程式語言。
Lisp 一開始就提出了一些概念,其中有很多概念,已經是大家習慣且接受的概念
- 條件結構 if-then-else
- 遞迴函數
- Functional language,函數也是一種資料型別,可當作參數傳入另一個function,function 也可以回傳 function
- 動態資料型別,Lisp 的變數都是 pointer,指向的值有資料型別的分別,但變數本身,只是儲存 pointer
- 自動記憶體管理、垃圾回收機制
- expression 與 statement,Lisp 程式是許多 expression 的集合,但 fortran 是由 expression 以及 statement 組成,expression 是用來運算,statement 用來控制程式執行的順序
- Symbol y 資料型別,這是一種指向 hash 的 string,比較 symbol 時,就只要比較 pointer 是不是一樣就好了,不用做字串比較
- 程式用符號跟常數組成 tree structure
- REPL: Read-Eval-Print Loop
LISP 並不是一個單純的程式語言,而是一個程式語言家族,一開始發展的 LISP 現在已經不存在了,而是衍生為其他不同的方言,繼續存活下去,這些方言的共通點只有語法,也就是 S expression,s-expression 既可當作程式,也可以當作資料。
scheme 跟 common lisp 的差異是, scheme 比較簡潔,這表示在不同 scheme implementation 之間,會遇到不相容的問題,這不完全是缺點,學習時,會比較瞭解 LISP 的核心概念。Common Lisp 則是以實用為主,目前已經有一個龐大的生態系統,如果要運用在實際的商業環境,要選擇用 Common Lisp,選用 Common Lisp 能夠比較容易切換到不同的實作上。
一般建議是先了解 scheme 語法,入門後,再轉換到 Common Lisp
沒有留言:
張貼留言