如果一个表达式的形式如下:第一个元素是一个原子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)。
网友评论