lisp scheme 果壳_学习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的表达式

()

对于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的工作方式。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值