说我已经和SBCL玩了一点没有SLIME,没有任何简单的翻译。现在我想在文件中保存几个函数。不是核心图像,只是文本形式的一些代码。我该怎么做?
答案 0 :(得分:7)
有两种方法:使用DRIBBLE
和/或FUNCTION-LAMBDA-EXPRESSION
首先是在试验之前始终使用Common Lisp函数DRIBBLE
:
rjmba:tmp joswig$ sbcl
This is SBCL 1.1.9, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.
SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.
Dribble采用文本文件的路径名。调用后,交互式IO将写入该文件。
* (dribble "/Lisp/tmp/2013-09-06-01.text")
* (defun foo (a) (1+ a))
FOO
* (foo 10)
11
* (quit)
查看文件:
rjmba:tmp joswig$ cat 2013-09-06-01.text
* (defun foo (a) (1+ a))
FOO
* (foo 10)
11
* (quit)
从上面你应该能够看到你是否输入了任何有趣的功能......
您也可以在开始时设置SBCL(例如使用init文件)来设置运球。不带参数调用(dribble)
会结束运球。
下一个:FUNCTION-LAMBDA-EXPRESSION
:
* (defun foo (b) (1- b))
FOO
现在您可以调用FUNCTION-LAMBDA-EXPRESSION
来获取定义。它可能会略有改变,但它应该能够恢复以代码编写的有价值的想法:
* (function-lambda-expression #'foo)
(SB-INT:NAMED-LAMBDA FOO
(B)
(BLOCK FOO (1- B)))
NIL
FOO
答案 1 :(得分:2)
如果你正在使用sb-readline或rlwrap,你可以按下直到你定义它时点击并将其复制并粘贴到文件中。您也可以在期限窗口历史记录中使用它。
如果这些都不起作用只有编译定义可用,那么保存它们的唯一方法是转储核心图像。
下次,您可以创建一个宏,将每个定义源存储在一个特殊变量中,以便您可以轻松地检索它们。