bugyo/里々拡張案
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
以下妄想です。
#ref(satori-chop.zip)
*特殊構文 [#xaec2d5d]
引数は事前に評価(括弧展開)されない。
**when [#m767839f]
外部関数ifと同等。
***仕様 [#d9861dcb]
:呼び出し|(when、式、真の場合[、偽の場合])
:振る舞い|「式」が計算が計算され、結果が0以外なら「真の場...
***例 [#o7251c72]
*さんぷる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 [#sdec22f8]
回数を指定したループ。
loopと違って、引数の括弧は事前に展開されない。
ループ本体はラベルとして呼び出されずに直接評価される。
ラベルは括弧やcallで明示的に呼び出す必要があるので注意。
また、loopとは引数の順番が違うので注意。
(ループ本体が大きくなると予想されるため入れ替えた)
***仕様 [#s75adb80]
:呼び出し|(times、回数[、カウンタ初期値=0]、ループ本体)
:振る舞い|「ループ本体」を「回数」回繰り返し、戻り値を連...
-「回数」は式として1回だけ計算される。
-本体および呼び出し先で(C?)と書くことでカウンタを取得...
-現ループのカウンタは(C0)。1つ上のカウンタは(C1)。
-「カウンタ初期値」を引数で指定できる。デフォルトの値は0。
-「カウンタ初期値」、「回数」の順で括弧展開、計算される。
***例 [#kf5eb2b1]
*さんぷる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 [#ob78c036]
条件式によるループ。
***仕様 [#u440e8ba]
:呼び出し|(while、式[、カウンタ初期値]、ループ本体)
:振る舞い|「式」を計算した値が真(0以外)である間、ループ...
-「式」は繰り返す度に再計算される。
-本体および呼び出し先で(C?)と書くことでカウンタを取得...
-「カウンタ初期値」は引数で指定する。デフォルトの値は0。
-カウンタはtimes、forとも共有される。
-「式」に先立って「カウンタ初期値」が括弧展開、計算される。
***例 [#c0503010]
*さんぷる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 [#l4af530b]
内部関数loopと同様。ただし、ループ本体はラベルとして呼び...
***仕様 [#kc226c50]
:呼び出し|(for、開始値、終了値[、増分]、ループ本体)
:振る舞い|カウンタが「開始値」から「終了値」に向かって「...
-「開始値」、「終了値」、「増分」は事前に括弧展開され、式...
-「増分」は正で指定するが、loopと同様に負で指定しても問題...
-「増分」に0を指定することはできない。
-「増分」の初期値は1。
-「開始値」、「終了値」、「増分」の順で括弧展開、計算され...
***例 [#rd1ecc2c]
*さんぷる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)φ、))
#comment
終了行:
以下妄想です。
#ref(satori-chop.zip)
*特殊構文 [#xaec2d5d]
引数は事前に評価(括弧展開)されない。
**when [#m767839f]
外部関数ifと同等。
***仕様 [#d9861dcb]
:呼び出し|(when、式、真の場合[、偽の場合])
:振る舞い|「式」が計算が計算され、結果が0以外なら「真の場...
***例 [#o7251c72]
*さんぷる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 [#sdec22f8]
回数を指定したループ。
loopと違って、引数の括弧は事前に展開されない。
ループ本体はラベルとして呼び出されずに直接評価される。
ラベルは括弧やcallで明示的に呼び出す必要があるので注意。
また、loopとは引数の順番が違うので注意。
(ループ本体が大きくなると予想されるため入れ替えた)
***仕様 [#s75adb80]
:呼び出し|(times、回数[、カウンタ初期値=0]、ループ本体)
:振る舞い|「ループ本体」を「回数」回繰り返し、戻り値を連...
-「回数」は式として1回だけ計算される。
-本体および呼び出し先で(C?)と書くことでカウンタを取得...
-現ループのカウンタは(C0)。1つ上のカウンタは(C1)。
-「カウンタ初期値」を引数で指定できる。デフォルトの値は0。
-「カウンタ初期値」、「回数」の順で括弧展開、計算される。
***例 [#kf5eb2b1]
*さんぷる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 [#ob78c036]
条件式によるループ。
***仕様 [#u440e8ba]
:呼び出し|(while、式[、カウンタ初期値]、ループ本体)
:振る舞い|「式」を計算した値が真(0以外)である間、ループ...
-「式」は繰り返す度に再計算される。
-本体および呼び出し先で(C?)と書くことでカウンタを取得...
-「カウンタ初期値」は引数で指定する。デフォルトの値は0。
-カウンタはtimes、forとも共有される。
-「式」に先立って「カウンタ初期値」が括弧展開、計算される。
***例 [#c0503010]
*さんぷる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 [#l4af530b]
内部関数loopと同様。ただし、ループ本体はラベルとして呼び...
***仕様 [#kc226c50]
:呼び出し|(for、開始値、終了値[、増分]、ループ本体)
:振る舞い|カウンタが「開始値」から「終了値」に向かって「...
-「開始値」、「終了値」、「増分」は事前に括弧展開され、式...
-「増分」は正で指定するが、loopと同様に負で指定しても問題...
-「増分」に0を指定することはできない。
-「増分」の初期値は1。
-「開始値」、「終了値」、「増分」の順で括弧展開、計算され...
***例 [#rd1ecc2c]
*さんぷる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)φ、))
#comment
ページ名: