- 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に聞いてくれ
- 678 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 20:25:09 ]
- さんざ荒らして説明拒否かよw
- 679 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 20:28:47 ]
- えっ、だれが荒らし?
- 680 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 20:34:27 ]
- 池沼の「普通」なんて誰も興味ねえってよw
- 681 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 20:37:07 ]
- >>679
少なくとも>>676はアラシだろw
- 682 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 21:28:20 ]
- >>677
ぐぐれYO!ばか ttp://d.hatena.ne.jp/r-west/20070720/1184946510 ttp://d.hatena.ne.jp/propella/20070807/p1
- 683 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:10:09 ]
- >>665
普通? 社会通念だよ。
- 684 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:10:54 ]
- 論文じゃあるまいし。
揚げ足取りなんかやってるから単位も危なくなるんだぞ?
- 685 名前:デフォルトの名無しさん [2008/01/05(土) 22:25:42 ]
- >>683-684
せっかくぐぐって終息させてやろうとしてるのに馬鹿だねおまえはw 黙ってれば終わったのに。 晒しage
- 686 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:27:36 ]
- これが関数型使って気取ってる池沼の実態ですwwwwww
ばか
- 687 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:30:06 ]
- 使えもしないのに関数型に憧れてんなYO!
Haskell使いキモスwwwwww
- 688 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:34:13 ]
- スレタイ通りのオナスレageんな
- 689 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:37:08 ]
- クソ言語が普通とか言ってんなよ。所詮、脳内オナニー。
- 690 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:39:26 ]
- 恥ずかしいスレ名をアゲんな、変体どもがぁ。
Haskellはプログラム板の恥だな。
- 691 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:43:34 ]
- スレの削除依頼出せ.キモイんだよお前等
- 692 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:46:01 ]
- まあ、重複スレなのでこちらを削除しても問題ありませんね。
- 693 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:57:22 ]
- ↑さんざん恥をかいたのでスレ削除して欲しい張本人がこう申しておりますw
- 694 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 22:59:01 ]
- Haskell使ってる人って頭が良いイメージだったけどw
- 695 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:01:32 ]
- なかなか笑わせてもらった
- 696 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:18:12 ]
- 「Haskell」=「Arrow」+「普通」
- 697 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:20:35 ]
- 普通ってwwww
「プログラム」=「データ構造」+「アルゴリズム」 ってWirth先生が言ってたぞ。
- 698 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:21:56 ]
- >>697
先生のゆーとーり世代
- 699 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:21:57 ]
- アローだってデータ構造だろうに。
- 700 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:23:22 ]
- 普通のアルゴリズムなんて定義できんだろ。
- 701 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:24:32 ]
- 普通のどこが気に入らないんだろう
- 702 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:25:43 ]
- アローに付随したアルゴリズムに定石でもあるのか?そんな本見たことねーぞ。
むしろ教えろゴルァ!
- 703 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:28:27 ]
- アローの定石と言えるかわからないけどバード先生の本には載ってる
- 704 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:35:36 ]
- Rahbi & Lapalme にはモナドの説明が無いけど、
Introduction to Functional Programming Using Haskell Richard Bird こっちには載ってるのか。
- 705 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:39:06 ]
- アロー程度がちょちょいと説明できないようじゃHaskell使いこなせてると言えないよね。
- 706 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:40:25 ]
- アローって簡単?
- 707 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:46:49 ]
- >>706
ふ・つ・う wwwww お頭が弱いとアローがbrainf*ckみたいに見えるらしいけど、可換図式みたいで判りやすいよ。 ハッキリ言って簡単。基礎的な数学力があればだけど。圏論ぐらいは出来ないと無理かな。
- 708 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:48:02 ]
- >>707
> ハッキリ言って簡単。基礎的な数学力があればだけど。圏論ぐらいは出来ないと無理かな。 どうやら、arrowでプログラミングしたこともないことがよくわかった。
- 709 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 23:55:34 ]
- アマゾンみたらバードの本にはモナドとかアローについて書いてあるらしい。
でも翻訳はMirandaについてでモナドとか載ってなさげだねぇ。
- 710 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:10:55 ]
- Arrowって、Kleisli 圏とか Premonoidal 圏みたいなもんか。たしかに図を描けばなんてことなさげ。
- 711 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:16:47 ]
- >>708
はいはい。あーarrowはむずかしいいや。brainf*ckみたいにみえるなあw
- 712 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:21:36 ]
- 教訓
・ オブジェクト指向と関数型は共存出来ない。 ・ 「Haskell」=「Arrow」+「普通」 (ただしArrowはbrainf*ckである)
- 713 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:29:02 ]
- >>712
なにそれ?Haskell全否定じゃん。
- 714 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:31:52 ]
- 708は口調ですぐわかるな。アンチなら使わなきゃイイジャン。
- 715 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:51:13 ]
- アローって意味的にはモナドなんかよかよっぽど理解できるだろ。
要するに計算の合成を定義すればいいだけ。 フリーダムすぎて使い方を迷うところはあるけど……圏論の知識とかいるか?
- 716 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:59:29 ]
- >>715
いらない。
- 717 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:00:54 ]
- arrowでプログラミングするのに数学も圏論の知識も微塵も必要ない。
- 718 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:01:02 ]
- >>715
あれば簡単ってことなんじゃないの?おれ圏論知らないけどさw
- 719 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:03:26 ]
- >>715
アローってモナドの一般化したやつじゃん。ほとんど同じだろ。 アローが関数を受け持って、モナドが値を受け持つ箱みたいなイメージ。 違ったっけ?
- 720 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:07:59 ]
- >>717
それは極論だろ。SコンビネータとかBコンビネータとかYコンビネータを適用するとき副作用があるのか分からなくてドキドキする。 数学知ってたらこういうことがさらっと出来ていいんだろうなと思う。
- 721 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:10:19 ]
- Haskellじゃなくてもいいようなプログラムなら数学の知識はいらないとは言えるw
- 722 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:13:48 ]
- 結局、Haskellを何に利用しているかでアローの難易度も違って見えるんだろうね。
- 723 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:21:50 ]
- いらない・無意味・微塵も必要ない
- 724 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:28:42 ]
- 普通
- 725 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 04:40:35 ]
- arrow関連で卒論書きたいんですが、受けはいいでしょうか?
- 726 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 13:30:28 ]
- >>719
値を受け持つ箱と考えるより、monadic function(a->m b)の形式で計算を纏めていく戦略と考えたほうが 理解しやすいかもしれん。monadic valueそのものをモナドだと思ってしまうとよくわからんなるんじゃない?
- 727 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 15:41:27 ]
- >>717
ならこのスレに来るな。ここはクマーが圏論を説明してくれた偉大なスレだ。
- 728 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 15:44:29 ]
- >>720
数学の知識がなくてもSコンビネータとかBコンビネータとかYコンビネータが 何を意味しているのかだけ知っていればどきどきすることはありません。
- 729 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 15:54:07 ]
- >>728
意味が良くわからない。AAで説明してくれ。たのむわ。
- 730 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 16:07:19 ]
- /-─-,,,_: : : : : : : : :\
/ '''-,,,: : : : : : : :i /、 /: : : : : : : : i ________ r-、 ,,,,,,,,,,、 /: : : : : : : : : :i / L_, , 、 \: : : : : : : : :i / 圏論持ち出したら /●) (●> |: :__,=-、: / < 負けかなと思ってる l イ '- |:/ tbノノ \ ニート(24・男性) l ,`-=-'\ `l ι';/ \ ヽトェ-ェェ-:) -r'  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヾ=-' /
- 731 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 16:26:09 ]
- >>730
博士課程のニーとですがなにか
- 732 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 16:39:00 ]
- 数学の知識無しでアローをAAで説明出来んじゃなかったの?
しったかかw クマーktkr
- 733 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 17:23:29 ]
- スレの流れに
水を差すようで申し訳ないんだが ちょっと質問 >>720 にある「(対称)前モノイダル圏」って よく意味が解らない 対称モノイダル圏の条件を弱めたものらしけど 対称モノイダル圏だとなにか不味い事でもあるのですか
- 734 名前:733 [2008/01/06(日) 17:25:08 ]
- >>720
でなく >>710だた
- 735 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 17:38:01 ]
- アローなんて簡単だろ
ほれ、これがアローだ →
- 736 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 17:51:02 ]
- これの事でしょうか?ハァハァ
/⌒ヽ⌒ヽ Y 八 ヽ ( __//. ヽ,, ,) 丶1 八. !/ ζ, 八. j i 丿 、 j | 八 | | ! i 、 | | i し " i '| |ノ ( i i| ( '~ヽ ! ‖ │ i ‖ | ! || | │ | | | | | | | | | | ! | | | | ‖ / ヾ
- 737 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 17:53:24 ]
- AA職人がいなくなってつまんなくなったね。
- 738 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 17:54:47 ]
- AA職人というか、コピペで説明してただけだろ?
- 739 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 17:57:34 ]
- その「説明してただけ」すら出来ないコピペ厨w
- 740 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 17:58:38 ]
- たしかに1年でレベルが落ちたのは否定できんなw
- 741 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 17:59:42 ]
- 単にスレが捨てられただけでは?
- 742 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 18:00:42 ]
- いまどきarrowなんてみんな知ってて、いまさら説明の余地もない。
新しいネタ探して来い
- 743 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 18:14:58 ]
- >>742
こら!みんなが矢印とかちんぽを無視したからって怒るでないw
- 744 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 18:17:28 ]
- クマーってもう一年前の話か。上のほう見たら2つもあるね。
- 745 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 18:19:22 ]
- >>742
↑とアローの説明が出来ないクズが取り乱しております
- 746 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 21:27:48 ]
- >>728
コンビネータ理論を知っていれば十分で数学の知識を前提としないって?おいおい。 支離滅裂だぞ。
- 747 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 21:44:24 ]
- >>746
数学の基礎的な知識はそれほど必要ないだろ。 「それだけ」知ってればいいんだから。
- 748 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 21:55:31 ]
- >>747
基礎の意味が違うでしょ。コンビネータ理論は数学基礎論であって、数学の基礎知識じゃない。 しかも副作用についての知識は、いくつかのコンビネータを知ってるではすまない。 他にも山のようにある関数について、一つ一つ個別に知ってるよりも理屈を知ったほうが当然良い。
- 749 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 23:51:52 ]
- λλλλλ...
↑アロー・モナド・コンビネータ理論について行けず、肩を落として帰るプログラマの群れ
- 750 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 00:08:05 ]
- 正直arrowとかどうでもいい
それよりhere documentを入れてくれ
- 751 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 00:29:30 ]
- >>750
ttp://cvs.haskell.org/Hugs/pages/users_guide/here-documents.html
- 752 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 20:07:34 ]
- >>733
くわしくはこのページが参考になる。 ttp://d.hatena.ne.jp/m-hiyama-memo/searchdiary?word=*%5B%A5%E2%A5%CA%A5%C9%5D John Power & Edmund Robinsonによれば: * TのKleisli圏C_Tがプレモノイド圏となる ⇔ Tは強度を持つ * TのKleisli圏C_Tがモノイド圏となる ⇔ Tは可換強度を持つ これはKleisli圏のプレモノイド構造と強度が1対1に対応しているということで、モノイド圏では都合が良くない。つまり、 プレモノイド圏となる⇒・・・⇒モナドの作用乗法 というのがwell-definedになるということを狙ってる。たしかにモナドって数学的な基礎知識無しでも使えると確信しましたか?
- 753 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 20:44:58 ]
- 当然だけど、アローについても同様の議論が展開できる訳です。まあ、アローなんかどうでも良いんでしたね。
- 754 名前:デフォルトの名無しさん [2008/01/07(月) 22:52:18 ]
- モノイド圏とモノイダル圏て何が違うの?
- 755 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 23:07:53 ]
- >>752
乙。>>710あたりが言ってた図を書くって「ペースティング図、スタック図(Santiago graphical notation)、ストリング図で描く・・・」てことか。 おれも>>735みたいなのをアローと思ってたw
- 756 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 23:13:13 ]
- >>754
Monoidal Category = モノイド圏 >>733しかモノイダル圏という日本語は使っていないと思う。普通、モノイド圏と呼ぶ。
- 757 名前:デフォルトの名無しさん [2008/01/07(月) 23:44:59 ]
- >756 thx
ところで、圏でのモナドは分かるんですが、 プログラム言語のモナドって何なんですか?
- 758 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 00:30:05 ]
- 検索しましたら次の資料が見つかり自己解決しました。
www.ipsj.or.jp/07editj/promenade/4703.pdf
- 759 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 00:33:47 ]
- >>757
ほい ttp://www.sampou.org/haskell/tutorial-j/monads.html HaskellのモナドはMonadという型クラスのインスタンスれす。 Monadクラスは2つのクラスメソッドを持っていて、その2つがモナド則(3ホーソクありゅ)を満たしてマース。 よく使うモナドはIO, Maybe, Listあたりでしょう。どれも「演算」を繋ぐという感じに使いマース。 この3行を見たらリンク先にJUMP! 2つのクラスメソッドは、最初のうちは『>>=』が『|』(パイプ)に対応、『return』が『cat』に対応すると覚えておけば良いかもネ! (Jonesはわざとパイプっぽくしたらしいネ) モナドの構文は3つ。doとletとifだけ。 演算をモナド的に定義して繋ぐと、新しい特徴を参照透過的にモナドに結びつけることが出来ちゃう。 しかもモナド則3が保証するように「組み立て順序が自由」で、長くつながったモナドの鎖のどこを切ってもモナドになるョ。 これがモナドがもたらすモジュール化という効能だよーん。
- 760 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 01:11:34 ]
- >759 おおDankeです
プログラムにはなかなか深い数学が隠れているんですね。 いまふと思ったんですが、物理に出てくる量子化という 概念も、もしかするとモナドに関係あるかも知れません。 モジュラリティが何を意味するのかよく考えてみます。
- 761 名前:デフォルトの名無しさん [2008/01/08(火) 21:02:22 ]
- ここの説明もなかなかおもしろいよ。
blogs.dion.ne.jp/keis/
- 762 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 21:15:53 ]
- >>761
宣伝乙
- 763 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 21:40:15 ]
- >>759
doとletは分かるけど、ifってモナドと関係あったっけ?
- 764 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 23:36:51 ]
- >>761
説明が間違ってるところ大杉。 自分でモナドを作る時、どうするつもりかと思った。
- 765 名前:デフォルトの名無しさん mailto:sage [2008/01/08(火) 23:45:48 ]
- >>763
do と if を一緒に使う話じゃないかな。有名な「一行で書け」ってやつ。
- 766 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:55:16 ]
- >>761
パクったはいいが、意味を理解してなかった、ってところか。
- 767 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 09:22:24 ]
- >>761ってそんなに間違いが多いのか〜
どこからパクったのか分かりますか?
- 768 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 07:49:24 ]
- この年末年始のプログラマの休暇に
ここのスレが結構盛り上がっていたな
- 769 名前:デフォルトの名無しさん [2008/01/13(日) 08:07:15 ]
- プログラマは休暇にHaskellの勉強か
みんな偉いな
- 770 名前:デフォルトの名無しさん [2008/01/13(日) 10:35:26 ]
- どのへんがまちがってるの?
- 771 名前:デフォルトの名無しさん mailto:sage [2008/01/13(日) 17:53:03 ]
- 勘違いしてるだけなんじゃない?
- 772 名前:デフォルトの名無しさん [2008/01/18(金) 04:18:25 ]
- なんだかんだ言って、本当はぜんぜん分かってない奴がほとんどだろw
- 773 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 09:45:24 ]
- まぁ仲間は多いと思っておきたいところだよな。
- 774 名前:デフォルトの名無しさん [2008/01/18(金) 15:35:54 ]
- >>761の間違いを早く指摘して欲しいもんだなw
- 775 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 15:37:06 ]
- >>774
そういってPV稼ぐ魂胆だろ 自演乙
- 776 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 15:18:10 ]
- こんなとこで宣伝したところで何PV増えるというのか
- 777 名前:デフォルトの名無しさん [2008/01/19(土) 18:53:04 ]
- >>775
そうやって自分が理解できてないのを誤魔化そうって魂胆だろ。 まずは>>761の間違いを指摘してみろよ。話はそれからだなw
- 778 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 21:02:10 ]
- ひとり暴れているのがいるみたいだね。誰も話したくないからって理解できないんだろうか。
- 779 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 13:31:52 ]
- いったいどこからパクったのか教えてくれよ。
- 780 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 13:54:12 ]
- >>779
どうでもいい
- 781 名前:デフォルトの名無しさん [2008/01/20(日) 18:21:29 ]
- どうでもよくないな。それによって>>761が間違いかどうか判断できるだろ。
- 782 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 20:01:14 ]
- その判断がどうでもいいと言っているんだよ
- 783 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 20:35:14 ]
- 1/8を最後にパッタリ流れが止まったのはなぜかな?
- 784 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 20:41:46 ]
- ヒント 自演
- 785 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 04:24:11 ]
- 結局Haskellって遅いの?
- 786 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 22:55:28 ]
- >>785
perlよかハエーよ スクリプトに使うなら無問題 組込系にはちょっと シビアなタイミングが求められるとダメポ
- 787 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 05:51:47 ]
- >>786
>組込系にはちょっと シビアなタイミングが求められるとダメポ 組み込みはどんな感じのアセンブリコードが生成されるのか予測しやすいほうがいいと思うんだが、 Haskell使いが慣れてくるとどういうasm吐くか割と簡単に把握できるようになるの?
- 788 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 12:33:33 ]
- >>786
Perlよかはやいとか到底考えられないのだけど、その根拠は?
- 789 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:35:05 ]
- >>788
ttp://shootout.alioth.debian.org/sandbox/benchmark.php?test=all&lang=ghc&lang2=perl だと 14 対 1 で Haskell が速い
- 790 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 13:53:31 ]
- 動的型でバイトコンパイルのPerlと、静的型でネイティブコンパイルのHaskellを比較して
Perlの方が速いと思うなら、そっちこそ説明が要るだろw
- 791 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:00:36 ]
- え〜Haskellって、ネイティブコンパイルしてるのか。それすら知らなかったわw
インタプリタだとばかり思ってた。
- 792 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:10:08 ]
- 両方可能だがね
- 793 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:34:52 ]
- インタプリタあるんだ、知らんかった
コンパイルしなくてもCGIとして使えるのかな 調べてみるか
- 794 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:39:19 ]
- あるかどうかは知らんが、可能ではあるだろう
- 795 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 14:44:38 ]
- runghcとかrunhugsとかあるけど、インタプリタをサーバに導入するほうが返って面倒な気もする
- 796 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 17:15:57 ]
- >>793
可能だよ
- 797 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:00:27 ]
- Haskellまだかじった程度だけど、参照透明性がなにかハッピーにしてくれるの?
やろうと思えば、既存の言語でも出来るわけで。言語的に制約がかかっているか どうかでしょ。「言語的に制約がかかる」というのは、入門者にとってしかメリット はないよ。 遅延評価も*ほぼ*使わない。無限計算なんてやらんよ? こんなんで、なんで既存言語から乗り換えるの?俺が、まだHaskellよくわかっていない だけ?
- 798 名前:デフォルトの名無しさん [2008/02/16(土) 23:01:19 ]
- あげ
- 799 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:07:18 ]
- 俺も初心者だけど、参照透明性の重用性がよくわからない。
つか、結局はunsafeなんとかで参照透明性をくずしてんでしょ?
- 800 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:08:04 ]
- ちなみにクソリストなんて採用するのはやめてくれ
- 801 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:08:40 ]
- >>797
C++ が参照透明な言語だって知ってた?
- 802 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:10:00 ]
- >>801
信じられない。あふぉかw 俺が、無知なら教えてくださいw
- 803 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:10:31 ]
- >>797
お前、今日のRuby勉強会に行ったやつだろ? なぜ関数プログラミングは重要か www.sampou.org/haskell/article/whyfp.html
- 804 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:11:05 ]
- 参照透明性って、再代入できないってことだよな(間違ったら訂正してくれ)
C++は再代入できる、とおれは思ってるがw
- 805 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:12:01 ]
- >>803
Rubyはすきだが、そいつじゃない。というか、今日一日ひきこもってたしなw
- 806 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:12:04 ]
- >>799
unsafeを使うときは注意が必要である いつ実行されてもプログラムに矛盾が発生しないことがはっきりしない限り使うべきではない
- 807 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:12:29 ]
- 式と値が一対一に対応していること
- 808 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:16:09 ]
- Haskellのメリットを説きたいなら>>803のリンク教えるだけで十分じゃねーの?
- 809 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:16:48 ]
- >>802,804
まずはこれを読んでみてくれ。 d.hatena.ne.jp/w_o/20061008#p1 これが面白いのは、参照透明は程度問題に過ぎないという 視点を得られる所なんだと思っている。
- 810 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:18:09 ]
- 参照透明性なんて飾りだよ
Haskellの魅力は、副作用が禁じられていることじゃなくて、 副作用なんていう扱いにくいものに頼らなくても自然にプログラムを書けることだ 遅延評価は大いに使う 「ほぼ使わない」なんて思えるのはHaskellに慣れてないだけだ 例えば、C言語の典型的なfor文の使い方 for(T i = init; cont(i); i = next(i)) use(i); を、Haskellで自然に書き直すと mapM_ use $ takeWhile cont $ iterate next init になるけど、これは無限リストを使っている
- 811 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:19:34 ]
- >>809
あなたはネタを理解できない人なんですね
- 812 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:23:05 ]
- 遅延評価便利だよ。
MLが不便に思えるぐらいだ。
- 813 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:23:13 ]
- >>811
ドッキリとかを真に受けるタイプの人でしょ? >>809 がネタなんだけどね
- 814 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:26:29 ]
- >>799
unsafeなんとかは、本当は参照透明なのに、コンパイラが参照透明だと見なしてくれない式を書くときに使う そうじゃない使い方もできるけど、それは邪悪な使い方だ
- 815 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:28:06 ]
- ffi使えばunsafe使わなくてもいくらでも邪悪なプログラムが書けるぜ。
- 816 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:28:41 ]
- HaskellのFFIはめちゃくちゃ楽だからな。
組み込みプログラムもなんのその。
- 817 名前:799 mailto:sage [2008/02/16(土) 23:41:48 ]
- >>803 >>808
803のリンクは、 「参照透明は関数型言語の魅力としては不適当」と言っているのでは?
- 818 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:47:33 ]
- >>816
オーバーヘッドもあるしメモリも食いまくるから組み込みには全く向かないだろ
- 819 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:54:08 ]
- >>818
関係ない。 組み込み=低リソースという時代は終わったんだよ。 それよりも、たとえばロケットや自動車のような用途では安全性が求められる。
- 820 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 23:57:18 ]
- >>817
参照透明でなければ遅延評価は役に立たないよ
- 821 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:00:21 ]
- D 言語に遅延評価もどきはあるけどな。
- 822 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:02:57 ]
- 遅延評価はテクニックに近いものもあるしな
- 823 名前:799 mailto:sage [2008/02/17(日) 00:06:23 ]
- >>820
なるほど…。 でも、遅延評価も必ず使うわけではないし、 (IOの時など遅延評価されては困る場合もあるわけですよね?) なんというか、参照透明そのものの優位性がわからない…。 ・コンパイラが作りやすい? ・数学的にみて美しい? …、いずれも一般ユーザには関係ないですよね…。
- 824 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:07:34 ]
- 参照透明性ってデバッグの容易さの点で重要と聞いてるけど。
- 825 名前:799 mailto:sage [2008/02/17(日) 00:08:33 ]
- >>814
う〜ん…。これは正しいのでしょうか? あくまでも、Haskellは参照透明であって、 そうでないプログラムは邪悪という事ですよね。
- 826 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:11:43 ]
- >>823
参照透明だったら関数の返値をキャッシュできるよ
- 827 名前:799 mailto:sage [2008/02/17(日) 00:14:55 ]
- >>826
コンパイラの話ですよね…。
- 828 名前:799 mailto:sage [2008/02/17(日) 00:16:41 ]
- >>824
Haskellのデバッグってむしろ大変そうですけど…。
- 829 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:18:15 ]
- >>827
完全にキャッシュできればプログラマはわざわざメモ化とかのテクニックを使ってプログラミングする必要がなくなる。 ・・・とは言うものの、GHCでは完全にキャッシュしているわけではない。
- 830 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:19:45 ]
- >>828
Cのデバッグで一番骨が折れるのが型によるバグ。 Haskellはコンパイルさえ通れば型に関しては完全に矛盾がない。
- 831 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:20:48 ]
- >>823
だから、参照透明性はそんなに重大な特徴じゃないんだって (利点が無いわけじゃない。コンパイラによる最適化がやりやすい。コードが読みやすい。リファクタリングしやすいetc) 逆に、「参照透明でないこと」(破壊的代入や副作用を認める)にも大して優位性は無いんだ Haskellにはもっと重要な特徴がたくさんある 動作オブジェクトを利用した入出力とか、代数的データ型+パターン照合とか、型クラスとか、遅延評価とか
- 832 名前:797 mailto:sage [2008/02/17(日) 00:25:59 ]
- >>830
Haskell の型はステキだと思いますよw でも、traceとか「デバッグ」は大変そう…。
- 833 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:29:07 ]
- >>831
>参照透明性はそんなに重大な特徴じゃない そうですよね…。 でも、なんか、かたくなに参照透明性を守ろうとして 余計わかり難くなってる気がするんですよね。 全面的な参照透明性を捨てた方が、 すっきりするのではないでしょうか…?
- 834 名前:799 mailto:sage [2008/02/17(日) 00:29:52 ]
- ↑>>833 は 799です
- 835 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:30:17 ]
- 第15回 Haskellでのデバッグのコツをつかむ
itpro.nikkeibp.co.jp/article/COLUMN/20071204/288630/
- 836 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:30:34 ]
- traceってどういうのを指してるか分からんけど、printfデバッグの類は普通にできる
ただ、HaskellがCよりデバッグしにくいのは事実だと思う gdbに匹敵する使いやすさのデバッガがまだ無いからだが >>833 >でも、なんか、かたくなに参照透明性を守ろうとして >余計わかり難くなってる気がするんですよね。 どの辺でそう感じた?
- 837 名前:799 mailto:sage [2008/02/17(日) 00:31:00 ]
- ああっ!
>>832 も799です。
- 838 名前:799 mailto:sage [2008/02/17(日) 00:35:00 ]
- >>836
> printfデバッグの類は普通にできる そうなんですか? なんかprintfいれるとバグが再現しないとか多そうですが…。 > どの辺でそう感じた? IOモナドww 参照透明性を捨てれば もっとステキな実装がありそうじゃないですか?
- 839 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:38:46 ]
- 参照透明性を確保するために導入したんだから
本末転倒だじょ
- 840 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:41:05 ]
- 俺はIOモナド大好きなのでその気持ちは良く分からん
例え参照透明性を捨ててもIOモナドは使いたい
- 841 名前:799 mailto:sage [2008/02/17(日) 00:41:50 ]
- >>839
ん? いや、だから、参照透明性に固執するから、 IOモナドなんて理解しにくい方法で実装してるんでしょ?
- 842 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:43:33 ]
- 参照透明性を実現する完全に純粋な関数型言語を作るのが
Haskell の1つの目標だったんじゃないのか?
- 843 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:50:41 ]
- IOモナド、というかIO動作の考え方は多少とっつきにくいけど、分かってしまえば簡単なことだし、
副作用を使った入出力よりずっとまともだと思う それから、遅延評価の言語で素朴に副作用を使うと実行順が制御困難になるけど、 IO動作ならこの問題がない >>842 だろうな でも言語のユーザーにとってはそんな目標はどうでも良い
- 844 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 00:51:38 ]
- 参照透明性が要らないというなら OCaml とか他の言語使えばいい。
それだけだと思うぜ。
- 845 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:00:20 ]
- >>844
その議論はおかしい Haskellの特徴は参照透明性だけじゃない デフォルトの遅延評価も型クラスもIOモナドも$演算子もOCamlには無い 参照透明性なんてどうでも良いという奴にでも、Haskellを使う理由はいくらでもある
- 846 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:09:14 ]
- じゃあ、参照透明性の無いHaskell に相当する言語を作ったらいいんじゃね。
- 847 名前:799 mailto:sage [2008/02/17(日) 01:12:57 ]
- >>840
そうなんですか…。 結局、慣れの問題なんでしょうかねぇ…。
- 848 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:15:01 ]
- Haskell では参照透明性をくずすものは trace のみなんだっけ?
- 849 名前:799 mailto:sage [2008/02/17(日) 01:15:23 ]
- >>846
まさに、そう、思うんですよw そんな言語があれば、 確実にブレイクするのではないでしょうか? 誰か作って!私はもちろん……ムリ!
- 850 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:26:25 ]
- >>848
unsafePerformIOってのがある >>849 単に参照透明性のないHaskellならunsafePerformIOを言語の一部として認めれば良いんだけど、 IOモナドを排除するのは難しいと思う >>843で書いたけど、普通の言語にあるような副作用による入出力は、遅延評価と相性が悪い 実行順を分かり易く制御するには、結局、IOモナドか、Cleanの一意型か、 それに代わる何か新しいメカニズムが必要になる
- 851 名前:799 mailto:sage [2008/02/17(日) 01:39:54 ]
- >>850
な〜るほど! ひょっとしてunsafePerformIOを使いまくって >>814 の言う邪悪なIOライブラリを作れば、 Haskellのままでもいいかもしれませんねw
- 852 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:41:59 ]
- もう屁みたいな例をたくさんあげられるのはウンザリだよ。
こうしよう、C(ほかの言語でもいい)からHaskellに乗り換えるために十分な 説得力を持つ実務的な例を1つだけあげてくれ。
- 853 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 01:55:30 ]
- darcs
- 854 名前:799 mailto:sage [2008/02/17(日) 01:55:42 ]
- >>852
「実務的」というかどうかはしらないけど、 コンパイラ的な処理には向いてるらしい…。 再帰下降構文解析 ttp://ja.wikipedia.org/wiki/%E5%86%8D%E5%B8%B0%E4%B8%8B%E9%99%8D%E6%A7%8B%E6%96%87%E8%A7%A3%E6%9E%90 HaskellやMLなどの関数型言語での再帰下降構文解析の実装は特に簡単である。 出典: フリー百科事典『ウィキペディア(Wikipedia)』
- 855 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 02:00:39 ]
- > HaskellやMLなどの関数型言語での再帰下降構文解析の実装は特に簡単である。
っていうのはウソっていうのはどっかでみたなw
- 856 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 02:06:37 ]
- >>854
実際、言語処理系には向いてる。 構文解析だけじゃなく、コンパイル過程での構文木の操作とかに 代数的データ型とパターンマッチがぴったりハマってかなり綺麗に書ける (MLも同様。代数的データ型じゃなくてバリアントという名前だけど)。 言語処理系は、基本的にツリーの変形みたいな I/Oを伴わない数学的な処理が多いから、という理由づけもできるかな。
- 857 名前:799 mailto:sage [2008/02/17(日) 02:08:10 ]
- Haskellというか、関数型言語の魅力としては、
>>803 のリンク先を読めばかなり納得できると思う。
- 858 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 02:16:57 ]
- >>848
いいえ
- 859 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 02:23:46 ]
- Haskellの言語仕様にunsafeとかFFIとかってあったっけ?
GHCの仕様じゃないの
- 860 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 02:27:47 ]
- >>859
FFIはHaskell 98への追補 www.cse.unsw.edu.au/~chak/haskell/ffi/ unsafePerformIOも入ってる
- 861 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 02:29:45 ]
- じゃあ、Haskellは純潔を失ったというわけだ
- 862 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 08:36:34 ]
- ハードリアルタイムアプリはHaskellでは無理
- 863 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 09:30:28 ]
- 実時間要求とメモリを直接利用するアプリケーション以外はHaskellでおk
- 864 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 11:58:51 ]
- >>863
できるだろ www.haskell.org/ghc/docs/latest/html/libraries/Win32/System-Win32-DebugApi.html#v%3Ac_ReadProcessMemory
- 865 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 12:01:27 ]
- 仮想メモリとかOS必須じゃn
- 866 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 18:47:44 ]
- Haskell (International Computer Science Series) (ペーパーバック)
Simon Thompson (著) # ペーパーバック: 528ページ # 出版社: Addison Wesley; 3Rev Ed版 (2008/9/15) # 言語 英語, 英語, 英語 # ISBN-10: 0201882957 # ISBN-13: 978-0201882957 # 発売日: 2008/9/15 今度こそ発売?
- 867 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 18:08:34 ]
- 参照透明性を保証しないと、グラフ簡約が使えなくね?
- 868 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 18:18:32 ]
- 使えなくはないと思うが、何で?
- 869 名前:デフォルトの名無しさん [2008/02/18(月) 20:15:31 ]
- >>642
データ構造とアルゴリズムをまとめるだけなら、それこそ関数型言語の得意分野だし、 手続き型の世界でも、メッセージメタファって何それ、なgeneric programmingが幅を利かせている。 その分なおさら、状態と手続きをまとめるSmalltalk的なオブジェクト指向が 影響力を増しているように思う。 >>654のAlan Kayの言葉は、実行順序への依存性が下がること (これはメッセージメタファ、イベント駆動から自然に出てくる)と、 参照透明という意味で状態を全く持たないことを(故意に?)混同している。
- 870 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 02:47:18 ]
- ハードウェアリアルタイム処理って言葉にすれば
Haskellはかなりいけそうな感触なんだけどなぁ
- 871 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 10:02:24 ]
- >>868
形式的な表現が同じでも、値が同じことの保証がなくなるから。
- 872 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 10:36:55 ]
- >>871
副作用を入れるなら当然それは覚悟の上じゃないのか
- 873 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 12:45:42 ]
- >>872
副作用を入れてもいいのは、値がユニット型の関数だけにしないと破綻するだろ。
- 874 名前:デフォルトの名無しさん [2008/03/09(日) 07:06:26 ]
- ↓この暗号が解けたら初心者卒業と言えるでしょうか?
main = getArgs >>= putStr . flip id "\n" . foldr (.) id . map (showHex . read) ttp://haskell.g.hatena.ne.jp/nobsun/20060819/ShowS を少し改変
- 875 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 10:02:11 ]
- >>874
暗号に見えていたのが、何の変哲もないプログラムとして認識できるようになったら卒業だな。
- 876 名前:874 mailto:sage [2008/03/09(日) 19:04:29 ]
- >>875
そうですか… 1日がかりで解けたので初心者卒業かと思ったのですが…orz 何の変哲もないプログラムに見えるように精進しますw
- 877 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 23:43:38 ]
- 何の変哲もないように見える必要はないと思うが解くのに1日がかりはまだ初級者の域か。
- 878 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 21:20:39 ]
- 悩むところが見当たらん
おれはもうだめだ
- 879 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 21:26:04 ]
- flip id "\n"が悩むところじゃないか?
なぜ($"\n")と書かないんだろう
- 880 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 13:47:26 ]
- Prelude> ($ "789") $ ($ (($ "456") $ ($ "123") $ (++))) $ (++)
"123456789" スタックマシンみたいだ(w
- 881 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 18:48:31 ]
- 便利だなこれ
\a -> hoge a 4 () flip (flip hoge 4) () ($ ()) . ($ 4) . hoge
- 882 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 16:27:19 ]
- >>881
ああ、そうやってカリー化できるんだ。目から鱗が落ちたよ。
- 883 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 21:48:42 ]
- 引く手あまたのプログラミング言語は?
slashdot.jp/developers/article.pl?sid=08/04/06/2313251 --- Java(16479件)、C++(8080件)、C#(7780件)、JavaScript(6749件)、 Perl(5710件)、PHP(2641件)、Python(1408件)、COBOL(1207件)、 Ruby(769件)、Lisp(33件)といった感じらしい。 とりあえずJavaとC/C++/C#、あとJavaScriptを覚えれば、 当分仕事には困らないようである。COBOLのしぶとさも目立つ。 ちなみにHaskellやOCamlの求人は10以下だったそうだ。 ---
- 884 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:45:19 ]
- 仕事でプログラムやってるやつなんて
この板にいるの?
- 885 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 01:39:26 ]
- ええっ?ほとんどプログラム関連の人じゃないの?
- 886 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 01:41:22 ]
- プログラム関連の研究を仕事でやってる人はいるかもしれないが
- 887 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:13:42 ]
- この「板」にはいくらでもいるだろう>仕事でプログラムやってるやつ
このスレに限れば、仕事と直で結びつきにくい言語かもしらんけど でも仕事でプログラムやる傍ら、趣味や素養のためにHaskell弄ってる奴も珍しくはないんじゃなかろうか
- 888 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 18:08:15 ]
- 俺は研究職だが仕事でHaskell使ってる。
- 889 名前:デフォルトの名無しさん [2008/05/25(日) 22:21:03 ]
- はじめましてAranskファンクラブです。
皆さんはAranskをご存知でしょうか? 最近ネット社会において急速に発言力を増しつつある 集団です。 本家:homepage3.nifty.com/Aransk/ ミラーサイト:www.geocities.jp/aransk88/ 日本語Blog:aransk.cocolog-nifty.com/whypro/ 英語もどきBlog:d.hatena.ne.jp/Aransk/ここまでがAransk Officialsです。 (上記以外にも2ちゃんねるのプログラム板にAransk専用スレが 立っていますが、これはAranskとは何のつながりもありません。) 上記の2ちゃんねる、yahoo掲示板に精力的に意見を 書き込むと同時に自らのサイトの更新も頻繁に 行っています。 驚いたことに、あらゆる場所で人気が「ありません。」 その人気の無さをこのBlogで究明してみるつもりです。 ご興味ある方は是非ご参加下さい。
- 890 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 22:30:18 ]
- \yってyを含まないって意味だっけ?
- 891 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 23:10:13 ]
- Haskellの\はlambda
\y -> e で、yからeへの関数
- 892 名前:デフォルトの名無しさん mailto:sage [2008/06/05(木) 18:49:53 ]
- 逆ポーランド記法で日本人に優しいとか言ってみるRPHaskellとか作って
- 893 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 10:56:30 ]
- 「初心者のためのプログラミング言語ガイド」スレに
Haskellを狂信的に勧めるやつが現れてスレがめちゃくちゃに。
- 894 名前:デフォルトの名無しさん mailto:sage [2008/07/21(月) 19:56:00 ]
- >>893
信者と信者っぽく振る舞ってネタにしてる奴と2種類いるようだな。
- 895 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 21:26:02 ]
- Haskellの入門書は、ふつうのHaskellプログラミングでおk?
- 896 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 21:30:22 ]
- >>895
WEBが一番 ここが一番わかりやすいぞ www.sampou.org/cgi-bin/haskell.cgi
- 897 名前:デフォルトの名無しさん mailto:sage [2008/09/12(金) 23:45:22 ]
- >>896
マジか。本買おうかずっと迷ってたんだ。サンクス。これでやってみるよ。 LL Futureで見たんだけどHaskellって並列プログラミングの強さはどんなもんでしょう? ttp://www.nicovideo.jp/watch/sm4505381
- 898 名前:36 ◆K0BqlCB3.k mailto:sage [2008/09/13(土) 00:50:59 ]
- >>897
現在開発中で一部は使用可能 hackage.haskell.org/trac/ghc/wiki/DataParallel/WorkPlan
- 899 名前:デフォルトの名無しさん mailto:sage [2008/09/13(土) 02:18:36 ]
- Erlangにすればいいんでない?
- 900 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 01:21:22 ]
- >>897
本の方がわかりやすいと思うがWebの方を読んで理解できるレベルなら それでいいと思う。お金かかんないし。
|

|