週に一回は書きますよ 月に4つ記事を書けばノルマは満たされます。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
関数のCurry化は別になくても良いような気がします。Curry化によって特別な表記や関数なしにbind1stを記述できますが、与える引数の数やら引数の範囲やらを明示出来れば「関数の引数が足りないよ」とコンパイルエラーが出て便利です。もっとも、そのような言語の設計が可能かどうかは知りません。勉強しないと。

Curry化されると部分適用が簡単に書けるといいますが、簡単に書けるのは第一引数だけです。第二第三引数について部分適用をするにはflipやら新たに無名関数を書くやらしないといけません。第一引数の部分適用だけが簡単にかけるというのは、宣伝するほどすばらしい事ではないと思います。

O'camlでは、ミスとCurry化とが混ざると大きな被害となります。引数がひとつ足りなかったのに警告もでず、走るはずの関数が走らなかったというようなことがおきます。このあたり、関数起動と部分適用とを明示的に区別する構文があれば被害は少なくなると思うのですが。

ちなみにHaskellでは、コンパイルエラーに関する問題は少ないです。関数を呼んだときに引数が足りないと、カリー化されていてもどこかで型エラーが出る可能性が高いです。それでも、エラーメッセージが親切に出たほうがさまざまな人を取り込みやすいと思います。

一方、Curry化があると確実に良くなることとしては、関数の型が簡単になることが挙げられます。Curry化が無いと、引数の数の異なる関数同士をどうやって多相的に扱えばよいのでしょうか。私にはよくわかりません。bind1stやflipのような関数を書くのに苦労しそうです。C++のboostのように、引数の数に応じてたくさんの記述をしないといけないのでしょうか。


関数型言語に慣れてしまうとこういう意見は自分の中から消えてしまいそうなので、忘れないうちに書いてみました。
スポンサーサイト
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
http://gusmachine.blog49.fc2.com/tb.php/18-78dafa8c
この記事にトラックバックする(FC2ブログユーザー)
この記事へのトラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。