2016-12-15 20 views
1

在使用Geiser和Emacs進行Scheme編程時,如何設置Geiser在「racket」模式下調用plt-r5rs傳統方案或可能的R6RS變體,而不是Racket?用plt-r5rs而不是Racket調用Geiser?

我希望Racket能夠在REPL中的R5RS(或可能是R6RS)模式下工作,而不是在球拍模式下,這種模式越來越偏離「標準」模式。

+0

僅供參考,我在下面編輯了我的答案,以獲得更多信息並比以前更好地工作,現在可能會發現它可以接受。 – GDP2

回答

0

以下內容添加到您的geiser-racket-init-file

(require r5rs/init) 

然後在Emacs初始化文件(縣)的地方堅持這樣的建議:

(defadvice run-racket (after enter-r5rs activate) 
    (switch-to-geiser-module "r5rs")) 

這應該給你GEISER一個R5RS十歲上下的經驗。

編輯:

我不得不最近處理這個問題,並發現我上面的回答是不夠的。對於初學者來說,簡單地將模塊切換到r5rs由於某種奇怪的原因而沒有加載應該在該模塊中的符號,例如set-car!set-cdr!。我發現,使用geiser-repl-import-module代替switch-to-geiser-module效果更好,因爲它實際上將加載預期符號,如set-car!set-cdr!等。另外,使用(geiser-repl-import-module "r5rs")的行爲人得到由DrRacket運行#lang r5rs行爲相匹配,因此它可能是足以滿足大多數人。但是,如果你仍然想運行在GEISER的plt-r5rs可執行文件,你可以嘗試以下方法:

(progn 
    (flet ((geiser-racket--parameters() nil)) 
    (let ((geiser-racket-binary "plt-r5rs") 
      (geiser-repl-skip-version-check-p t)) 
     (ignore-errors 
     (run-geiser 'racket)) 
     ;; to keep your racket history from getting clobbered 
     (setq-local geiser-repl-history-filename "~/.emacs.d/.plt-r5rs_history")))) 

不幸的是,從代碼片斷產生的REPL功能是比較原始的(例如,你不能自動完成符號)。這是因爲我們刪除了geiser-racket--parameters,因爲這些參數與plt-r5rs和R5RS本身不兼容。通過執行C-u M-x run-scheme RET plt-r5rs,您會獲得非常類似的功能和較少的卷積。