我尝试使用 ctrl - c 然后:a
但它在这里不起作用。
我的代码就像:
(defun game-repl()
(loop (print (eval (read)))))
然后我跑
(game-repl())
look()
答案 0 :(得分:8)
(loop (setq x (read))
(if (eq x 'exit)
(return)
(print (eval x))))
答案 1 :(得分:6)
Emacs模式通常只有当您连续两次按下Ctrl-C时才会向下级程序发送中断信号(即,您要查找的键序列为C-c C-c
)。特别是SLIME。
这是因为C-c
是一个prefix key,通常与其他键结合使用,可以访问一大堆特定于模式的功能。
答案 2 :(得分:1)
[参考http://www.psg.com/~dlamkins/sl/chapter05.html]
大多数时候你写一个LOOP表格,你想要出路。幸运的是,在任何地方的RETURN表格都会导致控制离开LOOP;您指定的任何值都将成为LOOP表单的值:
? (loop
(print "Here I am.")
(return 17)
(print "I never got here."))
"Here I am."
17
RETURN通常以条件形式使用,如下所示:
? (let ((n 0))
(loop
(when (> n 10) (return))
(print n) (print (* n n))
(incf n)))
0 0
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
10 100
NIL
?
答案 3 :(得分:0)
这个问题可以参考:
@ fred-foo令人满意地回答了第一(似乎是OP的实际问题)。 @ matthias-benkard解决了第二个问题,但他的答案不适用于emacs lisp。
手动停止运行中的无限emacs-lisp循环的实际答案是 Ctrl + g (在emacs-peak中为C-g)。
emacs lisp manual中有一个关于此主题的文档页面。
对不起,我不敢仅仅修改@ matthias-benkard的答案,这个问题在搜索引擎上排名很高...
答案 4 :(得分:-1)
这个Stack Exchange答案是谷歌第一次打击"打破永无止境的循环粘液"
C-c C-b
缺少的是,不同的lisps以不同的方式处理这种中断。我找到了这个答案,因为GNU Clisp并没有拦截SLIME的C-c C-b。它也不是SBCL所做的,它拦截了C-c C-b和C-c C-c。