-互換性を重視しない。 
-汎用性を軽視する。 
-既存機能を軽視しない。 
-わかりやすさを重視する。

※以下すべて妄想です。

*[[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

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS