By contrast, most other languages only have eval() - which takes a string and parses and executes it as code. In Lisp, eval() takes a Lisp list object and executes that.
For eg.
>> code: load "foreach n [1 2 3 4] [print n * 2]"
== [foreach n [1 2 3 4] [print n * 2]
]
>> type? code
== block!
>> do code
2
4
6
8https://vvvvalvalval.github.io/posts/what-makes-a-good-repl....
> If you're not familiar with Clojure, you may be surprised that I describe the REPL as Clojure's most differentiating feature: after all, most industrial programming languages come with REPLs or 'shells' these days (including Python, Ruby, Javascript, PHP, Scala, Haskell, ...). However, I've never managed to reproduced the productive REPL workflow I had in Clojure with those languages; the truth is that not all REPLs are created equal.
Basically, the "REPL" you usually call a REPL is in fact a shell, and not a REPL as normally used in lisp languages.