#Scheme 基础 # 基本函数
原子(atom)
atom 是什么
atom 是一个原子
turkey 也是一个原子
1992 也是一个原子
b 也是一个原子
*abc$ 也是一个原子
() 不是一个原子,是一个空列表
列表(list)
() 是一个空列表
(atom) 是一个列表
(atom atom2) 也是一个列表
(atom atom2) no 不是一个列表
((atom atom2) no) 是一个列表
S-表达式(S-expression)
abc 是 S-表达式
((atom atom2) no) 是 S-表达式
(a b c) 是 S-表达式
((a b c) (e f) (d) e) 是 S-表达式
() 是 S-表达式
( () () () ) 是 S-表达式
函数
- car
- 含义是:求取列表中的第一个成员
- 参数:要求是 非空的 list,
() 表示空列表
- 例子,
a b c 都是原子,(a b c) 表示列表
(car (a b c)) => a
(car ((a b) c)) => (a b)
(car ((a d) (b c)) => (a d)
(car (() b c) => ()
(car () ) 参数不能为空列表
(car abc) 参数不能为原子
- cdr
- 含义是:返回一个列表,但新列表不包含原列表的第一个成员
- 参数:要求是 非空的 list
- 例子,
a b c 都是原子,(a b c) 表示列表
(cdr (a b c)) => (b c)
(cdr ((a b) c)) =>(c)
(cdr ((a b) (c d))) =>( (c d) )
(cdr (() b c)) =>(b c)
(cdr ()) 参数不能为空列表
(cdr abc) 参数不能为原子
- cons
- 含义是:把第一个参数,放到列表的第一个位置,得到一个新列表
- 参数:可以带两个参数,第一个参数可以任何 S-表达式,第二参数是任何列表(包括空列表)
- 例子
(cons a ()) => (a)
(cons a (b c)) => (a b c)
(cons a ((b c) d)) => (a (b c) d)
(cons (a b c) ()) =>((a b c))
(cons (a b c) (d)) =>((a b c) d)
(cons (a b) c) 第二个参数不能为原子
- null?
- 含义是:检查列表是否为空
- 参数:带一个参数,参数可以是任何列表(包括空列表)
- 例子
(null? ()) => true
(null? (a b c)) => false
(null? abc ) 参数不能是原子
- atom?
- 含义是:检查S-表达式是否为原子
- 参数:可以带一个参数,参数可以是任意S-表达式
- 例子:
(atom? a) => true
(atom? ab) => false
(atom? bss) => true
(atom? ()) => false
(atom? (a b c)) => false
- eq?
- 含义是:判断两个原子是否相同
- 参数:可以带两个参数,且两个参数都要求是原子,但不能是数字型的原子
- 例子:
(eq? a a) => true
(eq? a b) => false
(eq? aa aa) => true
(eq? (a) (a)) 参数不能是列表
(eq? a (a)) 参数不能是列表
(eq? 123 123) 参数不能是数字型的原子