- 関数型プログラミング言語Haskell Part25
969 :デフォルトの名無しさん[sage]:2014/07/25(金) 02:25:37.16 ID:bB6D8lBK - >>965
>>966 えっそんな関数Haskellに無いですよね? hoogleで出てこないです。(そしてhayooは何故か死んでる...)
|
- 関数型プログラミング言語Haskell Part25
970 :デフォルトの名無しさん[sage]:2014/07/25(金) 02:32:41.93 ID:bB6D8lBK - Haskellは遅延評価だから、レガシーな言語で言うところの、"インターフェイスに対してプログラミングせよ"
みたいな原則は、あんまし気にしなくていい、ってことですかね?
|
- 関数型プログラミング言語Haskell Part25
976 :デフォルトの名無しさん[sage]:2014/07/25(金) 20:36:28.81 ID:bB6D8lBK - >>973
>>975 Vector a を [a] に変換して使うのには(遅延評価のおかげで)定数オーダーの時間コストしかかからないけど、 オブジェクト指向で言うところの具象オブジェクトAを具象オブジェクトBに変換するのには、オブジェクトAの抱えてるデータをコピーしなければならないから、時間・空間の両面でコストがかかる。 オブジェクト指向ではインターフェイス(純粋仮想クラス)を使うことでこの問題を解決することが出来る。 できるだけ抽象に依存すべき、っていうのは正しい。 オブジェクト指向での設計は、まずインターフェイスを作ってからそれを実装する、って流れがベターだけど、 Haskellでの設計は、型クラスを最初に作るのがよい、ってわけじゃないと思う。
|
- 関数型プログラミング言語Haskell Part25
977 :デフォルトの名無しさん[sage]:2014/07/25(金) 20:56:09.87 ID:bB6D8lBK - Haskellでの設計、ってみんなどうやってるんだろう?
自分は 対象の問題領域を大まかに定めて、 ・その問題を表現できる操作群を考える ・その操作群において閉じている代数的データ型Hogeを作る ・操作が満たすべきルール、Hoge則を考える パフォーマンスが低いなって思ったら、Hoge則を外れないように、Hoge型の定義と操作の定義を修正する。 あるいは、 対象の問題領域を別の問題領域に帰着させる。リストとか、ツリーとか。グラフとか。 んで、がんばって糊を作る。
|
- 関数型プログラミング言語Haskell Part25
980 :デフォルトの名無しさん[sage]:2014/07/25(金) 21:21:46.57 ID:bB6D8lBK - >>978
型クラス≒(オブジェクト指向の)インターフェイス ととらえています。 既存のデータ型を型クラスのインスタンスにできるけど、それが何の意味を持つのかがよくわかりません。
|
- 関数型プログラミング言語Haskell Part25
983 :デフォルトの名無しさん[sage]:2014/07/25(金) 21:52:08.58 ID:bB6D8lBK - >>982
なんか理解のレベルに差がある感じですね… 俺は今まで愚直に 抽象=インターフェイス,型クラス と考えてたけど、言われると確かに、抽象的なモデルをオブジェクト指向で具象クラスにすることはよくありますね。関数型では、"対応関係"をインデックスで表現することも関数にすることも、Mapにすることもあるし。 なるほど。
|
- 関数型プログラミング言語Haskell Part25
985 :デフォルトの名無しさん[sage]:2014/07/25(金) 23:19:10.20 ID:bB6D8lBK - >>984
> 型クラスは静的型付けに特化した機能 そうなんですか?
|