🎾
Education: Racket言語入門: 複数の条件分岐を扱うcond式の基礎
はじめに
この記事では、Racket の制御構文の 1つであるcond式
について説明します。
cond式
は、複数の条件に基づく条件分岐を簡単に書くための構文で、他のプログラミング言語での、if
-elif
-else
構文に相当します。本記事では、cond式
の基礎的な使い方について説明します。
技術用語
この記事では、以下の技術用語を扱います。
-
cond式
→ Racket 言語の条件分岐において、複数の条件分岐に使用する特殊形式 - 特殊形式 → Racket の一般的な式と違い、評価の方法が異なる式。
cond式
は特殊形式の 1つ -
<述語>
→ 条件分岐をする式において、条件を示す式。真(#t
)、偽(#f
)のいずれかを返す - else →
cond式
において、すべての述語に当てはまらなかった場合に評価される特殊記号 -
<else式>
→ else に当てはまった場合に評価される式
cond式
cond式の概要
cond式
は Racket において、複数の条件分岐に使用される特殊形式です。
以下は、cond式
の特徴です。
-
cond
は、複数の<述語>
のうち、評価が真となった場合の<式>
の評価を返す - 複数の
<述語>
が真となる場合は、先頭の述語の<式>
のみ評価する - '<述語>
に対応する
<式>がない場合は、
<述語>`の結果を返す - 評価が真となる
<述語>
がなかった場合は、void
を返す -
else
がある場合は、void
のかわりにelse節
の<式>
の評価を返す
cond式の構文
cond式
の構文は、以下のとおりです。
cond式
(cond
[(<述語1>) (<式1>)]
[(<述語2>) (<式2>)]
.
.
.
[(<述語n) (<式n>)]
[else (<else式>)]
cond式のサンプルコード
以下のサンプルコードは、cond
を使って曜日の短縮形から日本語の曜日を取得する方法を示しています。
japanese-week.rkt
#lang racket
(define (japanese-week day)
(cond
[(eqv? day "Mon") "月曜日"]
[(eqv? day "Tue") "火曜日"]
[(eqv? day "Wed") "水曜日"]
[(eqv? day "Thu") "木曜日"]
[(eqv? day "Fri") "金曜日"]
[(eqv? day "Sat") "土曜日"]
[(eqv? day "Sun") "日曜日"]
))
上記のコードでは、引数day
を"Mon"、"Tue"`といった曜日の短縮形と比較しています。
day が短縮形と一致した場合は、対応する日本語の曜日を返しています。
else
elseの概要
else
はcond式
の最後にかける特殊記号です。<述語>
に当てはまる条件がなかった場合は、else
ではじまるelse節
の<else式>
を評価します。
elseのサンプルコード
以下のサンプルコードは、曜日の短縮形から休日と平日を判断しています。
weekend.rkt
#lang racket
(define (weekend day)
(cond
[(eqv? day "Sat") "休日"]
[(eqv? day "Sun") "休日"]
[else "平日"]
))
上記のコードでは、引数`day'を短縮形"Sat","Sun"と比較しています。一致する場合は"休日"を返し、day がそれ以外の場合は、else 節を評価して"平日"を返します。
注意点
- else は
cond式
の最後にしか書けない。else節
のあとに述語
が続くとエラーとなる - else 節の
<else式>
は省略できない。<else式>
がない場合は、エラーとなる
さいごに
この記事で紹介した Racket の cond 式を理解し、プログラミングに活用することで、効率的なコーディングができるようになります。ぜひ Racket 言語でのプログラミングに挑戦して、独自のアプリケーションやツールを開発してみてください。Racket 言語は、関数型プログラミングの理解や、より高度なプログラミング言語を学ぶための良い入門言語です。
Discussion