以下妄想です。

特殊構文

引数は事前に評価(括弧展開)されない。

when

外部関数ifと同等。

仕様

呼び出し
(when、式、真の場合[、偽の場合])
振る舞い
「式」が計算が計算され、結果が0以外なら「真の場合」を返し、0なら「偽の場合」を返す。

*さんぷる1
:ifの場合
(set、変数1、0)(set、変数2、0)
(if、1、(set、変数1、1)、(set、変数2、1))
変数1は(変数1)#=>1
変数2は(変数2)#=>1
:whenの場合
(set、変数1、0)(set、変数2、0)
(when、1、(set、変数1、1)、(set、変数2、1))
変数1は(変数1)#=>1
変数2は(変数2)#=>0

*さんぷる2
:10の階乗は(call、階乗、10)です。

@階乗
(when、(calc、1<(A0))、
	(calc、(A0)*(call、階乗、(calc、(A0)-1)))、
	1)

times

回数を指定したループ。 loopと違って、引数の括弧は事前に展開されない。 ループ本体はラベルとして呼び出されずに直接評価される。 ラベルは括弧やcallで明示的に呼び出す必要があるので注意。 また、loopとは引数の順番が違うので注意。 (ループ本体が大きくなると予想されるため入れ替えた)

仕様

呼び出し
(times、回数[、カウンタ初期値=0]、ループ本体)
振る舞い
「ループ本体」を「回数」回繰り返し、戻り値を連結して返す。
  • 「回数」は式として1回だけ計算される。
  • 本体および呼び出し先で(C?)と書くことでカウンタを取得できる。
  • 現ループのカウンタは(C0)。1つ上のカウンタは(C1)。
  • 「カウンタ初期値」を引数で指定できる。デフォルトの値は0。
  • 「カウンタ初期値」、「回数」の順で括弧展開、計算される。

*さんぷる1
ピザって10回言って。\w9
:(times、10、ピザφ、\w2)
:ここは?\w9
:・・・\w5埼玉。

*さんぷる2
:(times、9、1、(C0)+)10は?\w9
:・・・(call、級数、10)!

@級数
(when、(calc、1<(A0))、
	(calc、(A0)+(call、級数、(calc、(A0)-1)))、
	1)

*さんぷる3
:点呼!
(times、3、1、(times、3、1、(call、点呼)))

*点呼
(C1)年(C0)組、そろいました。

while

条件式によるループ。

仕様

呼び出し
(while、式[、カウンタ初期値]、ループ本体)
振る舞い
「式」を計算した値が真(0以外)である間、ループ本体を繰り返し結果を連結して返す。
  • 「式」は繰り返す度に再計算される。
  • 本体および呼び出し先で(C?)と書くことでカウンタを取得できる。
  • 「カウンタ初期値」は引数で指定する。デフォルトの値は0。
  • カウンタはtimes、forとも共有される。
  • 「式」に先立って「カウンタ初期値」が括弧展開、計算される。

*さんぷる1
素数を数えるんだ!\w9
:1、(call、素数、100)
:……1は素数じゃないよ。

@素数
(while、(C0)<=(A0)、2、
	(set、約数、0)
	(while、(C0)<(C1)、2、
		(when、(C1)%(C0)==0、
			(set、約数、1)))
	(when、(約数)==0、(C0)φ、))

for

内部関数loopと同様。ただし、ループ本体はラベルとして呼び出されない。

仕様

呼び出し
(for、開始値、終了値[、増分]、ループ本体)
振る舞い
カウンタが「開始値」から「終了値」に向かって「増分」ずつ進み、その度に「ループ本体」を繰り返すし、結果を連結して返す。
  • 「開始値」、「終了値」、「増分」は事前に括弧展開され、式として計算される。
  • 「増分」は正で指定するが、loopと同様に負で指定しても問題ない。(「開始値」と「終了値の」大小関係に応じて修正される。)
  • 「増分」に0を指定することはできない。
  • 「増分」の初期値は1。
  • 「開始値」、「終了値」、「増分」の順で括弧展開、計算される。

*さんぷる1
高速に素数を数えるんだ!\w9
:(call、素数、100)
:……しかしオーダーは変わらないという……。

@素数
2、3、φ
(for、5、(A0)、2、
	(set、約数、0)
	(for、3、(C1)-1、2、
		(when、(C1)%(C0)==0、
			(set、約数、1)))
	(when、(約数)==0、(C0)φ、))


添付ファイル: filesatori.patch 906件 [詳細] filesatori-chop.zip 1689件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-10-08 (月) 21:44:34