-
Notifications
You must be signed in to change notification settings - Fork 2
分岐・繰り返し
Snowman-s edited this page Mar 31, 2024
·
3 revisions
分岐は if0
もしくは ifn0
プロシージャで実現されます。
次のコードは、入力を受け付け、入力が "y" に等しいなら "yes" を、 そうでないなら "no" を出力します。
┌─────┐
│print│
└──┬──┘
┌──┴──┐
┌────────────┤ if ├───┐
│ └──┬──┘ │
┌┴┐ ┌──┴──┐┌──┴─┐
┌─┤=├──────┐ │"yes"││"no"│
│ └─┘ │ └─────┘└────┘
┌┴────────┐┌┴──┐
│read line││"y"│
└─────────┘└───┘
if(n)0
プロシージャは、条件リテラル・thenリテラル・elseリテラル を引数として受け取り、条件リテラルが0なら(0でないなら)、thenリテラルを、そうでないならelseリテラルを返り値とします。
引数は必ず一回実行されることに注意してください! 例えば以下のコードは入力にかかわらず "yes" と "no" を両方出力します!
┌─────┐
┌────────────┤ if ├───┐
│ └──┬──┘ │
┌┴┐ ┌──┴──┐┌──┴──┐
┌─┤=├──────┐ │print││print│
│ └─┘ │ └──┬──┘└──┬──┘
┌┴────────┐┌┴──┐ ┌──┴──┐┌──┴──┐
│read line││"y"│ │"yes"││"no" │
└─────────┘└───┘ └─────┘└─────┘
これを回避するために、ブロッククォートを用いて以下のように書くことができます。
┌─────┐
│exec │
└──┬──┘
┌──┴──┐
┌────────────┤ if ├───┐
│ └──┬──┘ │
┌┴┐ ┌──•──┐┌──•──┐
┌─┤=├──────┐ │print││print│
│ └─┘ │ └──┬──┘└──┬──┘
┌┴────────┐┌┴──┐ ┌──┴──┐┌──┴──┐
│read line││"y"│ │"yes"││"no" │
└─────────┘└───┘ └─────┘└─────┘
ブロッククォートについて詳しくはアドバンスドを参照ください。
繰り返しは for
プロシージャにて行うことができます。
以下のコードは入力した整数値分だけ、「01234567...」 を出力します。
┌─────┐
┌────────────┤ for │
│ ┌──┤ │
┌───┴──────┐┌─┴─┐└──┬──┘
│str to int││"i"│┌──•──┐
└───┬──────┘└───┘│print│
┌───┴─────┐ └──┬──┘
│read line│ ┌──┴──┐
└─────────┘ │ i │
└─────┘
for
プロシージャは、回数・変数名・ブロックを受け取り、Rustでいう for <変数名> in 0..<回数> { <ブロック> }
を実行します。
<ブロック> は通常ブロッククォートを用いるのが簡単です。ここでは「"┴" のかわりに "•" を使うものである」と思っておけば十分です。
ブロッククォートについて詳しくはアドバンスドを参照ください。
- チュートリアル
- アドバンスド
- その他仕様