我有一个Lisp函数,它返回两个值的最大值或两个值的最小值。现在我的代码有一些相对复杂的表达式来评估VALUE1和VALUE2。帮助减少Lisp函数
(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实际上占用了许多许多行代码。我真的不想重复他们。有没有更有效的方法来调用它?
基本上我想要做的是一个一元 - 如果在函数而不是值。如果你熟悉C或它的变种,基本上我正在寻找的概念是:
((ismin ? min : max) COMPLEX_EXPRESSION_1 COMPLEX_EXPRESSION_2)
一息尚存,我有条件地选择其工作的参数发送给。这有意义吗?
我不记得Lisp语言的语法,所以我不会尝试去猜测与代码确切的答案,但答案你“有没有更有效的方法打电话给这个?“问题是“绝对是”。您需要创建一个返回min或max函数的函数。 – DVK 2011-02-07 20:46:30