lisp - 帮助减少一个 Lisp 函数

标签 lisp common-lisp

我有一个 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/

相关文章:

common-lisp - 如何避免解构绑定(bind)ARG-COUNT-ERROR?

list - 替换 Common Lisp 列表中的项目?

用于元编程的 Python 与 Ruby

lisp - assoc 只是 find 的语法糖吗?

syntax-error - Common Lisp -----应该是lambda

lisp - Lisp Case 语句中的动态变量

scheme - 截至 2016 年,是否有支持 100% R7RS(小型)且没有偏差的方案实现?

lisp - 冒泡排序不返回排序数组

lisp - 读者级别的 Common Lisp 调试

lisp - 如何显示前 N 个自然数,知道 Lisp 中的除数