ブロック
複数の文を逐次実行する文| ブロック文(逐次実行) |
(dcl 変数:型:=式,...; 文;...;文)dcl 変数:型:=式,...;は省略可:=式は省略可 |
(dcl tmp:nat := v1; v1 := v2; v2 := tmp) |
スキップ
何もしない文| スキップ文 | skip |
while 何か処理をして終了ならfalseを返す() do skip |
代入
変数に値を代入する文| 代入文 | 左辺 := 式 |
x := x + 1p.x := p.x + 1ps(3).x := ps(2).x + 1
|
| アトミック代入文 | atomic(代入文;...;代入文) | atomic(x := x + 1; y := y - 1) |
| 変数名 | 変数 |
x := x + 1 |
| フィールド参照 | 左辺.フィールド名 |
p.x := p.x + 1ps(3).x := ps(2).x + 1 |
| 適用参照 | 左辺(式) |
ps(3) := ps(2)car.wheels(3) := wheel |
操作呼び出し
操作の呼び出しと復帰を構成する文| 呼び出し文 | 操作名(式,...,式) |
inc()add(2) |
| リターン文 |
returnreturn 式 |
returnreturn x + y |
分岐
条件分岐をする文| if文(真偽値による場合分け) |
if 条件式 then 文 else 文if 条件式 then 文 elseif 条件式 then 文 ... else 文 |
if 3 mod 2 = 0 then return <偶数> else return <奇数>if 10 mod 15 = 0 then return <フィズバズ> |
| cases文(パターンマッチによる場合分け) |
cases 式: パターン,..,パターン -> 文,...,パターン,...,パターン -> 文, others -> 文 endデフォルト定義 , others -> 文は省略可 |
cases mk_('+', 1, 2):cases "03-123-4567": |
繰り返し
繰り返し処理を行う文| whileループ |
while 条件式 do 文 |
while not 終了() do 処理()
|
| 整数forループ |
for 変数 = 整数式 to 整数式 by 整数式 do 文by 整数式は省略可 |
for i = 1 to 10 do s := s ^ [i]
|
| 列forループ |
for パターン in 列式 do 文 |
for i in [1,2,3,4,5] do s := s ^ [i]
|
| 集合forループ |
for all パターン in set 集合式 do 文 |
for all i in set {1,...,10} do s := s ^ [i]
|
局所定義
局所的な定義をする文| let文(局所定義) |
let パターン:型=式,...,パターン:型=式 in 文:型は省略可 |
let x:nat = 1 in return x + 1let x = 1 in return x + 1let x:nat = 1, y:nat = 2 in return x + ylet f:nat -> nat1 f(x) == x + 1 in return f(2) |
| let be文(条件マッチ局所定義) |
let 多重束縛 be st 条件式 in 文 |
let x in set {1,2,3,4} be st x mod 2 = 0 in return xlet b1, b2:bool be st b1 => b2 in return mk_(b1, b2) |