kiyokaのブログアーカイブ

Archive of old blog posts

そろそろオレ言語でもやっておくか(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のマクロまわりを深く理解する教材としての意味も大きいだろう。