- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是一名初级程序员,正在阅读“Lisp 国度”一书。
我一直在用 REPL 输入书中的示例。是否可以将我当前的程序保存为 .lisp 文件,以便我可以加载它并在以后继续处理它?我知道我可以在文本编辑器中创建 .lisp 文件并加载它们,但我很喜欢在全屏模式下使用 REPL 来完成示例。
最佳答案
没有。一旦你将一个函数输入到 REPL 中,源代码形式就消失了,你只有解释或编译的形式。您可以做一些聪明的事情,但我怀疑您现在不想处理它们。
首先,我知道您喜欢 REPL,但我鼓励您看看一些支持 Lisp 的编辑器,例如 Emacs 和 SLIME (http://common-lisp.net/project/slime/),它可以让您两全其美。你输入编辑器,它输入 REPL,你真的不知道你现在做事的方式有什么不同。然后您可以将您喜欢的功能复制并粘贴到“适当的”.lisp 文件中。使用 Emacs 的另一个优势是它基于 Lisp 的一个变体,称为 Elisp,因此您可以用 Lisp 编写您的编辑器。您可以漂亮地打印您的代码,将其重新格式化并重构为多个函数,并做各种出色的事情。
如果您仍然只想键入 clisp 并在 REPL 上玩游戏,那么您还有其他选择。
如果您想记录 REPL session 的输出,请查看 DRIBBLE。它会将您的 session 记录到一个文件中,您可以稍后对其进行编辑以提取您想要的内容。
例如,这是一个简单的 session :
ataylor:~ $ clisp
哈哈哈哈哈
[1]> (dribble "/Users/ataylor/jerome.lisp")
#<OUTPUT BUFFERED FILE-STREAM CHARACTER #P"/Users/ataylor/jerome.lisp">
[2]> (defun add-two (a b) (+ a b))
ADD-TWO
[3]> (add-two 1 2)
3
[4]> (dribble)
#<CLOSED OUTPUT BUFFERED FILE-STREAM CHARACTER #P"/Users/ataylor/jerome.lisp">
[5]>
Bye.
查看文件内容很容易,但它会很快变大。
ataylor:~ $ cat jerome.lisp
;; Dribble of #<IO TERMINAL-STREAM> started on 2011-09-14 18:16:57.
#<OUTPUT BUFFERED FILE-STREAM CHARACTER #P"/Users/ataylor/jerome.lisp">
[2]> (defun add-two (a b) (+ a b))
ADD-TWO
[3]> (add-two 1 2)
3
[4]> (dribble)
;; Dribble of #<IO TERMINAL-STREAM> finished on 2011-09-14 18:17:16.
您可以复制 (defun add-two (a b) (+ a b))
并将其粘贴到文件中以备后用。
加载该文件(我将其添加到 jerome1.lisp
)非常简单。
ataylor:~ $ cat jerome1.lisp
(defun add-two (a b) (+ a b))
ataylor:~ $ clisp
哈哈哈哈哈
[1]> (load "/Users/ataylor/jerome1.lisp")
;; Loading file /Users/ataylor/jerome1.lisp ...
;; Loaded file /Users/ataylor/jerome1.lisp
T
[2]> (add-two 1 2)
3
[3]>
Bye.
您可以做的最简单的事情就是将您的 Lisp session 保存到图像中。它将保存您创建或编译的所有函数,以及大多数状态。当您在下一个 session 中加载它时,就好像您没有退出 clisp 一样。执行此操作的方法取决于实现,并且在 clisp、sbcl 等之间有所不同。我将向您展示您将如何使用 clisp。
问题在于您无法打开文件并对其进行编辑、将其发布到 github 或其他任何地方。我将举一个简短的例子。
ataylor:~ $ clisp
哈哈哈哈哈
[1]> (defun add-two (a b) (+ a b))
ADD-TWO
[2]> (add-two 1 2)
3
[3]> (EXT:SAVEINITMEM)
;; Wrote the memory image into lispinit.mem (3,422,616 bytes)
Bytes permanently allocated: 171,840
Bytes currently in use: 3,243,400
Bytes available until next GC: 808,130
3243400 ;
808130 ;
171840 ;
1 ;
65640 ;
7834
[4]>
Bye.
请注意有关 clisp 将内存镜像写入何处的消息。下次启动时,您将使用 -M
标志将其返回给 clisp。
ataylor:~ $ clisp -M lispinit.mem
哈哈哈哈哈
[1]> (add-two 1 2)
3
关于lisp - 我可以在 Clisp 中保存源文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7424307/
为什么这段代码不起作用? (setf x '(foo bar (baz))) (labels ((baz () (print "baz here"))) (baz) ;works
我有以下结构: (defstruct node parent state cost) 我有一个 node 类型的结构列表。 我正在尝试实现两个功能: (defun findMinimum
谁能解释一下车队运算符(operator)的部分? : (defun read-3-numbers-&-format-sum () (flet ((prompt (string)
所以我正在尝试学习 Lisp,并在我的 Windows 10 PC 上下载了 GNU CLISP 2.49。我已经在文件中编写了一些代码,我想使用 (load "example.lisp") 命令从
几天来,我一直在用 allegro common lisp 运行一个 lisp 程序。我现在需要使用 clisp,但是当我尝试编译它时,我得到: SYSTEM::%FIND-PACKAGE: Ther
我必须反转一个简单(一维)列表的元素。我知道有一个内置的反向功能,但我不能为此使用它。 这是我的尝试: (defun LISTREVERSE (LISTR) (cond ((
我运行了以下 CLISP 代码,但结果对我来说很奇怪。 (setq a 'b) (setq b 'c) (setq c 'd) (setq d 8) (eval a) (eval c) (eval (
如何配置 apache + mod_lisp + clisp 并设置“Hello World!”?我找不到关于该主题的任何完整指南。谢谢。 编辑:Vebjorn 的解决方案有效,但后来我不知道如何编写
我在 CLISP 实现中看到了#'read-char-sequence 和#'read-byte-sequence 的可用性。热的东西。 但是否有可能在执行所需的读取之前搜索到文件中的特定点? 我搜索
这个问题在这里已经有了答案: Using string object as a hash key in Common Lisp (1 个回答) 关闭 7 年前。 http://imgur.com/u
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 5 年前。 Improve t
我想写一个有两个参数的函数一个原子 x 和一个列表 L 并返回列表 L 中小于 x 的数字列表/p> 例如: 列表是 (2 10 3 9 4 8) 并且 x 是 5 输出应该是:(2 3 4) 我想我
我正在尝试创建数组中第一个元素的副本并将副本添加到数组的末尾。然后我想在我刚创建的副本上做工作 (move_NE),更改它而不是原始副本。预期结果是拥有一个包含两个元素的数组,一个指向原始元素,另一个
我正在使用编程语言 clisp。我在 .lisp 文件中有一些函数 X、Y、Z,比方说 A。现在我在 .lisp 文件 B 中编写一个不同的程序,我需要使用 X、Y、Z。 如何在 Clisp 中导入函
我正在寻求帮助来编写一个返回前 15 个立方体列表的函数。这是我目前所拥有的,但我遇到了堆栈溢出: (defun cubes (dec lst) ;takes a number and a list
我正在尝试使用以下代码创建某个单词的子序列。当我添加 by k 时,代码停止响应,但如果我将 k 替换为特定数字,它会起作用。发生了什么事? (let ((c nil)) (loop for k fr
我在 mac os X 终端中运行 CLISP。像 (% 3 5) 这样的简单评估输出 评估:未定义的函数 % 它在 emacs 的 ielm 模式下正确评估。在此先感谢您的帮助 最佳答案 函数的名称
我是 Lisp 的新手,我正在尝试使用简单的 dfs(深度优先搜索)解决一个 8 难题。但是我遇到程序堆栈溢出。我的代码: (setq used (list)) (defun is_used (sta
出了什么问题? [1]> (log (exp 1)) 0.99999994 最佳答案 这是由于小数的浮点表示的精度有限。 请参阅:http://en.wikipedia.org/wiki/Floa
我一直试图在 CLISP 中查看获取目录中所有文件的列表,但我只能获取目录中的所有非目录文件。 我目前正在使用 cygwin 在 Windows 7 中尝试此操作,因此这可能会影响我的结果。我对 CL
我是一名优秀的程序员,十分优秀!