Functions are the building-blocks of lisp programs. They are also the building-blocks of lisp. In most languages the + operator is something quite different
from user-defined functions. But lisp has a single model,function application,to
describe all the computation done by a program. The lisp + operator is a function,
just like the ones you can define yourself.
In fact,except for a small number of operators called special forms,the core
of lisp is a collection of lisp functions. What’s to stop you from adding to this
collection? nothing at all: if you think of something you wish lisp @R_301_5717@ do,you
can write it yourself,and your new function will be treated just like the built-in
ones.
我的问题是如何使用以下特殊运算符实现运算符?或者实际上有更多的 *** 作符在使用,格雷厄姆只是不精确和戏剧化?
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
有没有办法查看这些函数的源代码?
解决方法 他并不是说每个功能都是以这些特殊形式实现的.他说(像其他所有功能一样)是一个功能:
>可以使用普通语法(x y z)调用它(其中是函数,x,y,z是参数).
>首先评估参数:(f(g)(h))在调用f之前调用g和h,即使f恰好是f.
>您可以像任何其他函数一样传递它并通过funcall调用它并应用:(let((x#’))(funcall x 1 2 3))为6.
关键是这些属性不一定适用于特殊形式.如果不首先评估它的所有论点;你不能参考让它间接地叫它;等等
当然,这仍然为“编译魔术”打开了大门.在某些时候必须执行依赖于例如低级 *** 作的低级 *** 作.如何实现数字.根据您的lisp编译器,细节看起来会有所不同.
总结以上是内存溢出为你收集整理的function – 如何使用特殊运算符/表单在Common Lisp中实现“”全部内容,希望文章能够帮你解决function – 如何使用特殊运算符/表单在Common Lisp中实现“”所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)