Definitions matter. A repl is a read, eval, print, loop. That means the code you enter at the prompt is converted from a String into literal data that can be evaluated (read). The data is then evaluated to produce a result (eval), and the result is then printed (print). If that's not what your REPL is doing then it's not a repl. That is not what's going on in e.g. python or ruby "repls". There is no "read" step here…
This seems extremely pedantic. Python and Ruby will “read” the string inside the “eval” function.
For example we can write a macro in Lisp and play around with it giving it code as data and see the result as code as data.
CL-USER 1 > (defmacro while (condition &body body)
`(tagbody start
(if (not ,condition) (go end))
,@body
(go start)
end))
WHILE
CL-USER 2 > (setf a 1)
1
CL-USER 3 > '(while ( (macroexpand-1 *)
(TAGBODY START (IF (NOT ( (pprint *)
(TAGBODY
START (IF (NOT ( (eval ***)
1
2
3
NIL