関数型言語でのデザイン手法

オブジェクト指向でのOOA,OODみたいなものが関数型言語でもあるか
58
Takashi Miyamoto @tmiya_

オブジェクト指向はOOPの他にOOA,OODなど上流工程向けの方法論があるのだが、関数型言語についてもFPの他にFA,FDがあるのだろうか?誰か適切な論文/教科書とか知りませんか?

2010-05-30 09:26:38
Ikegami Daisuke @ikegami__

探してみます。でも強い型付けか、弱い型付けかで、まるっきり異なるでしょう RT @tmiya_: オブジェクト指向はOOPの他にOOA,OODなど上流工程向けの方法論があるのだが、関数型言語についてもFPの他にFA,FDがあるのだろうか?誰か適切な論文/教科書とか知りませんか?

2010-05-30 09:30:40
Ikegami Daisuke @ikegami__

@tmiya_ 個人的な感想ですが、強い型付けのプログラミング言語で開発を行う場合、実装の前に、全体の型と部品の型を決めてつくります。だから、型に関する洞察が必要でしょう。逆に、弱い型付けのプログラミング言語では、型を気にせずに、どんどん分割統治で仮実装/コメントすると思います

2010-05-30 09:33:40
Ikegami Daisuke @ikegami__

理論があるかというと、型付けの強いプログラミングでは "Type-level programing" という話があります。Haskell だと、これ : http://bit.ly/aJwFlc

2010-05-30 09:36:05
Ikegami Daisuke @ikegami__

型付けの弱い関数プログラミングは面白いけど、設計とかするひといるのかなー(とかいう)。Emacs-Lisp は実装を思いついたらそれを書いて eval のくりかえしですね、ぼくは。

2010-05-30 09:41:57
Takashi Miyamoto @tmiya_

ありがとうございます。Haskell, OCamlみたいな強い型付け言語を想定しています。OOだと例えば名詞をクラスに動詞をメソッドにみたいな方法論がありますが、関数型にもそういう分析手法はあるのかなぁ、と。クラスは型に置き換え? QT @ikegami__ 探してみます。

2010-05-30 09:47:29
Ikegami Daisuke @ikegami__

関数プログラミングは 1. 小さな部品にわけて合成(分割統治) 2. 高階関数による抽象化 3. ジェネリックプログラミング(マクロとか) が、設計の三大要素ですかね(あくまで個人的な感想)

2010-05-30 09:47:51
Ikegami Daisuke @ikegami__

HaskellやOCamlでは一級市民が関数ですので(データも引数を持たない関数)、関数の命名は、データなのか、データ変換なのか、はたまた関数を受け取ってひねるなどのアクション、というように何をするのかで決めるのだと思います。名前を。

2010-05-30 09:49:48
Takashi Miyamoto @tmiya_

エンタープライズ系の人々に関数型言語を受け入れさせる(その必要があるかは別として)場合には、顧客業務の分析手法みたいなものが必要だろうなぁ、と。

2010-05-30 09:50:27
Keigo Imai @keigoi

.@ikegami__ @tmiya_ 関数型のアーキテクチャといえば、GoogleのMapReduceを思いつきます。ああいう風に関数型の設計というのが他にもないかなぁと思っています

2010-05-30 09:52:28
おしいれのぼうけん @osiire

はい、formal method的な感じです。そういう方向の適用範囲を広げていくことが望ましいと思っています。@psychokinetica formal method 的なお話ですか?

2010-05-30 10:15:01
Takashi Miyamoto @tmiya_

Design Patternみたいな話だと、FPのパターンマッチがあればvisitor patternいらないみたいな話は幾つかあるんですが。 @keigoi @ikegami__ ああいう風に関数型の設計というのが他にもないかなぁと思っています

2010-05-30 10:55:20
Keigo Imai @keigoi

.@tmiya_ ごくプログラミング寄りの話ですね。compositeもinterpreterも要らんですよね。逆に、継承みたいなことを表現しようとしたらpolymorphic variantとか型クラスみたいなのが要ると。 型クラスのためのデザインパターンはアリかも?

2010-05-30 11:29:45
Keigo Imai @keigoi

expression problemの解みたいな話こそが、真にパターンと呼べると思うのだけど。

2010-05-30 11:41:55
Keigo Imai @keigoi

OCamlではもちろんpolymorphic variant使う。しかしHaskellでexpression problemを解くって?と思い軽くググったら"Haskell is not not ML"というのがヒットしたので読んでる http://bit.ly/38xMEk

2010-05-30 12:12:42
Keigo Imai @keigoi

やっぱりalgebra of programmingは何やるにしても読んでおかないと駄目ね。がんばろう

2010-05-30 12:16:47
Keigo Imai @keigoi

それ構造的サブタイピングやないのか! fundepsもなし、型推論はどうなるのか

2010-05-30 12:23:36
Jacques Garrigue @garriguejej

@keigoi expression problemならocamlが最強でしょう。解き方もいっぱい。http://j.mp/aib4hb

2010-05-30 15:14:55
おしいれのぼうけん @osiire

型設計プログラミングができるのは静的型付け言語だけ。型無しや動的型付け言語ではむり。

2010-05-30 17:03:51
おしいれのぼうけん @osiire

functorをfunctorでガシガシ適用していると何をしているのか時々わからなくなる。

2010-05-30 17:06:49
mzp @mzp

ちょっと前にTwitter上であった「関数型言語におけるデザパタ」の議論を追おうと思ったら、Togetterにまとめてあったでござる。やったね。: Togetter - まとめ「関数型言語でのデザイン手法」 http://bit.ly/bOsomD

2010-05-30 17:50:25
mzp @mzp

「タプルが3項組を越えそうになったらレコードに置き換えよう」「再帰を書いたらfoldで書き直せないか検討しよう」「やめどきが分からない計算は無限リストで表現して後でnthしよう」あたりを思いついたけど、これはどちらかというとスタイルの話か。 > 関数型言語のデザパタ

2010-05-30 17:55:00
Keigo Imai @keigoi

もちろん読みました! (リンクがおかしいので再投稿) RT @garriguejej @keigoi expression problemならocamlが最強でしょう。解き方もいっぱい。http://bit.ly/2RHy

2010-05-30 21:36:11
mzp @mzp

ボクも読みました! すばらしいテクニックだと思います。 RT @keigoi: もちろん読みました! RT @garriguejej @keigoi expression problemならocamlが最強でしょう。解き方もいっぱい。http://bit.ly/2RHy

2010-05-30 21:49:51
mzp @mzp

http://bit.ly/9LNn1g は就活で任天堂の試験を受けにいく電車の中で読んでた記憶がある。今考えると試験勉強しとけよ、って話ですよね

2010-05-30 21:52:04
1 ・・ 7 次へ