トップレベルなどの構成を使用せずに、スキームプロシージャで「アーリーリターン」を実行する方法を見つけようとしています。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)
たとえば、上記のコードでは、条件が満たされた場合は戻り、そうでない場合は0を返します。ただし、条件の結果に関係なく、プロシージャはwin
常に0を返します。test
when
when
私がこのようにコードを構造化する理由は、この手順では多数の複雑なチェック(let*
例のように複数のブロック)を実行する必要があり、すべてを大きなものに入れるのcond
は非常に扱いにくいためです。