ho cercato di eseguire due funzioni fattoriali con lo stesso algoritmo, uno in Scala, l'altro in Clojure:Differenza tra Scala REPL e Clojure REPL - compilare velocità
// Scala:
def factorial(n:Int) = (1 to n).foldLeft(1: BigInt)(_*_)
-
;; Clojure:
(defn factorial [x]
(reduce * (range 1N (inc x))))
La prima volta che inserisco la funzione nel REPL, il Clojure valuta (definizione della funzione, non calcolando fattoriale) senza alcun ritardo evidente; mentre quello di scala si fermava solo per un breve periodo. (Anche se molto, molto breve, ancora visibile.)
Quando si applica la funzione per calcolare il fattoriale, entrambi restituiscono il risultato molto velocemente.
Vorrei ottenere una conoscenza di base sulla REPL. C'è qualche differenza tra i due REPL? Scala REPL è un vero REPL?
Hmm. Avrei pensato che se un'interazione a riga di comando comportava fasi di lettura, valutazione e stampa separate, ciò sarebbe sufficiente per REPL-ness, indipendentemente dal fatto che la lingua sia o meno omoiconica. Non chiamerei qualcosa di un interprete se si sta compilando prima dell'esecuzione. Ovviamente, ci sono tutti i tipi di casi intermedi tra "eseguire un'espressione alla volta, uno dopo l'altro" e "tradurre e ottimizzare pezzi di codice di grandi dimensioni in una sorta di linguaggio" macchina ", quindi eseguire". Tuttavia, non penso che tutto ciò sia importante! – Mars
correlati: http://stackoverflow.com/questions/5671214/is-lisp-the-only-language-with-repl –