我正在尝试使用lisp,并在http://www.gigamonkeys.com/book/上阅读Practical Common Lisp一书.
是否有一个命令可以打印以前在REPL中定义的函数,以后可以读取?我试过了
(print #'function-name)
Run Code Online (Sandbox Code Playgroud)
但是这会导致封闭的输出#<>
无法读回(如果
设置为*print-readably
*T
I则只会出错).我使用princ
或prin1
取代相同的结果print
.
我有点惊讶这不容易找到.我在lisp上阅读的一些内容鼓励在REPL中进行实验,但如果在输入后无法保存函数,则在进入它们之前,您必须将它们写在单独的文件中,这部分失败了关键点.
Rai*_*wig 12
无法读回函数对象.
1)您可以使用DRIBBLE功能,这会将REPL输入保存到文件中.
2)从编辑器到REPL的评估很常见.您不需要键入REPL,您可以键入编辑器文本缓冲区并将表达式从那里发送到REPL.
3)Common Lisp具有FUNCTION-LAMBDA-EXPRESSION,在某些情况下可能能够恢复源代码(或Lisp系统记录为源代码):
CL-USER 200 > (defun foo (a) (+ a b))
FOO
CL-USER 201 > (function-lambda-expression #'foo)
(LAMBDA (A) (DECLARE (SYSTEM::SOURCE-LEVEL #<EQ Hash Table{0} 41C00751D3>))
(DECLARE (LAMBDA-NAME FOO))
(+ A B))
NIL
FOO
Run Code Online (Sandbox Code Playgroud)