Scheme语言的元素是什么?
遵从极简主义哲学的Scheme代码仅由单词,括号和空格组成。感觉很简单有木有?的确简单,但正如上一篇所引用的那位老师所言,Scheme与围棋,都是有限的简单规则,而有无穷的复杂变换,所以我们需要秉持着学习围棋的精神来学习这一门Scheme语言。
关于界面
首先我们打开安装的Scheme,我们会发现有2个窗口,我们打开Edwin的窗口,它是Scheme的编辑器,另外一个窗口是交互界面,我们后面才会用到。
操作Scheme的快捷键
因为早期的计算机并没有鼠标,所以使用键盘来操作系统,但令人头疼的是快捷键有很多,所以就像记忆单词最好的办法就是不记单词,而是频繁的在具体操作中使用它
这是MIT Scheme官方的快捷键附录,大家学习的时候直接点开它:Scheme快捷键参照着来操作,多次使用就记住啦!
目前我们只需要使用Alt+z快捷键来运行代码
用Scheme来计算
首先,让我们在Edwin窗口计算1加2的值,在窗口中输入(+ 1 2)后按Alt+z组合键。
(+ 1 2) //按Alt+z组合键
Value: 3 //结果就会出现在这里
请注意以下三点:
- 一对括号就代表了一次计算的步骤,如
(+ 1 2)
代表了步骤1+2
. - 出现左括号时,就代表右边第一个是函数,然后是参数。如
(+ 1 2)
中先出现了函数+
,后紧跟参数1
和2
. - Scheme中大多数的操作符都是函数.
现在我们来分析一下这个计算过程,在这个函数中,当所有的参数被求值后,计算开始处理。
- 符号
+
被求值为加法过程,仅在前端输入+
。 - 对
1
求值得到1
。通常来说,对布尔值,数字,字符以及字符串求值的结果就是它们本身。 - 对
2
求值得到2
。 - 最后,对
(+ 1 2)
求值得到3
并跳出括号。在Scheme中,求得的值会跳出括号外,并且这个值(表达式的最终值)会被打印到前端。
四种基本运算操作
- 函数
exact->inexact
用于把分数转换为浮点数。 - Scheme也可以处理复数。复数是形如
a+bi
的数,此处a
称为实部,b
称为虚部。 -
+
、-
、*
和/
分别代表加、减、乘、除。且这些函数都接受任意多的参数。
(- 10 3) ;→ 7
(- 10 3 5) ;→ 2
(* 2 3) ;→ 6
(* 2 3 4) ;→ 24
(/ 29 3) ;→ 29/3
(/ 29 3 7) ;→ 29/21
(/ 9 6) ;→ 3/2
(exact->inexact (/ 29 3 7)) ;→ 1.380952380952381
- 括号可以嵌套
(* (+ 2 3) (- 5 3)) ;→ 10
(/ (+ 9 1) (+ 2 3)) ;→ 2
其它算术操作
quotient,remainder,modulo和sqrt
- 函数quotient用于求商数(quotient)。
- 函数remainder和modulo用于求余数(remainder)。
- 函数sqrt用于求参数的平方根(square root)。
(quotient 7 3) ;→ 2
(modulo 7 3) ;→ 1
(sqrt 8) ;→ 2.8284271247461903
三角函数
数学上的三角函数,诸如sin,cos,tan,asin,acos和atan都可以在Scheme中使用。atan接受1个或2个参数。如果atan的参数为1/2 π,那么就要使用两个参数来计算。大家可以想一想,为什么?
(atan 1) ;→ 0.7853981633974483
(atan 1 0) ;→ 1.5707963267948966//想一想为什么1/2π可以由1 0得出?
其实很简单啦,学过中学数学都知道,tan1/2π=1/0,所以就用1 0
表示咯。
指数和对数
指数通过exp
函数运算,对数通过log
函数运算。a的b次幂可以通过(expt a b)
来计算。另外exp
函数是以自然对数e为底的哦。如(exp 2)
计算结果就是e^2
。log
函数也是如此
一些练习题
使用Scheme解释器求解下列式子:
- exp(2/3)。
- 3的4次幂。
- 1000的对数
- 圆周率π。
小结
我们这一节学习了用Scheme计算的功能,我们会在下个章节学习Scheme的数据类型‘表’。
习题答案
1.
(* 4 (atan 1.0)) ;⇒ 3.141592653589793
2.
(exp 2/3) ;⇒ 1.9477340410546757
3.
(expt 3 4) ;⇒ 81
4.
(log 1000) ;⇒ 6.907755278982137