我试图找出如何在不使用顶级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)
例如,在上面的代码中,如果满足条件,我想win
返回,否则返回 0。但是,发生的情况是,无论条件的结果如何,过程都将始终返回 0 。test
when
when
我以这种方式构造我的代码的原因是因为在这个过程中我需要进行大量复杂的检查(多个块类似于let*
示例中的块)并且将所有内容放在一个大cond
文件中会非常笨拙。