相关疑难解决方法(0)

是否优先使用defun或setf来创建常见的lisp中的函数定义?为什么?

使用defunsetf如下定义的函数的根本区别是什么,并且在样式考虑之外的另一种方法优先于另一种方法?

使用defun:

* (defun myfirst (l)
    (car l) )
MYFIRST

* (myfirst '(A B C))

A
Run Code Online (Sandbox Code Playgroud)

使用setf:

* (setf (fdefinition 'myfirst) #'(lambda (l) (car l)))

#<FUNCTION (LAMBDA (L)) {10021B477B}>
* (myfirst '(A B C))

A
Run Code Online (Sandbox Code Playgroud)

如果按照维基百科的说法:

通过使用defun宏将lambda表达式存储在符号中来创建命名函数

使用setf以不同方式创建变量需要使用funcall:

* (defvar myfirst)

MYFIRST
* (setf myfirst (lambda (l) (car l)))

#<Interpreted Function (LAMBDA (X) (+ X X)) {48035001}>
* (funcall myfirst '(A B C))

A
Run Code Online (Sandbox Code Playgroud)

我的理解是这种类型的变量与前一种不同,因为这个变量在与defun绑定符号相同的命名空间中找不到,如为什么有多个命名空间? …

lisp macros common-lisp

3
推荐指数
1
解决办法
513
查看次数

标签 统计

common-lisp ×1

lisp ×1

macros ×1