0%

一起学习魔法吧(1)

上一节中我们对 scheme 有了初步印象,这节我们来介绍它的基本运算。
与 c 语言不同的是,scheme 种并没有真正意义上的变量。例如:

1
Int a = 3;

这种形式的语句在 scheme 中并不存在。在 c 语言中,一个变量必须声明类型,而 scheme 则有所不同。首先来看数的计算。
在 c 语言中,我们可以这样写:

1
2
3
Int a = 5
Int b = 6;
Int c = a + b;

而在 scheme 中其书写是这样的:

1
2
3
(define a 5)
(define b 6)
(define c (+ a b))

这两者能达到同样的效果。但两者还是有较大的区别的,例如:

1
2
3
4
Int a = 5;
Int b = 6;
b = 9;
int c = a + b;

在这时,c 为 14 而在 scheme 中:

1
2
3
4
(define a 5)
(define b 6)
(define b 9)
(define c (+ a b))

此时则会报错,在 scheme 中所有的值都是常量,不可更改,而不像 c 语言,需要用 const 修饰才为常量。
四则运算在上节中也做过基本的介绍,这节中不再过多阐述。
同样的,scheme 中也有不同的类型,例如数字,字符,列表,其中列表是一个及其重要的组成。不夸张的说,scheme 的强大与列表有着很深的相关性。
接下来我们说说字符,在 c 语言中,我们有字符和字符串,例如:

1
2
char d = ‘h’;
string e = “abcdefg”;

在 scheme 中,我们如是表示:

1
2
(define d “h”)
(define e “abcdefg”)

值得注意的是,在 scheme 中,字符和字符串都用“xxxxxxxxx”表示,我们可以把字符理解成长度为一的字符串。
接下来我们说最重要的部分,列表:
列表主要由 cons car cdr 构成,其中 cons 是把两个组成部分合成一个序对,值得注意的时,cons 可以连接不同类型的单元,例如:

1
2
>(cons “abcdef” 6)
'("abcdef" . 6)

如果我们想得到“abcdef” 只需 (car (cons “abcdef” 6))
如果要得到 6 只需要(cdr (cons “abcdef” 6))
上面简要说了说 scheme 中基本的要素,下节中我们将介绍更多内容。