我試圖在谷歌找到一個解決方案,我試着用ctrl-c然後:a如何擺脫emacs lisp中的無限循環? (環境:emacs)
但它在這裏不起作用。
我的代碼是這樣的:
(defun game-repl()
(loop (print (eval (read)))))
然後我運行
(game-repl())
look()
我試圖在谷歌找到一個解決方案,我試着用ctrl-c然後:a如何擺脫emacs lisp中的無限循環? (環境:emacs)
但它在這裏不起作用。
我的代碼是這樣的:
(defun game-repl()
(loop (print (eval (read)))))
然後我運行
(game-repl())
look()
(loop (setq x (read))
(if (eq x 'exit)
(return)
(print (eval x))))
謝謝。我最好遵循這個例程。 –
[參考http://www.psg.com/~dlamkins/sl/chapter05.html]
大多數時候,你寫一個循環形式的時候,你想有一個出路。幸運的是,裏面的任何一個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
?
內容豐富。謝謝。 –
Emacs模式經常發送中斷信號到下程序僅當你在一排按Ctrl-C的兩倍(即你正在尋找的密鑰序列C-c C-c
)。特別是對於SLIME這是真的。
這是因爲C-c
是prefix key,它通常與其他鍵組合,以訪問一大堆特定於模式的特徵。
這個棧交易所的答案是對谷歌第一主打爲「突破永無止境的循環泥」
C-c C-b
現在缺少的,是不同的Lisp不同的方式處理這一突破。我找到了這個答案,因爲GNU Clisp只是不攔截SLIME的C-C C-b。它也不是做SBCL做的,它攔截C-C C-B和C-C C-C。
我剛剛確認這是特定於Windows上的Clisp。 – Evan
通常遊戲環將具有可變'isDone'或'isNotDone',並且將環路此基礎上,例如'(雖然還沒有完成......)'。簡單地將'is-not-done'設置爲false,循環將在下一次迭代時中斷。 –
謝謝@Merlyn,但我的問題是如何打破這一循環回我的Lisp程序設計環境,即emacs的。 –
因此,爲什麼一個評論,而不是答案:)但它會解決這個問題......只需設置'是 - 不done'在REPL。但是,我可以看到您正在尋找編輯器命令,而不是可編程解決方案。 –