【发布时间】:2011-01-26 22:01:47
【问题描述】:
我正在尝试找出如何在方案过程中实现“提前返回”,而不使用顶级 if 或 cond 类似构造。
(define (win b)
(let* ((test (first (first b)))
(result (every (lambda (i) (= (list-ref (list-ref b i) i) test))
(enumerate (length b)))))
(when (and (not (= test 0)) result) test))
0)
例如,在上面的代码中,如果满足when 条件,我希望win 返回test,否则返回0。但是,发生的情况是该过程将始终 无论when 条件的结果如何,都返回 0。
我以这种方式构建我的代码的原因是因为在这个过程中我需要进行大量复杂的检查(多个块类似于示例中的 let*)并将所有内容放在一个大的 cond 中会非常笨拙.
【问题讨论】:
-
是的,但是如果你做了一个很大的条件并将每个 let-block 放在一个单独的函数中,并且名称选择得当,你最终会得到更好、更易读的代码。
标签: scheme continuations short-circuiting