如果一个表达式的形式如下:第一个元素是一个原子f并且它不是原始操作符。
(f a1 ... an)
译者注,这里的表达式指的是函数定义(lambda (p1 ... pn) e)中的e。
如果f的值也是一个函数(lambda (p1 ... pn) e),则将f代入后,上述表达式的值等价为:
((lambda (p1 ... pn) e) a1 ... an)
换句话说,形参在表达式中既可以被当做实参,又可以被当做操作符。
> ((lambda (f) (f '(b c)))
'(lambda (x) (cons 'a x)))
,
(a b c)
译者注:
上面一句的原文是:
parameters can be used as operators in expressions as well as arguments.
表达式的求值过程如下:
- 关联
f = '(lambda (x) (cons 'a x)),然后代入表达式(f '(b c))中,得到((lambda (x) (cons 'a x)) '(b c)); - 关联
x = '(b c),并代入表达式(cons 'a x)中,得到(cons 'a '(b c)),结果即为(a b c)。
这个过程中,参数f对应的值,在第1步中作为实参(argument),也就是一个字符串;在第2步中又作为操作符(operator)。





网友评论