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

※以下すべて妄想です。

bugyo/里々拡張案を読んで思ったこと。

結局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に新造すべき内部関数

そこで妥協案。

lambda

(lambda,[中身])

現在の階層の括弧内では展開されても中身は処理されない。ひとつ下位の階層で処理される。

なんとなく仮に名前を付けただけで、LISPのlambdaとは特に関係ない。もっと相応しい名前があるかも。

(
	if
	,(条件式1)
	,(lambda,(set,hoge,0))
	,(lambda,(set,hoge,1))
)

thru

(thru,[中身])

中身をそのまま返す。

(replace,[中身],あ,あ)

これで代用できなくもない。 そもそもこれはsatori.dllに実装する必要もない。ssu.dllでも十分かもしれない。

(thru,あ,あ)→あ,あ

上の二つで実現できるもの

when

(if,[条件式],(lambda,[処理1]),(lambda,[処理2]))

(
	if
	,(条件式1)
	,(lambda,(set,hoge,0))
	,(lambda,(set,hoge,1))
)

times

forと共用

while

(call,while,(lambda,[条件式]),(lambda,[処理]))

※さらに以下の単語群がセットになります。

@while
(A1)(
	(
		if
		,(A0)
		,while
		,nop、
	)
)

(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

(loop,thru、(lambda,[繰り返し処理]),[初期値],[終了値],[増加量])

※カウンタは繰り返し処理の中に自分で作ってください。

(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,)

意見とか



トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-02-13 (金) 17:44:24