メインコンテンツまでスキップ

ループ

@ 構文は,左の式が真である限り右の式を繰り返し評価し,最後の値を返します.下のコードでは,1 から 10 までの和を求めます.

sum = 0;
i = 1;

i <= 10 @
sum = sum + i;
i = i + 1;
;

println sum; // 55

1 番目の式が偽であった場合,3 番目の式が一度だけ評価されます.

sum = 0;
i = 1;

println
i <= 0 @
sum = sum + i;
i = i + 1
: "loop doesn't run"
;

再帰によるループ

下のコードは,再帰を用いて 1 から 10 までの和を求めます.

sum10 = i ->
i <= 10
? sum10(i + 1) + i
: 0
;

sum = sum10 1;

println(sum); // 55

まず sum10 という関数を定義しています.sum10 は引数 i が 10 以下である場合は i + 1sum10 を呼び出し,その値に i を加算して返します.それ以外の場合は 0 を返します.sum101 で呼び出した結果を変数 sum に代入しています.

階乗も,再帰を用いて求められます.

fact = n ->
n <= 1
? 1
: n * fact(n - 1)
;

println(fact 7); // 5040