そろそろオレ言語でもやっておくか(3)
以前からRubyの構文を見たり、Gaucheのリファレンスマニュアルを見たりして妄想中。 こんな風に書ければいいなぁ。 注意:全体の構文の辻褄を会わせようとはしてません。雰囲気で希望だけを書いていっています。
FizzBuzz
ほぼRubyの様に書けるとうれしい
def fizzbuzz( num )
if (0 == x % 15)
"FizzBuzz"
elsif (0 == x % 3)
"Fizz"
elsif (0 == x % 5)
"Buzz"
else
num.to_s
end
end
print (1..100).map { |num|
fizzbuzz( num )
}
関数定義
- defを使って
def add1( x ) x + 1 end add1( 5 ) # => 6
- ブロックはそのままlambdaになる
JavaScriptの様に代入可能
add1 = { |x| x + 1 } add1( 5 ) # => 6
ブロック
- 名前付きブロックはSchemeの named let(letrecでもいいかな)に置きかえられる
loop { |arg| if eof?(arg) last else loop(read-char()) end }
- RubyのブロックはSchemeのlambdaすれば良いのでは
print open( "sample.txt" ) { |f| f.readlines.map-with-index { |index,str| } index.to_str + str } }
オブジェクト
- Gaucheでオブジェクト定義されている型のリテラル
"10".to_i # => 10 10.to_s # => "10"
まだまだ、多値をどう扱うとか、配列やハッシュがどう記述できたら嬉しいかとか、#t #fはどうするか、nilはどうするか、どうやったらオープンクラスにできるかなど、課題は色々ある。 今後思いついた順に書いていく予定なので、お気楽に眺めてもらえればと思う。
このシンタックスでGaucheプログラミングが可能になれば、ひらがなの名前を名乗る若い方たちがGaucheやSchemeにに興味を持ってくれるんではないか。甘いかな… それを目的とするなら何か方向性が間違っているかもしれないけど。 巷で言われているようにオレ言語は自分が楽しむためにあると思うが、他にも、私にとってはSchemeのマクロまわりを深く理解する教材としての意味も大きいだろう。