Education: Racket制御構文の基礎: if式とbegin式
はじめに
本記事では、Racket 言語における基礎的な制御構文であるif
について説明します。
Racket では、if文
もif式
という特殊な式として評価され、値を返します。
複数の式を取り扱うための式であるbegin式
についても説明します。
begin式
は、複数の式をまとめて 1つの式として評価し、最後の式の結果を返します。複数の式(=複数の処理)を 1つにまとめられるため、if式
と一緒に使われることがあります。
制御構文
if式
if 式は、条件分岐を行なうための制御構文です。<述語>
[1]を評価し、結果が真(#t)なら<真の場合の式>を評価し、偽(#f)の場合は<偽の場合の式>を評価します。
if 式は、<述語>の結果により<真の場合の式>か<偽の場合の式>のどちらかを評価し、両方を評価することはできません。与えられた式のすべてを評価しない式を特殊形式[2]とよびます。
また、Racket では<偽の場合の式>を省略することはできません。何らかの式を含める必要があります。
if式
の構文は、つぎのとおりです。
(if
<述語> ; 真偽を判断する式
<真の場合の式> ; 述語の評価結果が真(`#t`)だった場合に評価される式
<偽の場合の式> ; 述語の評価結果が偽(`#f`)だった場合に評価される式
)
注意点
- Racket では、真偽値を返す関数を
<述語>
と呼ぶ。複数の<述語>
があった場合はさいごに評価した結果を返す - Racket の if 式では、条件の結果が偽(
#f
)の場合に必ず何かを返す必要がある点に注意する。もし何も返せない場合は、void
を返すことができる
以下のサンプルコードでは、if 式を使い、x が y よりも大きい場合に「x は y よりも大きい」と出力し、そうでない場合には「x は y よりも小さい」と出力しています。
(define x 5)
(define y 3)
(if (> x y)
(display "xはyよりも大きい")
(display "xはyよりも小さい"))
となります。
if式の特殊な使用方法
if式
では、次のような特殊な用法も使えます。
(define x 2)
(define y 3)
((if #f * /) x y)
上記の場合、(if #f * /)
の結果は、/
となります。結果(/ x y)
を評価することになり、商である`2/3'が返ります。
begin式
begin式
は、複数の式をひとまとめにします。
"begin式
"でまとめられた式は、先頭から順に評価され、最後に評価した式の結果が、全体の"begin式
"の評価結果となります。
begin式
の構文は、つぎのとおりです
(begin
(<式1>)
(<式2>)
.
.
.
(<式n>)
)
以下のサンプルコードでは、メッセージを表示する式と改行をする式の 2つを 1つの式にまとめています。
(define x 3)
(define y 5)
(if (> x y)
(begin
(display "xはyよりも大きい")
(display "\n") ; 改行
)
(begin
(display "xはyよりも小さい")
(display "\n") ; 改行
))
となります。
さいごに
以上で、Racket の if 式と begin ブロックについて説明しました。
if式
は条件分岐を行なうための式であり、begin式
はコードブロックを作成し、複数の式を 1つの式としてまとめました。
2つともプログラムの基本構造としてよく使うので、これを機会に理解を含めましょう。
それでは、Happy Hacking!
Discussion