【发布时间】:2011-02-07 20:34:42
【问题描述】:
我有一个 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)
我有条件地选择将参数发送到哪个函数。这有意义吗?
【问题讨论】:
-
我不记得 Lisp 语法,所以我不会尝试用代码猜测确切的答案,而是回答您的“有没有更有效的调用方式?”问题是“绝对是的”。您需要创建一个返回最小值或最大值函数的函数。
标签: lisp common-lisp