[译] Lisp之根源(十一)

2019-05-13  本文已影响0人  日更专用小马甲

如果一个表达式的形式如下:第一个元素是一个原子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.

表达式的求值过程如下:

  1. 关联f = '(lambda (x) (cons 'a x)),然后代入表达式(f '(b c))中,得到((lambda (x) (cons 'a x)) '(b c))
  2. 关联x = '(b c),并代入表达式(cons 'a x)中,得到(cons 'a '(b c)),结果即为(a b c)

这个过程中,参数f对应的值,在第1步中作为实参(argument),也就是一个字符串;在第2步中又作为操作符(operator)。

上一篇 下一篇

猜你喜欢

热点阅读