Schemeで多分岐を行う
※ 以下はScheme初心者である私の勉強用のメモです。
間違っている可能性がありますので注意してください。
多分岐 (cond, case)
多分岐を行う関数にはcond式とcase式がある。
cond式
if式のように条件を指定して多分岐を行うにはcond式を使用する。
一般形
(cond (条件1 式1) (条件2 式2) (・・・ ・・・) (条件n 式n) (else 式))
例1
; 賀寿祝いの歳か否かを判定する (define (cond-test1 age) (cond ((= age 60) "還暦") ((= age 70) "古希") ((= age 77) "喜寿") ((= age 80) "傘寿") ((= age 88) "米寿") ((= age 90) "卒寿") ((= age 99) "白寿") ((= age 100) "百寿") ((= age 108) "茶寿") (else "賀寿祝いの歳ではありません"))) ; 実行例 > (cond-test1 60) "還暦" > (cond-test1 108) "茶寿" > (cond-test1 59) "賀寿祝いの歳ではありません。"
例2
; ソース (define (cond-test2 x) (cond ((< x 5) "x < 5") ((> x 5) "5 < x") (else "x = 5"))) ; 実行例 > (cond-test2 4) "x < 5" > (cond-test2 6) "5 < x" > (cond-test2 5) "x = 5"
case式
C言語のswitch文のように、あらかじめ決められているデータのどれであるかを判定する場合にはcase式を使用する。
一般形
(case キー (リスト1 式1) (リスト2 式2) (・・・ ・・・) (リストn 式n) (else 式)
例1
; 賀寿祝いの歳か否かを判定する (define (case-test1 age) (case age ((60) "還暦") ((70) "古希") ((77) "喜寿") ((80) "傘寿") ((88) "米寿") ((90) "卒寿") ((99) "白寿") ((100) "百寿") ((108) "茶寿") (else "賀寿祝いの歳ではありません。"))) ; 実行例 > (case-test1 60) "還暦" > (case-test1 108) "茶寿" > (case-test1 59) "賀寿祝いの歳ではありません。"
例2
; ソース (define (case-test2 x) (case x ((1 2 3) "x = 1 or 2 or 3") ((4 5 6) "x = 4 or 5 or 6") (else "x = ?"))) ; 実行例 > (case-test2 1) "x = 1 or 2 or 3" > (case-test2 6) "x = 4 or 5 or 6" > (case-test2 7) "x = ?"