制御構文#

Xarpiteには多くのプログラミング言語に登場する「if文」や「while文」と全く同一の文法はありません。

代わりに演算子と関数を使って同様な制御を行います。

制御演算子#

条件分岐#

論理和演算子、論理積演算子、三項演算子は条件分岐に利用できます。

詳細は論理値を参照してください。

ループ#

パイプ演算子を使うとループを表現できます。

詳細はストリームを参照してください。

ラベルとリターン#

ラベル演算子とリターン演算子を使うと任意の場所から抜け出すことができます。

詳細はジャンプを参照してください。

例外機構#

スロー演算子とキャッチ演算子を使うと値をスローし、キャッチできます。

詳細はジャンプを参照してください。

制御関数#

WHILE: 条件ループ#

WHILE(condition: () -> BOOLEAN; block: () -> VALUE): NULL

conditionTRUE を返す間、 block を繰り返し実行します。

この関数はよくある「while文」の再現です。

この関数は副作用のあるブロックの制御を目的としているため、敢えて block の戻り値を破棄します。

$ xa '
  i := 0
  WHILE [ => i < 5 ] ( =>
    OUT << i
    i = i + 1
  )
'
# 0
# 1
# 2
# 3
# 4
# NULL

ラベル・リターン演算子と組み合わせることでループの途中で脱出することもできます。

$ xa '
  i := 0
  WHILE [ => i < 5 ] ( =>
    i == 3 && break!!
    OUT << i
    i = i + 1
  ) !: break
'
# 0
# 1
# 2
# NULL

block がストリームを返す場合、ストリームを解決し、その結果を破棄します。

このため block の副作用は必ず丁度1回だけ発生します。

$ xa -q '
  i := 0
  WHILE [ => i < 4 ] ( =>
    0 ~ 2 | (
      OUT << i
      i = i + 1
    )
  )
  NULL
'
# 0
# 1
# 2
# 3