- 1 名前:デフォルトの名無しさん mailto:sage [2005/09/30(金) 01:34:05 ]
- C/C++>>>>(越えられない壁)>>>Haskell
- 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 ]
- オブジェクト指向と関数型が共存できないという風評は日本だけ。
どこが発信源かは知らないがこういうことが普通に受け容れられるようになったんだなぁ。 ゆとり世代が言ってるんだろうか?
- 644 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 00:04:56 ]
- プログラミングに関する珍発言がまかり通るのは、日本では昔からの伝統です。
C言語が関数型言語であるとか、インタプリタはちょっとずつコード生成して実行する 処理系であるとか。
- 645 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 00:23:29 ]
- 後者は国の問題じゃなくマーケティングの問題でそ
- 646 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 00:47:14 ]
- 関数型のCAMLがオブジェクト指向を取り入れてObjective CAMLになったように、VBがλ算法を手始めに関数型を取り入れても不思議はないと思う。
VBの互換性を問題にしてる人は参照透過性とか副次作用とかを気にしてるんだろうか。OCAMLだってあまり考えずに代入とか使えば問題があるのは同じだと思うけど。 むしろOCAMLerがVBを使うときに便利だと思うけどなぁ。
- 647 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 00:49:18 ]
- それとも、OCAMLとHaskellでは全く違うということを問題にしてるんだろうか。
- 648 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 00:55:06 ]
- 日本以外ではマルチパラダイムでお祭なのに
>オブジェクトが関数型の世界でどうなるか、という興味は無意味だと思うね。 >オブジェクトの世界と関数型の世界とがどう棲み分けて共存していくか、ならわかるが。 こういうことを周りに認めさせようとする日本人は多いんだろうなぁ。
- 649 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 15:43:07 ]
- プログラミングする人はいっぱいいても言語を考える人が少ないんだよ
- 650 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 16:00:40 ]
- まるちぱらだいむだうゎあい、って日本で竹内先生とかが頑張ったのは
世界の先を行ってたと思うんだけどな。 旧帝大-早慶-電電&電機メーカ研究所レベルの研究の浸透拡散がうまく いかんのはどこかに構造的な問題があるんかね?
- 651 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 16:07:41 ]
- >>648
別にお祭りというほどでもありませんが。 単に研究ネタがなくなったから今主流のオブジェクト指向と組み合わせてみよう、 って思ってるだけじゃないの。
- 652 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 16:11:25 ]
- >>648
> こういうことを周りに認めさせようとする日本人は多いんだろうなぁ。 特定の環境にこり固まって極めちゃった悪い意味での職人型なプログラマとかにありそう。 そういう先輩が職場にいて、適切なフォローを入れる人がいなかったりすると、新人は悲惨だね。
- 653 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 16:23:02 ]
- >>640
SKIコンビネータのことをまとめてるHPを発見したので報告。 ttp://ls-al.jp/blog2/item_343.html ソースコードはこっち。 ls-al.jp/blogarchives/CompileToCombinators.hs なぜかYコンビネータはないけどY=SLLだからすぐに作れるね。
- 654 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 16:43:45 ]
- >>638みたいなMythに対しては古くからこういう有名な言葉があるんだが、
"Doing encapsulation right is a commitment not justto abstraction of state, but to eliminate state oriented metaphors from programming." Alan Kay, Early History of Smalltall
- 655 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 16:44:47 ]
- ○Smalltalk
×Smalltall
- 656 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 17:12:45 ]
- Haskellはオブジェクト指向じゃないけど型クラスを使えるから準オブジェクト指向関数型言語とでも言えるのかな。
「型クラス」と「型構築子クラス」でオブジェクト指向っぽく使えて、副作用がないようにモナドやその一般化のアローが使える。 オブジェクト指向と関数型が共存出来ないと言いながらHaskellを使っている人は分裂気味なんじゃないでしょうかね。
- 657 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 17:23:03 ]
- いや、Type Class と、オブジェクト指向の「クラス」は別物な訳だが
- 658 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 17:26:07 ]
- >>657
だから『準』と言っている訳だが
- 659 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 17:30:37 ]
- 「準」とかで片付けるとかどんだけwwwwwww
ばか
- 660 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 17:38:26 ]
- で>>659さんは別物のクラスだとどういうことが言えると言いたい訳かな?
ご高説を是非御拝聴いたしましょう。
- 661 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 17:44:34 ]
- どんだけwwwwwばか
関数型とオブジェクトなんざ共存出来ねんだよ。 無意味、無意味。無駄無駄無駄wwwwww
- 662 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 17:47:28 ]
- Haskellerはオブジェクト指向もわからないばかということですか。ああそうですか。
- 663 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 17:49:37 ]
- 残念な展開だね。
- 664 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 17:57:51 ]
- >>656
arrow使いにくい まるでbrainf*ckみたいに見える 結局は普通に書いたほうがきれいだ
- 665 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:13:14 ]
- 「普通」とかで片付けるとかどんだけwwwwwww
ばか やっぱHaskellerってのは池沼だね。
- 666 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:20:23 ]
- -- A Simple Brainfuck Interpreter
import System.Environment -- Parser data Command = Inc | Dec | Next | Prev | Put | Get | While [Command] deriving (Show, Eq) type Program = [Command] parse :: String -> Program parse s = program where (program, "") = parse1 s parse1 :: String -> (Program, String) parse1 "" = ([], "") parse1 (']':xs) = ([], xs) parse1 ('[':xs) = (While cmds1 : cmds2, rest2) where (cmds1, rest1) = parse1 xs (cmds2, rest2) = parse1 rest1 parse1 (x:xs) = (parse2 x, rest) where (cmds, rest) = parse1 xs parse2 :: Char -> Program parse2 '>' = Next : cmds parse2 '<' = Prev : cmds parse2 '+' = Inc : cmds parse2 '-' = Dec : cmds parse2 '.' = Put : cmds parse2 ',' = Get : cmds parse2 _ = cmds
- 667 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:22:21 ]
- type Tape = ([Char], Int)
tape0 = (['\NUL', '\NUL'..], 0) :: Tape getCell :: Tape -> Char -- Get value of current position getCell (cs, i) = cs !! i setCell :: Tape -> Char -> Tape setCell (cs, i) c = (take i cs ++ (c : drop (i + 1) cs), i) inc, dec, next, prev :: Tape -> Tape inc t = setCell t (succ $ getCell t) dec t = setCell t (pred $ getCell t) next (cs, i) = (cs, i + 1) prev (cs, i) = (cs, i - 1)
- 668 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:23:18 ]
- type Status = (Program, Tape, [Char], [Char])
step :: (Tape -> Tape) -> Status -> Status step f (c:cs, tape, inp, outp) = eval (cs, f tape, inp, outp) eval :: Status -> Status eval (Get : cmds, tape, (i:inp), outp) = eval (cmds, setCell tape i, inp, outp) eval (Get : _, _, "", _) = error "EOF" eval s @ (Put : _, tape, _, _) = (cmds, tape1, inp, getCell tape : outp) where (cmds, tape1, inp, outp) = step id s eval s @ (Inc : _, _, _, _) = step inc s eval s @ (Dec : _, _, _, _) = step dec s eval s @ (Next : _, _, _, _) = step next s eval s @ (Prev : _, _, _, _) = step prev s eval s @ (While cmds : cmds1, tape, inp, outp) = while (getCell tape) where while '\NUL' = step id s while _ = (cmds2, tape2, inp2, outp1 ++ outp2) where (_ , tape1, inp1, outp1) = eval (cmds, tape, inp, outp) (cmds2, tape2, inp2, outp2) = eval (While cmds : cmds1, tape1, inp1, outp1) eval ([], t, i, _) = ([], t, i, "")
- 669 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:24:49 ]
- run :: Program -> [Char] -> [Char]
run cmds inp = outp where (_,_,_, outp) = eval (cmds, tape0, inp, "") main :: IO () main = do cs <- getContents args <- getArgs source <- readFile (head args) putStr $ run (parse source) cs -- brainf*ckなんてたったこれだけ。
- 670 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:35:01 ]
- >>665
お前は日常会話もできなそうだな
- 671 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:35:35 ]
- >>669
それをarrowでどうぞ
- 672 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:45:58 ]
- >>638
状態を持たないステートレスオブジェクトはそのまま純粋関数型言語に取り込めますよね。 「純粋関数型」を標榜するHaskellは状態がないのではなくモナドに閉じ込めています。 ステートフルオブジェクトの状態も同様にモナドに閉じ込める事で「純粋関数型」を 維持したままオブジェクトを利用できると考えますが何か問題があるのでしょうか?
- 673 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:56:27 ]
- >>672
>>664>>671でも書いたがarrowが使いにくいんだよ。brainf*ckみたいだろ。 brainf*ckを書き込んだ池沼にはわからねぇんだろうが
- 674 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:59:06 ]
- >>672
うんうん。Monadiusとかそうだよね。
- 675 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 19:14:19 ]
- >>670
で、「普通」の説明はマダァ?
- 676 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 20:14:22 ]
- , - ' ´ ̄ `` 、__
__,ィ ヽ. `ヽ. , '⌒Y / 、ヽ ヽ ヽ. / / i /l/|_ハ li l i li ハ . // 〃 /l i|j_,.//‐'/ lTト l、l j N i | {イ l / l li //___ リ_lノ lル' lハ. ソ ___◎_r‐ロユ i| /レ/l l l v'´ ̄ , ´ ̄`イ !| ll,ハ └─‐┐ナ┐┌┘ _ ヘ____ ハ| ll∧ハヽ ト、 '''' r==┐ '''' /l jハ| ll ll /./┌┘└┬┘└┼────┘ロコ┌i 〃 ‖ レ'¨´ヽiへ. _ 、__,ノ ,.イ/|/ ノ ll l| </  ̄L.l ̄ ̄L.lL.! ┌┘| ll ll { ⌒ヽ_/ } ー‐<.__ ′ l| ‖ ‖ ‖ ヽ, /、 〈 |:::::::| `ヽ ‖ ‖ {. ハ ヽ Y`‐┴、::::v l ‖ ‖ |iヽ{ ヽ_ゾノ‐一’::::ヽ. | ‖ ‖ |i:::::`¨´-- :::......:...:.:.::.}| ‖ ‖ |i::::::ヽ._:::_:::::::::::::::::::_ノ | ‖ ‖ |i::::::::::::i___:::::::::::/ | jj::::::::r┴-- `ー‐ '⌒ | 〃:::::::マ二 _,ノ //::::::::::::i ー 一 '´ ̄::. ,','::::::::::::::i::::::::::::::::::::::i::::::ヽ
- 677 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 20:14:38 ]
- >>675
それは658が一番詳しいから658に聞いてくれ
|

|