我已经开始学习Lisp了,并且想知道以几种不同的方式完成特定任务的所有冗余是否有用?肯定有经验的Lisp程序员可以回答这个问题.
举个例子.我们可以通过以下两种不同的方式创建函数.
(defun add2 (x) (+ x 2))
Run Code Online (Sandbox Code Playgroud)
要么
(setf (symbol-function 'add2)
#'(lambda (x) (+ x 2))
Run Code Online (Sandbox Code Playgroud)
我知道这为实现不同的事情提供了灵活性.但是对于为什么拥有所有这些冗余的正确解释可以帮助我更好地理解事物.
Fre*_*Foo 15
存在第一种形式,因为定义函数是一种常见的杂事,您需要一种方便的语法.
存在第二种形式是因为有时候,你想用宏来生成函数定义等等.
如果没有defun
,我们仍然可以用你的第二种形式定义函数,但没有人会在Lisp中编程,因为一个简单的任务将是非常艰巨的.每个程序员都会设计自己的defun
宏,与其他宏不兼容.