表达式即列表
可以通过 list 组成列表,通过 eval 对列表进行求值
可以通过对运算符前加一撇’,阻止进行运算,以保留原始符号
引用与准引用
1. Quote ('):
• quote用于直接返回它的参数,不对其进行求值。这意味着,无论quote中包含什么样的代码,结果都是代码的字面表示。
• 例如,'(a b) 和 '(a ,(+ b 1)) 都会直接返回表达式本身,不进行任何计算。
2. Quasiquote ( `):
• quasiquote允许部分表达式被求值,这通过使用unquote(,) 或 unquote-splicing(,@) 来实现。这让你可以构建部分动态生成的数据结构。
• 在quasiquote中,你可以包含一些普通的静态数据,同时通过unquote指定某些部分需要进行求值。
• 例如,'(a ,(+ b 1)) 仍然返回整个表达式,而 `(a ,(+ b 1)) 会对,(+ b 1)部分求值,若b为4,则结果为(a 5)。
实例:while 的控制

这里是常规的代码

其中,
begin
用于序列化表示,也就是返回一个表达式,而非求值后的结果这里通过传入几个参数、运行,可以得到一个表达式,然后进行 eval 即可求值
这里定义 sum while 的一个好处就是可以让 Scheme 代替我们生成一些代码,同时在修改相关功能时更加方便,直接修改最初传入的“规则”即可