在lisp中,符号可以同时绑定到值和函数.例如,
符号f绑定到一个函数
(defun f(x)
(* 2 x))
Run Code Online (Sandbox Code Playgroud)
符号f绑定到一个值
(setq f 10)
Run Code Online (Sandbox Code Playgroud)
所以我写这样的东西:
(f f)
Run Code Online (Sandbox Code Playgroud)
=> 20
这样的功能有什么好处?
Rai*_*wig 11
符号可以同时具有函数和值.可以使用SYMBOL-FUNCTION检索该函数,使用SYMBOL-VALUE检索该值.
这不是完整的视图.Common Lisp(至少)有两个名称空间,一个用于函数,一个用于变量.全球符号参与其中.但对于本地功能,不涉及符号.
那么有什么好处:
函数和变量的标识符之间没有名称冲突.
方案:( define(foo lst)(list lst))
CL :( defun foo(list)(列表清单))
没有运行时检查某些东西是否真的是一个函数
方案:( define(foo)(bar))
CL :( defun foo()(bar))
在Scheme中,不清楚BAR是什么.它可能是一个数字,在调用FOO时会导致运行时错误.
在CL BAR中是函数或未定义.它永远不会是别的.它可以例如永远不是数字.无法将函数名称绑定到数字,因此无需在运行时检查此情况.
归档时间: |
|
查看次数: |
213 次 |
最近记录: |