-互換性を重視しない。 -汎用性を軽視する。 -既存機能を軽視しない。 -わかりやすさを重視する。 ※以下すべて妄想です。 *[[bugyo/里々拡張案]]を読んで思ったこと。 [#yca647bd] 結局whenって ( replace ,( replace ,( if ,(条件式) ,【処理1】 ,【処理2】 ) ,】 ,(han2zen,)) ) ,【 ,(han2zen,() ) 今まで↑のように書いていたのが、 ( when ,(条件式) ,(処理1) ,(処理2) ) このように書けるようになったということ。 when単体は今まででもこういう対処策はあった。 確かに、if文ををネストするときには便利。 ( replace ,( replace ,( if ,(条件式1) ,【 replace ,【 replace ,【 if ,(条件式2) ,{処理A} ,{処理B} 】 ,} ,【han2zen,)】 】 ,{ ,【han2zen,(】 】 ,【処理C】 ) ,】 ,(han2zen,)) ) ,【 ,(han2zen,() ) 「【】」「{}」と、カッコの抽象化を2種類も使っていたのを、 ( when ,(条件式1) ,( when ,(条件式2) ,(処理A) ,(処理B) ) ,(処理C) ) こうスッキリと書けるようになった。 when、while、for。どれもずっと欲しかったものばかりでとても魅力的だ。timesは使い時がイマイチ分かりませんが・・・ しかし、そもそもsatori.dllにifやその他の機能は必要ないから、ssu.dllが作られたはず。 このままではssu.dllの存在価値が危ぶまれる。 *satori.dllに新造すべき内部関数 [#bca763a8] そこで妥協案。 **lambda [#c8b554c6] (lambda,[中身]) 現在の階層の括弧内では展開されても中身は処理されない。ひとつ下位の階層で処理される。 なんとなく仮に名前を付けただけで、LISPのlambdaとは特に関係ない。もっと相応しい名前があるかも。 ***例 [#tb431b5b] ( if ,(条件式1) ,(lambda,(set,hoge,0)) ,(lambda,(set,hoge,1)) ) **thru [#u0fe881f] (thru,[中身]) 中身をそのまま返す。 (replace,[中身],あ,あ) これで代用できなくもない。 そもそもこれはsatori.dllに実装する必要もない。ssu.dllでも十分かもしれない。 ***例 [#j9786624] (thru,あ,あ)→あ,あ *上の二つで実現できるもの [#p4529b79] **when [#l30c98f0] (if,[条件式],(lambda,[処理1]),(lambda,[処理2])) ***例 [#aa7fea3e] ( if ,(条件式1) ,(lambda,(set,hoge,0)) ,(lambda,(set,hoge,1)) ) **times [#v5c2db62] forと共用 **while [#v0d73e55] (call,while,(lambda,[条件式]),(lambda,[処理])) ※さらに以下の単語群がセットになります。 @while (A1)( ( if ,(A0) ,while ,nop、 ) ) ***例 [#ua75dd50] (set,n,1)( call,while ,(lambda,(n)<=100) ,(lambda ,( iflist ,0== ,(n)%3+(n)%5 ,FizzBuzz ,(n)%3 ,Fizz ,(n)%5 ,Buzz ,(n) )(set,n,(n)+1) ) )(set,n,) **for [#od886d57] (loop,thru、(lambda,[繰り返し処理]),[初期値],[終了値],[増加量]) ※カウンタは繰り返し処理の中に自分で作ってください。 ***例 [#tba7b333] (set,n,1)( loop ,thru#このthruが100個並んだ後、lambdaの中身が処理され、そして華麗にスルー。 、( ,lambda#このlambdaでloop内では展開されない ,( iflist ,0== ,(n)%3+(n)%5 ,FizzBuzz ,(n)%3 ,Fizz ,(n)%5 ,Buzz ,(n) )(set,n,(n)+1) ) ,1 ,100 )(set,n,) *意見とか [#oddc925d] - ssu.dllがかわいそうだから書いた。反省はしていない。 -- [[レゴキチ]] &new{2009-02-13 (金) 16:47:00}; #comment