这里对前面学习SICP中使用的lisp的语法做一个总结。
安装
可以选择安装MIT-scheme或者安装guile,安装MIT-Scheme可以通过home-brew安装brew install mit-scheme。安装guile也可以通过home-brew来进行安装brew install guile。
变量
定义变量
1 | (define temp value) |
修改变量的值
1 | (set! temp value) |
基本数据结构
- boolean。
#t表示真#f表示假。(not函数可以对boolean类型数据操作表示取反) - number。包括整数(
(define i 100))、实数((define i 3/4))、有理数((define i 3.14))、复数((define i 3+2i))、二进制数((define i #b10100))、八进制数((define i #o567))、16进制数((define i #x78a))等等。 - char。以
#\开始一个字符。(#\space表示空格,#\newline表示换行) - 枚举数据类型。
(define a 'xyz)或(define a (quote xyz)) - string。字符串类型,可以通过
(string-length str)获取字符串的长度、(string-set! str pos char)设置字符串某一个位置的字符。 - pair。
(cons a b)定义成a.b,a为这个pair的car,b为pair的cdr。 - list。列表是在点对上的一种基础形式。
- vector。向量一种元素按照整型索引的过程
(define v #(1 2 3 4))
基本运算
类型判断
1 | (boolean? *) |
比较
eq?是判断两个参数是否指向同一个对象,如果是才返回#t;equal?则是判断两个对象是否具有相同的结构并且结构中的内容是否相同,它用eq?来比较结构中成员的数量;equal?多用来判断点对,列表,向量表,字符串等复合结构数据类型。
算数运算
+、-、*、/和expt(指数运算)。
转换
1 | (number->string 123) ; 数字转换为字符串 |