top recent

「Rubyで関数プログラミング」へのコメント

関連ページ

Ruby プログラミング

目次

  1. Rubyで関数プログラミング...
  2. Rubyにおいて関数はファーストクラスでないか?...
  3. 高階関数を自然に扱うことができないか?...
  4. リストはArrayの入れ子でなければならないか?...
  5. FP基本関数とRuby組み込みのメソッド名前の比較...
  6. データ抽象...

Rubyで関数プログラミング

http://sky.zero.ad.jp/~zaa54437/programming/ruby/
すばらしい企画。
気になるところ、面白いところ、引っかかったところにコメント。
----
関連リンク
dW:魅力的なPython:Pythonでの関数プログラミング第1回
dW:魅力的なPython:Pythonでの関数プログラミング:第2回
dW:魅力的なPython:Pythonでの関数プログラミング:第3回
SF:Xoltar-Toolkit
- [[Python]]FPするためのライブラリ。functional.py/lazy.py/threadpool.py などが提供されている。

----
関連ページ in this site
FP
Ruby
FP:inRuby
dW: プログラミング改善への道: 第4回 関数型プログラミング (FP)

[[id:930]] 2002-08-12 13:53:22


Rubyにおいて関数はファーストクラスでないか?

ファーストクラスの関数(Part 6)へのコメント
Rubyの思想は「すべてがオブジェクト」なので、Proc クラスのオブジェクトは「ファーストクラスのオブジェクトである関数」といえると思います。

リファレンスマニュアルより、
『Proc はブロックをコンテキスト(ローカル変数のスコープやスタックフレーム)とともにオブジェクト化した手続きオブジェクトです。Proc はローカル変数のスコープを導入しないことを除いて名前のない関数のように使えます(ダイナミックローカル変数は Proc ローカル の変数として使えます)。』

[[id:929]] 2002-08-06 18:43:48


高階関数を自然に扱うことができないか?

method(:name) で def で作られたメソッドをオブジェクトとして取りだすことができます。
また、手元のRuby 1.6.2 では、& をつけなければならないとか引数の最後にひとつだけしか置けないといった制限はありませんでした。

できました(はぁと) (プログラミング言語:高階関数) 参照

----
&をつけて最後に置くというのは、多分メソッド呼び出しのうしろにブロックを直接かけるというシンタックスシュガーに関する制限ではないでしょうか?
----
Ruby で関数オブジェクト proc_obj を呼び出す構文は

proc_obj[arg1, arg2, ...]

となります。通常の関数(プライベートメソッド)の呼び出しは

method_name(arg1, arg2, ...)

という形ですから完全に同じにはなりません。これだけは改善しがたいですね。
ただ Scheme 以外の Lisp でも、変数にバインドした関数を呼び出すとき

(funcall closure arg1 arg2 ...)

と書かなければならないことを考えればおあいこでしょうか。(<ナニが?)
ちなみになにかと引き合いに出される Python では

proc_obj(arg1, arg2, arg3 ...)

で呼び出すことができます。自前で定義したクラスでも

def __call__(self, arg1, arg2 ...):

を定義しておけば、インスタンスのオブジェクトに obj(arg1, arg2, ...) と
いう書き方でメソッド __call__ を呼び出すことができます。
Xoltar-Toolkit ではこうやってカリー化された関数をクラス"curry"のインスタンスとして実装しています。

[[id:931]] 2002-08-19 16:54:28


リストはArrayの入れ子でなければならないか?

car と cdr を自然に分離・結合できれば、もしかして入れ子になっている必要はない?
- 入れ子になっていることの効用、という点については、関数プログラミング (本棚) をよく読んでから考えます。

[[id:932]] 2002-08-06 19:13:40


FP基本関数とRuby組み込みのメソッド名前の比較

FP:
- map
- filter
- foldr/reduce, foldl

Ruby:
- map/collect
- select/find_all, grep
- inject

[[id:933]] 2002-08-06 19:22:00


データ抽象

次回はFPにおけるデータ抽象の手法を紹介されるということで、非常に期待。

FPの本を読んでも型の定義のところとかに来るとまだ全然分からないので…。(^^;

----
次回は先になりそう、とのことなので、SMLの講座で予習しておこう。--SHIMADA
http://a414s1.it.nanzan-u.ac.jp/smlbook/smlwww/node97.html

[[id:994]] 2002-08-23 16:22:37


top recent

HashedWiki version 3 beta
SHIMADA Keiki