学习LISP(一): Scheme编辑器 Edwin

大家吼,我是蘑菇老师,今天我们来学习怎么用装好的MIT-Scheme。

认识界面

双击桌面的快捷方式,我们就看到了这样的一个窗口,看标题栏,这是一个叫做Edwin的程序。


Edwin窗口

咦,再仔细看,任务栏里面有两个窗口,另一个是这样的:

交互窗口

这个窗口叫交互窗口。但是现在只有Edwin窗口在激活的状态,而交互窗口不在工作中。等以后我们再用这个模式,现在还是先把注意力集中于Edwin窗口。

使用Edwin

Edwin是专用于编写Scheme的编辑器,功能与Emacs非常接近。如我之前的日志提到的,Emacs提供了非常适合编写Lisp的环境,Edwin也为编写Scheme提供了很多便捷的功能。

在Edwin里面,我们可以编辑字符,也就是程序代码。但是要想进行复制、粘贴等操作,或者是让代码运行起来,就需要使用快捷键了。这里列出几个基本的快捷键,关于更详细的信息,可以参阅
Edwin Cheat Sheet

:C-x 是Ctrl+x的简写,而M-x就是Alt+x的简写,以此类推

区域操作

在Edwin里,不像windows可以选中一段文字来操作,所以需要一个叫做“标记”的东西。放置了标记之后,把光标移动到另一个位置,就可以通过快捷键来操作光标到标记之间的内容。为方便起见,这里将以标记为起点,光标为终点的这一部分区域称为“标记区域”。

先介绍几个快捷键

C-k 删除本行里,光标后面的部分
C-space 放置标记
C-w 删除标记区域,内容进入剪贴板
M-w 拷贝标记区域,内容进入剪贴板
C-y 粘贴剪贴板的内容
C-a 跳到一行的开头
c-e 跳到一行的结尾

从这里可以看到,删除特定的区域可以用C-w完成。复制,用到了M-w和C-y。而剪贴可以通过C-w和C-y的组合实现。

跟Scheme有关的快捷键

跟Scheme有关的命令
C-x C-e 按顺序按这两个组合键,执行光标左边的一个表达式
M-z 执行当前光标所在的表达式
C-M-z 执行标记区域内的表达式
C-c C-c 停止执行
Tab 自动缩进

就先介绍这几个吧。你可能会问了,为什么所有的功能都要靠按键来完成?其实,这些编辑器以前是纯文字界面中运行的,那时候没有鼠标,也没有窗口和按钮,想要实现什么功能,快捷键是最方便和最迅速的方式。

对入门者来说(我也是个入门者),最头疼的就是这么多命令,该怎么记?我的建议就是,不要记。把Cheat Sheet准备好,编程的时候就放在屏幕的另一边,要什么功能就看一眼。其实一来二去的,常用的功能就记下来了。

Scheme表达式

嗯,差不多了,这就开始吧。从最基本的数学运算开始,走起:

(+ 1 2) //然后按 M-z 或者C-x C-e
Value: 3 //结果就会出现在这里

结果会直接出现在文档里,这里就是一个神奇的游乐场,代码写在这里,结果也打印在这里。想要运行哪一个表达式,就把光标移过去,按 M-z 或者 C-x C-e,结果就会被打印出来了。

如果输入了错误的表达式,可能会触发这样的提示:

错误提示

这里的意思是出了错误,并且提供了几种处理方式,我建议直接终止当前的命令,返回原来的模式。按n,不启动debugger,然后输入(RESTART 1),这同样是一个表达式,按M-z执行,这样就跳出了异常处理的模式。

跳出异常处理

语法说明

//Scheme的表达式
(<operator> <operands...>)

对于Scheme,表达式由一对括号、以及里面的操作符(operator)和操作数(operand)构成。其中操作符出现在最左边,操作数依次出现,与操作符要用空格隔开。操作数的数目是由操作符决定的。在Scheme里面,四则运算的操作符,可以是2个,也可以是多个,例如:

(+ 1 2 3 4 5)
(- 10 1 2 3)
(* 3 3 3)
(/ 8 2 2)

这些都是合法的表达式,可以得到正确的结果。你可能会觉得奇怪,为什么要用这么一种违背直觉的写法,这种写法的一个好处就是可以很紧凑地书写表达式,不必重复操作符。

(RESTART 1)

这也是一个表达式,RESTART就是一个操作符,1是它的操作数。它的功能就是中止当前的所有任务,回到编辑模式。

不要忘记,在这个文档编辑的环境里,执行过的代码可以被修改和再次执行,只需要把光标移过去,修改之后再按相应的组合键就可以了。

表达式的复合

(+ (+ 1 2)
   (- 5 3))
(/ (+ 4 6)
   (- 5 3))

表达式的复合是很自然的事情,SICP书中详细地讨论了Scheme内部是怎样完成复合运算的,但是我觉得还是不要涉及那么多细节了吧。简单说来,它先计算内部表达式的值,然后用它代替这个表达式,于是复杂的表达式就变成了简单表达式。

(+ (+ 1 2)
   (- 5 3))
变成了
(+ 3
   2)
得到
5

对于符合表达式的写法的建议:
虽然Scheme不关心你是怎样排版你的程序,但是出于可读性的考虑,最好把同一层级的元素放在相同的缩进位置。

(operator1 operand1
           operand2
           (operator2 operand2_1
                      operand2_2)
           operand3)

依此类推。对于缩进,可以在按Enter换了一行之后,按Tab,Edwin有智能缩进的功能, 最后不要忘记括号要成对,不然可没办法写出正确的表达式哦。

小结

于是到这里,我们就学完了Scheme的最基本的组成单元。
留个作业吧

  • 用Scheme写几个表达式,简单的或者复合的,求值。
  • 尝试用文中给出的几个组合键进行删除,复制,剪切,粘贴等操作,熟悉Edwin的工作方式。

下节会讲如何自己定义简单的操作符,敬请期待啦。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容