slime for mit scheme

很多人写过 Scheme 开发环境的设置。但 Scheme 毕竟是一种 Lisp ,是 Lisp 就应该用 Slime。

Chicken Scheme 有一个扩展叫 Chicken Slime, 安装非常简单,但功能极差。安装之后几乎没用。

Slime本身带的,contrib目录下的swank-kawa.scm  swank-larceny.scm  swank-mit-scheme.scm 一个都不能用。

好在这位先生修复了对Mit Scheme的支持。照他指导安装就可以用了。
但他说 "也可以将修复过的swank.scm删掉最后一行直接替换Mit Scheme源代码里面的swank.scm,重新编译Mit Scheme。"我试过,不行。另外Slime的最新版也不行。我用2.4版才行。

除了照他的指导设置 ~/.scheme.init 和 ~/.emacs 之外,再在 ~/.emacs 上添加以下内容增加Slime对Scheme的语法高亮和自动缩进:

;; 因为修改过的swank与slime版本不匹配
(setq slime-protocol-version ‘ignore)
;; 因为slime默认的语法高亮是用于 Common Lisp 的,而我们要的是 Scheme 的语法高亮
;; 这是从 scheme.el 直接复制过来的。
(defun scheme-mode-font-lock-setup ()
  (interactive)
  (setq local-abbrev-table scheme-mode-abbrev-table)
  (set (make-local-variable ‘paragraph-start) (concat "$\\|" page-delimiter))
  (set (make-local-variable ‘paragraph-separate) paragraph-start)
  (set (make-local-variable ‘paragraph-ignore-fill-prefix) t)
  (set (make-local-variable ‘fill-paragraph-function) ‘lisp-fill-paragraph)
  ;; Adaptive fill mode gets in the way of auto-fill,
  ;; and should make no difference for explicit fill
  ;; because lisp-fill-paragraph should do the job.
  (set (make-local-variable ‘adaptive-fill-mode) nil)
  (set (make-local-variable ‘indent-line-function) ‘lisp-indent-line)
  (set (make-local-variable ‘parse-sexp-ignore-comments) t)
  (set (make-local-variable ‘outline-regexp) ";;; \\|(....")
  (set (make-local-variable ‘comment-start) ";")
  (set (make-local-variable ‘comment-add) 1)
  ;; Look within the line for a ; following an even number of backslashes
  ;; after either a non-backslash or the line beginning.
  (set (make-local-variable ‘comment-start-skip)
       "\\(\\(^\\|[^\\\\\n]\\)\\(\\\\\\\\\\)*\\);+[ \t]*")
  (set (make-local-variable ‘font-lock-comment-start-skip) ";+ *")
  (set (make-local-variable ‘comment-column) 40)
  (set (make-local-variable ‘parse-sexp-ignore-comments) t)
  (set (make-local-variable ‘lisp-indent-function) ‘scheme-indent-function)
  (setq mode-line-process ‘("" scheme-mode-line-process))
  (set (make-local-variable ‘imenu-case-fold-search) t)
  (setq imenu-generic-expression scheme-imenu-generic-expression)
  (set (make-local-variable ‘imenu-syntax-alist)
       ‘(("+-*/.<>=?!$%_&~^:" . "w")))
  (setq  ;;(make-local-variable ‘font-lock-defaults)
   font-lock-defaults
   ‘((scheme-font-lock-keywords
      scheme-font-lock-keywords-1 scheme-font-lock-keywords-2)
     nil t (("+-*/.<>=!?$%_&~^:" . "w") (?#. "w 14"))
     beginning-of-defun
     (font-lock-mark-block-function . mark-defun)
     (font-lock-syntactic-face-function
      . scheme-font-lock-syntactic-face-function)
     (parse-sexp-lookup-properties . t)
     (font-lock-extra-managed-props syntax-table)))
  (set (make-local-variable ‘lisp-doc-string-elt-property)
       ‘scheme-doc-string-elt))
;; 把 slime-repl 的语法高亮设成 Scheme 的
(add-hook ‘slime-repl-mode-hook
          (lambda ()
            (font-lock-mode nil)
            (scheme-mode-font-lock-setup)
            (font-lock-mode t)))
;; 把 slime-repl 的自动缩进设置成 Scheme 的
(add-hook ‘slime-repl-mode-hook
          (lambda ()
            (setq lisp-indent-function ‘scheme-indent-function)))


时间: 2024-10-22 22:46:22

slime for mit scheme的相关文章

MIT Scheme 的基本使用

安装和启动 启动 在 Windows 下正确安装 MIT Scheme 系统后,程序菜单里将有一个 MIT Scheme 目录,其中包含: Documentation:以浏览器方式打开 HTML 形式的 Scheme 文档 MIT GNU Scheme:Edwin 环境下启动 Scheme.Edwin 是一个类似 emacs 的编辑器 如果喜欢用命令行交互方式,可以用下述命令建一个快捷命令,放在你的桌面或者命令菜单里.注意将目录修改为你的系统安装目录: "C:\Program Files\MIT

为mit scheme添加for循环语句

Mit-Scheme不支持syntax-case, 只能用它的er-macro-transformer来编写.Mit-Scheme的宏系统比较低级,不支持模式匹配和literal. 使用pmatch能得到一个可用的模式匹配,为了简洁这里使用了pmatch,没有pmatch也可以编写同样的宏,但啰嗦一点.没有literal就导致代码里面满是反引号和逗号.完成的代码看起来很啰嗦,但编写时却比较简单,先写一个与使用syntax-case时相同的transformer,然后再重命名. 宏不会对参数求值.

[Scheme入门]1 Edwin的基本使用

Edwin是MIT Scheme系统的一个窗口式的编辑使用前端.启动Edwin实际是先启动Scheme系统,再启动也给Edwin前端.Edwin是一个使用Scheme写的交互式编辑器,其特点是支持Scheme表达式的编辑和求职. Edwin模式: 编辑Scheme文件的模式,如果装入一个.scm文件,相应的Edwin的这个编辑区处于Edwin模式.这种模式下可以编写Scheme程序,也可以对表达式求值.正常求出的值显示在最下面交互行,但不会显示出错信息,也不能进入调试系统. REPL模式: RE

什么是Scheme?原来还可以这样应用!

Scheme定义 Scheme 编程语言是一种Lisp方言,诞生于1975年,由 MIT 的 Gerald J. Sussman 和 Guy L. Steele Jr. 完成.它是现代两大Lisp方言之一:另一个方言是Common Lisp. Scheme遵循极简主义哲学,以一个小型语言核心作为标准,加上各种强力语言工具(语法糖)来扩展语言本身. MIT曾用Scheme作为计算机系入门课程的编程语言.计算机程序语言界著名的魔法书<计算机程序的构造和解释>(又称SICP)正是利用Scheme来解

[SICP Notes] 1.1 The Elements of Programming

About the Book To know more about programming, I have decided to start reading the famous Structure and Interpretation of Computer Programs (SICP, or the Wizard Book), which is first published by MIT in 1985. The Wizard Book used MIT Scheme, which is

ch2

(不太会用mit scheme,在racket下#lang planet neil/sicp也可以搭建相应的开发环境. 2.30-2.31延伸出treemap,WIKI上treemap是一种数据可视化的方式. 而在书中,直接定义: (define (tree-map f tree) (cond ((null? tree) ; 空树 '()) ((not (pair? tree)) ; 叶子节点 (f tree)) (else (cons (tree-map f (car tree)) ; 递归处

你是如何成为 Lisp 程序员的(转)

我成为 Lisp 程序员的道路曲折而漫长.我曾于 2007 年 10 月 3 日在自己的日记中总结了自己的学习经历,现抄录于此. 最早在 2000 年 5 月,斯托曼院士访华时告诉我,Lisp (或者它的现代变种 Scheme)是功能最强大的编程语言,他本人就是一位高级的 Lisp 程序员,他还精通 C,GNU Emacs 就是采用 C 和 Lisp 两者开发的.我当时已经掌握了 C,但不会用 Lisp,但是我完全相信他说的都是真的.于是,一心想成为编程高手的我,决定学习和掌握这门编程语言.我从

SICP1.3 MIT(CLT) Scheme实现(Lisp)

 题目要求给出的函数需要完成以下三件事: 写一个函数,接受三个数作为参数 判断三个数中较大的两个数 计算较大两个数的平方和(两个数的平方之和) 我们从后往前,一步步完成这三个任务. CSDN没有Lisp.用Python的标记了 #lang racket ;;SICP 1.3 ;;try 1 (define (square x)(* x x)) (define (sum x y)(+(square x)(square y))) (define (sum-largest x y z) (cond

Scheme语言--简单介绍

一年前事实上有时间看完SICP这本书,后来由于种种原因,一直没有继续再学.由于SICP中使用Scheme确实应用不多.在Java,C++的语言眼里,Scheme确实非常另类.现在MIT已经放弃了使用Scheme作为SICP的教学语言而转向python之际,我在此開始学习这本书与这门语言的学习.SICP主要使用Scheme语言来解决计算机科学中的一些问题.为了督促自己,每天都能学习.积小流而成江海,把自己的学习过程放在这里,以供自己复习. 本系列主要包含两部分Scheme语言层面的问题及SICP中