Mad*_*ist 3 function common-lisp special-form
在On Lisp(第9页)中,可以找到以下声明:
函数是Lisp程序的构建块.它们也是Lisp的构建块.在大多数语言中,+运算符与用户定义的函数完全不同.但Lisp有一个模型,函数应用程序,用于描述程序完成的所有计算.Lisp +运算符是一个函数,就像你自己定义的函数一样.事实上,除少数运算符称为特殊表单外,Lisp的核心是Lisp函数的集合.什么阻止你添加到这个系列?什么都没有:如果你想你想的Lisp可以这样做,你可以把它写自己,和你的新功能将被视为就像内置的.
我的问题是如何+
使用以下特殊运算符实现运算符?或者实际上有更多的运营商在使用,格雷厄姆只是不精确和戏剧化?
block let* return-from
catch load-time-value setq
eval-when locally symbol-macrolet
flet macrolet tagbody
function multiple-value-call the
go multiple-value-prog1 throw
if progn unwind-protect
labels progv
let quote
Run Code Online (Sandbox Code Playgroud)
有没有办法查看这些函数的源代码?
他并不是说每个功能都是以这些特殊形式实现的.
他说+
(像其他所有功能一样)是一个功能:
(+ x y z)
(其中+
是函数和x
,y
,z
的参数).(f (g) (h))
将调用两者g
并h
在调用之前f
,即使f
恰好是+
.funcall
和apply
:(let ((x #'+)) (funcall x 1 2 3))
6.关键是这些属性不一定适用于特殊形式.if
不首先评估所有论点; 你不能参考let
并间接称呼它; 等等
当然,这仍然为"编译魔术"打开了大门.在某些时候+
必须执行低级操作,例如取决于数字的实现方式.根据您的Lisp编译器,细节看起来会有所不同.
归档时间: |
|
查看次数: |
337 次 |
最近记录: |