#Scheme 基础 # 基本函数

437 阅读2分钟

原子(atom)

  • atom 是什么
  • atom 是一个原子
  • turkey 也是一个原子
  • 1992 也是一个原子
  • b 也是一个原子
  • *abc$ 也是一个原子
  • () 不是一个原子,是一个空列表

列表(list)

  • () 是一个空列表
  • (atom) 是一个列表
  • (atom atom2) 也是一个列表
  • (atom atom2) no 不是一个列表
  • ((atom atom2) no) 是一个列表

S-表达式(S-expression)

  • abcS-表达式
  • ((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) 参数不能是数字型的原子