gpt4 book ai didi

closures - 根据另一个闭包定义一个闭包

转载 作者:行者123 更新时间:2023-12-02 15:18:23 24 4
gpt4 key购买 nike

我有两个相互补充的闭包。我想根据另一个来定义一个。例如,假设我们有函数 more-than 定义如下

(defun more-than (v) #'(lambda (x) (> x v)))

CL-USER> (funcall (more-than 5) 7)
T
CL-USER> (funcall (more-than 5) 3)
NIL

我们想使用上述闭包定义它的补码,less-than-or-equal。这似乎不像上面的闭包那么容易,因为我的尝试到目前为止还没有奏效。有人可以指出一个可能的解决方案或告诉我这是否是常见模式(即,而不是独立于第一个闭包定义第二个闭包)。

这是我的两个尝试,但没有成功

;; compile time error
(defun less-than-or-equal (v)
#'(lambda (x) #'(not (more-than v))))
;; returns nil for every comparison
(defun less-than-or-equal (v)
#'(lambda (x) (not (more-than v))))

最佳答案

正如我在评论中提到的,您可以使用 COMPLEMENT补一个函数:

(defun less-than-or-equal (v)
(complement (more-than v)))

在您尝试使用 NOT 来否定 MORE-THAN 返回的函数时,而不是调用该函数并否定结果。 X 根本没有使用。要修复它,您需要做

(defun less-than-or-equal (v)
;; The #' is not necessary here
(lambda (x) (not (funcall (more-than v) x))))

但是使用 COMPLEMENT 更好。

关于closures - 根据另一个闭包定义一个闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38962833/

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