コンテンツにスキップ

入出力

read 名前, 名前; で空白区切りの整数を読み込みます。空白には改行も含まれます。対象は左から右へ順番に処理します。

read a, b;
print a + b;

入力が 12 30 なら出力は 42 です。

新しい変数に型を指定しなければ i32 になります。名前: i64 と書くと64ビット整数を読めます。すでに存在する変数は、その型のまま更新します。

read n: i32;
total: i64 = 0;
for i in 0..n {
read value: i64;
total += value;
}
print total;

既存変数に型注釈を付け直す場合は、元の型と一致する必要があります。read は i32 と i64 にだけ対応します。

入力は、任意の + または - と、その後の1桁以上の10進数字です。42、-7、+12、0003 は受け付けます。

トークン全体が有効な整数である必要があります。12abc の先頭だけを数値として読むことはありません。ソースコードの整数リテラルとは異なり、入力の 1_000 は認めません。0xff、+ だけのトークン、+-1 もエラーです。

入力不足、形式の誤り、型の範囲外の値は実行時エラーです。複数の値を読む途中で失敗した場合、それ以前に成功した入力を取り消す仕組みはありません。

print 式, 式; は値の間に半角スペースを入れ、最後に改行を出力します。引数は i32、i64、bool に対応します。bool は true または false になります。

print 12, -3, true; // 12 -3 true
print; // 空行

print は関数呼び出しではなく文なので、print(1, 2) ではなく print 1, 2; と書きます。

引数は左から右へ、すべて評価してから、その print の出力を始めます。引数の評価中に別の print が実行される場合、その出力が先に現れます。

fn announce(value: i32) -> i32 {
print value;
value + 1
}
print announce(10), announce(20);

出力:

10
20
11 21

実装の参照先: 入出力の構文、入力トークンの検証、出力の評価順序。