[译] Lisp之根源(十一)

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

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 2,399评论 0 2
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 8,633评论 0 13
  • 列表是 Lisp 的基本数据结构之一。在最早的 Lisp 方言里,列表是唯一的数据结构: “Lisp” 这个名字起...
    四月不见阅读 837评论 0 0
  • 第一部分Common Lisp介绍第1章 介绍一下Lisp你在学的时候觉得已经明白了,写的时候更加确信了解了,教别...
    AllenChyou阅读 2,396评论 5 9
  • 90.关于Python注释,以下选项中描述错误的是 ( A ) A: Python注释语句不被解释器过滤掉,也不被...
    钟文晶阅读 5,155评论 0 1