関数型言語がエキゾチックなのは関数内に書ける関数と代数的データ型くらいのもので、しかも前者はコモディティたるJavaScriptにも載ってるシロモノ。パラメータ多相はJavaやC++にあるし、型推論に至っては何も考えなくても使える(値多相?単相性制限?シラネ)。なんも難しくないお
2010-10-06 23:09:48ただライブラリ(map/fold)とか文化(破壊的操作をしない)に慣れる必要はあるだろうけど、オブジェクト指向みたいな怪しいことは言わないよたぶん
2010-10-06 23:13:27たとえば代数的データ型を使ったり関数的にソフトウェアを構成すればより整理されたかたちでソフトウェアを構成できるだとか、そうやって「どう使うのか」を議論するのが重要であって、興味もないのに乗せられて型理論とかλ計算を勉強するのは(そんな人が居ればの話だけど)あんまり意味ないような
2010-10-06 23:20:16.@hkuwa ただ、関数型にはNullPointerExceptionがないのと、型推論があるのとが工学的に多少有利じゃないかなーと。そのためだけに関数的なものの見方を強要されるのは苦痛かもしれませんが、そういう人は Scala や F#に流れるのかもしれません。
2010-10-07 00:03:44あとはやっぱりソフトをimmutableな部分とそうでない部分に分けて作るやりかたを関数型プログラマは熟知しているはずなので、それを形式知にしていくのが重要じゃないかなーとか。 代数的データ型を使えば信頼性あがるよーとか。誰がやるのか知りませんが…笑
2010-10-07 00:08:34はげしく同意。RT @keigoi 難しいことを知らなくても関数型言語は使えるんですよ!と言いたかったんですがどうもなんかネガティブなこと書いちゃっていかんですね。まあ論文書けないとそーなるってことで
2010-10-07 00:10:21.@keigoi NullPointerExceptionとか型推論はそうだと思いますが、自分でやればいい話なので。まぁあまり現実的ではないですが、見方を変えるよりはコストが低い(と錯覚している)のかもしれないですね。
2010-10-07 00:18:56これには同意。個人的には関数型に馴染んでるとどう見えるかが知りたい。ので関数型ちゃんとやらないとね。 QT @nobsun ... 「見え方が変わる」という体験は,新しい言葉を学ぶというコスト(?)に対する報酬(?)とも思えます. ...
2010-10-07 08:39:58Scalaにはchecked exceptionがない。あったら型がめんどくさいことになりそう。でも意外にJavaでは頼ってた気がする。 そうMaybeみたいに
2010-10-07 12:20:26checked例外がないからといってファイル操作をtry-catchで囲まないわけにはいかないと思うんだけど、そうするとコードがJavaのごとくグダグダなアレになるわけでやっぱりcommons-io使おうねという
2010-10-07 13:35:54例外をただしく処理しないならせっかくの型安全性も台無しだと思うんだけど、まあOCamlもList.assocが例外を返しやがります的な意味では同じか。
2010-10-07 13:42:13いくら関数型といっても関数でないものを関数単位で抽象化して再利用するとかアホなことはせず普通はモジュールでまとめる。 SICPとかに「関数にメッセージを渡す」例は出てくるけどあれはクロージャってオブジェクトと同じく強力な表現能力を持ってますよとかそういう話だったような気がする。
2010-10-07 17:38:55コンピューテーション式は coroutine っぽいインターフェースをを関数型言語で実現するためのちょっとプログラマブルな糖衣構文、ですね?
2010-10-07 20:51:09昼間も書いたんですがScalaでIOするときvar out : Wrinter = null; try { out = new PrintWriter(…) } finally { if(out!=null)… }なんてダサイこと書くわけないと信じてるんですがどうなんでしょう
2010-10-07 22:47:03.@hkuwa Javaがダサいと言いたいわけではなくて、Java文化ならjakarta commons-io使えばさくっと短く書けるし、それがデファクトスタンダードだと思ってるんですけど、ScalaはScala流の何かがないのかなーと思って。
2010-10-07 23:08:36@keigoi 今のところ、(標準ライブラリのみという前提なら)自前でdef using(...)みたいなメソッドを定義してやって、それを利用するしか無いのではないかと。scala-armとかみたいなライブラリ使うという手もありますが。 #scala
2010-10-07 23:16:38@keigoi このusingみたいなメソッドはScala界隈ではloan patternとか呼ばれてるので、一応Scala流といえばScala流かと思います。 #scala
2010-10-07 23:18:46あれ?returnとかbindとかあるので汎用的なpa_monadっぽいものかと思ってました。@camlspotter コンピューテーション式は coroutine っぽいインターフェースをを関数型言語で実現するためのちょっとプログラマブルな糖衣構文、ですね?
2010-10-07 23:19:09#ScalaでIOみたいなリソースを使うときはloan patternを使うのが普通ですhttp://scala.sygneca.com/patterns/loan @keigoi ScalaでIOするとき ...
2010-10-07 23:20:30@keigoi ちなみにscala-armは http://bit.ly/9GhjFi を見るとわかりますが、forを使ってリソースの自動closeを楽に書けるようになっています。 #scala
2010-10-07 23:21:43.@kmizu ARM… automatic resource managementですか。例も面白いですね。 さすがScala! http://bit.ly/99p6EH 文句ばっか言っててスミマセン、ありがとうございます…
2010-10-07 23:23:34