我試圖用相同的算法運行兩個因子的功能,一個Scala中,對方用Clojure:差異 - 編譯速度
// Scala:
def factorial(n:Int) = (1 to n).foldLeft(1: BigInt)(_*_)
-
;; Clojure:
(defn factorial [x]
(reduce * (range 1N (inc x))))
當我第一次進入REPL的函數時,Clojure會評估(函數定義,而不是計算階乘),沒有任何明顯的延遲;而斯卡拉的一個短暫停頓了一會兒。 (雖然非常非常短,但仍然引人注意)。
當我應用函數來計算階乘時,兩者都返回結果的速度非常快。
我想對REPL有一個基本的瞭解。兩個REPL有什麼區別? Scala REPL是一個真正的REPL嗎?
嗯。如果命令行交互涉及單獨的讀取,評估和打印步驟,那麼我認爲這對於REPL性能來說已經足夠了,無論這種語言是同相還是不同步。如果在執行之前編譯,我不會調用某個解釋器。當然,在「一次一個,一個接一個地執行一個表達式」和「將大塊代碼翻譯並優化成某種'機器'語言,然後執行」之間的各種中間情況。但是,我不認爲這很重要! – Mars
相關:http://stackoverflow.com/questions/5671214/is-lisp-the-only-language-with-repl –