gpt4 book ai didi

lisp - 如何定义创建函数别名的函数?

转载 作者:太空宇宙 更新时间:2023-11-03 18:51:55 25 4
gpt4 key购买 nike

Lisp 论坛帖子 Define macro alias?有一个使用如下形式创建函数别名的示例

(setf (symbol-function 'zero?) #'zerop)

这很好用,使 zero? 成为一个有效的谓词。是否可以在不求助于宏的情况下参数化这种形式?我希望能够调用以下内容并让它创建 function?:

(define-predicate-alias 'functionp)` 

我的看法大约是:

(defun defalias (old new)
(setf (symbol-function (make-symbol new))
(symbol-function old)))

(defun define-predicate-alias (predicate-function-name)
(let ((alias (format nil "~A?" (string-right-trim "-pP" predicate-function-name))))
(defalias predicate-function-name alias)))

(define-predicate-alias 'zerop)

(zero? '())

尝试调用 zero? 时失败,说

The function COMMON-LISP-USER::ZERO? is undefined.

最佳答案

make-symbol 创建一个 uninterned 符号。这就是为什么 zero? 是未定义的。

将您的 (make-symbol new) 替换为例如(实习生新*包*)。 (或者您可能需要更仔细地考虑在哪个包中实习您的新符号。)

关于lisp - 如何定义创建函数别名的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20187823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com