gpt4 book ai didi

lisp - 在 setf 中使用条件位置

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

假设我有两个变量,我想将值较小的变量设置为 nil。

有没有可能让它以这种方式工作?

(setf a1 5)
(setf a2 6)
(setf
(if (< a1 a2) a1 a2)
nil
)

最佳答案

如果你想做一些接近于此的事情,你可以使用 (setf (symbol-value var) ...) :

> (defparameter a1 5)
> (defparameter a2 6)
> (setf (symbol-value (if (< a1 a2) 'a1 'a2)) nil)
> a1
nil
> a2
6

要使语法更接近您的问题,您可以定义 setf-expander对于 if :

(defsetf if (cond then else) (value)
`(progn (setf (symbol-value (if ,cond ,then ,else)) ,value)
,value))

然后你可以写(setf (if (< a1 a2) 'a1 'a2) nil)

但是,编写代码的最佳方式可能是直接使用 if 来编写代码。与 setf两个分支中的表单:

(if (< a1 a2) 
(setf a1 nil)
(setf a2 nil))

关于lisp - 在 setf 中使用条件位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16495341/

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