gpt4 book ai didi

lisp - 如何调用引用的 lambda?

转载 作者:行者123 更新时间:2023-12-05 08:45:25 25 4
gpt4 key购买 nike

我正在尝试调用存储在列表中的函数 (lambda)。下面是一个小片段,演示了我正在尝试做的事情:

(defvar *db* '((:add (lambda (a b)
(+ a b)))
(:sub (lambda (a b)
(- a b)))))

(defun perform-operation-on-numbers (operation a b)
"Performs specified operation on the supplied numbers."
(let ((func (second (find operation
*db*
:key #'car))))
;; TODO: Call `func` on `a` and `b`
(print func)))

(perform-operation-on-numbers :add 1 2)

无论我做什么,甚至 funcall 都无法让我调用针对 :add 存储的 lambda。我应该如何将检索到的 lambda 引用为 lambda?

最佳答案

您对 quote 的使用导致您无法使用 funcall

看:

(setf *mydb* '((:add #'+)
(:sub #'-)))
;; ((:ADD #'+) (:SUB #'-))

我不能使用 funcall。但是:

(setf *mydb* (list (cons :add #'+)
(cons :sub #'-)))
;; ((:ADD . #<FUNCTION +>) (:SUB . #<FUNCTION ->))
;;
;; ^^^^ "FUNCTION" ? That's better! <----------
;;

我可以 (funcall (cdr (first *MYDB*)) 2)

然后简洁的符号是用反引号和逗号。

关于lisp - 如何调用引用的 lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72904421/

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