Schemeで分岐を行う
※ 以下はScheme初心者である私の勉強用のメモです。
間違っている可能性がありますので注意してください。
分岐 (if)
分岐を行うにはif式を使用する
一般形
(if 条件式 真の場合の式 偽の場合の式)
例1
; 大人か小人かを判定する (define (if-test1 age) (if (>= age 20) 'adult 'child)) ; 実行例 > (if-test1 19) child > (if-test1 20) adult
例2
条件式、真の場合の式、偽の場合の式を改行で分けることもできる。
(define (if-test2 age) (if (>= age 20) 'adult 'child))
分岐 (not, and, or)
not式
真偽を反転するときにはnot式を使用する。
not式は引数が#fであれば#tを、それ以外であれば#fを返す。
一般形
(not 条件式)
例1
(define (not-test x) (if (not(= x 1)) #t #f )) ; 実行例 > (not-test 1) #f > (not-test 2) #t
and式
条件が全て成り立つかどうかを調べるには、and式を使用する。
一般形
(and 条件式1 条件式2 ・・・条件式n)
例1
(define (and-test1 x) (if (and (> x 1) (< x 10)) 'ok 'error)) ; 実行例 > (and-test1 2) ok > (and-test1 9) ok > (and-test1 1) error > (and-test1 10) error
and式の条件は左から評価されるので使用の際は注意が必要である。
例えば以下の例2の場合はエラーにならないが、例3の場合はエラーが発生する。
例2
(define (and-test2 x) (if (and (number? x) (> x 1) (< x 10)) 'ok 'error)) ; 実行例 > (and-test2 5) ok > (and-test2 'Foo) error
例3
(define (and-test3 x) (if (and (> x 1) (< x 10) (number? x) ) 'ok 'error)) ; 実行例 > (and-test3 5) ok > (and-test3 'Foo) : expects type as 1st argument, given: foo; other arguments were: 1
or式
条件にどれか1つでも真があるかを調べるには、or式を使用する。
一般形
(or 条件式1 条件式2 ・・・条件式n)
例
;入力が1か2であればok,それ以外ならばerrorを返す (define (or-test1 x) (if (or (= x 1) (= x 2)) 'ok 'error)) ; 実行例 > (or-test1 1) ok > (or-test1 2) ok > (or-test1 3) error
or式の条件はand式と同じく左から評価されるので使用の際は注意が必要である。