我是lisp的初学者并且有一个问题。 当我直接在REPL中编写一些代码(没有任何.lisp文件!)时,如何保存解释器的工作/状态以便下次恢复并继续工作?
(我正在使用ECL)
感谢名单!抱歉我的英语不好;)
答案 0 :(得分:6)
来自ECL manual:
Tratidionally,Common Lisp实现提供了一个功能 从转储中保存转储所有数据 将Lisp进程运行到一个文件中。结果称为Lisp图像 并可以运送到其他版本兼容 现在,对它运行的系统的控制较少 在,Lisp实现必须非常努力地转储内存映像 然后能够加载并执行它们。
ECL已选择完全避免此过程。相反,我们设想 五种不同的便携式模型,用于构建和传送您的程序。 表1.1中描述的模型列举了不同类型的模型 ECL可以生成的文件。获得一个或多个 表中提到的产品,您可以使用低级API 在第三部分中描述。但是,我们建议采用更简单的方法 使用系统定义文件来描述您的结构 项目并让ECL为您构建所需的目标。这种方法是 在以下部分中描述。
(强调我的)所以看来,你对ECL运气不好。但是,CLISP,CCL和SBCL支持此功能,因此如果您需要此功能,并且切换是一个选项...请尝试其中一个。
答案 1 :(得分:1)
正如Dirk所提到的,您可以在许多Lisp实现中保存图像。但是,虽然这符合您的规定要求,但将代码仅保留在图像中并不是一个好主意,因为这样编辑起来更难或不可能。能够获取函数的源代码是一个可选功能(即使它存在,您也会丢失注释和格式),并且许多其他类型的定义都无法以标准方式恢复。
另一方面,如果您在REPL中进行了精心设置或编译时间过长,那么只使用图像来保存和恢复您的工作是可以的。
(有些系统,特别是Smalltalk,确实促进了图像中的编辑代码,并且有编辑和导出功能来支持这一点,但是标准版的Common Lisp不支持,也不知道任何现代CL实现。)< / p>