なひです.眠い...

> 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節の本体を評価します.」
とあるので,ひとことあると嬉しいかもです.

# 上記の通り,なひがこの特質を活かしたコードを書くことは
# (少なくともしばらくは)ないと思いますが...^^;