なひです.眠い... > From: Inaba Hiroto [mailto:inaba / st.rim.or.jp] > Sent: Tuesday, April 06, 1999 1:29 AM > > が,いくつかの文献に見られる「制御構造を抽象化したもの」 > > という文言のココロが,いまひとつ...うーん. > > 単純に「whileやifをこの機能を使って書くことができるから」 > と思ってました。 こちらに関しては別スレッドで... > > 以前Common Lisperの端くれだったらしい(^^;)なひは, > > 確かにRubyに「LISPというか関数型言語の香り」を感じます. > > で,その理由を考えてみたんですが, > > 代入が束縛で,call-by-referenceで,制御構造が式で... > > > > みなさんの認識と異なる部分を指摘してもらえると嬉しいです.^^; > > 「代入が束縛で」はちょっと違うでしょう。Lispもrubyも両方とも。 違いますか.^^; なひとしては, 「a = b」という,一般には「代入」と呼ばれる式によって, defineやsetq相当と同じことが行われる,という程度の気持ちでした. いきなりLISPerの化けの皮がはがれた.^^; > 「call-by-referenceで」もちょっと言葉が違うような。 > 「値はすべてreference」というのが近い気がします。 「値」というと,式を評価した結果のような感じを受けます. で,Rubyにおいてある名前を持ってきた時, それは確かにreferenceのように振る舞うんですが, その名前の左辺値(l-value)は確かにreferenceで, そして右辺値(r-value)はやっぱり (その名前にbindされている)オブジェクト,ではないでしょうか... 「a = b」のbは右辺値(なんつーか定義そのままだな ^^;)ですよね. # 勘違いしているようでしたら指摘してください. # あるいは参考文献とか教えてもらえると感謝です. で,メソッド呼び出しにおいて引数の左辺値が渡される, という意味で,call-by-referenceと書きました. 「LISPだとちょっと言葉が違う」ということであれば, なひもそう思います.ちょっと比較が強引だったでしょうか.^^; > 「制御構造が式」は異論ないです。 もしこれだけがRubyの「LISPの香りのするところ」だったら, なひはLISPの香りを感じないと思うんですよね... 単になひが,制御構造が式であることを活かせてないのかもしれません. ところで. # ruby -ve 'p begin 1; rescue 2; ensure 3; end' ruby 1.2.3(99/02/16) [sparc-solaris2.5.1] 1 1.3.2-19990402でも同様でした. 1.2.3のドキュメントには, 「beginは本体を評価し,最後に評価された式の値を返します.」 「ensure節が存在する時はbegin式を終了する直前に必ず encure節の本体を評価します.」 とあるので,ひとことあると嬉しいかもです. # 上記の通り,なひがこの特質を活かしたコードを書くことは # (少なくともしばらくは)ないと思いますが...^^;