用Emacs学习sicp时遇到的问题

我是在doom-emacs环境下写的scm,执行代码是通过 run-geiser 来实现的

看网上其他人教如何配置学习sicp的环境时,貌似都没有安装 geiser ,直接是执行 run-scheme ,并且他们执行 C-x C-e 后输出的结果都是直接显示在 *scheme* 窗口里,我执行后输出的结果却是在minibuffer里,请问下这个现象正常吗?

虽然运行结果正常,但是不显示在 *scheme* 里觉得好奇怪啊,有时候查看之前运行的结果还要去打开 *message* 看,不知道是不是我环境在哪里配置出了错?

谢谢 :sweat_smile:

它的输出方式应该和*scratch*类似吧。如果是这样,那C-x C-e本来就是在mini buffer中显示,而C-j才是显示在窗口中

我用的不是doom。纯净的emacs不做任何设置,C-x C-e是输出到窗口中的。你用C-h k查查看你的C-x C-e是不是默认绑定的如下命令

C-x C-e runs the command xscheme-send-previous-expression (found in
scheme-interaction-mode-map), which is an interactive compiled Lisp
function in ‘xscheme.el’.

如果是,那可能就是doom修改了默认的输出方式了;等其他doom用户帮忙吧。

下面是我仅有的一点点设置:

;; /scheme/ (MIT/GNU)
(setq scheme-program-name "/usr/local/bin/mit-scheme")
(require 'xscheme)
;; Usage:
;;  - "M-x run-scheme" to invoke the Scheme process
;;  - "M-o" to send the buffer to the Scheme process

谢谢你的回复,不过看了一下,C-x C-e 绑定的函数是 geiser-eval-last-sexp ,它文档说明显示的是 Eval the previous sexp in the Geiser REPL.

按理说不应该就是显示到打开的repl里,难搞哦 :expressionless:

哦,你用的是geiser啊,没用过。我一直用的是xscheme,默认的,方便,懒得折腾了,也就是读SICP用用。

等等吧,论坛里doom用户和lisp高手很多(大多都学过SICP,总有用过geiser的)

嗯,是的,怪我开始没说清楚 :joy:

刚刚读了读 geiser 的readme,发现有几个快捷键的作用是 对定义求值并把窗口转移到repl,有可能是 C-x C-e 这个函数没有在repl里输出(而是放到minibuffer里输出了),我看不懂源码,只是猜测一下 :sweat_smile:

你想多了,这就是正常的。換是 Emacs Lisp 本身就是这样

1 个赞

是这样的吗 :sweat_smile:

那么不通过 geiserrun-scheme 是怎么实现在 *scheme* 这个buffer里输出的呢?

刚才 C-h f 看了一下 run-schemerun-geiser 的区别,第一个函数是直接写了会在 *scheme* 里输入输出,但是第二个函数也是有一个repl的标识,为什么不会在 geiser 打开的buffer里输出呢?

因为 geiser 和 run-scheme 是完全沒关系的两个插件,你不能指望它们行为是通用的。 xscheme 和它们也沒有关系。C-x C-e 是给你載入定义用的,输出结果只显示在 Message 是符合使用逻辑的。相反 run-scheme 实现得早,没有更新到符合 Emacs Lisp C-x C-e 的行为。如果你觉得 run-scheme 已经符合你的需求,那么不用 geiser 就是。如果你觉得 run-scheme 功能不够强,那就放棄 run-scheme 尽快适应 geiser 的使用逻辑。

1 个赞

嗯,我貌似有点明白geiser打开的REPL窗口了,不知道我这个理解对不对,它有点像在终端只执行python在终端出现的>>> ,如果直接 run-geiser ,它打开了REPL,可以在里面写程序并运行输出

在scm文件里 C-x C-e 只是借用了repl,就好比 python foo.py

原来是这个原因,看来自己还是要再学习一个啊,大神太厉害了 :+1:t2:

找到了一个详细介绍 Geiser 的网站,看来自己对lisp的认识还是太浅啊 :joy:

人家有名字

叫 scheme

scheme不是只是lisp的一个方言吗?所以我就一块儿叫了 :joy:

或许你应该用 TeXmacs 来学习 sicp,直接 Scheme 都不需要安装了

感觉那又要学一个新软件啊,看介绍是写latex比较好用,不过我还是尽量在Emacs上写吧,感觉Emacs写出来的效果也不差

哪里介绍说LaTeX比较好用?

你现在学习的关键应该只是用一下REPL。其实没有必要用Emacs或者TeXmacs。

可以用racket-mode,搭配DrRacket能在pict language那里省不少时间。DrRacket可以参考这个文章 DrRacket 的安装与 SICP 的配置 - 知乎

1 个赞

不得不说,如果不是很适应geiser的逻辑,可以采用yinwang同志的配置(狗头 在其基础上添加一些功能也并不复杂。

是看的王垠的一篇文章,跟tex一样的排版算法,并且我也是用LaTeX拿来写作业的,所以感觉就是拿来写latex的 :joy:

好的,多谢指点

不过最近更新软件发现mit-scheme居然也更新了,不知道能不能省点心