Re: [閒聊] 最近寫 clojure 有感
看板PLT (程式語言與理論)作者Schelfaniel (Schelfaniel)時間15年前 (2009/07/07 10:12)推噓5(5推 0噓 4→)留言9則, 4人參與討論串3/4 (看更多)
※ 引述《noctem (noctem)》之銘言:
: ※ 引述《Schelfaniel (Schelfaniel)》之銘言:
: : clojure 首先它走 JVM,所以很多函式庫的部份不成問題,
: : 除了本身 Java 的限制,像是 Java 太底層還是要呼叫 C 的等等
: : 但是反過來說 clojure 語法現代化很多,和 Java 的結合性也很高,
: : clojure 提供了很多專為 Java 設計的,如 proxy 指令,
: : 就是專為 Java 事件回呼函式用的,
: 看了 Ruby 板的範例,語法上還是蠻有 LISP 家族的風格。
: 中括號和大括號分別是什麼意思呢?冒號有特別意義嗎?
中括號是 vector,但是很多情形是用在表示參數,如 let fn 等的參數
user=> (type [1 2 3])
clojure.lang.LazilyPersistentVector
user=> (let [x 1] x)
1
大括號是 hashtable
user=> (type {'a 'b})
clojure.lang.PersistentArrayMap
冒號是 keyword
user=> (type :a)
clojure.lang.Keyword
基本上它 hashtable 都習慣用冒號,像是
{:name "godfat" :type 'super-programmer}
就是 key 值是 :name 的內容是 "godfat"
:type 'super-programmer
: 此外 clojure 和 LISP 有哪些不同呢?
其實,有一些我目前也只試用一些淺顯的功能,詳細的比較官網上有寫
http://clojure.org/lisps
: 1. purely functional?
我覺得還是沒有 Haskell 純啦,但是比 Common Lisp 純,
至少, Common Lisp 可以寫得 OO 的,但 clojure 會很自然得寫得 functional
我是覺得比 Haskell 好入門 :QQ
: 2. 是 static 還是 dynamic typing?
dynamic typing,不過,由於 Java 是 static typing
在呼叫 Java 函數時,會變成使用 Java 的 Reflection 機制(會比較慢),
因此 clojure 提供的 Type Hint 也就是在參數中加入提示
可以比較一下 foo 和 foo2,都是呼叫 Java 的 .length,
但是 foo2 時提示了 x 的型態是 String
(註:此時如果型態不是 String 就會出錯)
速度上就馬上從 dynamic language 的速度提升到像是 static language 的速度。
user=> (defn foo [x] (.length x))
#'user/foo
user=> (time (dotimes [_ 1000000] (foo "a")))
"Elapsed time: 20217.463888 msecs"
user=> (defn foo2 [#^String x] (.length x))
#'user/foo2
user=> (time (dotimes [_ 1000000] (foo2 "a")))
"Elapsed time: 28.428942 msecs"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.29.28.137
推
07/07 10:23, , 1F
07/07 10:23, 1F
推
07/07 10:35, , 2F
07/07 10:35, 2F
→
07/07 13:54, , 3F
07/07 13:54, 3F
→
07/07 15:05, , 4F
07/07 15:05, 4F
推
07/07 15:10, , 5F
07/07 15:10, 5F
推
07/07 17:02, , 6F
07/07 17:02, 6F
→
07/07 20:16, , 7F
07/07 20:16, 7F
推
07/07 20:35, , 8F
07/07 20:35, 8F
→
07/07 20:40, , 9F
07/07 20:40, 9F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 4 篇):
PLT 近期熱門文章
PTT數位生活區 即時熱門文章