Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lisp 如何在defun中对函数进行defun?_Lisp_Common Lisp - Fatal编程技术网

Lisp 如何在defun中对函数进行defun?

Lisp 如何在defun中对函数进行defun?,lisp,common-lisp,Lisp,Common Lisp,例如,我将函数名传递给另一个函数 (personal-function 'func-name '(attr1 attr2 ...)) 我想做的是 (defun personal-function (func-name) (defun func-name '(attr1 attr2 ...) (dosomething))) 但是,它说我不能用符号defun。。。我该怎么办呢?你可以用一辆lambda 如果您试图在函数中创建一个新的全局可访问函数,我认为该语言的语法不允许这样做。如果

例如,我将函数名传递给另一个函数

(personal-function 'func-name '(attr1 attr2 ...))
我想做的是

(defun personal-function (func-name)
     (defun func-name '(attr1 attr2 ...) (dosomething)))
但是,它说我不能用符号
defun
。。。我该怎么办呢?

你可以用一辆lambda

如果您试图在函数中创建一个新的全局可访问函数,我认为该语言的语法不允许这样做。如果创建lambda,可以将变量初始化为此lambda值,并将变量传递给函数。在Common LISP中,您可以在尝试调用某个变量之前调用(functionp x)以确定该变量是否为函数。

按如下方式求解:

e、 g1

e、 g2


以前我在定义函数时也遇到了同样的问题

例如:

(defun test-function(fn)
            (defun fn ((lambda() (print "aaa")))))
我跑完之后

(test-function 'aaafunction)
评价结果为:

FN
它不返回名为“aaafunction”的函数

对于否决我答案的人:
我们是Lisp的新手,但我们正在努力学习知识,而您却不那么尊重我们。

我使用defmacros进行元编程,例如,emacs Lisp。

使用

(setf (symbol-function my-symbol) some-function)
使用创建新函数

(compile nil (list 'lambda args body))

其中arg和body具有有意义的值。

使用宏将是一个不错的选择。比如 (个人函数(函数名称) `(defun,func name'(attr1 attr2…(dosomething)))
请试一试,希望对您有所帮助。

非常感谢。然而,我的解释器告诉我define不是一个函数。。。?“错误:试图调用'DEFINE'这是一个未定义的函数。”是否使用Common LISP?方案?有关functionp的使用,请参见此。。。lambda和functionp的组合应该可以满足您的需要。我不明白您是如何尝试调用一个名为define的函数的。也许是在我无意中发布的第一个链接中。你看过编辑后的问题中的新链接了吗?哦,我看到了编辑后的链接!但是你能告诉我如何将一个变量初始化为一个lambda值吗?非常感谢
defun
返回函数名,而不是函数名:defun不计算名称我如何强制它计算这个“fn”?我猜否决票是因为答案没有真正的用处——它没有回答问题。你的努力学习是值得赞赏的,但这并不是你在这里投票的原因。这不是一个论坛。所以现在我已经给出了解决方案,应该取消否决票,对吗?但是你知道吗,那些投反对票的人不会再访问这个问题了。defun不会评估姓名、参数列表或机构。所有值都必须是文字值。因此,您的代码有两个问题。1) 它将定义一个函数func名称。2) 引用的arglist也不会达到您期望的效果。无法理解:使用什么,setf或compile,或者两者的组合(它看起来像什么?)。您实际上没有按照原始帖子中的示例精神在其他函数定义中提供函数定义示例。@Artem Pelenitsyn:我将首先创建函数对象,然后将符号函数设置为它。
(setf (symbol-function my-symbol) some-function)
(compile nil (list 'lambda args body))