ブロック
複数の文を逐次実行する文ブロック文(逐次実行) |
(dcl 変数:型:=式,...; 文;...;文) dcl 変数:型:=式,...; は省略可:=式 は省略可 |
(dcl tmp:nat := v1; v1 := v2; v2 := tmp) |
スキップ
何もしない文スキップ文 | skip |
while 何か処理をして終了ならfalseを返す() do skip |
代入
変数に値を代入する文代入文 | 左辺 := 式 |
x := x + 1 p.x := p.x + 1 ps(3).x := ps(2).x + 1
|
アトミック代入文 | atomic(代入文;...;代入文) | atomic(x := x + 1; y := y - 1) |
変数名 | 変数 |
x := x + 1 |
フィールド参照 | 左辺.フィールド名 |
p.x := p.x + 1 ps(3).x := ps(2).x + 1 |
適用参照 | 左辺(式) |
ps(3) := ps(2) car.wheels(3) := wheel |
操作呼び出し
操作の呼び出しと復帰を構成する文呼び出し文 | 操作名(式,...,式) |
inc() add(2) |
リターン文 |
return return 式 |
return return 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 + 1 let x = 1 in return x + 1 let x:nat = 1, y:nat = 2 in return x + y let 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 x let b1, b2:bool be st b1 => b2 in return mk_(b1, b2) |