1 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 22:19:28.26 ] haskell.org ttp://www.haskell.org/ 日本語サイト ttp://www.sampou.org/cgi-bin/haskell.cgi ttp://www.shido.info/hs/ 過去ログ 関数型プログラミング言語Haskell Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/ Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/ Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/ Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/ Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/ Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/ Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/ Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/ Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/ Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/ Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/ Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/ Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/ Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/ Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/
604 名前:デフォルトの名無しさん mailto:sage [2012/02/16(木) 22:56:34.58 ] 私は >>593 ではないのですが、逆に訊きたいです Haskell の型クラスと Java のインターフェイスにおいて、 考え方の共通点とは何でしょうか それは、コンパイル時にどう解釈されるかというレベルの共通点でしょうか それとも、アプリケーションを作る上での指針となるくらいのレベルの共通点でしょうか
605 名前:604 mailto:sage [2012/02/16(木) 22:57:13.58 ] >>604 すいません、>>601 に対しての質問です
606 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 03:06:37.40 ] Haskellのclassはplatformに改名しろ
607 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 04:24:56.80 ] 型を集合だと考えれば型クラスって命名は自然
608 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 04:41:03.84 ] 型(type)のメタ概念として類(class)という名前を採用することは間違っていない ただし、これだけオブジェクト指向の概念が普及しているのが現実なのだから、 それを配慮した命名が望ましかった(かもしれない)ということ これをHaskellの傲慢さと見るか、それとも数学的に正しい命名であると見るかは 判断が分かれるところ
609 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 04:50:13.16 ] オブジェクト指向のclassが類と無関係だと思ってるっつーか、 類をモデルにしているのはtype classだけだとか思ってるところが Haskellerの傲慢さじゃないの?
610 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 05:12:11.76 ] simula(I,67) staff.um.edu.mt/jskl1/talk.html smalltalk(80) web.cecs.pdx.edu/~harry/musings/SmalltalkOverview.html#The%20Smalltalk%20Object%20Model これ参考にCからC++とObjCができたのか。
611 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 06:49:42.48 ] >>609 オブジェクト指向のclassって命名にケチつけてるなら Haskellerは傲慢だけど、そうじゃないよね?
612 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 07:36:36.25 ] オーバーロードは必要でオーバーライドは不要だと思ってるところが傲慢だ
613 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 09:25:13.67 ] >>580 ここは読んだか? www4.atwiki.jp/fsharpmaster/m/pages/13.html
614 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 09:28:48.05 ] >>550 Johan TibellのHaskell Performance Patterns talkのスライドも このリストに追加の資料になりそう。
615 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 11:31:01.99 ] >>604 全く同じとまでは言わないけど、 Haskellのtype ≒ Javaのclass と考えたときに、 Javaのinterfaceがclassにまたがって横断的に制約を作れるというところが、 Haskellの型クラスがデータ型を横断して共通の「クラス」を作れるところ と似てるって言ってるんじゃないの。 とりあえず最初の入り口から何でも違う違う言ってたら、誰もHaskell始められないよ。
616 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 11:43:00.28 ] >>615 このスレを見て面白そうなので僕は今日から始めました。
617 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 12:42:29.71 ] >>615 ということは、それはコンパイル時の解釈の問題ですよね >>593 は > オブジェクト指向の考え方は捨てるべき と言っており、これはアプリケーションを作る指針となる考え方において、 抽象クラスとは違うことを言っているように思えます もしそうなら、それに対する反論としての >>593 は的外れだと思います >>583 も、わかればわかるけど、モナドはモナド則そのものは解りにくいと言ってることから、 入門レベル(最初の入り口)は通り過ぎているものと思われます。 > とりあえず最初の入り口から何でも違う違う言ってたら、誰もHaskell始められないよ。 それはそうですが、それとは別問題として、話が噛み合っていないような気がします
618 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/02/17(金) 13:03:38.71 ] 俺もあんまり「××のようなもの」っていう解釈はしない方がいいと思ってる。 部分的に機能がかぶるだけで類似性を見出していたのではそれに引き摺られて根本的なパラダイムの理解に進み難い。
619 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 13:25:22.45 ] type classってオーバーロードと型推論を両立するための妥協だから パラダイムみたいな高尚な概念じゃないよ
620 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 13:34:40.12 ] そんなこと言ったらOOPにだってパラダイムなんて高尚なもん 一つも無ぇっつーの
621 名前:615 mailto:sage [2012/02/17(金) 14:08:40.22 ] >>617 話の流れ見てなかった。すまんかった。 だからケンカしないで。
622 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 14:17:39.16 ] >>617 横レスだけど、 ・オブジェクト指向のクラスもHaskellの型クラスも 「抽象データ型」の実現という意味では似ている(>>615 ) ・オブジェクト指向の「インヘリタンス」とHaskellの「アドホック型多相」とは 型システム理論という意味では全く違う(>>593 ) ということじゃないのかな? 各用語の意味は、自分で調べてね
623 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 14:31:40.54 ] >>622 OOPの「継承」は部分型多相では?
624 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 14:34:40.69 ] >>623 オーバーライトや疑似変数selfなんてのは、部分型多相には存在しない概念/理論
625 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 14:46:11.83 ] >>623 なるほど。型理論勉強します。
626 名前:625 mailto:sage [2012/02/17(金) 14:46:38.91 ] >>624 だった
627 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 14:58:14.86 ] >>619 型クラスにはアドホック型多相という理論的基盤があるから、 それはいわゆる「高尚」と表現してもかまわないんじゃまいかと思う >>620 OOPの継承というのは直感的かつ曖昧なもので、その足場は非常に不安定 だからオブジェクト指向について10人に尋ねれば、10人それぞれが異なった解釈を返す そんな代物を「高尚」とは、とても呼べないんじゃまいかと思う
628 名前:627 mailto:sage [2012/02/17(金) 15:10:40.81 ] 訂正 X: OOPの継承というのは.... O: OOPというのは....
629 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 15:18:03.49 ] >>624 概念/理論は存在したり存在しなかったりするんだな・・・ それなら概念/理論を教えるよりも実装を教える方が良い
630 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 15:22:36.71 ] 例えばC++で言うところのオブジェクト指向とは ・情報隠蔽 ・継承 ・ポリモーフィズム でした
631 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 15:26:42.34 ] オーバーロードをアドホック多相と言いかえると何か凄そうに見えるテクニックはテストに出ます
632 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 15:39:17.02 ] >>629 >概念/理論は存在したり存在しなかったりするんだな・・・ え、オーバーライトや継承の概念を含む、いわゆる「継承の型システム」に関する理論は、 いくつか存在しているよ 足りないのは動的なメソッド結合(ダックタイピング)や動的な型付け(メタプログラミング)の理論 そんな完成した静的型付けな型システムの一つを実装したのがObjective-Caml ただし、(Objective-CがOOとCのハイブリッド言語であるように) 部分型多相と継承は理論的に全く違うから、両者のハイブリッドになっている 結果として、残念ながら「関数型パラダイムにおけるオブジェクト指向」という理想には程遠い
633 名前:632 mailto:sage [2012/02/17(金) 15:41:17.07 ] また訂正 X: オーバーライトや継承の概念を含む、.... X: オーバーライトや疑似変数selfの概念を含む、....
634 名前:はちみつ餃子 ◆8X2XSCHEME mailto:sage [2012/02/17(金) 15:48:26.21 ] >>633 また訂正ですね!!
635 名前:632 mailto:sage [2012/02/17(金) 16:17:42.90 ] >>634 ...orz すぐに分かってくれたようだから、あえて訂正しないw >>631 MLやHaskellでは、JavaやC++のようなNullPointerExceptionやBusErrorは発生しない 型に関するミスは、コンパイル時にすべて検出できる それが、理論的背景のある型システムの「凄さ」だと言える 次のテストに出すかもしれないから、よく復讐しておくように
636 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 16:40:57.39 ] 別に凄くない むしろ、すべてに責任をもつことはできないから責任を限定する理論が必要になる 型に関するミス以外は管轄外だし プログラマーが勝手に Nothing とか [] を使うのは自己責任
637 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 16:47:11.46 ] 言語の中でNullを扱わなくなっただけで、Nullみたいな値の濫用の余地は残るわけですよね。 昔のCOBOLはNULLが扱えなくて0000や9999などの値で成功失敗とか表現していましたし、そういうシステムはかなり多いと聞いています。 つまり、NULL無いんなら0000や9999でいいやと思うような人には型システムなんて意味ないんじゃないでしょうか?
638 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 16:56:36.58 ] >>611 他パラダイムや他言語を矮小化する一方で、 「無秩序でいい加減な」という意味のアドホック多相を あたかも高尚なものであるかのように 誇張しているだけだから、傲慢じゃなくて 滑稽だね。
639 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 17:06:52.05 ] ad hoc adv., adj. (特に)このために[の], 特別に[の], この場限りで[の], その場限りで[の]. 研究社 新英和大辞典 第6版
640 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 17:20:15.57 ] www.youtube.com/watch?v=z5rRZdiu1UE
641 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 17:21:05.17 ] カズヤマモトサンかっけー
642 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 18:09:29.51 ] この流れで質問させてください 型クラスってのは代数的構造のことではないんでしょうか?
643 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 18:48:32.83 ] >>642 そんなようなものだけどもうちょっと一般的 C aというインスタンスのメソッドの戻り値の型はa以外になり得る OrdとかShowとか
644 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 18:57:33.81 ] >>635 ヌルポは値に起因するバグで、型システムによる安全性の保証外なのはML系でも同じだよ。 MaybeはまんまC#のnullable<T>だし。 Haskellはパターンマッチでパターンを網羅してないとちゃんと警告出してくれたり、 Maybeモナドみたいな明示的にチェックを書かなくても済む仕組みその他諸々のおかげでバグりにくいって話で、 コンパイルで検出出来てるわけじゃないし、発生しないわけでもないよ。
645 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 19:12:32.81 ] >>642 型クラスもデータ型もメモリ上のビットも代数的構造
646 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 19:24:43.41 ] NullPointerExceptionはバグなの?
647 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 19:29:54.49 ] >>644 Maybeはぬるぽがっされないような、、、
648 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 19:43:26.86 ] >>645 そういう文脈で代数的構造と言った場合の「代数的」とはどういうものですか?
649 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 20:02:36.22 ] >>648 代入可能なこと 定数以外は代数的構造
650 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 20:55:05.10 ] >>647 トリビアルな例だけど、常にJustな事が期待されてる変数alwaysJust :: Maybe aがあったとして、 1) case alwaysJust of --これは警告がでるけど Just x -> x 2) let (Just x) = alwaysJust in x -- こんなドタコなコードは書かないけど… 3) -- fooの使用者からは定義かドキュメントを見ない限り、例外が上がってくる可能性がある事は知りようがない foo :: a -> a foo v = fromJust $ do -- fromJustってどういうケースで使うんだろか…。 x <- alwaysJust v' <- Just v ... return v' もし、alwaysJustがバグっててNothingだったら、上の例は全部例外あげてくる。 特に3番目みたいな外からは一見安全に見える型の関数でも、ガッされない絶対の保証があるわけでも、検出できるわけでもないよ。 (1番目以外は警告すらでないし) Maybeからそれると、Preludeの関数でもListのheadとか(!!)とか、Enumのsucc、predとかreadやArrayとか、 プログラマがちゃんと保証しなきゃいけない関数も結構あるし。
651 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 21:29:13.08 ] Maybeからそれると、Intも危険だよね オーバーフローして意図しない挙動をする危険性があるから プログラマがちゃんと保証(ry
652 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 21:31:32.72 ] RWHを買ってきました あしたRWHを一日かけて読み切ります 何か注意点とかありますか
653 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 21:35:16.99 ] 急いで読まない
654 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 21:59:05.59 ] コードを写経して動かなくても文句言わない
655 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 22:12:05.67 ] なんか、ものすんごい勢いでレスついてるね。 みんな暇か?
656 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 22:15:37.70 ] 詰まったり解らなかったり動かなかったら本家(>>5 の上)のコメントなんかも参照 一日で読み切れなくても泣かない投げない
657 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 22:19:09.47 ] >>652 最初からまじめに読んでいくと冗長度が高くて飽きる。飛ばして途中から見ると何言ってるのか分からない。 昆虫本には良くあることです
658 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 22:28:48.44 ] 今 GHC 7.4.1 の環境です デュアルコアのCPUを使ってて、GHC の RTS オプション -N2 で、 2スレッドが平行して動くことは確認できました 今 Intel のハイパースレッディング(HT)機能を持つ CPU に変更する検討をしていますが、 GHC のマルチコア機能はHTに対応するのでしょうか コア数を返す関数がHTを考慮した論理コア数を返す事はリリースノートで確認しましたが、 実際に平行して動くスレッドの数として正しく機能するかという質問です つまり、例えばコア数2のHT機能を持つCPUで -N4 を指定すれば、 ちゃんと4つのスレッドが平行して動くのでしょうか
659 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 22:30:08.58 ] RWH一日は無理だろ
660 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 23:04:02.43 ] >>658 >GHC のマルチコア機能はHTに対応するのでしょうか => Yes >ちゃんと4つのスレッドが平行して動くのでしょうか => No ちゃんとの意味にもよると思いますが 詳しくはwikipediaを
661 名前:デフォルトの名無しさん mailto:sage [2012/02/17(金) 23:25:23.88 ] >>660 > ちゃんとの意味にもよると思いますが 例えば RTSオプションで -s を指定して実行して得られる情報において、 コア数2のCPUよりコア数2HTのCPUの方が、 よりコア数4のCPUに能力的に近いと分かる結果が計測値として出るか、 という意味です
662 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 00:28:18.38 ] >>661 だったらあらためてNoです HTではほとんど性能向上しません(だったような
663 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 09:15:59.39 ] HTって遊んでるユニットを怠けさせないで酷使させる機能に過ぎないから 遊んでるユニットが登場しないサイクルでは機能しない なんちゃって2倍でしょ
664 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 09:36:00.16 ] カズ山本 ttp://redstar-s.blogzine.jp/redstar/images/softbank_hawks_store-img444x600-1121339119kazu_yamamoto.jpg
665 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 18:34:36.09 ] RWHどうなった?
666 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 19:03:40.00 ] >>662 コア数2のノーパソから手頃かに価格のコア数2HTのノーパソに買い換えようかと思ってましたが、 Haskell 絡みではあまり幸せになれなさそうですね コア数4くらいのがもう少し安くなるまで待つことにしました >>663 なるほど、妙に納得しました
667 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 19:09:24.78 ] 正確に2倍になるわけじゃないが、1.7倍ぐらいは楽勝でいくだろw
668 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 19:38:41.19 ] 1.7倍どころかインテル自称で20%増し程度じゃないのか その上、場合によっては遅くなったり、不具合出るオマケ付きっつー… まぁHTとHaskellは殆ど関係ないんじゃないか?
669 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 21:01:38.89 ] HTで速くならないのはコンパイラがそういう最適化をしてないからだろ 1ヶ月ぐらいCPUぶん回す数値計算ならHT向けの最適化をやる意味はあるだろうが、 特に用途も決まってないHaskellが特定のCPU命令セットの最適化して意味があるとは思えないが
670 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 21:15:03.37 ] インテルの発表で sandybridgeで8割に上がったような話があったような気がする。 たしか、HT:ONの場合、 マルチコア全部使い切るようなプログラムのスループットは1->0.8x2x(smp8コア/4コアの効率比が1として)=1.6ぐらい。 ただし、シングルプロセスの実行部分は、 邪魔されて0.8ぐらいまで落ちる場合があるが、 OSのプロセス管理で、なるべく占有できるところに配置される。
671 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 21:16:07.06 ] いままでは、7割、7.5割と上がってきてたのが8割。
672 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 21:19:56.22 ] コンパイラがいくらがんばっても演算密度が十分濃ければSMTで性能は上がらないでしょ
673 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 21:21:34.04 ] >>669 HTの効果を利用するには専用の命令セットを叩く必要があるのでしょうか 今までずっと、特に意識すること無く自動的に各HTに処理を割り振ってくれると思ってました repa を使ってるとダイレクトにマルチコアの恩恵を受けるので、 HTで更に2倍になるならいいなぁと思ってたんですが・・・
674 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 21:25:55.33 ] ようするに、HTで4PC/8VCなら、 OFF:1-4が、 ON:0.7-5.6、0.75-6.0、0.8-6.4 とP4のころに比べて進化してきてるような話だったと思う。
675 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:14:43.49 ] >>673 すまん。HT用のインストラクションじゃなくて、HT用に処理をマルチスレッドに分解したり、 スレッドに適したキャッシュ配置にするような特定のCPUアーキテクチャ実行モデルを仮定した最適化という意味だった ICCとかがそういう最適化を前面に出してるが、実際にはそれほど単純には速くならない
676 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 22:50:19.80 ] >>675 なるほど、でも > HT用に処理をマルチスレッドに分解したり この部分は、元々シングルスレッドだったものを、 コンパイラが「勝手に」上手くマルチにしてくれることは無い という意味ですよね もともとマルチスレッドで Haskell のソースコードを作っていたら、 実行時に勝手に HT に振り分けてくれないのですか? そんな単純ではない?
677 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:00:34.29 ] 文字列で日本語使えないのでしょうか?
678 名前:675 mailto:sage [2012/02/18(土) 23:03:27.58 ] >>676 近所でICCでMPIをやってる人がいたが、期待したほど速くならなくて困ってた なので、Haskellもそんなにうまく速くなるわけではないと思ってるけど、 速くなるのなら型システムよりもすごいことなんじゃないかと思う
679 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:11:59.78 ] >>677 もう少し問題をハッキリさせようか 今の Haskell は標準で UTF-8 でエンコードされた文字データを処理できる ここでいう処理というのは、Char 型の変数にデータを束縛できるという意味 >>677 は何が問題だと感じている? あと環境も教えてくれ(OS やコンパイラのバージョンなど)
680 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:19:22.20 ] >>678 例えば、Haskell で repa を使って画像データを配列に読み込んで、 それに対してぼかし処理とか FFT 処理とか施したりする場合、 2コアCPUを使って RTS オプション -N1 と -N2 とでは全く処理速度が違う 驚くと同時に感動すら覚える HTを持つCPUも、コアが増えたのと同程度とは期待していないが、 1.5倍程度は速くならないかなと思ってたんだけど だれか試してくれないかな
681 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:25:09.94 ] >>679 CSVファイル(Excelで出力したShift_JIS)を読み込んで、lines関数で分割した後、id関数に入れて、そのままunlinesしてファイルに出力したら日本語の場所が文字化けしてるです Haskellそのものの仕様で使えないのか、入力系かParsecか出力系のエラーで使えないのか、特殊な文字列データ型を入れれば使えるのか知りたいです Windows7、The Glorious Glasgow Haskell Compilation System, version 6.12.3 です もしHaskellそのものの仕様で日本語が使えないのならCSVファイルを編集して日本語部分を全部ASCIIコードでローマ字にします
682 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:44:47.47 ] >>681 下記のコードで全く問題なく Shift_JIS をロードして Shift_JIS で保存された writeFile "test2.txt" =<< return . unlines . id . lines =<< readFile "test.txt" [環境] Windows7 GHC 7.4.1
683 名前:デフォルトの名無しさん mailto:sage [2012/02/18(土) 23:49:00.05 ] >>680 repaすごいな ここまでマルチコア意識してるなら速くなりそうな気がするな
684 名前:682 mailto:sage [2012/02/19(日) 00:40:54.82 ] >>681 ちなみに、>>682 のコードの id の部分を map (take 3) とかにした場合、 保存されたテキストを Shift_JIS として解釈する(開く)と文字化けして見える 何も加工しなければ、読み込んだデータの形のまま保存される (例えば SQL で Shift_JIS の文字列を読み込んでそのまま出力する場合も含む) 文字単位で加工したければ、 読み込み前に CSV ファイルを予め UTF-8 に変換しておくか、 あるいは読み込んだ後に UTF-8 に変換する必要がある (例えば iconv パッケージを使う) そして、例えば Data.String.UTF8(utf8-stringパッケージ)を使って加工するとか
685 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 01:50:54.96 ] >>684 ParsecでCSVファイルの解析をためしたら文字化けしてたから、idとかに変えていろいろ試してました これ結局、Parsecを間に入れてファイル入出力する場合は文字コードの変換を明示しないとダメということなんですね
686 名前:682 mailto:sage [2012/02/19(日) 02:13:53.28 ] >>685 そう Parsec で日本語を処理したいのなら、処理前に UTF-8 にエンコードしないとダメ 参考になりそうなページ snak.tdiary.net/20110104.html
687 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 09:55:24.28 ] あれ、Hackage落ちてる?
688 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 15:43:45.81 ] 諸君、お薦めのライブラリは何かね?
689 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 15:51:43.82 ] prelude
690 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 15:58:31.27 ] Data.List もなかなか
691 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 15:58:44.91 ] こやつめ!ハハッ!
692 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 16:00:51.90 ] 僕はForeignちゃん!
693 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 21:52:36.96 ] すみません、質問させてください。以下のコードが、なぜか意図した通りに動作しません。 (一応なるべく簡略化したので、このコード自体に深い意味はないです) combination n r =div (product [1..n]) (product [1..r] * product [1..n-r]) f n = length (takeWhile (<=4000) (map (combination n) [1..5] )) hoge = [n - f n | n<-[20]] 私はこの hoge を [20 - f 20] のつもりで書きました。GHCで [20 - f 20] と入力すると 17 と返ってくるので、 hoge は [17] になっていてほしいです。 なのに、なぜか hoge と入力すると [15] が返ってきます。どなたかどこが誤っているのかわかる方がいらっしゃったら教えていただけないでしょうか。
694 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:36:50.85 ] >>693 product [1..20]がオーバーフローしている。 ghciで [20 - f 20] としたときはたぶんf 20の20がIntegerとして評価されているからオーバーフローが生じていない。 ghciで[20 - f (20 :: Integer)]と[20 - f (20::Int)]を比較して、考えれば、言っていることが分かるだろう。
695 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:39:24.02 ] >>693 原因は >>694 の通り 解決方法の一つは、f 関数内で length 関数の代わりに genericLength 関数を使う
696 名前:694 mailto:sage [2012/02/19(日) 22:43:26.21 ] import Data.ListしてlengthのかわりにgenericLengthを使えば解決するみたい
697 名前:695 mailto:sage [2012/02/19(日) 22:43:45.05 ] すまん、 その >>693 の(型シグネチャを省いた)例なら、 genericLength 関数を使えば自動的に全て解決するという意味 実際のコードで型シグネチャを書いてる場合、 例えば combination 関数の型が Int -> Int なら、 それも Integer に直す必要がある
698 名前:694 mailto:sage [2012/02/19(日) 22:44:07.36 ] だから、リロードしろとorz
699 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:54:59.05 ] やっぱりIntは撲滅すべきだわ
700 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 22:58:28.08 ] 単一の式では、nとnは同じ型でないといけないけど、 20と20が同じ型である必要はないってことだね 「lengthがIntegral a => a型ではなくInt型を返すのはまったく馬鹿げたこと」 だっけか
701 名前:デフォルトの名無しさん mailto:sage [2012/02/19(日) 23:21:56.89 ] >>699 それは無い ただ、オーバーフローしたのならしたと分かるような、 デバッグ用の RTS オプションとかあるといいな
702 名前:693 mailto:sage [2012/02/19(日) 23:52:01.42 ] >>694-697 ,700 なるほど、そういうことでしたか。型宣言は省略していたので、おっしゃる通り genericLength という関数を(初めて見ました)使うことで解決しました。 質問前にコードを書き換えて実験していたとき、 hoge = [f n | n<-[20]] とするとちゃんと [f 20] に一致するのが不思議だったのですが、それも >>700 を読んで合点がいきました。 単に f n と書くと Integer 型として扱われるが、n - f n と書いた場合には n が Int 型になってしまっていたのですね。それでオーバーフローしたと。 自分では絶対に気づきませんでした…。お三方(お二方?)ご親切にありがとうございます。
703 名前:デフォルトの名無しさん mailto:sage [2012/02/20(月) 12:44:31.59 ] windowsでgtk2hsの最新版に-threadedつけたら普通にぶっ壊れてワロタ その問題は直ったって言ったじゃないですかー!
704 名前:デフォルトの名無しさん mailto:sage [2012/02/22(水) 01:04:11.99 ] wondowにこだわってたら、面倒は多いだろうからな。