Mathematica 終究不是 Lisp?
02-02
很多人都說 Mathematica 和 Lisp 很像,的確,從語言的特性來說,Mathematica 是屬於與 Lisp 同一類的語言,比如說 S-expression 列表結構以及函數式。但是,我最近發現有些 Mathematica 能做的在 Lisp 的方言里都不能做。比如說下面的模式匹配:
f[0] := 1f[1] := 5f[_] := 10
在 Lisp 里只能寫成:(define (f x) (cond [(= x 0) 1] [(= x 1) 5] [else 10] ))有沒有發現,醜陋許多了啊!用 match 寫也不好看。如果 Lisp 能允許重複使用 define,允許下面這樣寫
(define (f 0) 1)(define (f 1) 5)(define (f _) 10)那有多好!可惜是不允許的。更別說 Mathematica 里的雙下劃線、三下劃線這些,這些在 Lisp 中都是沒有的。
所以,MMA 似乎某些方面比 Lisp 稍勝一籌。至少寫起模式匹配的程序來更舒服。
Lisp的方言很多,也有一些支持模式匹配的。
比如說傳說中的「神」語言(Shen),支持這樣的寫法:(define f
0 -&> 1
1 -&> 5
X -&> 10)
不過它的模式匹配還是不如Mathematica強大。
模式匹配啊你聽說過 Shen 語言嗎在我自己的方言里也支持模式匹配,大概再過 21 天就寫好了(逃
haskell啊
racket支持模式匹配,詳情見王垠大大的解釋器教程~
要說 Lisp 一類的語言,Clojure 里有 case
(let [mystr "hello"]
(case mystr
"" 0
"hello" (count mystr)))
(derive ::rect ::shape)
(defmulti bar (fn [x y] [x y]))
(defmethod bar [::rect ::shape] [x y] :rect-shape)
(defmethod bar [::shape ::rect] [x y] :shape-rect)
推薦閱讀:
※Mathematica導入牆外網頁數據失敗,軟體內如何實現科學上網?
※如何看待工科生因為現在數學軟體太強了,進而對數學不重視的觀念?
※為什麼Mathematica的DSolve函數會解不出顯式解??
※為什麼mathematica的語法和lisp很近?
※Matlab 怎麼填充曲線相交的區域呢?
TAG:WolframMathematica | Lisp |