我已經安裝了Emacs + SLIME + SBCL,並且我是這方面的新手。所以,我的問題是如何評估整個文件或文件的選定區域並將每個表達式的結果打印到控制檯。例如,對於代碼Emacs SLIME - Common Lisp - 評估區域並打印所有結果
(+ 3 5)
(defun my-first (a) (car a))
(my-first (list 5 7 3))
我想在這個控制檯看到:
8
MY_FIRST
5
謝謝您的幫助。
我已經安裝了Emacs + SLIME + SBCL,並且我是這方面的新手。所以,我的問題是如何評估整個文件或文件的選定區域並將每個表達式的結果打印到控制檯。例如,對於代碼Emacs SLIME - Common Lisp - 評估區域並打印所有結果
(+ 3 5)
(defun my-first (a) (car a))
(my-first (list 5 7 3))
我想在這個控制檯看到:
8
MY_FIRST
5
謝謝您的幫助。
所以,對我來說是最好的,simpliest的解決辦法是換行代碼接下來方式:
(format t "~{~a~%~}" (list
<code in file>
))
而且比我做的CX策在文件的結尾,並在REPL得到所有的結果我的表情一個接一個。謝謝大家。
UPD 我用網絡和這個回答:How to run Common Lisp code with Slime in Emacs Lisp來寫這兩個函數。 此代碼位於我的.emacs文件中。 現在我只需按'C-c e'或'C-c r'來評估所有文件或只選定區域。 已經絕對可以解決問題。
(require 'slime)
(defun lispy--eval-lisp (str)
"Eval STR as Common Lisp code."
(unless (slime-current-connection)
(let ((wnd (current-window-configuration)))
(slime)
(while (not (and (slime-current-connection)
(get-buffer-window (slime-output-buffer))))
(sit-for 0.2))
(set-window-configuration wnd)))
(let (deactivate-mark)
(slime-eval `(swank:eval-and-grab-output ,str))))
(defun feval()
"Evaluates the whole file"
(interactive)
(message (car (lispy--eval-lisp
(concat "(format t \"~{~a~%~}\" (list " (string-make-unibyte (buffer-string)) "))")))))
(defun reval (from to)
(interactive "r")
(message (car (lispy--eval-lisp
(concat "(format t \"~{~a~%~}\" (list " (string-make-unibyte (buffer-substring from to)) "))")))))
(global-set-key "\C-ce" 'feval)
(global-set-key "\C-cr" 'reval)
基本上這取決於您的Emacs設置:
但把光標放在表情的最後家長後;
CX策評估日的表情,並將結果發送到小緩衝區,如果將結果保存在一個變量,如果你想在編譯和加載功能檢查這個varibable可以用REPL SESSION
這
CC CC,在函數的最後一層,那麼函數將可在REPL
最後檢查在Emacs菜單欄中的煤泥菜單,如果你有它啓用F10:
並編譯和加載文件:
,並有來自marco Baringer YouTube上提供一個很好的教程,我建議把你的時間做這件事,是一個很好的(在最好的我意見)介紹emacs和煤泥。
您可以定義您自己的Emacs-Lisp函數,其中將包括在list
之內的區域中的窗體中,評估此列表並打印所有結果。 這是我手動執行的確切操作,如果我需要查看多個表單的結果,這很少。
否則,我只是在每個表格上使用C-x e。
複製粘貼到REPL也沒有給出合適的結果:(我只看到最後一個表達式的結果(在我的例子中是「5」)。 你能給我一個想法如何編寫這樣的函數嗎?與有用的鏈接) Cx e是好的,但我想先寫代碼,然後通過評估所有的代碼來檢查它。對我來說似乎更好。 –
@ИльяМурадьян對不起,你是對的,我忘了。當我有更多時間時,我會編輯帖子;-) – coredump
那麼,函數呢?我想,它應該是像 '(mapcar'eval(列表<所有帶引號的表達式>))''。但是,我應該如何得到這個引用列表,我應該在哪裏定義這個函數,最終,我應該如何使用它? –
好的,謝謝,但它實際上並不是我想要做的。我已經學會了如何編譯和加載文件。但是沒有執行加載文件的輸出。在使用C-C C-K編譯文件後,我得到了.fasl文件,當我用例如(加載「C:\\ my.fasl」)加載這個文件時,我只是在控制檯中看到了'T'。我沒有看到我想要的輸出。 –