- 1 名前:デフォルトの名無しさん mailto:sage [2005/09/30(金) 01:34:05 ]
- C/C++>>>>(越えられない壁)>>>Haskell
- 543 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 03:24:30 ]
- >>543
- 544 名前:デフォルトの名無しさん mailto:sage [2007/05/31(木) 03:25:27 ]
- >>544
- 545 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:16:38 ]
- ふつケル読んだけど、後半が理解できなかった。マジで難しい。
言語の設計の根っこがCPUの挙動にぜんぜん当てはめられていないからか、 俺には宇宙語だよこりゃ…。
- 546 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 21:36:33 ]
- 当てはめられないかもしれないが
C言語もCPUの挙動に当てはめられるかというとそうでもない そもそもソフトウェア設計用だからな
- 547 名前:偉そうに語ってみる mailto:sage [2007/08/23(木) 01:19:28 ]
- >545
後半、モナドやWikiエンジンの開発のところは急に難易度が上がっているので、 それより前の部分を何度も読んで動かしていると感じがつかめてくると思います。 あとは、メモリとかスタックとか、効率のことを考えるのをひとまずやめて プログラムでどういうことをやりたいかを考えてみるのはどうでしょうか。
- 548 名前:デフォルトの名無しさん mailto:sage [2007/08/23(木) 02:46:56 ]
- おまえ偉そうだぞ
- 549 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 01:14:22 ]
- えっへん
- 550 名前:デフォルトの名無しさん mailto:sage [2007/08/24(金) 09:02:27 ]
- つ[龍角散]
- 551 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 13:01:13 ]
- >>550
龍角散は「ゴホン!」だろ エヘン虫にはヴィックスドロップ。
- 552 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 09:39:44 ]
- 高度すぎてわからなかった^^;;
- 553 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 23:11:49 ]
- クマーが圏論を語ってる、、、。
- 554 名前:デフォルトの名無しさん mailto:sage [2007/09/15(土) 23:12:36 ]
- MLと比べてどうなの?
- 555 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 21:16:41 ]
- クマー落ち防止保守
- 556 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 02:30:14 ]
- ttp://2ch.bluesvirus.com/reserve/view/172
- 557 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 16:25:03 ]
- >>10
頭の中に同型対応になるものがたくさんあるってことだから 少なくともアホじゃないだろう
- 558 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 22:27:08 ]
- >>557
あの手の輩は「これは非直感的だからウンコ」て台詞の方が圧倒的に多いよ
- 559 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 00:28:42 ]
- 何この良スレ
スレタイでスルーしてて後悔した
- 560 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 21:30:08 ]
- もっと活用できたらいいんだがなぁ・・・
- 561 名前:560 mailto:sage [2007/11/20(火) 21:31:14 ]
- >>560
560はスレのことね
- 562 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 07:32:07 ]
- sage
- 563 名前:デフォルトの名無しさん mailto:hage [2007/12/23(日) 03:41:42 ]
- ★
- 564 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 11:22:42 ]
- クマさんのArrow講義マダ?
- 565 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 13:33:30 ]
- arrow って命令型言語的なフローを書くための機構なんだよね?重要なの?
- 566 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 12:23:36 ]
- ぶっちゃけ>>8が理解できなくて劣等感にさいなまれた。
でもHaskellをかじったら理解できた。 その経験からつまずいた点を書いてみる。 qsort [] = qsort (x:xs) = とqsortの定義が2つ並んでいるのが理解できなかった。 これはHaskellの階乗を見て場合分けだと理解した。 fact 0 = 1 fact n = n * fact (n - 1) int fact(int n) { if (n == 0) return 1; else return n * fact(n - 1); }
- 567 名前:566 mailto:sage [2007/12/29(土) 12:45:46 ]
- []が意味不明だった。
配列を[1, 2, 3]と書くと知って初めて空配列だと理解できた。 (x:xs)が意味不明だった。 他の部分で配列はすべて[]なのにここだけ()なのに違和感があった。 ()はfact(n-1)のn-1と同じでx:xsが一つの要素だとくくっていると解釈した。 この辺はC言語だとコンマで区切るような所が空白で区切られているため 意識しないといけない部分だというように感じた。 そして++が配列の結合だと覚えた上で、 x:xs とはxが要素でxsが配列で [x] ++ xs という意味だと解釈した。 qsort elts_lt_x ++ [x] ++ qsort elts_greq_x の構文木が初見でイメージできなかった。 演算子++の優先度が高いため A ++ B ++ C と3つの配列が結合していると解釈した。 C言語風にqsort(elts_lt_x) ++ [x] ++ qsort(elts_greq_x)と書いてあれば 初見でも自力で解釈できたかもしれない。 >>10のいうように自分の知っているC言語に近いかどうかというバカの壁がある。 だからと言ってC言語を知らない人の方が先入観がなく理解しやすいとは思えないが。
- 568 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 12:55:10 ]
- >>567
[1,2,3]は配列じゃなくてリスト 配列とリストの違いはググレ
- 569 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 12:57:10 ]
- 文法を知らなきゃ理解できんのは当然だろ
それから、細かいが、 >演算子++の優先度が高い 低い、の間違いだよな?
- 570 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 12:58:12 ]
- >>10
「自分が知ってるものと似てる」=メタファ 「見たら使い方がわかる」=アフォーダンス
- 571 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 12:58:27 ]
- 配列とリストなんて計算量が違うだけじゃん。
初心者は気にしなくていいよ。
- 572 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 13:00:14 ]
- >>571
だったらお前はmalloc,freeひたすら繰り返してろ
- 573 名前:566 mailto:sage [2007/12/29(土) 13:01:50 ]
- >>569
小学校で1+2*3のとき+より*の優先度が高いと習ったと記憶していますが これはひょっとして大間違いですか?
- 574 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 13:03:26 ]
- >>573
どこに+と*が出てきてるんだ?
- 575 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 13:05:15 ]
- >>573
もし(++)の優先度が関数適用より高いなら、 qsort elts_lt_x ++ [x] ++ qsort elts_greq_x は、 qsort (elts_lt_x ++ [x] ++ qsort) elts_greq_x と解釈されるはずだよ。
- 576 名前:566 mailto:sage [2007/12/29(土) 13:07:20 ]
- >>574
Haskellとは関係なくて「優先度が高い」という言葉の定義の確認で、 +と*を比較すると*が優先度が高いという言い回しが正しいかどうかです。 >>575 すみません、それ以前のレベルで、 優先度という言葉の定義があやふやでした。 よく考えたら++の優先度が低いという意味が理解できました。 1+2*3で+は後で計算していますがqsortでの++もそれと同じですね。 混乱してしまってごめんなさい。
- 577 名前:566 mailto:sage [2007/12/29(土) 13:14:41 ]
- >>568
ご指摘ありがとうございます。 日本語のHaskell本を2冊とも買ったのでよく勉強します。 >>569 それはそうなんですが、自信たっぷりな>>8の書き方を見て、 普通の知能の人間なら文法も含めて推測できるはず それができない俺はアホだ。 という劣等感を感じたんです。 色々とつまずきましたが、読み方が分かるようになると、 Haskellのインデントの文法はとても美しいと感じられるようになりました。 今まで好きだったPythonが糞に思えてきました。
- 578 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 13:18:42 ]
- >>577
haskellのインデント(レイアウトのことかな)が美しいと思うのは自由ですが、 ちょっと偉い人の間では嫌っている人もかなりいます
- 579 名前:566 mailto:sage [2007/12/29(土) 13:26:18 ]
- >>578
はい、レイアウトのことです。 もしお手数でなければ参考までに嫌われている理由をお聞きしたいです。 Pythonのインデントだとコピペの際にずれを直すのが鬱陶しいと思いました。 C言語だとずれていても無視できて、後で自動整形できますからね。
- 580 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 14:24:52 ]
- >>579
たとえばcaseの中にcaseがあって、それがレイアウトで書かれていると、 インデントが少しずれただけで全く意味が異なる式になってしまうことがあったりするから。 だからhaskellにはブロックで書くこともできるからレイアウトを使わなくても良い。 でもレイアウトが崩れても一つの解釈しかできないところならレイアウトで書いたほうがきれいかもしれないね。
- 581 名前:566 mailto:sage [2007/12/29(土) 20:28:26 ]
- >>580
なるほど。 レイアウトはExcelで書くのに向いているかもしれないと思いました。 そういえば副作用がない関数型のイメージをワークシートに例えた解説を どこかで読んだのを思い出しました。 ところでqsort elts_lt_x ++ [x] ++ qsort elts_greq_xの演算子の件ですが、 単純に左から右にパースして優先度は関係ないのではないかと気付きました。 静的に型付けされているため、qsortの引数は1つしかないと決められるからです。
- 582 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 21:35:33 ]
- >>581
ヒント: カリー化
- 583 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 21:38:18 ]
- 関数型言語初心者はマジでMLかOCamlから始めろよ
いきなりHaskellやったってわからねーだろ。
- 584 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 22:04:56 ]
- つ「Haskell The Craf tOf Functional Programming」
↑大学の教科書になってるHaskell使ったプログラミング自体の入門書だから いきなりやってもわかるようにできてる この本だとモナドが最後のほうになるまででてこないから ふつうのHaskellプログラミングと併読してもいいやも
- 585 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 22:16:31 ]
- SML とか OCaml は(頑張れば宣言的に書く事も可能な)手続き型言語だからね
「副作用も何のその。非正格性なんて、速度を犠牲にしてまで要らないよ。 主題はメタランゲージなんだから、関数型言語なんてレッテルを貼らないでおくれ。」 という世界。
- 586 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 23:51:39 ]
- >>585
というか、CAML開発の時点で「妥協の産物」と開発者自らが語っている。 その後継のOCAMLでレッテル貼る貼らないとか以前の問題。 その点、SMLはHaskellと同じで純粋培養した関数型っていう感じがする。 NewJergyとかいいな。 でもあえてGauchを薦めてみるw Lisp/Scheme Familyは楽しいぞ。古きを尋ねて新きを知るという感じかな。
- 587 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 00:13:17 ]
- SchemeならMonaがアツい
OS開発も一緒に楽しめて一石二鳥
- 588 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 00:24:56 ]
- >>586
×Gauch ○Gauche
- 589 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 00:27:19 ]
- >>587
Reading Gaucheなんてのをやってるな ttp://wiki.monaos.org/pukiwiki.php?Reading%20Gauche
- 590 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 00:29:24 ]
- Scheme は R6RS が好きになれん...
- 591 名前:566 mailto:sage [2007/12/30(日) 00:45:12 ]
- >>582
qsortが単独で切り出されてC言語でいう関数ポインタみたいなものとして 扱われないという事実をどう解釈するかということでしょうか? 確認実験をしてみました。 inc n = n + 1 add a b = a + b inc 2 + inc 5 → 9 (+がincより低い) add inc 2 inc 5 → エラー (addとincが同列のため) add (inc 2) (inc 5) → 9 (明示的に差をつける) もし++が同列なら以下の記述を強制されそうですね。 (qsort elts_lt_x) ++ [x] ++ (qsort elts_greq_x) 括弧なしのポーランド表記とは違うのだと理解しました。 >>583 はい、しょっぱなのクイックソートからつまずきました。 実はHaskellの前に英語の本を買ってF#をやっていたんですが、 C#とパラダイムが違うという実感が湧きませんでした。 C# 3.0でラムダ式を使えばF#いらないなー、みたいな。 そんなとき、Haskellのレイアウトが美しいと気付いたんです。
- 592 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 00:53:15 ]
- 関数型を使うならcurryingとmonadぐらいは理解してないと使いこなせないんじゃないかな。
- 593 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 01:02:58 ]
- 式が二つ並んでいたら関数適用になるってことはわかってるかな
C っぽく書くと inc 2 + inc 5 → +(inc(2))(inc(5)) add inc 2 inc 5 → add(inc)(2)(inc)(5) add (inc 2) (inc 5) → add(inc(2))(inc(5))
- 594 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 01:38:25 ]
- >>591
あなた、一度でもリファレンスに目を通しましたか? 最初から最後まで一読してから、わからないことがあれば質問してください。
- 595 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 01:39:04 ]
- 幸運なことに、リファレンスは日本語化されています。
- 596 名前:566 mailto:sage [2007/12/30(日) 01:41:46 ]
- お騒がせしてすみません。
自分にHaskellは無理のようです。 色々と教えていただいてありがとうございました。
- 597 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 01:48:44 ]
- アンチを増やしてどうするw
- 598 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 01:51:30 ]
- この程度で挫折するようなカスのことなぞ知らん
- 599 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 01:52:27 ]
- rubyコミュの二の舞はごめんだからな。
- 600 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 02:05:39 ]
- Haskellユーザが増える→Haskellコミュの質低下→Haskellユーザ全体の技術力低下→オブジェクト指向化→Haskellはオブジェクト指向と親和性が低い→Haskellはダメ言語→Haskellコミュ衰退→乙
- 601 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 02:07:20 ]
- Haskell衰退の他のシミュレーションよろ
- 602 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 02:10:02 ]
- >>601
お前566だろ? さっそく門前払いを逆恨みか
- 603 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 02:15:32 ]
- >>600
オブジェクト指向化したのがConcurrent Cleanじゃね?
- 604 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 02:24:04 ]
- 関数型初心者はカリー化・モナド・遅延処理ぐらいまで理解してから始めてホスイ。
Cみたいなeager evaluationとHaskellみたいなLazy evaluationでは違うのだよ。
- 605 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 02:24:39 ]
- >>603
それは勘違い
- 606 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 02:24:46 ]
- >>603
いやOZだ。
- 607 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 02:33:52 ]
- 急にスレが伸びてると思ったら基地外が暴れてたのか
- 608 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 02:52:45 ]
- 冬だな
- 609 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 09:30:40 ]
- スレタイどおりの糞オナニー言語ですな
- 610 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 10:47:28 ]
- rubyは原理主義者がウザい
- 611 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 12:03:29 ]
- >>610
原理主義って・・・もともとrubyは学者でもない一プログラマが実用主義の下に作った言語だろ? rubyの原理主義とはなんだ?
- 612 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 12:04:34 ]
- 自分の胸に手を当ててみ
- 613 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 12:05:09 ]
- 貧乳がありました
- 614 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 12:06:55 ]
- ツルペタょぅι゛ょキタ━━━━(゚∀゚)━━━━!!!!
- 615 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:00:47 ]
- >>585
>「副作用も何のその。非正格性なんて、速度を犠牲にしてまで要らないよ。 >主題はメタランゲージなんだから、関数型言語なんてレッテルを貼らないでおくれ。」 非正格性=non-Strictness=Lazyness わざわざ非正格性なんて判りにくい言い方をするのモナーw
- 616 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:06:28 ]
- 専門用語使うのがかっこいいと思ってる初心者さんなので許してあげてください。
- 617 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:15:22 ]
- 「正格性」の反対語なんだぜ!って感を表現したかったんじゃないの
怠惰性とか遅延性って表現はなんか違和感が
- 618 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:26:53 ]
- そんなどうでも良い所を突っ込まれるとは思わなかった…
- 619 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:27:19 ]
- 電子工学から入った俺にしてみれば、副作用なしの関数の方がはるかに直感的だったよ。
習い始めのころでもC言語は別に難しくはなかったが、新しいことを学ぶ気持ちだった。 関数型言語で初めて今まで培った勘が役に立った感じがする。 本来のオブジェクトって言ったら抵抗とかコンデンサとかみたいに副作用がないもののはずなんだがなぁ。 なんでオブジェクト指向って言葉が根付いたのが手続き型言語の世界なんだろう。 いや、歴史的経緯は知ってるけど、納得できない。
- 620 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:39:19 ]
- >>618
研究者の端くれなら尚更判りやすい表現を心がけるべきかと
- 621 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:41:16 ]
- >>620
なんで研究者だと思うんですか?
- 622 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:52:21 ]
- >>619
>なんでオブジェクト指向って言葉が根付いたのが手続き型言語の世界なんだろう。 関数型ではファンクターで抽象化できるからオブジェクト化が必要とされることがあまりなかったから。 手続き型では抽象化の方法がオブジェクト化に求められたが、これを関数型にポートする際にオブジェクト指向の関数型が必要とされた。 手続き型で蓄積された資産がすごい勢いでオブジェクト指向の関数型OCAMLにポートされつつあるからM$もF#を出す気になった。 こういった資産のひとつがOCAMLのocsigen。OCAML版Ruby on Railsのパクリ。 他にも、GaucheのKahuaもそれ系。 これらが関数型の世界でどんな進化をするのか興味深い。
- 623 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 17:58:15 ]
- F#はファンクターが無い訳だがw
- 624 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:01:39 ]
- Apple=>Ruby/Objective-C
Micro$oft=>F#/Visual-??? Unix=>Gauche/Haskell/etc
- 625 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:03:43 ]
- >>624
いいえ、 Unixは終焉までずっとC言語です。
- 626 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:09:22 ]
- >>625
Cはどのプラットフォームでも使うアセンブラ的なポジションになってると思う。
- 627 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:16:40 ]
- 妥協の産物=>Perl/Ruby/OCaml
理想主義者=>Squeak/Haskell 現代の化石=>C/Lisp/Fortran/COBOL
- 628 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:21:59 ]
- COBOL?まだ使ってるところあるの?もう全部Javaになったかと思った。
Fortranは物理の世界では現役バリバリです。 Lisp・・・うーん
- 629 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:29:20 ]
- 市役所勤務の知り合いがいうには
優秀なやつはシステム課に回されてコボルやらされるらしいですよw
- 630 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:30:36 ]
- Perl<=Larry Wall
Ruby<=Matz OCaml<=INRIA Squeak/Smalltalk<=Xerox Park(Allan Kay) Haskell<=Bastiaan Heeren、Daan Leijen、Arjan van IJzendoorn C<=K&R Scheme<=Guy Lewis Steele Jr.、Gerald Jay Sussman Fortran<=John Warner Backus COBOL<=CODASYL
- 631 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:33:05 ]
- つ「お題 プログラミング言語の父と呼ばれるのは誰?」
- 632 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 18:57:01 ]
- チャールズ・バベッジ
- 633 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 20:19:25 ]
- 階差機関(difference engine)は世界初のプログラム可能な計算機と云われています。
では、どのようにプログラムしたのでしょう?
- 634 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 20:34:42 ]
- >>631
まつもとゆきひろ
- 635 名前:デフォルトの名無しさん [2007/12/30(日) 21:54:11 ]
- 超良スレ保守
- 636 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 23:14:14 ]
- プログラミング言語の父といえばシェーンフィンケルとHaskellだろう。1920年代のコンビネータ論理(Combinatory Logic)だ。
シェーンフィンケルが考案し、Haskellが開発した。 その仕事が1930年代のチャーチとクリーネによるメタ言語としてのλ算法の業績につながった。 そしてその後1954年にIBMのバッカスが最初の高級言語FORTRANを作る。 こういう歴史の直系だから、言語としてのHaskellが研究志向が強いというのもうなづける。
- 637 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 23:22:30 ]
- カリー・ハワード同型対応なくしてプログラミング言語など存在し得ない。
- 638 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 23:40:29 ]
- >>619
そもそも、プログラミングパラダイムとしてのオブジェクト指向というのが 「状態と手続きを一纏めにしてカプセル化する」という動機で導入されたものだから。 本質的に「状態」を持たない関数型の世界にオブジェクト指向が入り込む余地はそもそも無い。 あと、細かいことだが >本来のオブジェクトって言ったら抵抗とかコンデンサとかみたいに副作用がないもののはずなんだがなぁ。 コンデンサってのは電荷をためて(状態変化)それを放電する(これも状態変化)ものでないかい? 微分方程式ばかり相手にしてると忘れがちになりかねないけれども、コンデンサは確かに「状態」を持つよ。 抵抗のことはよく分からんが。 >>622 >これらが関数型の世界でどんな進化をするのか興味深い。 「純粋関数型」を標榜するHaskellとはオブジェクトは相容れないし、 OCAMLでもコード中、オブジェクト機能を使ってる部分は、「関数型っぽく」はならないだろ? オブジェクトが関数型の世界でどうなるか、という興味は無意味だと思うね。 オブジェクトの世界と関数型の世界とがどう棲み分けて共存していくか、ならわかるが。
- 639 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 23:59:13 ]
- >>638
オブジェクト指向と関数型が共存することでこういったことが出来ればいいなぁという要求は出てくると思う。 これまでの言語の発展だってそういうことから出てきてる。 この部分は相容れないけどこれは一緒にするとこんなことが出来るというのが実装上の工夫のポイントだと思う。 君には無意味かもしらんが。
- 640 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 00:35:57 ]
- Y コンビネータ (fixpoint のことを Y コンビネータと呼びます。)
data X = PsiInv (X -> (Int -> Int)) psi :: X -> (X -> (Int -> Int)) psi (PsiInv f) = f fixpoint :: ((Int -> Int) -> (Int -> Int)) -> (Int -> Int) fixpoint g = let h y = g (\x -> psi y y x) in h (PsiInv h) f :: (Int -> Int) -> (Int -> Int) f g n = if n==0 then 1 else n * g(n-1) factorial :: Int -> Int factorial = fixpoint f -- factorial 10 == 3628800
- 641 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 01:48:19 ]
- >>638
>そもそも、プログラミングパラダイムとしてのオブジェクト指向というのが >「状態と手続きを一纏めにしてカプセル化する」という動機で導入されたものだから。 ハァ?www
- 642 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 01:51:09 ]
- >>638
>「状態と手続きを一纏めにしてカプセル化する」という動機で導入されたものだから。 どーでもいいがデータ構造とアルゴリズムを纏めるんじゃなかったかな? 状態云々は結果的にそういうプログラミング手法が出てきただけで本質的にはあんまり関係ないと思う。 まあHaskellの代数的データ型は型とデータ構造を対応付けて 型についてアルゴリズムを書くから、データ構造とアルゴリズムはほぼ完全に分離してるといえるかもしれない。 これはこれで結構分かりやすくていいシステムだとい思うんだけど、 たとえば型クラス便利だけどインターフェイスみたいにガンガン作る気にならないっていうか、 そういう細かいあたりがめんどくさくなってる気がする。 そういうのをオブジェクト指向で何とかできないものかとか思ったり。これは俺の浅知恵だけどね。 あと、細かいことだが >コンデンサってのは電荷をためて(状態変化)それを放電する(これも状態変化)ものでないかい? それは「副値」的なパラメータが存在するだけで実際にそれを「副作用」として実装するかはプログラマ次第では? というかHaskellだったら普通にモナドで表現できるもんだと思う。 実世界での対応で考えると、ある力を外力と考えることも出来るし、より大きな系の内力と考えることも出来る程度の違い。 状態が存在するかどうかはどういう切り口で物事を見るかに依存している、と思う。
- 643 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 23:00:40 ]
- オブジェクト指向と関数型が共存できないという風評は日本だけ。
どこが発信源かは知らないがこういうことが普通に受け容れられるようになったんだなぁ。 ゆとり世代が言ってるんだろうか?
|

|