scheme-r5rs
包(不知道为何没有 mit-scheme
包), (实际安装的包名为scheme48
), 使用命令scheme48
开启命令行。137 + 349
⇒ (+ 137 349)
, 可避免多参数歧义,可嵌套。define
命名变量define
用于关联变量(define (square x) (* x x))
, 过程定义的一般形式是:(define (<name> <formal parameters>) <body>)
cond
:(cond (<p1> <e1>) (<p2> <e2>) ... (<pn> <en>))
执行时直到 px 真,则返回 ex.
if
:(if <predicate> <consequent> <alternative>)
; 有假则返回假,后续不判断,全真则返回 en <and <e1> ... <en>) ; 有真则返回第一个真,后续补判断,全假则返回假 <or <e1> ... <en>) ; e 真返回假,e 假返回真 <not <e>)
conf
定义if
,而重新提供一个if
. 因为由conf
定义的if
在参与递归时会先求值参数而导致无限递归,所以需要一个能先执行判断条件(而不是先求所有参数值)的特殊形式。lambada
构造过程;let
表达式构建局部变量:(let ((<var1> <exp1>) (<var2> <exp2>) ... (<varn> <expn>)) <body>) ; 即在<body>中的<var1>具有值<exp1>,且<var2>具有值<exp2>...<varn>具有值<expn>
(define x (cons 1 2)) (car x) 1 (cdr x) 2
cons
满足闭包性质;可建立起层次性的结构list
基本操作list-ref
, null?
; map
map