美文网首页
[译] Lisp之根源(十一)

[译] Lisp之根源(十一)

作者: 日更专用小马甲 | 来源:发表于2019-05-13 22:23 被阅读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)。

相关文章

  • [译] Lisp之根源(十一)

    如果一个表达式的形式如下:第一个元素是一个原子f并且它不是原始操作符。 译者注,这里的表达式指的是函数定义(lam...

  • [译] Lisp之根源(十四)

    偶然的,我们看到了怎样定义cond表达式的缺省子句。一个子句,如果第一个元素是't,那么求值时总是为true,因此...

  • [译] Lisp之根源(十二)

    有另外一个记号使得函数可以提及它本身,因此提供了一个方便定义递归函数的方式。这个记号的形式如下: (它)表示一个像...

  • [译] Lisp之根源(十五)

    既然我们有了一种描述函数的方法,我们在7个基础操作符的基础上定义一些新函数。首先,我们会定义一些通用函数的简要记法...

  • [译] Lisp之根源(十三)

    假设我们想要定义一个函数(sub x y z),它代表的含义是:以一个表达式x,一个原子y,一个列表z为参数。并返...

  • [译] Lisp之根源(十)

    2. 函数的表示 接下来,我们定义一套表示函数的符号。函数形如(lambda (p1 ... pn) e),其中p...

  • [译] Lisp之根源(十六)

    同样,我们用(list e1 ... en)代表(cons e1 ... (cons en '()) ... ) ...

  • [译] Lisp之根源(一)

    1960年,约翰·麦卡锡发表了一篇意义非凡的论文。其价值之于编程,犹如欧基里德的《几何原本》之于几何学。论文展示了...

  • [译] Lisp之根源(五)

    在数学中,表达式1+1的值为2。合法的Lisp表达式也有值。如果一个表达式e产生了一个值v,我们说e返回了v。我们...

  • [译] Lisp之根源(八)

    (car x),期望入参x是一个列表,返回值是它的第一个元素。 (cdr x),期望入参x是一个列表,返回值是它的...

网友评论

      本文标题:[译] Lisp之根源(十一)

      本文链接:https://www.haomeiwen.com/subject/tgydaqtx.html