return文のようなものは比較的簡単に作れますが、念の為覚え書き。
値を返したい位置の継続を受け取って、returnするかわりにその継続に戻り値を渡します。
(use gauche.collection) ;; xsとysのすべての要素が等しければ#t, そうでなければ#f (define (vector-equal? xs ys) (if (not (eq? (vector-length xs) (vector-length ys))) #f (let/cc return (for-each (^(x y) (if (not (equal? x y)) (return #f))) xs ys) #t)))
実行結果
gosh> (vector-equal? #(1 2 3) #(1 2 3)) #t gosh> (vector-equal? #(1 2 3) #(4 5 6)) #f