Function 是';其运算符本身为复合表达式的组合';变量函数的同义词?
我为这里缺少一些词汇提前道歉。综上所述,早期提到了“其运算符本身就是复合表达式的组合”,例如:Function 是';其运算符本身为复合表达式的组合';变量函数的同义词?,function,scheme,evaluation,function-call,Function,Scheme,Evaluation,Function Call,我为这里缺少一些词汇提前道歉。综上所述,早期提到了“其运算符本身就是复合表达式的组合”,例如: (定义(a-plus-abs-b) ((如果(>b0)+-)ab)) 其中组合(如果(>b0)+-)被评估为+或-,如果b大于零,则评估为(+ab) 我的问题是:这和变量函数(例如)有什么不同吗?另外,变量函数和此功能与使用不同吗?从Lisp的角度来看,这里的重要概念是一种语言是“Lisp-1”还是“Lisp-2”。这两者之间的区别在于:在一个看起来像函数应用程序的表达式中,表示要应用的函数的东西是
(定义(a-plus-abs-b)
((如果(>b0)+-)ab))
其中组合(如果(>b0)+-)
被评估为+
或-
,如果b大于零,则评估为(+ab)
我的问题是:这和变量函数(例如)有什么不同吗?另外,变量函数和此功能与使用不同吗?从Lisp的角度来看,这里的重要概念是一种语言是“Lisp-1”还是“Lisp-2”。这两者之间的区别在于:在一个看起来像函数应用程序的表达式中,表示要应用的函数的东西是如何计算的 因此,在Lisps中,类似于函数应用程序的内容类似于列表:
(f a b ...)
在考虑此类事项时,系统必须做三件事:
(如果…
)不是,也不是一个宏形式)李>
- lisp-1以与所有其他位置完全相同的方式以这种形式计算函数位置(第一个位置)。因此,函数位置可以包含完全任意的表达式。所以
非常好,例如((如果add+-)12)
(let((op…)(op…)
- lisp-2对函数位置使用一些特殊规则,特别是对于lisp-2,符号的“函数值”位于与普通值不同的命名空间中。这意味着允许的不是一般表达式,而是规则允许的任何内容。因此,例如,在lisp-2中,类似的东西不起作用:
,但类似的东西确实起作用:(let((op(lambda…))(op…)
(let((car…)(car-car))
- JavaScript是一个lisp-1,因此看起来像函数应用程序的东西的函数位置只是在正常情况下进行了完美的评估
- Python是一个lisp-1
- 我不知道PHP是什么
请注意,在这些语言中,您知道某个东西是函数应用程序的方式与在Lisp中完全不同,但重要的问题是,一旦您知道了这一点,如何评估函数位置?从Lisp的角度来看,这里的重要概念是一种语言是“Lisp-1”还是“Lisp-2”。这两者之间的区别在于:在一个看起来像函数应用程序的表达式中,表示要应用的函数的东西是如何计算的 因此,在Lisps中,类似于函数应用程序的内容类似于列表:
(f a b ...)
在考虑此类事项时,系统必须做三件事:
(如果…
)不是,也不是一个宏形式)李>
- lisp-1以与所有其他位置完全相同的方式以这种形式计算函数位置(第一个位置)。因此,函数位置可以包含完全任意的表达式。所以
非常好,例如((如果add+-)12)
(let((op…)(op…)
- lisp-2对函数位置使用一些特殊规则,特别是对于lisp-2,符号的“函数值”位于与普通值不同的命名空间中。这意味着允许的不是一般表达式,而是规则允许的任何内容。因此,例如,在lisp-2中,类似的东西不起作用:
,但类似的东西确实起作用:(let((op(lambda…))(op…)
(let((car…)(car-car))
- JavaScript是一个lisp-1,因此看起来像函数应用程序的东西的函数位置只是在正常情况下进行了完美的评估
- Python是一个lisp-1
- 我不知道PHP是什么
+
用作函数:
尝试将符号用作函数
> (define foo '+)
> foo
+
> (foo 1 2)
Exception: attempt to apply non-procedure +
不幸的是,这不起作用:foo
计算为符号+
,而这本身不是一个函数
使用函数对象
但这是可行的:
> (define foo +)
> (foo 1 2)
3
这里foo
被设置为+
的值,这是一个函数对象。foo