I'm trying to find out how I can do an "early return" in a scheme procedure without using a top-level if
or cond
like construct.
(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)
For example, in the code above, I want win
to return test
if the when
condition is met, otherwise return 0. However, what happens is that the procedure will always return 0, regardless of the result of the when
condition.
The reason I am structuring my code this way is because in this procedure I need to do numerous complex checks (multiple blocks similar to the let*
in the example) and putting everything in a big cond
would be very unwieldy.