条件分岐の際に使用します。
「else」は省略可能です。
- (if <condition> <instruction1>...<instructionN>)
<condition>が「true」であるかどうかを判定し、「true」であれば<instruction1>~<instructionN>を実行して、次へ進みます。
「false」であれば何もせず、次へ進みます。
- (if <condition> <instructionX1>...<instructionXN> else <instructionY1>...<instructionYN>)
<condition>が「true」であるかどうかを判定し、「true」であれば<instructionX1>~<instructionXN>を実行して、次へ進みます。
「false」であれば<instructionY1>~<instructionYN>を実行して、次へ進みます。
①
(game
(piece
(moves
(
(if empty? add)
(if (on-board? n) n add)
)
)
)
)
※現在の位置が空であれば「add」します。
さらに、(現在の位置が空であってもなくても)上が盤上であれば、上に進んで「add」します。
②
(game
(piece
(moves
(
(if (on-board? n) n add)
(if empty? add)
)
)
)
)
※上が盤上であれば、上に進んで「add」します。
さらに、現在の位置が空であれば「add」します。
上が盤上でない場合、現在の位置(進む前の位置)が空であれば「add」します。
上が盤上の場合、現在の位置(上に進んだ位置)が空であれば「add」します。
③
(game
(piece
(moves
(
(if empty?
add
else (on-board? n)
n add
)
)
)
)
)
※現在の位置が空であれば「add」します。
現在の位置が空でなければ、上が盤上であれば、上に進んで「add」します。
④
(game
(piece
(moves
(
(if (on-board? n)
n add
else empty?
add
)
)
)
)
)
※上が盤上であれば、上に進んで「add」します。
上が盤上でなければ、現在の位置が空であれば「add」します。
③と④は全く並列なので、同じ結果となります。
①と②は直列なので、連続処理の際に、別の結果となります。
条件判定の際に使用します。
判定に満たない場合は、それ以降の移動処理を中止します。
<condition>が「true」であるかどうかを判定します。
「true」であれば次へ進み、「false」であればそこで即終了します。
※(verify false)
処理をそこで終了します。
最初の「add」の実行前であれば、移動自体がキャンセルされ、着手可能な移動は生成されません。
「add」の実行後であれば、それ以降の「add」はキャンセルされますが、それ以前の移動は着手可能です。
①
(game
(piece
(moves
(
(verify empty?)
add
(if (on-board? n) n add)
)
)
)
)
※現在の位置が空であれば「add」します。
さらに、上が盤上であれば、上に進んで「add」します。
現在の位置が空でなければ、「add」せずに終了します。
②
(game
(piece
(moves
(
(verify (on-board? n))
n add
(if empty? add)
)
)
)
)
※上が盤上であれば、上に進んで「add」します。
さらに、現在の位置(上に進んだ位置)が空であれば「add」します。
上が盤上でなければ、「add」せずに終了します。
※verifyでは、ifと違って、条件がfalseだった場合、それ以下の処理がキャンセルされ実行されません。
①
(verify (条件文) )
命令文
②
(if (条件文)
命令文
else
(verify false)
)
①と②は同じ挙動をします。
移動ブロックの途中で、強制的にその移動をキャンセルしたい場合、「(verify false)」を記載します。
最終更新:2020年09月16日 15:47