[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 04/25 05:23 / Filesize : 232 KB / Number-of Response : 786
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

関数型プログラミング言語Haskell Part17



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にこだわってたら、面倒は多いだろうからな。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<232KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef