我有一个 Lisp 函数,它返回两个值的最大值或两个值的最小值。现在我的代码有一些相对复杂的表达式来评估 VALUE1 和 VALUE2。
(defun treemax (bilist &optional ismin)
(cond
;; Compute minimum
(ismin (min (COMPLEX_EXPRESSION_1) (COMPLEX_EXPRESSION_2)))
;; Compute maximum
(t (max (COMPLEX_EXPRESSION_1) (COMPLEX_EXPRESSION_2)))))
这里的问题是 COMPLEX_EXPRESSION_1 和 COMPLEX_EXPRESSION_2 实际上占用了很多代码行。我真的不想重复它们。有没有更有效的调用方式?
本质上,我想做的是对函数而不是值的一元 if。如果您熟悉 C 或其变体,基本上我正在寻找的概念是:
((ismin ? min : max) COMPLEX_EXPRESSION_1 COMPLEX_EXPRESSION_2)
因此我有条件地选择将参数发送到哪个函数。这有意义吗?
最佳答案
(defun treemax (bilist &optional ismin)
(funcall (if ismin #'min #'max)
(COMPLEX_EXPRESSION_1)
(COMPLEX_EXPRESSION_2)))
关于lisp - 帮助减少一个 Lisp 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4926237/