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

このエントリーをはてなブックマークに追加
1a36 ◆K0BqlCB3.k
2a36 ◆K0BqlCB3.k :2011/10/07(金) 12:28:54.57
関連書籍
・Introduction to Functional Programming Using Haskell (2nd ed.)
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0134843460/

・Haskell: The Craft of Functional Programming
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0201342758/

・The Fun of Programming
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0333992857/

・The Haskell School of Expression: Learning Functional Programming Through Multimedia
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0521644089/

・入門Haskell
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4839919623/

・ふつうのHaskellプログラミング
 ttp://item.rakuten.co.jp/book/4052963/

・Programming in Haskell
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0521692695/

・Real World Haskell
 ttp://www.amazon.co.jp/exec/obidos/ASIN/0596514980

・関数プログラミングの楽しみ
 ttp://www.amazon.co.jp/exec/obidos/ASIN/4274068056
3デフォルトの名無しさん:2011/10/07(金) 12:29:05.41
>>1000でスレが立つとか割と久々に見た
4a36 ◆K0BqlCB3.k :2011/10/07(金) 12:29:39.25
5デフォルトの名無しさん:2011/10/07(金) 12:48:08.04
>>3
テンプレ書いてる途中に汚すな馬鹿
6a36 ◆K0BqlCB3.k :2011/10/07(金) 12:59:56.19
・Haskell API search Engine
ttp://www.haskell.org/hoogle/

【簡単な使い方】
1.検索バーに関数名を入れて検索
 例 map
2.検索バーに型名を入れて検索
 例 (a -> b) -> [a] -> [b]
7a36 ◆K0BqlCB3.k :2011/10/07(金) 13:01:00.52
テンプレ以上
議論をお続け下さい
8デフォルトの名無しさん:2011/10/07(金) 13:16:30.50
>>1

9デフォルトの名無しさん:2011/10/07(金) 13:58:10.81
じつによくやった >>1
10デフォルトの名無しさん:2011/10/07(金) 20:10:08.39
これならPerl忍者がスレ立ててほしかったわ
11デフォルトの名無しさん:2011/10/07(金) 20:49:56.65
忍者と忍者ウォッチャーは巣に帰ってくれ。スレの質が必要以上に下がりすぎる。
12デフォルトの名無しさん:2011/10/08(土) 00:49:29.33
このスレはIQ123以下は来るなよ
13デフォルトの名無しさん:2011/10/08(土) 00:51:17.26
私のIQは2000万です
14デフォルトの名無しさん:2011/10/08(土) 02:30:15.86
>>13
こういうのは、だめなんだ。難易度的に簡単すぎて面白くないんだ。
 元の台詞を”全く変更しないで”意味が通る場合にのみ書くようにしよう。
15デフォルトの名無しさん:2011/10/08(土) 07:52:00.23
14 名前:デフォルトの名無しさん[sage] 投稿日:2011/10/08(土) 02:30:15.86
>>13
こういうのは、だめなんだ。難易度的に簡単すぎて面白くないんだ。
 元の台詞を”全く変更しないで”意味が通る場合にのみ書くようにしよう。

16デフォルトの名無しさん:2011/10/08(土) 07:52:31.64

こうか
17デフォルトの名無しさん:2011/10/08(土) 08:05:12.52
不動点
18デフォルトの名無しさん:2011/10/08(土) 09:02:40.31
ウイットに富まないアイロニーのスレですね
19デフォルトの名無しさん:2011/10/08(土) 09:20:35.39
ウェットには富んでるけどな。
汗でしっとりしててヤな感じ。
20デフォルトの名無しさん:2011/10/08(土) 09:23:09.97
スウェットですか
21デフォルトの名無しさん:2011/10/08(土) 09:56:34.49
さて仕切り直すか、雑談は別スレでどうぞ
Haskellを始めたのはいつからですか?
22デフォルトの名無しさん:2011/10/08(土) 10:03:29.06
1989年ごろ
23デフォルトの名無しさん:2011/10/08(土) 10:04:21.93
昨夜の3:00過ぎから
24デフォルトの名無しさん:2011/10/08(土) 10:09:47.74
学び始めたばかりだが、
テキストファイル中のaをAにするフィルタが
すごく簡単に書けるんだな。驚いた。
他の言語ではこうはいかない。
25デフォルトの名無しさん:2011/10/08(土) 10:43:14.97
一月半程前かしら
最初はLearnYou読んでたけど冗長過ぎ要点得なさ過ぎでブチ切れてRealWorld読んでるなう。
まだI/Oのとこまでだけど、
モナドがHaskellの静的な部品をつなぐホットグルーの様なものだって認識に達してるなう。
26デフォルトの名無しさん:2011/10/08(土) 10:56:56.11
>>24
ゴルファーあらわる
ちなみにどれくらいの長さになった?
27デフォルトの名無しさん:2011/10/08(土) 11:09:35.28
Real Worldは良くなかったわ。最初の方は話が無駄に長いのはいつもの動物本通りだし、と思うと急に説明がコード例に追いつかなくなってる
28デフォルトの名無しさん:2011/10/08(土) 11:13:36.68
>>27
webで公開してる良文書教えてちょんまげ。
http://www.haskell.org/haskellwiki/Learning_Haskell
上のリンクの中で良かったものとか、ここに載ってないものとか、知りたい。
29デフォルトの名無しさん:2011/10/08(土) 11:26:35.26
3年前から
趣味グラ魔なのでかなりゆっくりペースだが
最近まではghciで関数チマチマ作ってただけだし
30デフォルトの名無しさん:2011/10/08(土) 12:11:40.29
約1年前から。
まともにやり始めたのは今年の7月ぐらいから。
31デフォルトの名無しさん:2011/10/08(土) 12:26:07.94
使い始めてから大体1~2週間ぐらい
Learn You Haskellは読み終えたけど
全然冗長には感じなかったから読み方の問題だろ
32デフォルトの名無しさん:2011/10/08(土) 12:39:59.71
Learn You ~はそれなりに面白かったよ。だいたい一ヶ月かけて読んだ。
いまはReal Worldに移ってるけど、時々日本語の意味がわからないのが
難点。何でもかんでも感じに訳せばいいってもんじゃないと感じさせる。
でもこの辺にSICPの訳の影響を感じるところかも。
33デフォルトの名無しさん:2011/10/08(土) 12:40:17.01
こいつらジャップ
やってることがじゃっぷ

ジャップは小物を愛する
薄型コンパクト

お前らの顔は、薄い
お前らの声は、小さい
お前らの身長は、チビ
お前らの財産は、無い
お前らの体格は、ひょろい
お前らの声は、きもい
お前らのおもしろさは、無い
お前らの脳みそは、欧米より劣ってる
お前らの生産性は、無い
お前らの目的は、無い
お前らの趣味は、人の影響

早く死ね糞ジャップ
34デフォルトの名無しさん:2011/10/08(土) 12:41:27.44
漢字←感じ。
Haskellの勉強をしていると、データ構造を凝りたくなってしまう。
35デフォルトの名無しさん:2011/10/08(土) 12:43:31.95
お前ら英語できないじゃっぷは早く死ねばゴミクズ
早く死ね

Haskellやっても意味が無い
3D,2Dオンラインゲーム作ってるやつのほうが凄い
プログラミングレベルでもそいつらのほうが上
おもしろさも
Haskellとか意味が無い
おもしろさ、利便性、インフラも支えられない、ゴミの言語
さっさと死ねよゴミ
ゴミ言語

お前らは、ゴミ
お前らは、英語ができない
お前らは、数学力が無い
お前らは、鼻がつぶれてる
お前らは、キモメガネ
お前らは、くさい
お前らは、ネットワークプログラミングができない
お前らは、ゲームが作れない
お前らは、日本人
お前らは、まつもとひろゆき信者
36デフォルトの名無しさん:2011/10/08(土) 12:44:38.63
おいしさながもちジャップロック
37デフォルトの名無しさん:2011/10/08(土) 12:45:49.65
インフラを支えてる言語といえばCOBOL
38デフォルトの名無しさん:2011/10/08(土) 12:46:32.38
そんなあなたにお勧めなのがZipperです
39デフォルトの名無しさん:2011/10/08(土) 13:36:01.80
>>32
時々日本語の意味が…、自分も同じ感じがした。分からないまま単に英語訳した感じやね。
入門書のつもりで買ったけどそうじゃなくて、タイトル通り使用例を眺めて使い道を創造するのに用いるのが良さそう。
最初は別の本かPDF拾ってくるのが正解か
40デフォルトの名無しさん:2011/10/08(土) 14:49:12.57
FFI の質問です

C 言語で書かれた、FILE 構造体のポインタを引数として取る関数を
Haskell 側から使いたい場合、Haskell の openBinaryFile 関数などで得た
Handle 型の値は使えないのでしょうか(Handle 型を CFile 型に変換するなど)

もしかして、C 言語の open 関数も import して使う必要がありますか
41デフォルトの名無しさん:2011/10/08(土) 15:22:55.70
>>40
使えない
素直にFILE*を作るCライブラリを呼び出す

どうしてもHandleから作る必要があるなら fd を通す
handleToFd で Handle から fd にして
C の fdopen で fd からFILE* にして
とか

FILEとかHandleはライブラリも状態を持ってるから直接のマッピングは無理
fd は状態をカーネルが管理しているから、ライブラリ間では比較的ポータブルだけど
42デフォルトの名無しさん:2011/10/08(土) 15:43:03.24
>>40
open関数? openはファイルディスクリプタを返して、FILE構造体へのポインタを返すのはfopenでは?

一般論としては、CレベルのfdやFILE *を使いたいなら、Cのopenなりfopenなりをインポートする必要がある。
GHCの場合、System.Posix.Internals.c_open が Cのopenのラッパーなので、ファイルディスクリプタで良いなら、何とかこれを呼べばよいだろう。
でも、FILE *のほうは自分でfopenをimportするしかないと思う。
4342:2011/10/08(土) 15:45:48.72
handleToFdなんて知らんかった。
そういうものがあるなら、オレの書いたことは無駄だったな。
44デフォルトの名無しさん:2011/10/08(土) 15:56:30.32
>>33
あはは
その程度で劣等感感じてるのは中国人か韓国人だけ
欧米人も日本人に劣等感感じてるの知ってから、気が楽になったよ
45デフォルトの名無しさん:2011/10/08(土) 15:57:34.67
>>41,42
ありがとうございます
すいません、fopen でした(C を久しく触ってないもので・・・)

記憶している状態がそもそも違うから、簡単に変換できるわけではないのですね
C の関数が使えない(SDK を入れてない)ので、C の fdopen を呼ぶこともできない

問題に突き当たったライブラリは libpng なんですけど、
デフォルトでは FILE* を必要とするのですが、どうも
独自のIO処理が使えるようにコールバックの仕組みも用意されているっぽいので、
それでなんとか対応できないか検討してみます
46デフォルトの名無しさん:2011/10/08(土) 16:09:49.12
>>44
お前はイエローなんだよ
ジャップ
お前はそうやって ”欧米人も”って欧米を引き合いにしないと
気が楽にならないジャップ
お前はジャップ
消えろ
47デフォルトの名無しさん:2011/10/08(土) 16:12:44.15
>>44
ばっちいものに触ると、お前もばっちくなるよ
48デフォルトの名無しさん:2011/10/08(土) 16:24:18.74
Haskellの学習を始めたばかりですが、Haskellで作成されたアプリケーションのソースを読んで、自分がまだ理解出来ていない所を補強したいと思っています。
概出だとは思いますが、皆さんはどんなのを読まれたんでしょうか?
49デフォルトの名無しさん:2011/10/08(土) 16:30:33.77
ふつける
Learn you ~
Real world
50デフォルトの名無しさん:2011/10/08(土) 16:44:16.12
アプリケーションと言えばXMonadとYiぐらいしか無いな
あぁあとghc-pkgか
51デフォルトの名無しさん:2011/10/08(土) 17:01:10.20
>>46
>>46
>お前はそうやって ”欧米人も”って欧米を引き合いにしないと
>>33
言い出しっぺ乙
52デフォルトの名無しさん:2011/10/08(土) 17:02:11.57
アプリを読んだ記憶がない
ライブラリならGHC.IO、Grapefruitとか
53デフォルトの名無しさん:2011/10/08(土) 17:15:29.98
コードを読んだ記憶がない
論文ならそれなりに
54デフォルトの名無しさん:2011/10/08(土) 18:17:59.81
ここで挙げられてるような本以外でコードを読んだとしたらPreludeとか自分が使いたくなったライブラリくらい。
5548:2011/10/08(土) 18:19:23.10
皆さん、有難うございます。
ライブラリを読む、というのは気がつきませんでした。
Haskell導入時に、Haskellでコンパイルするやり方がある、と聞いた時点で気付くべきでした。
56デフォルトの名無しさん:2011/10/08(土) 19:44:03.09
haskell unixコマンド
でググって出る最初のページも参考になるよ
57デフォルトの名無しさん:2011/10/10(月) 06:16:11.88
オナニー言語の特徴だよね < 論文でしかコード読まない
58デフォルトの名無しさん:2011/10/10(月) 07:17:00.11
実用する気とか全然なくて研究のプラットフォームとしか思ってない奴らが居るからな
理念からしてそいつら向けの部分があるし、まあ仕方ない
59デフォルトの名無しさん:2011/10/10(月) 09:21:22.01
> 理念からしてそいつら向けの部分

って、どの理念?
60デフォルトの名無しさん:2011/10/10(月) 10:48:04.29
in placeな書き換えがないこと(純粋な関数型言語であること)には、
実用的な意味が全くない、と思ってるんじゃないかな。

並列実行とか最適化に全く興味がないプログラマなら、そう考えるんだろうね。
6148:2011/10/10(月) 11:10:21.99
世間で「実用」と考えてるものは、実態はアドホックな投資。
研究は先行投資。
本来はスパンの違いだけの話なんだが、研究の振りをした連中も確かに一部には居る。
62デフォルトの名無しさん:2011/10/10(月) 11:25:24.78
いろんな人がいますからね。実際は「実用」ってマジックワードとして
使われてるんだと思うよ。突き詰めると定義が曖昧ですから。
63デフォルトの名無しさん:2011/10/10(月) 11:29:34.65
プログラミングできる言語ならすべて実用的。
64デフォルトの名無しさん:2011/10/10(月) 11:30:58.71
単純に難しいから流行らない、流行らないから資産が蓄積しない、資産がないので簡易に金儲け用のソフトが書けない、だから実用性がないって言われてるだけじゃ
65デフォルトの名無しさん:2011/10/10(月) 11:31:26.56
さすがにBrain*uckではOSのAPIすら叩けないからプログラミングできるとはいえないけどな。
66デフォルトの名無しさん:2011/10/10(月) 11:32:08.49
>>64
難しいかどうかって人それぞれなんじゃないの?
俺はCより簡単だと思ってる。
67デフォルトの名無しさん:2011/10/10(月) 11:34:39.46
HaskellよりCのほうが難しいと言ってる人は大抵
どっちの言語でもHallo Worldくらいのプログラムしか書けない
68デフォルトの名無しさん:2011/10/10(月) 11:35:04.25
Hallo!
69デフォルトの名無しさん:2011/10/10(月) 11:36:31.61
>>67
誹謗中傷だろ、それ。
70デフォルトの名無しさん:2011/10/10(月) 11:40:24.83
根拠が無い主張ばっかで喋り場と化すぐらいネタが無い
71デフォルトの名無しさん:2011/10/10(月) 11:46:43.33
Hello Worldは書いた事あるがHallo Worldは無いな
72デフォルトの名無しさん:2011/10/10(月) 11:49:49.89
「Hallo Worldくらいのプログラム」が単純なプログラムだろうと主張するのは
Hallo Worldさんに対する誹謗中傷
もしかしたら、すさまじいプログラムかもしれない可能性を、意図的に排除してる
73デフォルトの名無しさん:2011/10/10(月) 11:50:43.69
きっとhalloworkいきなんだよ。:-)
74デフォルトの名無しさん:2011/10/10(月) 12:01:42.89
hello worldって言ったら画面にhello, world!って表示するだけのプログラムだろ。
俺をバカにしてるのか?
75デフォルトの名無しさん:2011/10/10(月) 12:02:03.74
さて
haskell情報で重宝してるところってどこ?
planet haskell,
stackoverflow
haskell cafe
などあるけど
76デフォルトの名無しさん:2011/10/10(月) 12:03:24.41
github
77デフォルトの名無しさん:2011/10/10(月) 12:07:51.79
portal.acm.org
78デフォルトの名無しさん:2011/10/10(月) 12:22:16.16
>>75
google search
79デフォルトの名無しさん:2011/10/10(月) 12:24:28.38
80デフォルトの名無しさん:2011/10/10(月) 12:28:56.80
かずさんlispからすっかりHaskellに染まっちゃって・・・
81デフォルトの名無しさん:2011/10/10(月) 12:34:18.84
金持ちはportal acm
貧乏人はciteseerx
82デフォルトの名無しさん:2011/10/10(月) 12:47:08.08
山根「山根がやられたようだな……」 山根「だ」 山根「が」 山根「奴」 山根「は」 山根「我」 山根「ら」 山根「山」 山根「根」 山根「二十一」 山根「天」 山根「王」 山根「の」 山根「中」 山根「で」 山根「最」 山根「弱……」
83デフォルトの名無しさん:2011/10/10(月) 12:50:10.79
>>75
関連して Haskell Wiki のインデックスから色々飛べる
あと GHC Wiki もなかなかディープな情報が得られる

Haskell Wiki
http://haskell.org/haskellwiki/Category:Haskell

GHC Wiki
http://hackage.haskell.org/trac/ghc/wiki/TitleIndex
84デフォルトの名無しさん:2011/10/10(月) 15:08:15.53
大抵の言語で解ける様な、単純か又はアルゴリズムが判ってる問題は、速読重視、読み易さ重視、なんでも好きなのを選べば良い。
そうじゃない領域の問題は、言語を選ぶ必要があるが、全てを唯一つの言語で無理矢理カバーする必要も無い。
IBMのSシリーズブロトタイプ開発にAPLを使った例とかもある。
85中2:2011/10/10(月) 15:58:57.61
Haskellはじめたよ
はじめた理由聞きたいかな?
86デフォルトの名無しさん:2011/10/10(月) 16:20:23.40
べつに

大いに楽しむといいよ
87デフォルトの名無しさん:2011/10/10(月) 18:34:37.05
おすすめのグラフ作成パッケージありますか?
gnuplotやchartを使ってますが
他にあれば知りたいです
88 ◆QZaw55cn4c :2011/10/10(月) 18:43:59.61
>>87
R と答えてほしいのかな?
http://ja.wikipedia.org/wiki/R%E8%A8%80%E8%AA%9E
89デフォルトの名無しさん:2011/10/10(月) 19:00:38.56
チャート作成でRは鉄板。
90デフォルトの名無しさん:2011/10/10(月) 19:54:01.63
>>59-60
Haskellの開発動機として、応用だけじゃなく研究の道具ってのがったのはたとえばA History of Haskellに書いてある
91デフォルトの名無しさん:2011/10/10(月) 19:55:51.27
Chart でいいと思う

どんなグラフを求めてるのか知らんが、
僅かなコードでここまでできるなら十分だろ
png に保存もできるし
http://dockerz.net/twd/HaskellCharts
92デフォルトの名無しさん:2011/10/10(月) 19:56:49.17
>>90
だから、それはどういう理念なんだよ
自分の言葉で説明しろよ
93デフォルトの名無しさん:2011/10/10(月) 20:11:54.53
incanterも少しは期待できる。といってもあれは現代のxlispstatだけどな。
94デフォルトの名無しさん:2011/10/11(火) 05:50:55.78
>>92
まずは自分が説明しろ
95デフォルトの名無しさん:2011/10/11(火) 07:13:25.74
>>94
意味が分からない
何で俺なの?

>>58 が「理念からして・・・」と言ってるんだよ

「実用する気とか全然なくて研究のプラットフォームとしか思ってない奴ら向きの理念」
とは何かを自分の言葉で説明すべきは >>58 本人でしょ
96デフォルトの名無しさん:2011/10/11(火) 22:45:56.60
横レスだが、イギリスの各大学でいろいろな関数型言語が別個に開発されていて、
またオープンソースもそれほど盛んな時代ではなかったので、
大学を異動すると前の処理系は使えず、別の処理系を作り始める必要がある場合があった。
これでは人的リソースの無駄なので、
イギリス大学内での共通言語を目指してHaskellプロジェクトが立ち上がった。
97デフォルトの名無しさん:2011/10/11(火) 22:46:41.76
hajimehoshiは童貞
98デフォルトの名無しさん:2011/10/12(水) 00:36:19.86
配列から始まってSTとかStateとかData.Arrayの傘下のSTUArrayとか色々調べてるんだけど日本語の情報があまりなくてよくわからない
こういうものの情報はやはり英語探らないと駄目なんだろうか
99デフォルトの名無しさん:2011/10/12(水) 01:25:13.82
キャチアップし続けてる人がまわりにいれば聞けるんだろうなあ。勉強会後の飲み会で話すとそう思う。

モダンHaskell(モダンPerlっぽいいいまわし)みたいな本が日本語あれば、
pythonみたいな誰かに教えたい欲求が高いチューター層が増加して、
モダンHaskell入門ハッカソソンとか開催されるようになるかも。
むしろ、初心者で読書会はじめて、そこからチューター呼んで開催するとか誰かしてくれませんか。
100デフォルトの名無しさん:2011/10/12(水) 01:30:21.83
twitterとかで、haskell速くならないどうして?やっぱりおそいの?っていう人の
サンプルコード添削してるの見てると、使ってるライブラリの世代や発想が違う感がバリバリあったりする。
101デフォルトの名無しさん:2011/10/12(水) 01:35:49.49
大学に入学してはどうですか?
102デフォルトの名無しさん:2011/10/12(水) 01:44:10.90
いい年こいて反抗期
103デフォルトの名無しさん:2011/10/12(水) 09:10:01.47
3千万溜まったら仕事辞めて大学いく
104◇QZaw55cn4c :2011/10/12(水) 12:19:07.94
うひょんのんおんwwwオンカカッカッwwwwwwwwwwwwwwwwwwwwww
105 ◆QZaw55cn4c :2011/10/12(水) 20:05:27.08
>>104
人を騙るのならちゃんとトラップまで騙ってください。
106デフォルトの名無しさん:2011/10/12(水) 21:16:19.32
7月リリース予定でどんだけ遅れてんだ
107デフォルトの名無しさん:2011/10/12(水) 22:24:44.61
7.4までお預けですねわかります・・・
108デフォルトの名無しさん:2011/10/13(木) 01:41:12.79
ラーメン食べたい
109Perl忍者:2011/10/13(木) 19:07:32.82
ここって童貞しかいなさそうだね
110Perl忍者:2011/10/13(木) 19:08:00.73
どうせこいつら風俗いった程度の童貞
111デフォルトの名無しさん:2011/10/13(木) 19:49:31.55
板全体がそんな感じじゃ。。。
112デフォルトの名無しさん:2011/10/13(木) 21:15:17.11
忍者は処女なんだぜ
113デフォルトの名無しさん:2011/10/13(木) 21:56:46.05
ドキドキしてきた
114デフォルトの名無しさん:2011/10/14(金) 00:10:20.41
あまりいいたくないけど、奇妙な連中が常駐し始めたな。これなら過疎スレのほうがまし。:-p
115デフォルトの名無しさん:2011/10/14(金) 03:39:44.89
諸君、議論したまえ
116デフォルトの名無しさん:2011/10/14(金) 07:42:48.61
モジュール内の全ての関数と、import した地のモジュール M を全て公開したいのですが、
その場合は module モジュール名 (***) where の *** の部分に、
関数全てと module M を明示的に記入しないといけないのでしょうか

全ての関数だけなら、 (***) を省略することで全て公開しますが、
import したモジュールもとなると省略記法がわかりません
117デフォルトの名無しさん:2011/10/14(金) 08:11:20.59
どどど、童貞ちゃうわ
118デフォルトの名無しさん:2011/10/14(金) 10:51:18.57
>>116
自分の環境で確認していないんだけどHaskell Reportによれば、自分自身のモジュール名も参照してエクスポートリストに入れられる:

A module can name its own local definitions in its export list using its own name in the “module M”
syntax, because a local declaration brings into scope both a qualified and unqualified name (Section
5.5.1). For example:

  module Mod1( module Mod1, module Mod2 ) where
  import Mod2
  import Mod3

Here module Mod1 exports all local definitions as well as those imported from Mod2 but not those
imported from Mod3.

http://www.cse.iitk.ac.in/users/karkare/courses/2010/cs653/Papers/haskell2010.pdf
の64ページ
119デフォルトの名無しさん:2011/10/14(金) 12:42:19.48
>>118
なるほど、それは気がつきませんでた
確かにできました

ありがとうございました
120デフォルトの名無しさん:2011/10/14(金) 20:15:24.65
型エラーのジャングルをさまよってると、時々呪文のように解けることがある。
型エラーにはまってしまう初心者なんですけど、
型エラーの泥沼に溺れないコツみたいなのってあるんですか?
121デフォルトの名無しさん:2011/10/14(金) 20:19:40.56
ポリモーフィズムを諦める
122デフォルトの名無しさん:2011/10/14(金) 20:24:11.07
>>120
はまってしまう型エラーって、例えばどんなのがあった?
123デフォルトの名無しさん:2011/10/14(金) 21:18:53.01
>>122
IOがらみ IO[Char]と[Char]をくっつけようとしてエラーにはまってたとか
IO GHC.IO.Exception.ExitCode で混乱したりしてた。
124デフォルトの名無しさん:2011/10/14(金) 21:28:29.18
123の続き、caseで場合分けしたときに、それぞれの返る値の型が違って
おこられた例ですた。> IO GHC.IO.Exception.ExitCode
125デフォルトの名無しさん:2011/10/14(金) 21:58:31.29
IOモナドの典型的な使い方を理解していないのが原因
使い方を勉強すればいい

型エラーは、間違いを教えてくれただけ
はまっていいたのは、型エラーじゃなくて、IOモナドを使ったプログラミング
型エラーの泥沼に溺れたという認識を深化させて、IOモナドの泥沼に溺れたと考え直すのが最初の一歩
126デフォルトの名無しさん:2011/10/14(金) 23:09:15.78
>>125
ありがとう。 IOモナドのこと、おさらいしてみます。
127デフォルトの名無しさん:2011/10/15(土) 00:26:31.58
IOモナドもただのモナド
ただ一度汚染されたら元には戻らないけど
つーわけで>>=とかの型をよく眺めるといい
128デフォルトの名無しさん:2011/10/15(土) 09:50:57.71
言語にこだわらないで目的とかロジックとかほざいてるやつって大概残念だよなw
129デフォルトの名無しさん:2011/10/15(土) 09:55:07.57
言語に依存しない抽象というものがわからないおまえが残念
130デフォルトの名無しさん:2011/10/15(土) 09:58:52.03
同一人物かは知らないが単芝がム板の各スレでアホ発言してる
131デフォルトの名無しさん:2011/10/15(土) 10:07:58.94
君たち正直こんな無様なことやってるバカだけどさ
ビジュアル的にそこらへんのWEBデザイナーのほうが凄いと思うぜ
お前らって素人や普通のプログラマに見せても、は?みたいな顔されて終わりだぜ
やってても意味がない 意味を求めるんじゃないとかかっこつけてほざくんだろうけど
お前らがやってること哀れだよ Haskellなんてやめたらどう?
Matz以下の脳みそがやったって 世界に何の発展もないと思うよ ましては日本
君たちはゴキブリ以下のサンプルHaskell使いって感じだねw
132デフォルトの名無しさん:2011/10/15(土) 10:09:28.40
最近のたて読みはむずかしいな
133デフォルトの名無しさん:2011/10/15(土) 10:16:07.24
人気が出て来た所に粘着君が出るのは、啓蟄みたいなもんだ。
134デフォルトの名無しさん:2011/10/15(土) 10:16:41.77
http://twitter.com/#!/shomah4a 横浜市在住ゴミクズしょうばちゃん
http://twitter.com/#!/cucmberium Twitterクライアントとか車輪の再発明 何故かHaskell
http://twitter.com/#!/keisuke_n 技術ネタほざいてるけど 成果物がゴミクズなチンコロ
http://twitter.com/#!/ketaiorg ketaiorg ketaiorg(松井 健太郎) Haskellマニアのニートが応募してきたので、即日採用したところ。



__gfx__ Fuji, Goro
@
@Maki_Daisuke HaskellとかSchemeそれ自体難しいので、その壁を超えてしまった人にはなんということはないのかもしれませんが…。


普通のLLと違いを出すために難しいことをやって 普通のLLとは違うんだって優越感に浸る情弱
何せこいつらgfx以下、成果物見てもgfx以下
何がやりたいんだろう
彼らはなぜ Haskellを特別視するのか Haskellをやってる時点でLLプログラマとして実力があるように見ている
あとは”本物のプログラマはHaskellを使う”とかクソ記事につられてる情弱
早く死んでくれませんかねw 首つって死ね
135デフォルトの名無しさん:2011/10/15(土) 10:16:52.03
人気が出てきてもスレは過疎る一方
136デフォルトの名無しさん:2011/10/15(土) 10:39:26.87
粘着さんがいるとスレがねっとりした雰囲気になって困るよ。ただ
ボキャブラリが少ない人だからNGにしやすい。
137デフォルトの名無しさん:2011/10/15(土) 11:26:02.92
HaskellでGUI付けたい時は何使ってる?
gtk2hs以外は良く知らないんだが。
138デフォルトの名無しさん:2011/10/15(土) 11:39:47.95
gtk2hs以外はまともにメンテされてない気がする
139デフォルトの名無しさん:2011/10/15(土) 11:52:48.78
>>137
Win32API、使ってる。
Windows環境でしか使えないけど、枯れたAPIのかなり単純なバインディングだから、安定感はんぱない。
140デフォルトの名無しさん:2011/10/15(土) 12:27:31.02
>>137
.NET もベースとしては意外に使いやすかった
本格的に活用するなら、この上にラッパーを作らんといかんが

http://hackage.haskell.org/package/hs-dotnet
141デフォルトの名無しさん:2011/10/15(土) 12:33:57.49
GUI=WEBページ
142デフォルトの名無しさん:2011/10/15(土) 12:35:01.18
正直F#がうらやましい
143デフォルトの名無しさん:2011/10/15(土) 12:37:27.67
これは>>142がH#
144デフォルトの名無しさん:2011/10/15(土) 13:07:58.01
GHCとMS製コンパイラで別々の言語拡張オプション指定するのやだ!
145デフォルトの名無しさん:2011/10/15(土) 14:33:22.57
変数名スレで訊こうか迷いましたが、こちらで訊きます

リストのそれぞれ隣同士の2要素を使って新たな値のリストを作る関数

f :: (a -> a -> b) -> [a] -> [b]
f g (x1:x2:xs) = g x1 x2 : f g (x2 : xs)
f _ [_] = []
f _ [] = []

このような関数 f は、どのような名前が適当でしょうか
146デフォルトの名無しさん:2011/10/15(土) 14:50:11.50
>>145
 f k l = zipWith k l (tail l)
なので zipTailWith とでも名づけるかな
147デフォルトの名無しさん:2011/10/15(土) 14:54:53.86
zipなんとかAdjacentなんとか 
みたいなのを思いついたけどAdjacentっていう単語そのものが冗長だからうんk
148デフォルトの名無しさん:2011/10/15(土) 16:04:13.69
zipNextTo でええやん
149デフォルトの名無しさん:2011/10/15(土) 17:19:24.27
>>145
フィボナッチ数列と性質が似てるから、fibZipWithってのは?
150デフォルトの名無しさん:2011/10/15(土) 18:00:48.60
ありがとうございます

みなさんの意見を参考に、mapA に決定しました (A = Adjacent)
151デフォルトの名無しさん:2011/10/15(土) 18:01:59.00
まっぱ!
152デフォルトの名無しさん:2011/10/15(土) 18:05:14.33
ところで、なんで皆さん、これに zip の単語を付けようとなさったのでしょう?

私は、[a] を [a] に変換するから map を名前に付けようと思いました
(当然、要素数は1つ減りますが)
153デフォルトの名無しさん:2011/10/15(土) 18:06:20.12
>>152
あ、すいません

[a] を [b] に変換です
154デフォルトの名無しさん:2011/10/15(土) 18:22:17.68
>>153
>>146に乗っかっただけ
155デフォルトの名無しさん:2011/10/15(土) 18:27:44.90
セルが半シフトしたリニア・セルラー・オートマトンだよな。
156デフォルトの名無しさん:2011/10/15(土) 18:33:46.42
mapだと単なる写像とか関手って意味しかなくて、そんなものは型みりゃ一目瞭然でそんなのを型と名前で二回も使ってると
頭痛が痛いみたいな違和感が出てきてちょっとDRY的によろしくない感じ
zipだともうちょっと意味が狭くなって [a] `f` [b] -> [a `f` b]的なリストとfの分配法則みたいな意味が出てくるけど
これも型みりゃだいたい入ってる、こちらは入れてもいい気もするけど
だから隣り合ったを示す言葉とか二つ目を一個ずらすみたいな命名ができると余すところ無く名前と型両方に無駄なく意味をこめることができていいかなぁ
とか思った
157デフォルトの名無しさん:2011/10/15(土) 19:01:54.05
Aは haskellerならappricativeを想像するんじゃないかな。
158デフォルトの名無しさん:2011/10/15(土) 19:04:04.21
perlninja2
メンバ
登録日: 2011-09-30
投稿: 10
E-mail

いまCD-R 700MBとガリガリ君ソーダ味かってきました

Ubuntu入れなおしたほうが早いと思いました

回答ありがとうございました
159デフォルトの名無しさん:2011/10/15(土) 19:05:30.71
perlninja2
メンバ
登録日: 2011-09-30
投稿: 10
E-mail

Ubuntuを起動するとフリーズしていまいます
ターミナルの画面が真っ白で、ちょっと動かすと元の色にもどります
そしてウインドウを動かしたり ターミナルにコマンド打ち込んだり フォルダ開いたりしようとすると反応がありません
上のメニューバーの再起動とかログアウトはボタン選べるんですが まったく応答がありません
いろいろデスクトップのフォルダを開こうとしても開けないです
どうすればいいんですか?教えてください
直しかた教えてください

昨日まで普通に使えてたのに突然使えなくなりました
再起動したりなんかいも起動しなおしても同じ現象です
160デフォルトの名無しさん:2011/10/15(土) 19:14:16.51
Perl忍者はHaskellができません。
ですが、ここのスレに来てはいけないというルールはありません。
161デフォルトの名無しさん:2011/10/15(土) 19:17:23.16
>>157
では、mapAdj や mapN (N = Neighborhood) で


>>156
「名前と型両方に無駄なく意味をこめる」
なるほど、そういう考え方もあるのですね

わたしは、改めてこの関数を使うプログラマの立場に立って考えてみると、
型シグネチャはライブラリ ドキュメントを見ることでしか確認はせず、
普段ソース中でこの関数を使っている時は関数名しか見ないと思いました
そして、ライブラリ ドキュメントはソースに比べてそう頻繁に見るものではない
(自分がそうなので)

だからソースを眺めた時、この関数を使っているところで、
「何がどのような結果になるのか」という情報が仕舞われた頭の抽斗が開けやすくなる、
抽斗の場所がぱっと思い浮かぶようなキーワードがいいなと
ポイントフリーで使っていると余計にそう感じます

というわけで、私はむしろ型シグネチャで分かる意味・ニュアンスも、
積極的に関数名に入れていこうと、皆さんの意見を聞いて思いました
162デフォルトの名無しさん:2011/10/15(土) 19:18:30.54
163デフォルトの名無しさん:2011/10/15(土) 20:12:34.89
セルラーオートマトンの文脈では、fがevolverでgがtransducer
164デフォルトの名無しさん:2011/10/15(土) 21:42:48.20
変換って、いろいろな言葉があるよね。

translator
tramsformer
transducer

厳密な使い分けはあるのだろうか?
165デフォルトの名無しさん:2011/10/15(土) 22:11:44.66
>>164
converter、diverter などもありますね
166デフォルトの名無しさん:2011/10/15(土) 23:12:07.79
内部で非ボックス化タプルを使ってる hs ファイルは
ghci ではロードできないのでしょうか

ghc コマンドでは普通にコンパイルできたのですが、
ghci の :l でロードしようとすると、次のようにメッセージが出ます

Error: bytecode compiler can't handle unboxed tuples.
Possibly due to foreign import/export decls in source.
Workaround: use -fobject-code, or compile this module to .o separately.

これは、ghci でロードしたかったら、hs ファイルではなく
オブジェクト ファイルにコンパイルしとけ、という意味でしょうか

ghci でロードできないのでしたら、一つのソースコードで、
ghc でのコンパイルの場合は非ボックス化タプルを使って、
ghci でロードする場合は普通のタプルに自動的に切り替える
というようなことはできないでしょうか
167デフォルトの名無しさん:2011/10/16(日) 10:45:43.20
>>125
ハスケルたんは悪くない(キリッ
勉強不足の初心者が悪い!

ですか?
168デフォルトの名無しさん:2011/10/16(日) 11:56:15.70
>>166
そういうこと。あるいはghciに-fobject-codeを渡すのでもいい

>というようなことはできないでしょうか
少なくとも今はできない
169デフォルトの名無しさん:2011/10/16(日) 12:07:28.59
>>167
丁寧に答えてくれた人に 何しょうもない事言ってんねん。どっかいけ
答えてもらって助かったからそれでええんじゃ。
170デフォルトの名無しさん:2011/10/16(日) 12:20:19.09
初心者はハスケルたんを汚す悪いやつ!
171デフォルトの名無しさん:2011/10/16(日) 12:26:32.54
敷居が高いおかげでドカタが流入してこないから
Haskell界は住みやすくpurityが保たれている
ありがとう>125
172デフォルトの名無しさん:2011/10/16(日) 12:35:10.32
>>171
でも、スレには何も知らずに荒らす連中が来るようになってる。
日本語版stackoverflowでもあったほうがいいんだろうかね。
173デフォルトの名無しさん:2011/10/16(日) 12:59:22.17
日本語版か...おぞましいことになりそうな悪寒

忍法帳を発展さてくれればいいんだけど嫌がるひとも多いか
あとプログラム板でもID表示とか
174デフォルトの名無しさん:2011/10/16(日) 13:06:48.21
>>171
こうしてHaskell界では
モナドモナドモナドモナカモナコ....だけでスレが消費され続けるのですた
メデタシメデタシ
175デフォルトの名無しさん:2011/10/16(日) 13:44:32.75
くっぷぷぅ
176デフォルトの名無しさん:2011/10/16(日) 14:15:40.79
>>168
> あるいはghciに-fobject-codeを渡すのでもいい

なるほど、ロードする度にオブジェクトコードを生成するよう指示すれば
ghc の様にコンパイルされるので非ボックス化タプルが使えるのですね

で、欠点はコンパイルに時間を要するかも知れないことと、
ghci のデバッガからは見えないことですね

> 少なくとも今はできない

わかりました
デバッガは今までも特に活用したことないので、
-fobject-code オプションでの対処で凌ぐことにします
177デフォルトの名無しさん:2011/10/16(日) 14:27:50.62
>>173
おぞましくさせない工夫が必要なほど幼稚な日本語をしゃべる人
(日本人とは限らない。)が多いのは事実だ。アノニマスには
開放できない罠。一番いいのは英語を使えることというのは否定でけん。
178デフォルトの名無しさん:2011/10/16(日) 14:35:19.94
http://stackoverflow.com/questions/tagged/haskell
stackoverflowのhaskellタグ。
179デフォルトの名無しさん:2011/10/17(月) 22:52:36.79
haskellって、コンパイルしたらJavaバイトコードのような
中間言語を吐き出すのでしょうか?
それとも機械後を吐き出してくれるのでしょうか?
180デフォルトの名無しさん:2011/10/17(月) 23:01:04.24
>>179
それは言語の仕様ではないので厳密には実装によるが、デファクトスタンダードのGHCは基本的にネイティブコードを吐く。
181デフォルトの名無しさん:2011/10/18(火) 00:53:08.36
http://www.haskell.org/ghc/ では、
> GHC compiles Haskell code either directly to native code or using LLVM as a back-end. GHC can also
> generate C code as an intermediate target for porting to new platforms. The interactive
> environment compiles Haskell to bytecode, and supports execution of mixed bytecode/compiled programs.
という紹介になってた。
182179:2011/10/18(火) 13:32:09.88
ありがとうございます。
183デフォルトの名無しさん:2011/10/20(木) 11:39:21.53
質問なのですが、windows上でGHCでコンパイルして、出来上がったhello.exeファイルをダブルクリックで実行するには、どうすればよいですか?
コマンドプロンプトから、ファイル名を入力したら、実行はできます。

184デフォルトの名無しさん:2011/10/20(木) 12:31:00.43
>>183
たぶん、実行はされているけど、すぐにプログラムが終了してコンソールが閉じているだけだと思う

main = let loop = loop in putStr "Hello World!!\n" >> loop

でコンパイルしてダブルクリックしてみ
185デフォルトの名無しさん:2011/10/20(木) 13:20:15.64
>>184
ありがとうございます!
その通りでした!
186デフォルトの名無しさん:2011/10/20(木) 22:49:20.89
FizzBuzzを剰余使って書くのはすぐ思いつくけど、以下のは新鮮だった。
どうやったらこんな発想が出来る様になるんだろ。

fizz = cycle ["","","Fizz"]
buzz = cycle ["","","","","Buzz"]

f s n
| s == "" = show n
| otherwise = s

main = print $ zipWith f (zipWith (++) fizz buzz) [1..100]
187デフォルトの名無しさん:2011/10/20(木) 23:11:26.56
>>186
オレ、そのアルゴリズム自力で思いついたけど、そんなに不思議かな。
たしか、3を法とする商群と5を法とする商群をなんとかすれば・・・ みたいなことを考えていて、思いついた
188186:2011/10/20(木) 23:29:22.83
>>187
C、java、rubyと来たのでmapは理解していたけど、手続き型言語には無い発想だと思う。
ついでに言うと、今なら手続き型言語ユーザーが何故、関数型言語を誤解するのか判る気がする。
「関数」「型」「評価」など、同じ字面でも関数型言語とは違う意味で説明される物が多い。
189SCHEME餃子 ◆8X2XSCHEME :2011/10/20(木) 23:52:51.12
要するに根本的なパラダイムが違うって話だよな

英語で話すときは英語で考えなきゃ滑らかに話せないって話は聞くけど、
Haskell で書くときは Haskell で考えなきゃいけないってことだろ
190デフォルトの名無しさん:2011/10/20(木) 23:53:46.97
>>186
いいかどうかは別にして、カウンタやインデキシングを避けて、
何でもリストで考えればそうなる。
そうするとリストの代数的操作でプログラミングするようになる。
Richard Bird先生の本を読むのがいいかもしれない。
191187:2011/10/21(金) 00:00:33.30
>>188
逆にオレはfor文でFizzBuzz書けとかいわれたら、戸惑うかな? たぶん戸惑うな。
whileでとか憤死するレベル。
192デフォルトの名無しさん:2011/10/21(金) 00:05:06.91
よーしパパFizzモナドとBuzzモナドを合成しちゃうぞー
193デフォルトの名無しさん:2011/10/21(金) 00:10:44.14
でも それ、1から連続する数字のリストだから正解なだけで
あまりいい回答ではないと思ったかな。fibbuzzとかはやってるけど
関数型言語の普通の作り方すれば、最後のリストを[1..100]と
違うのだけの違いだから新鮮にも見えなかったよ。抽象化が得意な言語
とそうでないものでのさがあるんだなということかな。

prnFizzBuzz = mapM_ putStrLn.FizzBuzz
FizzBuzz n 。。。パターンマッチ


prnFizzBuzz [1..100] とか prnFizzBuzz fibSeq とかでおしまいだろ?
194デフォルトの名無しさん:2011/10/21(金) 00:14:42.74
for文などでかけと言われたらかけるけど、関数型の記述に比べれば
泥臭くって、抽象化ができないよね。関数オブジェクトなどを使って
抽象化させて作るんだったら、初級っぽくないだろうし。
195デフォルトの名無しさん:2011/10/21(金) 07:52:37.50
mplusを使ってfizzbuzzを書こうとすると現行のMonadPlusの駄目な部分がわかるかも
196186:2011/10/21(金) 08:04:56.77
>>190
>>186
>Richard Bird先生の本を読むのがいいかもしれない。

情報有難う!
Research paperを幾つか、ざっと読んでみた。
まだよく理解出来ない所も多いけど、Haskellって面白い。
197デフォルトの名無しさん:2011/10/21(金) 08:52:36.35
>>194
細かい抽象化は全体からみれば効果がないだろうよ
198デフォルトの名無しさん:2011/10/21(金) 09:48:20.45
>>196
鳥先生に興味が出てきたら早速ピアソンのサイトへ行ってAlgebra of Programmingを手に入れるんだ
199デフォルトの名無しさん:2011/10/21(金) 10:38:23.33
>>197
何を優先してるかで違うのは当然だが、抽象化のセンスを見るのにも
いいとは思うがな。ボイラープレイトを取り除くにしても、この手の単純な
抽象化が出来なければ難しく感じるだろう。

余談だが、この辺の抽象化のセンスってLispのマクロを作るセンスにも通じ
てる印象がある。マクロで関数を作成するにしてもマクロを作成するにして
もボイラープレイと除去と同じセンス必要なので。
200デフォルトの名無しさん:2011/10/21(金) 11:19:02.96
>>192のアイデアを水平合成とみて>>186のに適用するとこんな感じ?

type Magma a = a -> a -> a
class MonadZero m where
mzero :: m a
class MonadZero m => MonadOr m where
mor :: Magma (m a)
class MonadZero m => MonadPlus m where
mplus :: Magma (m a)
instance MonadZero [] where
mzero = []
instance MonadOr [] where
mor xs = if null xs then id else const xs
instance MonadPlus [] where
mplus = (++)

fizz = cycle $ replicate 2 mzero `mplus` return "Fizz"
buzz = cycle $ replicate 4 mzero `mplus` return "Buzz"
fizzbuzz = zipWith mplus fizz buzz

main = print $ zipWith mor fizzbuzz $ map show [1..100]

listモナドの和を論理和(つまりMaybeモナドの和)、数値和の二通りに見ることで数値和で作ったfizzbuzzのパターンと数字のパターンを論理和で合成する・・・と
Listを信号としてみれば、もろor回路による信号の合成だよな。始まる場所が変わることに対してはdrop等で開始位置をずらしてつまり信号のdelay回路か
SignalArrowを使った抽象化でもいけそうに見えるな
それはさておき垂直合成、つまりモナド変換子を使うのはどうなるんだろうか
FizzT (FuzzT Identity Int) [String]みたいな型になればそれっぽいんだけど
201デフォルトの名無しさん:2011/10/21(金) 12:37:44.28
>>194
で、いざHaskellでEnumeratorとモナド使ったfor記法が定義されたら
嬉々として使うんだろ?
202デフォルトの名無しさん:2011/10/21(金) 12:43:09.39
>>201
いらないよ。ループ系ですらほとんど使わないのに。
203デフォルトの名無しさん:2011/10/21(金) 12:50:12.54
>>201
それってfoldlとどう違うの?
204デフォルトの名無しさん:2011/10/21(金) 14:40:50.67
>>201
そんな書き込みして何が楽しいの?
205デフォルトの名無しさん:2011/10/21(金) 17:53:37.66
>>189
思考が言語を作ったが
今や言語が思考を制限するのですね
206デフォルトの名無しさん:2011/10/21(金) 18:00:38.90
自然言語では当たり前の話だが、言語=思考なんだよ。
207デフォルトの名無しさん:2011/10/21(金) 18:07:06.79
自然言語ですら異論ありまくりだよ
208デフォルトの名無しさん:2011/10/21(金) 18:27:55.96
たとえばMatzあたりがよく引き合いに出すが、そんなに支持されてる仮説じゃない

あと、エキスパートの思考は言語化できないことが多い
209デフォルトの名無しさん:2011/10/21(金) 19:45:59.14
エスパーの思考に見えた
210デフォルトの名無しさん:2011/10/21(金) 21:08:24.89
明日筑波でHaskellな話してくるよ!
211デフォルトの名無しさん:2011/10/21(金) 21:33:02.92
まだハスプラ更新されない
毎回のように延期するんならもうちょっと余裕を持ってスケジュール宣言しとけよ
212デフォルトの名無しさん:2011/10/21(金) 21:47:04.40
ドラクエみたいなモンだよ

スケジュール通りに発売されたドラクエなんて、逆に心配だろ?
213デフォルトの名無しさん:2011/10/21(金) 22:00:15.46
確かに長々と書いたC++のコードが一発でコンパイル通った時くらい眉唾だな
214デフォルトの名無しさん:2011/10/21(金) 22:25:17.56
>>198
URLぷりーず。
ピアソン?
215デフォルトの名無しさん:2011/10/21(金) 23:43:26.13
>>210
Matz王国へ乗り込むんだな。
216デフォルトの名無しさん:2011/10/21(金) 23:54:23.33
217デフォルトの名無しさん:2011/10/22(土) 16:35:01.20
Winでgtk2hs使えるようにするのって大変っぽい?
linuxだとcabalをapt-getで入れて、gtk-buildingToolsをcabalで入れれば良いだけみたいなんだけど、Winのgtk2hsインストール手順が別になってて複雑っぽい。。。
218デフォルトの名無しさん:2011/10/22(土) 16:47:47.56
最新の Haskell Platform を入れているのなら、以下の手順でインストールできる

1. http://www.gtk.org/download/win32.php へ行き、
All-in-one bundles のバージョン 2.16 をダウンロード(2.22 ではダメ)

2. All-in-one bundles を展開してホワイトスペースが無いパスに置き、
All-in-one bundles の \bin ディレクトリへのパスを環境変数 %PATH% に追加する

3. GHC インストールフォルダ内の mingw/bin ディレクトリへのパスも
環境変数 %PATH% に追加する

4. cabal install gtk2hs-buildtools
次いで cabal install gtk


最新の Haskell Platform にある GHC のバージョンより
高いバージョンの GHC を入れていたり、別の環境だったりした場合、
どうするかは知らん
219デフォルトの名無しさん:2011/10/22(土) 17:18:04.17
>>218
ありがとう
やってみます
220デフォルトの名無しさん:2011/10/22(土) 17:20:56.32
filter 関数とか、いいかげん型クラスの関数にして、
ライブラリの構造を整理してほしいな
221デフォルトの名無しさん:2011/10/22(土) 17:54:16.39
>>218
失敗したみたいなんですが、cドライブ直下だとダメとか、ありますでしょうか?
222デフォルトの名無しさん:2011/10/22(土) 18:02:28.53
今更気付きましたが、Win7のx64環境です
だからダメと言う事は在るのでしょうか?
ghcにあわせてwin32版を落として設定して失敗してます
223デフォルトの名無しさん:2011/10/22(土) 18:28:23.45
>>222
ごめん、言い忘れてた
私の環境は

OS : Windows7 Home Premium 32bit
Haskell Platform : 2011.2.0.1

これ以外の環境でどうやるかは分からない

> だからダメと言う事は在るのでしょうか?

あるんじゃないかな
64 bit 版の All-in-one bundles でやってみたらどう?
さっき提示したページの上部に [Download] のリンクがあるから、
そこから 64 bit 版へ飛べる(まだ実験バージョンだと書かれているが)
224デフォルトの名無しさん:2011/10/22(土) 18:34:53.13
>>223
私の方こそ忘れてました。
haskellPlatformは同じバージョンを使ってます。

ダメモトで64bit版も試してみます。
225デフォルトの名無しさん:2011/10/22(土) 18:50:11.12
いつのまにか、gtk2hs のサイトが復活してるな

http://projects.haskell.org/gtk2hs/
226デフォルトの名無しさん:2011/10/22(土) 19:56:50.82
>>223
何とかWin7の64bitでgtk2hsインストール完了しました

結論から言うと、gtk+の64bit版ではなく、>>218でダメと言われてた2.22で成功しました。。。
(手順はそれ以外は同じで、サンプルコードの動作確認も完了済み)

因みに、64bit版ではインストールに成功するものの、リンクでこけました

これでgtk2hsの勉強が始められそうです

ありがとうございました
227デフォルトの名無しさん:2011/10/22(土) 21:33:29.29
>>186
楽しいね、これ。ずっとスレ覗くだけだったけど、久しぶりにhaskellしたくなってきたよ。
228デフォルトの名無しさん:2011/10/22(土) 21:36:15.30
last [1..1234567890]
を早くする方法で悩み中。
リストの最後の数値は判ってるんだから、すぐに出力出来るはずなんだが…
229デフォルトの名無しさん:2011/10/22(土) 21:41:00.81
>>228
> リストの最後の数値は判ってるんだから

なぜ?
230デフォルトの名無しさん:2011/10/22(土) 21:42:14.51
>>228
リストは先頭からしか読めないからな
最後の数値を即座に取り出したいなら別のデータ構造を考える必要がある
231デフォルトの名無しさん:2011/10/22(土) 21:57:41.34
>>229
既にソースに書いてある。
先頭から見て行かないと判らない、というならそれはHaskellの出来の問題じゃないの?
232デフォルトの名無しさん:2011/10/22(土) 22:02:58.14
>>231
リストのデータ構造の性質
haskellじゃなくても、リストを使えば先頭からしか辿らない
233デフォルトの名無しさん:2011/10/22(土) 22:07:14.12
ハスケルの配列はO(1)なんだっけ?
234デフォルトの名無しさん:2011/10/22(土) 22:25:23.49
>>231
たとえば [1..3] は 1 : (2 : (3 : [])) であり、
「リストを構成するデータ型」の値だ
そして、 : や [] はこのデータ型の「値構築子」だ( : は中置値構築子)

last 関数は、last [] = errorEmptyList "last"; last (x:xs) = ・・・
という形のパターンマッチを行う関数だ

last [1..3] は last (1: (2 : (3 : []) なので、
(x:xs) にパターンマッチし、x=1、xs=(2 : (3 : [])) と束縛する

リストに限らず、データ型の値を作ってる値構築子の引数(この場合は 1 や 2 など)は、
このようにパターンマッチさせて値構築子を剥がす事でしか参照できない

で、リスト 1 : (2 : (3 : [])) がこのようなネスト構造を成している以上、
ネスト構造を「順に剥がしていく」ことでしか中の値は参照できない

ちなみに、f (_:_:x:_) = という関数で f [1..3] などとして一気に x=3 と束縛しようとしても、
内部で順に値構築子を剥がす処理をしてパターンにマッチするかを調べるから同じ事


これを 「Haskellの出来」 というのなら、そうだね、としか言いようがない
235デフォルトの名無しさん:2011/10/22(土) 22:55:21.45
>>234
haskellの出来じゃない

配列と違って、リストはメモリ上に連続して並んでる保証はない
だから、先頭から順々に次に要素のアドレスを参照していくしかない

配列なら、連続して並んでるから、先頭から要素のサイズをステップ数として、希望の位置までアドレスの参照先をずらせば良い

c言語でも同じ事
(haskellで配列使った事ないから分からんが、配列と言うデータ構造の性質としてはO(1)になるはず)
236デフォルトの名無しさん:2011/10/22(土) 22:56:21.45
x要素のサイズ
o要素一つのサイズ
237SCHEME餃子 ◆8X2XSCHEME :2011/10/22(土) 23:06:30.13
>>231
構文木の段階の情報と、実行時の段階のマシンコード (バイトコード) ではレイヤが違う話。
レイヤをまたいでうまいことやれば…というのは個別の実装の最適化をがんばってもらうしかない。
238デフォルトの名無しさん:2011/10/22(土) 23:15:23.45
last [1..3] くらいならコンパイル時に展開してもいい気がするけど
それでじゃあ、この最適化があれば実装の出来がいいかって言われると
うーん
239デフォルトの名無しさん:2011/10/22(土) 23:25:42.57
>>238
うん?
ghciの話じゃないのか

ghcにO2オプション付ければ積極的に最適化されるから、

last [1..3] = 3

みたいに最適化されてんじゃないの?
240デフォルトの名無しさん:2011/10/22(土) 23:44:29.49
>>239
少なくとも GHC 7.0.3 ではされません
241デフォルトの名無しさん:2011/10/22(土) 23:47:33.53
>>186が楽しいって感覚は分からないな
Haskellや関数型プログラミングらしくなくて、むしろ気持ち悪いくらいなんだけど
242デフォルトの名無しさん:2011/10/22(土) 23:54:35.79
>>186
俺は、楽しいかどうかというより、
そういう発想が他のどういうところに活かされるのか気になる
243デフォルトの名無しさん:2011/10/22(土) 23:56:32.37
FP的だから関数型言語的と言っていいと思う。
244デフォルトの名無しさん:2011/10/23(日) 00:00:25.87
>>243

>>241 はFP的ではないと感じてるわけだから、
どの辺りがFP的か簡単にでも説明してあげないと堂堂回りになるよ
245デフォルトの名無しさん:2011/10/23(日) 00:03:30.59
http://en.wikipedia.org/wiki/FP_(programming_language)
の事ってのは通じてる?
Bird先生の本もこの系譜になると思うけども。
246デフォルトの名無しさん:2011/10/23(日) 00:25:49.78
通じないだろw
普通はプログラミングパラダイムの方を思い浮かべる
247デフォルトの名無しさん:2011/10/23(日) 00:30:01.52
FPと言えばBackus先生のFP!
Function Programmingの略!
これが関数道の正しい道!
248デフォルトの名無しさん:2011/10/23(日) 00:32:44.35
どっちでもいいけど
>>186のどこが関数的?
249デフォルトの名無しさん:2011/10/23(日) 00:41:48.58
逆にどこが違う?
250デフォルトの名無しさん:2011/10/23(日) 01:26:52.91
>>248 じゃないけど、おれも >>186 のどこが関数的か分からん

関数的とも手続き的手も言えん、なんとも分からん代物
251デフォルトの名無しさん:2011/10/23(日) 01:42:08.77
こんなの関数的な要素は全く無いだろ
mainの最後を[2..100]と変えたらおかしくなることからして関数的でないことが分かる

それに関数的かどうかとは別に、プログラムとしても洗練されてない
fizzとbuzzの空文字列や関数fに数値を渡す設計はどうにかならなかったのかと思うし
fの中で文字列の比較をしてるのも酷い

Bird先生?難しい本を薦める前に添削してやれよと…
252デフォルトの名無しさん:2011/10/23(日) 04:25:14.59
BackusのFPはポイントフリースタイルのイメージだね。

Bird先生は別に要素レベルの演算までリストでやれと言ってるわけではないと思う。


lift n = (n,"")
fizz (n,s) = (n,s ++ if n `mod` 3 == 0 then "fizz" else "")
buzz (n,s) = (n,s ++ if n `mod` 5 == 0 then "buzz" else "")

fizzbuzz xs = map (buzz . fizz . lift) xs

くらいでも関数的と言っていいんじゃないか。


253デフォルトの名無しさん:2011/10/23(日) 04:54:09.21
それ以前に、センスがあるとは思えないんだが。奇抜さはあるにしても。
254デフォルトの名無しさん:2011/10/23(日) 07:27:28.91
>>251
洗練されたコード早く
255デフォルトの名無しさん:2011/10/23(日) 07:46:21.09
256デフォルトの名無しさん:2011/10/23(日) 08:15:42.99
>>254
それはBird先生の本を薦めていた人たちに言ってくれよ
俺は剰余を使ったつまらないのしか書けないから

しかし>>252も何がしたいのかよく分からないなw
257デフォルトの名無しさん:2011/10/23(日) 08:32:01.87
えー、>>252はないわ
258デフォルトの名無しさん:2011/10/23(日) 08:49:31.00
>>220
つListLike
259デフォルトの名無しさん:2011/10/23(日) 11:08:00.97
>>258
うん
そういうのを使って「標準ライブラリ」を大掃除して整理してほしいんだよ
そうすれば、外部ライブラリもそれに倣う
260デフォルトの名無しさん:2011/10/23(日) 11:19:24.02
それは結構前から言われてるけどいまだに実現して無いよな(例 http://blog.ezyang.com/2010/05/punt-the-prelude/)
そんだけ肥大化して硬直化してるんだろうな
少なくともfold/buid書き換えがstream fusion(笑)に変わるよか後で
Cabalのdependency hellが解決されるのと同じくらい(見込みが無い)ように思える
261デフォルトの名無しさん:2011/10/23(日) 11:37:11.82
標準Cライブラリですら比較的に一貫しててすっきりしてるのに

今ある標準ライブラリはもう手を付けず deprecated にして、
真標準ライブラリを新たに作ればいいのにな

それか、標準ライブラリにバージョンを付けるとか
262デフォルトの名無しさん:2011/10/23(日) 11:40:25.87
普通のライブラリは(いちおう)バージョンで管理できていて、インターフェースとかバリバリ変わっても(いちおう)整合性が保てているのに、
Preludeはそういう鈍重な憂き目にあうのは、つまり、Prelude自動読み込みというアイデアがアウトだったのでは
263デフォルトの名無しさん:2011/10/23(日) 11:47:36.18
なるほど、Monad の return に勝るとも劣らない汚点に思えてきた

仕様が 2010 に変わる時にいっしょに整理しておくべきだったよな
264デフォルトの名無しさん:2011/10/23(日) 11:51:42.42
ラノベ読んでたら、よくわかる現代魔法でHaskellのコード出てきた
265デフォルトの名無しさん:2011/10/23(日) 12:12:23.80
2巻以降には出てこないけどなw
266デフォルトの名無しさん:2011/10/23(日) 18:53:15.42
実際使うだけの場合、名前の由来がわかりづらいとは思うが、
returnは別に汚点じゃない。
267デフォルトの名無しさん:2011/10/23(日) 20:06:09.98
failさん・・
268デフォルトの名無しさん:2011/10/23(日) 23:05:12.84
>>261
Haskell版Boostをご所望か?
269デフォルトの名無しさん:2011/10/23(日) 23:26:21.32
>>268
ごめん、Boost とどう繋がるのか全く分からん
270デフォルトの名無しさん:2011/10/24(月) 00:21:47.40
>>269
うん。酔っぱらってた。
271デフォルトの名無しさん:2011/10/24(月) 00:47:01.62
>>270がかわいい
272デフォルトの名無しさん:2011/10/25(火) 00:39:21.95
GHCi, version 7.0.3 で
Prelude> let a = reverse
で、:t a と :t reverse が互いに同様なのに、
Prelude> import List
Prelude List> let b = group
で、:t b と :t group が互いに違うのは何でだろ?
エロイ人教えて。
273デフォルトの名無しさん:2011/10/25(火) 03:15:22.56
>>272
たぶん、単相性制限とGHCiにおける型のデフォルト化の拡張の結果。

単相性制限
http://www.sampou.org/haskell/report-revised-j/decls.html#sect4.5.5

GHCiにおける型のデフォルト化の拡張
http://www.kotha.net/ghcguide_ja/latest/interactive-evaluation.html#extended-default-rules
274デフォルトの名無しさん:2011/10/25(火) 11:19:01.55
関数型言語の原点「=ったら=なの!」からどんどん外れて
言語仕様が焼け太りしてきたな♪
275デフォルトの名無しさん:2011/10/25(火) 11:25:06.28
heterogeneous equalityが原点とな?
276デフォルトの名無しさん:2011/10/25(火) 22:45:52.30
もう忍者はいないよ
死んだ
277デフォルトの名無しさん:2011/10/25(火) 22:47:07.73
死んだ
一つの生命が途絶えた
Perl忍者

Perl忍者の意志を継ぐものが現れるよ
新生
そう感じる
278デフォルトの名無しさん:2011/10/25(火) 23:04:45.72
>>276
ファンだったのに、、、
279デフォルトの名無しさん:2011/10/26(水) 23:30:49.18
遅延評価前提のデータ構造って、よ〜するに制御構造だよね?
これはいつ評価される(べき)か、とか考えつつデータ構造を作りながら、
ふとそう思った。
280デフォルトの名無しさん:2011/10/26(水) 23:53:21.74
そりゃあんたにとってそう見るのが一番自然だってだけです
捉え方は無限大とはいわないけど十色ぐらいはあると思う
281デフォルトの名無しさん:2011/10/27(木) 00:09:47.16
>>279
そう決めてしまうと
発想を狭めることにはなるかもしれないな
282デフォルトの名無しさん:2011/10/27(木) 06:02:46.69
>>279
ちがうよ
283デフォルトの名無しさん:2011/10/27(木) 10:21:40.18
デジタル回路にも同期と非同期があったな
284デフォルトの名無しさん:2011/10/27(木) 12:12:07.98
発想を広くとか勘違いしてるやついるな
発想はよさだろ

発想が狭くても良ければいい

お前みたいなやつはクソ

海外旅行経験300回未満のゴミが

"欧米では〜〜、海外では〜〜、視野を広める、心を広く、発想を広く、世界は広い、井の中の蛙、まだまだ甘かった
日本人は〜、コミュニケーションは大事、むこうでは〜〜、ボブがよ!ヘイ!ジョンとかブログに書く馴れ馴れしく”
とかほざいてるのとおなじ気持ち悪いんだよゴミ

なあゴミ
285デフォルトの名無しさん:2011/10/27(木) 12:15:28.51
質問です。

海外旅行をすればHaskellがバリバリ書けるようになりますか?
286デフォルトの名無しさん:2011/10/27(木) 12:31:24.60
>>284
良い発想かどうかは、誰がどうやって判断するんだろ。。。
287デフォルトの名無しさん:2011/10/27(木) 12:32:19.36
本当久々だ
288デフォルトの名無しさん:2011/10/27(木) 12:39:59.83
>>286
そんなのは世界中のHaskellに関わり、
かつのその発想に関わる人間みんなが判断していくんだろ

そして、大多数の人に良い発想だと認められれば、
その発想が世の中に認められているということだ

ごく普通の当たり前のことだと思うが、そんなに疑問に思うことか
289デフォルトの名無しさん:2011/10/27(木) 12:49:24.80
コテが付いて無くてもフィルタリング出来るパーサーで、スレがすっきりした。
パーサー実装はHaskellの練習としては手頃なのでお奨め。
290デフォルトの名無しさん:2011/10/27(木) 12:56:12.28
>>279

これを否定されてそんなに腹が立ったのかいw
291デフォルトの名無しさん:2011/10/27(木) 12:57:24.90
パーサとはいったい
292デフォルトの名無しさん:2011/10/27(木) 13:00:13.59
>>290
それより「発想」ってのが何かのトラウマのスイッチを押してしまったらしいよ
293デフォルトの名無しさん:2011/10/27(木) 13:01:52.27
関数型言語がいつまでもキチガイ誘蛾灯みたいなポジションなのも困るね
294デフォルトの名無しさん:2011/10/27(木) 13:04:54.29
電球の外に群がる事があっても、電球の中にまでは入ってこられまい。
295デフォルトの名無しさん:2011/10/27(木) 13:17:59.98
大発見の相手してやんないと拗ねる奴ってどこの板にもいるけど
全部一緒なんじゃなかろうな
296デフォルトの名無しさん:2011/10/27(木) 13:36:35.90
>>293
X: 関数型言語がいつまでもキチガイ誘蛾灯みたいなポジションなのも困るね
O: ハスケルがいつまでもキチガイ誘蛾灯みたいなポジションなのも困るね
297デフォルトの名無しさん:2011/10/27(木) 19:14:05.00
>>293-294
文学はいいので工学の話してください
298デフォルトの名無しさん:2011/10/27(木) 23:19:35.93
フーリエ変換への変なアプローチなら、できるかどうかは別としてありそうではあるけど。
299デフォルトの名無しさん:2011/10/27(木) 23:47:18.79
>>298
「できない」アプローチが「ある」っていう概念が理解できないから説明してくれろ
300デフォルトの名無しさん:2011/10/28(金) 00:14:33.39
>>295
>全部一緒なんじゃなかろうな
284〜296まで一人で自演乙
でも、こんな過疎スレで一時間ちょいで十レス以上とか、
もうちょっとリアリティってヤツを考えたほうがいいね。
301デフォルトの名無しさん:2011/10/28(金) 02:56:26.22
Haskellでプロトタイピングをするとき、ここから作ってく、こうやって作っておけば後からの変更に強い、
みたいな作法って持ってます?

ある組成式を受けとったら、その分子の平均質量とかマススペクトルとかを返してくれるような
プログラムを書いてみようかと思ったんだけど、まず基本となる原子のデータ型から作っていって、
data Atom = Atom { abbr::Char, abundance::Distributions }
type Distributions = [(Int,Double)]
とか定義しておいて、average :: Atom -> Doubleやspectrum :: Atom -> (Int -> Double)
みたいな関数を作り、組成式はtype Molecule = [(Atom,Int)]としてみようか、と考えています。

で、Atomを拡張してname::Stringみたいな値も格納しておこうか、と思いついたとき、
Atom型の値の中身をパターンマッチで分解している部分は全て書き直さなければならなくなります。
変更に弱いから、手探りでコーディングをしているときはパターンマッチによる分解は使うべきじゃない、ということで良いのでしょうか。
302デフォルトの名無しさん:2011/10/28(金) 03:18:36.06
>>301
とりあえず、その個別の問題に対しては、

data T1 = T1 { c :: Char }
data T2 = T2 { d :: Char, s :: String}

f T1{c = 'a' } = "c is 'a'"
f T1{c = c } = "c is not 'a': " ++ show c

g T2{d = 'a' } = "d is 'a'"
g T2{d = d } = "d is not 'a': " ++ show d

以上のパターンを用いることによって対処できる


さらに、

h t2@T2{d = 'b' } = t2{d = 'c', s ="foo" }

のようにasパターンと組み合わせることものできるから、かなりの柔軟性が確保できるはず。
303302:2011/10/28(金) 03:20:39.58
ごめん。捕捉。

T1とT2は、別の型というよりも、変更前の型と変更後の型をシミュレートしていると考えて。
だから、このコードではcとdは別の識別子だけど、変更前と変更後で同じ識別子にすることができる。
304デフォルトの名無しさん:2011/10/28(金) 07:47:46.60
>>301
> Atom型の値の中身をパターンマッチで分解している部分

ここが元凶じゃないかな

Atom型の値の中身をパターンマッチで分解するのなら、
何の為に abbr 関数や abundance 関数を定義したの?

パターンマッチで分解するんじゃなく、
これらの関数を使って中身を取得すべきじゃないの?
パターンマッチだと型の構成を固めちゃうよ

ちなみに、見た目よく似た問題に Expression Problem というのがある
data X = A | B という型をパターンマッチで A B 仕分けしている関数が多くあり、
そこに新たに C という値構築子を追加したいが、修正すべき関数が多くて大変
なんとか楽にしたい、ついでにできれば再コンパイルしたくない

そういう場合なら、たとえばこことか日本語で分かりやすい
http://d.hatena.ne.jp/maoe/20101214/1292337923
305デフォルトの名無しさん:2011/10/28(金) 08:16:42.39
>>301
普通はデータ構築子をmodule外に非公開にすることで
内部構造を隠匿する

よくあるOOP言語ではclassが抽象データ型の単位だけど
Haskellだとmoduleになる
306301:2011/10/28(金) 09:25:56.34
>>302すいません、パターンマッチでの分解に、record syntaxを含めていませんでした。
haskellの入門書などではdata X = MkX Int Double Charなどとしておいて、
f (X i d c) = ...と記述することが「できる」とあったのですが、これって便利なのか?と疑問に思ったのです。

>>304確かにアクセッサ関数を定義しているので、型に何かを追加する可能性がある場合は
柔軟性を保てるのですが、例えば存在比を(Int,Double)のリストで表すよりもData.Mapで表す方がベターだと思った場合、
やっぱり変更先が多くなりそうになって嫌だなあと思った次第でして。
>>304のリンク先の方法がスマートに見えるので試してみたいと思います。
最終的には原子に限らず、平均値と分布を出せるようになりたいので、averageやspectrumをAtomだけに制限するのは良い手じゃなさそうです。
307デフォルトの名無しさん:2011/10/28(金) 12:53:34.49
>>306
> 例えば存在比を(Int,Double)のリストで表すよりもData.Mapで表す方がベターだと思った場合

そういう場合は、Data.Map 型を使ったコンテナに対するアクセス関数を公開して、
そのコンテナ内部で Data.Map 型を使っていることは隠蔽しておく
>>305 も同じ様なことをアドバイスしている

こうやって、データとそのユーザとの間にインターフェースを設けるのは、
Haskell に限らず、まず間違いなく全ての言語で共通する考え方
CICP 的に言えば「抽象の壁」だ


ちなみに、>>304 の後半で紹介した Expression Problem は、
少なくとも >>301 から読み取れる問題とは別ものと思われる
(応用できるかどうかは分からないけど)
308デフォルトの名無しさん:2011/10/28(金) 12:54:58.72
>>307
すまん

誤) CICP 的に言えば

正) SICP 的に言えば
309デフォルトの名無しさん:2011/10/28(金) 18:25:33.57
ようやく少しモナドの感覚がつかめた。あれって世界を分けてて、その世界の中
で作業をしていくための工夫という感じだな。ってね。安全な作業をするには必
要なんだってのもようやくわかった。

同時に感覚的なイメージでモナドを上手に例えて伝えるようなものがあまりない
のかもとも思ったかな。水中で普通のデジカメで撮影をするには防水ケースの中
に入れて使うけど、あの防水ケースっぽい働きなんだなってね。そんなアナロジー
を想像してしまったかな。
310デフォルトの名無しさん:2011/10/28(金) 19:10:16.64
>>309
> 同時に感覚的なイメージでモナドを上手に例えて伝えるようなものがあまりない
> のかもとも思ったかな。

確かにね

hage :: [Int]
hage = do
x <- [1..5]
when (x == 3) (fail "discard")
return x

こういうのだと、どの世界とどの世界に分けてるのか曖昧だし
明確に分けられたとしても、その世界に何かを閉じ込めているのとも違う気がする
311デフォルトの名無しさん:2011/10/28(金) 20:14:47.39
リストモナド自体が分岐した世界を表現してるからな
312デフォルトの名無しさん:2011/10/28(金) 20:59:44.73
>>311
いや、たがら、そのリストモナドが分けた2つの世界は何と何か
という辺りが自分では上手く説明できないなぁと
313デフォルトの名無しさん:2011/10/28(金) 21:06:31.22
do内の世界はdoの流儀に従ってる。だけど、do外の世界はdo内のことには
結果を渡される以外無関係ってと事だろう?
314デフォルトの名無しさん:2011/10/28(金) 21:31:03.44
do ってただの糖衣構文じゃん、世界の構成要素ではないでしょ

>>310 のは実質これ

hage :: [Int]
hage = [1..5] >>= \x -> when (x == 3) (fail "discard") >> return x

>>313 の言う流儀というのは、結局
Monad クラスのインスタンスの定義方法、だよね
(>>= 関数をどう定義するか、return 関数をどう定義するか、など)

でもそれは、たとえばアローでも同じ事が言えて、
proc do内の世界はproc doの流儀に従ってる・・・
つまり Arrow クラスのインスタンスの定義方法がその流儀となる

じゃあ、アローもモナドと同じように、世界を2つに分けているのかな
分けているのなら、モナドが分ける世界とアローが分ける世界は何が違う?

そこまで考えて初めて、モナドが何をどう分けているのか、
ということの理解に繋がると思う
315デフォルトの名無しさん:2011/10/28(金) 21:46:35.52
むしろ分けてるんじゃなくて繋げてる
316デフォルトの名無しさん:2011/10/28(金) 21:47:25.84
床下配線
317デフォルトの名無しさん:2011/10/29(土) 00:06:08.58
いろんな意見ありがとうございます。アローのことはそもそも知らないくらい
なので、また探ってみたい。やっと面白いと思うことが増えてきた感じです。
arrowのことは他の理解を終えてから取っかかるよ。

実はRWHをようやく半分まで消化したところ
318デフォルトの名無しさん:2011/10/29(土) 10:48:25.49
core言語のパーサーを作ろうとしているのですが、
他にこれは読んでおけ、このページは見ておけというものはありますか?
319318:2011/10/29(土) 10:50:44.72
>>318
書き忘れていました

今は Haskell Platform 内のドキュメントを読んでいます
320デフォルトの名無しさん:2011/10/29(土) 11:06:24.93
>>318
Haskell Report
321デフォルトの名無しさん:2011/10/29(土) 12:31:01.72
>>320
ありがとうございます

そうですね、元の Haskell の仕様を読んでおくのは当然ですね
熟読します
322デフォルトの名無しさん:2011/10/29(土) 14:25:06.17
extcoreパッケージのソースコード
323デフォルトの名無しさん:2011/10/29(土) 14:44:46.62
>>322
ありがとうございます

Webサイトや README をざっと見た感じ、自分でパーサーを作らなくても
extcore 自体を使って目的が達成できそうな気配なので、ちょっと試してみます
324デフォルトの名無しさん:2011/10/29(土) 19:04:56.33
>>318
core言語って何?
325デフォルトの名無しさん:2011/10/29(土) 19:05:53.18
ごめん、ぐぐったら出てきたわ>core language
326デフォルトの名無しさん:2011/10/29(土) 21:13:07.97
確か標準では形式的な定義は与えてなかったんじゃなかったっけ
327デフォルトの名無しさん:2011/10/29(土) 21:18:07.01
そうだが

どうした、いきなり
328デフォルトの名無しさん:2011/10/30(日) 22:46:14.15
windowsでHaskellを使う場合、文字コード変換はuconvしか選択肢無い?
329デフォルトの名無しさん:2011/10/30(日) 23:07:42.93
WIn32APIの該当関数を FFI で呼ぶという方法もある

IOモナドになるけど、余計なライブラリも使わず意外に簡単だったりする
330デフォルトの名無しさん:2011/10/30(日) 23:23:54.14
>>329
そうか。ありがとう。
331デフォルトの名無しさん:2011/10/31(月) 07:50:06.70
Haskell でたまに次のようなコンパイル エラー メッセージが出るのだけど、

・・・ `a' is a rigid type variable bound by ・・・

この rigid type というのは何の分野の用語なの?
どういう状況のエラーなのか、もっと深く理解したい
332デフォルトの名無しさん:2011/10/31(月) 10:01:18.00
Num a => aはrigidじゃない。
数値型はたくさんあるから。
333デフォルトの名無しさん:2011/10/31(月) 14:19:00.00
liftMとliftAの使い分けってどうしてらっしゃる?
334デフォルトの名無しさん:2011/10/31(月) 18:00:29.57
もう11月になるんすけど
リリース予定どうなってんすか?
335デフォルトの名無しさん:2011/10/31(月) 18:33:23.55
11月の感謝祭にリリースするってさっき白石さんがつぶやいてた

>>333
基本liftAというか<$>を使うけどControl.MonadをimportしているようなモジュールならliftMでいいんじゃないかなぁってぐらい
336デフォルトの名無しさん:2011/10/31(月) 18:46:46.74
少なくとも自分のプログラミング生活の中ではもう Haskell Platform に頼らなくても、
最新の GHC や Cabal、ライブラリ群を個別にインストールして問題なく使える

というわけで最近 Haskell Platform を捨てたら、
パンツを脱いで仁王立ちした時のように清々しかった
337デフォルトの名無しさん:2011/10/31(月) 19:07:48.05
linuxならそれでもいけたけどwindowsだとcurlの時点で割と悪戦苦闘でした
338デフォルトの名無しさん:2011/10/31(月) 23:36:25.82
>>332
じゃあ、逆に rigid な型にはどういったものがあるの?
339デフォルトの名無しさん:2011/11/01(火) 01:39:44.22
>>335
ありがとう
参考にさせてもらいます。:-)
340デフォルトの名無しさん:2011/11/01(火) 06:30:13.52
>:(
341デフォルトの名無しさん:2011/11/01(火) 06:52:12.18
(/:|)
342デフォルトの名無しさん:2011/11/01(火) 07:59:55.20
=:>
ゲソゲソ
343デフォルトの名無しさん:2011/11/01(火) 11:26:20.06
NodeNinja...
344デフォルトの名無しさん:2011/11/01(火) 11:26:41.97
Perl忍者のパクりですか
345デフォルトの名無しさん:2011/11/01(火) 17:40:45.02
Haskell甲虫
346デフォルトの名無しさん:2011/11/01(火) 17:51:04.66
この手のアラシのことって、broken windows theoryの実例っぽいね。
http://en.wikipedia.org/wiki/Broken_windows_theory
347デフォルトの名無しさん:2011/11/02(水) 07:00:55.80
utf-8の日本語文字列をS-JISに変換するライブラリは無いですか?
hoogleに無かったら無いんじゃろか。。。
348デフォルトの名無しさん:2011/11/02(水) 07:10:35.64
ICUへのバインディングがあったような
349デフォルトの名無しさん:2011/11/02(水) 07:54:00.26
ICUってのが分からんが、Win7(x64)で文字化けしないなら何でも良い

350デフォルトの名無しさん:2011/11/02(水) 08:42:59.27
iconvもあるような
351デフォルトの名無しさん:2011/11/02(水) 09:11:33.05
text-icuのData.Text.ICU.Convertモジュールで一発
352デフォルトの名無しさん:2011/11/02(水) 10:19:08.45
>>350-351
サンクス
家帰ったら、試してみる

353デフォルトの名無しさん:2011/11/04(金) 05:10:23.89
ラグビーのイングランド代表のJames Haskell選手が日本のリコーに来たけど
登録はハスキルだね。
ハスケル ハスケルと読んでたけど、イギリスよみじゃハスキルのほうが
近いのかな。と思った。
354デフォルトの名無しさん:2011/11/04(金) 07:15:35.57
アメリカの宝石デザイナーのMiriam Haskellは、
日本ではミリアム・ハスケルで通ってるみたい。
イギリスとアメリカじゃ読みが違うのか?
355デフォルトの名無しさん:2011/11/04(金) 09:33:28.24
haskellをカタカナで書くのって違和感があるんだけど、
そんな書き方をしているのはどんな人なの?
356デフォルトの名無しさん:2011/11/04(金) 09:51:30.21
じゃあ漢字で「蓮蹴」
357デフォルトの名無しさん:2011/11/04(金) 10:35:20.27
>>354
schwa音だから、母音はどうでもいい。
358デフォルトの名無しさん:2011/11/04(金) 12:32:15.54
>>356
もっと Haskell の何かを表した、言い得てみょんな当て字があるといいんだけどなぁ

bookkeeping -> 簿記
function -> 函数

みたいに
359デフォルトの名無しさん:2011/11/04(金) 12:50:46.86
そういうのはたまたま運のいい語でないとむりぽ

治具とjigとか
360デフォルトの名無しさん:2011/11/04(金) 13:01:35.96
削切 はつきる
361デフォルトの名無しさん:2011/11/04(金) 13:01:42.73
荒井熊
362デフォルトの名無しさん:2011/11/04(金) 13:33:58.20
'アスクル
363デフォルトの名無しさん:2011/11/04(金) 17:15:28.22
あなたは運についてしってますか???」
364デフォルトの名無しさん:2011/11/04(金) 17:15:46.20
来未の運理論でぐぐってね ひゅひゅ
365デフォルトの名無しさん:2011/11/04(金) 23:08:47.74
値を部分的に更新しながら使い回す場合、
必ずミュータブルな操作を持つデータ型を使わないといけないのか、
それともIOモナドやSTモナドの中に入れてしまうだけでいいのでしょうか。
例えば配列でMArrayを使わずに、
IORef (Array Int Int)みたいなデータ型を用意して、
IOモナドの中でmodifyIORef x (// y)としても、配列を新しく作り直さずにxを更新できたことにはなるんでしょうか?
366デフォルトの名無しさん:2011/11/05(土) 10:51:35.93
>>365
IORefはポインタ
writeIORefで破壊的に更新できるのはポインタ部分だけで、
中身を破壊できる訳ではない

modifyIORef x (//y)とすると、新しい配列(を作るサンク)が作られた上で、
xがそれを指すように更新される
367デフォルトの名無しさん:2011/11/05(土) 16:31:37.95
ありがとうございます。
やっぱり駄目かー。
368デフォルトの名無しさん:2011/11/05(土) 18:33:22.15
http://blog.higher-order.net/2009/09/08/understanding-clojures-persistenthashmap-deftwice/
新しい実体といっても、後ろに追加する以外でも、メモリ上で共有される実装であれば、
参照は遅いけど、更新が軽いという場合があるよ。
369デフォルトの名無しさん:2011/11/05(土) 19:05:50.19
http://itpro.nikkeibp.co.jp/article/COLUMN/20100406/346695/?P=5

>LinuxやMac OS XなどのUnix環境では,ロケール(locale)の設定を見て自動的に適切な文字コードに変換してくれます。ロケールは,言語や時刻など,使用しているOSのローカルな設定を決めるためのものです。

>Prelude System.IO> putStrLn "テスト"
>テスト

>一方,Windowsでは,UTF(UCS Transformation Format)とHaskellプログラム内部の文字コードとの間で変換を行うことはできますが,技術的な問題からShift_JIS(Microsoftコード・ページ932)のような2バイト文字ではまだ文字コードの変換ができません

LinuxやMacはiconvとか無しでも日本語扱えるようになったのに、Windowsだけなんて・・・orz
370 [―{}@{}@{}-] デフォルトの名無しさん:2011/11/05(土) 20:02:11.39
>>368
HaskellのArrayはpersistentじゃない
371デフォルトの名無しさん:2011/11/05(土) 20:17:35.88
要は素直にmutableなコンテナ使っておけばいいんだろ?
372デフォルトの名無しさん:2011/11/05(土) 20:57:00.85
画像ファイルを読み込んで、いくつかフィルタを施して、結果を保存する場合、
フィルタリングするイメージデータを格納するコンテナには何が適切なの?
373デフォルトの名無しさん:2011/11/05(土) 21:03:14.21
CArray
374デフォルトの名無しさん:2011/11/05(土) 21:11:15.45
>>373
ありがと、調べてみる
375デフォルトの名無しさん:2011/11/05(土) 21:24:41.49
[Word8]
376デフォルトの名無しさん:2011/11/06(日) 01:25:51.61
http://repa.ouroborus.net/ これも使えそうと思ってブックマークしてる。
377デフォルトの名無しさん:2011/11/06(日) 02:49:06.58
Haskellの変数の有効範囲って何か具体的に決まっているのかな?
Haskel Reportを読んでもはっきりと書かれていないような。

以下のように関数(>>?)を定義してvalue1, value2を求めると
value1は普通に求められるが、value2は\s -> s + aのところで
aが未定義ですとか言われる。

括弧があると変数の有効範囲が変わるのかな?

(>>?) :: a -> (a -> b) -> b
v >>? f = f v

value1 = (1, 2) >>? \(a, b) -> b >>? \s -> s + a
value2 = (1, 2) >>? (\(a, b) -> b) >>? \s -> s + a
378デフォルトの名無しさん:2011/11/06(日) 05:53:55.40
>>377
関数の仮引数の有効範囲はその関数本体というのが基本原則。

> value1 = (1, 2) >>? \(a, b) -> b >>? \s -> s + a

value1 = (1, 2) >>? (\(a, b) -> b >>? \s -> s + a)
と解釈されるのでs + aは\(a,b) -> ...の関数本体内に含まれるが

> value2 = (1, 2) >>? (\(a, b) -> b) >>? \s -> s + a
はかっこがあるため含まれない。
379デフォルトの名無しさん:2011/11/06(日) 13:47:42.37
>>378 ありがとう。
メタルールか。なんとなく理解した。
380デフォルトの名無しさん:2011/11/06(日) 16:49:56.15
スコープが見て分かるように()つけまくってるとlisp化してしまうという罠
381デフォルトの名無しさん:2011/11/06(日) 18:32:21.28
>>380
そのための$です
意外とLisp化食い止められてない気がするけど…
382デフォルトの名無しさん:2011/11/06(日) 18:33:01.25
そう?

少なくとも )))) はだいぶ消えると思うけど。
383デフォルトの名無しさん:2011/11/06(日) 19:07:40.41
最近は()が多少増えても別にいいかなと思うようになってきた。
384デフォルトの名無しさん:2011/11/06(日) 20:02:50.82
>>382
逆に言えば、そこにしか効果ないんよ
385デフォルトの名無しさん:2011/11/06(日) 20:50:27.44
いいじゃん
HaskellはLispの飼い猫なんだし
386デフォルトの名無しさん:2011/11/06(日) 20:56:34.75
昔、BASICしか知らないガキだったころ、Lispのコードを見てびびったのって
)))) って何これ、ってことだったので、それが緩和されるというのは俺にとっては
大きいw
387デフォルトの名無しさん:2011/11/06(日) 22:02:11.57
>>385
飼い猫ちゃう
Haskellは汎用関数型決戦兵器や
Lispは・・・深海型やな
388デフォルトの名無しさん:2011/11/06(日) 22:02:17.97
確かにBASICerにとって$は友達だもんな
389デフォルトの名無しさん:2011/11/07(月) 00:04:02.33
っつーかお前らよく結合順序とか読みきれるな
俺どんな言語で書いても表見ないと安心できない
そのうち面倒くさくなってきてlisp化しちゃう
390デフォルトの名無しさん:2011/11/07(月) 00:16:22.77
>>389
算数・数学の結合順序とほとんど同じだろ?
覚えるって程のことかいな。
微妙に分からんところは()で明示すればいいし。
391デフォルトの名無しさん:2011/11/07(月) 00:29:24.10
>>389
最初はそんなんだったけど慣れた。
でもちょっと不安な所は、()だらけ。
392デフォルトの名無しさん:2011/11/07(月) 00:31:14.84
直感とずれるのは関数合成くらいかな。
あれだけはいつもかっこつけてる。
393デフォルトの名無しさん:2011/11/07(月) 01:24:33.49
迷ったら付ける
394デフォルトの名無しさん:2011/11/07(月) 01:35:26.66
>>392
そうか?
$使えるところは関数合成できるから、ghciでlet使って試し書きする時は、$使って、ソースに書いてghciでテストする時にソースに$を関数合成に変えたものを書いてる。
(ghci上で直に定義するときは何故か関数合成できない)
395デフォルトの名無しさん:2011/11/07(月) 06:03:53.93
そんなのカッコ付けたいだけ付けて、
フォーマッタで余計なカッコ外せばいいだろ。
原始時代じゃあるまいし…
396デフォルトの名無しさん:2011/11/07(月) 07:51:34.75
>>391
hlintしないの?
397デフォルトの名無しさん:2011/11/07(月) 08:10:41.16
結合順序間違ってるとたいてい型エラーでるし、
そしたら:iで確かめたらいいし。
398デフォルトの名無しさん:2011/11/07(月) 10:45:37.92
>>395
フオーマッタについてもう少しkwskplz
399デフォルトの名無しさん:2011/11/07(月) 21:04:19.70
$使うのと括弧で括るのとでは
実効速度違ってくるの?
400デフォルトの名無しさん:2011/11/07(月) 21:06:43.13
最適化を掛ければ違いは消える
401デフォルトの名無しさん:2011/11/07(月) 21:10:41.58
あり^^
402デフォルトの名無しさん:2011/11/07(月) 22:12:23.77
Haskellの勉強をWindows上のemacs+haskell-modeでやってるんだけど
ghcに渡すフラグをどこで指定するのかが分からないので教えて欲しい
ぐぐったらinit.elにsetq haskell-ghci-program-args で行けるそうだったけども
どうも反映されない。-Wallを付けたいんだけど…
あと皆さんはどういう環境でHaskell書いてるのかも教えて欲しい
403デフォルトの名無しさん:2011/11/07(月) 22:31:25.21
.cabalに:set -Wall
ただし相当うざいから覚悟すべし
404デフォルトの名無しさん:2011/11/08(火) 07:19:50.65
俺もemacs+haskell-modeでやってるけど、
コンパイルやghciは別にコマンドプロンプトを開いてる(開いておく)

emacsからghcやghciを立ち上げたりはしない
405デフォルトの名無しさん:2011/11/08(火) 07:55:29.03
HaskellerってEmacsなの?Vimは?
宗教戦争始めてよ
406デフォルトの名無しさん:2011/11/08(火) 10:23:13.38
宗教戦争始めてよ 壊れかけのエディタ♪
407デフォルトの名無しさん:2011/11/08(火) 10:23:23.09
関数型言語(?)繋がりでemacsか、適当なエディタかの2局化が進んでるから、宗教戦争は無い

所で、haskell版emacsと聞いてYi落としたかったんだが、サーバ落ちてるっぽい
408デフォルトの名無しさん:2011/11/08(火) 12:02:54.58
なにその竹島みたいな

そもそも領土問題は無い

みたいな
409デフォルトの名無しさん:2011/11/08(火) 12:09:51.38
そんなこと言われても、そもそもHaskellは宗教みたいなもんだから
410デフォルトの名無しさん:2011/11/08(火) 12:15:55.75
Haskellを既にやっててこれからEmacsかVim選ぶならEmacs一択でしょ。
411デフォルトの名無しさん:2011/11/08(火) 12:36:29.87
どっちでもいいと思う
どちらでも普通に Haskell 使えるし

俺 (>>404) はたまたま Haskell 以外の、普通の文章なんかも書きたかったから、
Windows でプロポーショナルフォントが問題なく使える Emacs を選択した
(vi は固定幅フォントしか使えん)

Haskell コーディングで俺が使う機能としては秀丸でもいいくらいだが、
Emacs の方が個人的には使い心地がいい
412デフォルトの名無しさん:2011/11/08(火) 12:47:18.45
どうでもいい。
好きなほう選べば良い。
413301:2011/11/08(火) 13:17:35.69
YiにもLeksahにも、haskell-modeにも->を→とかforallを∀と表示してくれる機能があるけど、
インデントがどうなるのか分からないので使ってない。そんなに数学記号に親しいわけでもないし。
414デフォルトの名無しさん:2011/11/08(火) 14:09:30.24
emacsにもあるよ
精精\をλにぐらいだなぁ
415デフォルトの名無しさん:2011/11/08(火) 17:34:01.70
>>413
インデントが重要になる場所ではスペース以外使わない習慣を付ければ、
たとえプロポーショナルフォントでも安心してHaskellを書けるよ
416デフォルトの名無しさん:2011/11/08(火) 18:44:24.02
haskell-modeのおしきせインデントってちょっと変になるときがあるけど、
かしこくするようなハックってある?

あと、++ とか && とかでつながった長い行を分けたいとき、
演算子の前で改行する?後で改行?
417デフォルトの名無しさん:2011/11/08(火) 20:05:54.64
Yampa を色々弄ってるんですけど、意味がよく分からない関数が多いです

とりあえずゲームを作ってみたいので、[The Yampa Arcade] とか
[The University of New South Wales School of Computer Science and Engineering]
なんかの論文や Haskell Wiki を読んだりして試してます

ただ、も少しまとまった情報はないものでしょうか
簡単なものでいいので関数を解説した一覧表なんかあると良いのですが
418デフォルトの名無しさん:2011/11/08(火) 20:46:15.86
オリジナルのYampaのドキュメント意味分からんよな
AnimasっていうYampaのfork版だともう少しまともなドキュメントになってたけどやっぱりよくわからん
俺はelereaとかreactive-bananaとかの方が遥かに使いやすいと思ったわ
実行効率もいいしな
419デフォルトの名無しさん:2011/11/08(火) 23:20:26.24
>>403
ありがとう。ただcabalの設定ファイルだと俺の環境ではうまく行かなかった
それを手がかりに調べて、ホーム\AppData\Roaming\ghc\ghci.confに書いたらうまくいった
-Wall付けたら警告いっぱい出て、パターンマッチが網羅されてないとか役立つのもあったけど
ただ数値のデフォルト化の警告?ってのがよく分からん
警告なんだから良くないコードなんだろうけど
 
書く環境はやっぱりemacsが多いのか
今まであまり使ってなくて不慣れだけど頑張ってみるよ
420デフォルトの名無しさん:2011/11/09(水) 08:05:42.63
お前らがどんなにピーピーギャーギャー言ったって
強がろうが俺をバカにしようが

このウンコ言語が大失敗超不人気のLL以下の汚物

だって事実は変わらないの
わかった?負けず嫌いの小学生みたいな負け惜しみ見てると滑稽だよwwww
可哀想になってくるわほんとに
まあお前らも最初は被害者だったんだよな、妄想と大風呂敷に踊らされてよ
でもな、もっと早くに気づいたたゆらはいっぱいいるだろ?
いまでもこんな酔っ払いが吐き戻したゲロみたいな言語を一生懸命庇ってさ
本当の事を指摘している俺がおかしいみたいな感覚になってるんだぞお前ら?www
粋がっちゃったけど結果大失敗でものすごい負け犬感味わってるんだろうから気持ちは解るけどよ
いいかげん現実見つめろや?wwwwな?wwww

実際、今どうなのか言ってみろよ?wwwおい?wwwwww
このゲロみたいなくっせえHaskellっていう言語は使われてるの?
流行ってるの?ヒットしてるの?
発表時みたいな状況になってんのかよ?wwwwwwwww
俺Haskellやってるんだぜ!って人前で言えんのお前ら?wwwwああん?wwwwwwwww
Haskellやってます とかいってやってることはコマンドラインのへなちょこゴミコードwww
421デフォルトの名無しさん:2011/11/09(水) 08:57:34.07
せやなプロコンの為の言語としても競合相手のpythonよか圧倒的にシェア狭いし
Haskellでプロトタイプ書く人でも最後は結局c++だし・・・
422デフォルトの名無しさん:2011/11/09(水) 12:41:11.57
酔っ払いが吐き戻した……言い得て妙だな。
関数型というパラダイムに酔っ払った人間が自己満足のために腹の中身そのまま捻り出した言語だよなこれ。
大学の自由演習で使ったがただの自己満足コードにしかならない。
423デフォルトの名無しさん:2011/11/09(水) 12:48:49.57
そんな意味の無いことここで発言するなよ

Twitter にでも書いとけ
424デフォルトの名無しさん:2011/11/09(水) 12:56:40.73
日記は、こんなタイトルで書くといいと思うよ。
なぜ次に使う言語が関数型でまずいのか
http://d.hatena.ne.jp/ymotongpoo/20111105/1320506449
425デフォルトの名無しさん:2011/11/09(水) 12:58:41.97
それは実際に関数型言語で仕事している人向けのタイトルだな
中の人から批判が一番こたえる
426デフォルトの名無しさん:2011/11/09(水) 13:02:05.30
釣られ過ぎだろ
427デフォルトの名無しさん:2011/11/09(水) 13:24:57.11
そのタイトルで、リンク先の記事に反例をあげるだけの簡単なお仕事。
428デフォルトの名無しさん:2011/11/09(水) 19:31:37.01
総じてお前らは我慢のレベルが低いよな。
所詮は烏合の衆だな(w
429デフォルトの名無しさん:2011/11/09(水) 20:05:25.66
さて、我慢して無視を決め込んだhaskellerは何人居るでしょうw
(一応、私も含む)
430デフォルトの名無しさん:2011/11/09(水) 20:13:01.58
>>429
無視してると言いながら、書いちゃったらダメだよ。次からは何も言わないようにね♪
431デフォルトの名無しさん:2011/11/09(水) 20:16:28.69
>>430
と言いつつも書いてるヤシ
432デフォルトの名無しさん:2011/11/09(水) 20:17:49.21
433デフォルトの名無しさん:2011/11/09(水) 20:28:11.17
>>419
-Wallは要らないんじゃね?うざいし
型のデフォルト化ってのは
http://www.kotha.net/ghcguide_ja/latest/interactive-evaluation.html
の最後に書いてあるやつ
ただなんでこれで警告対象なのかは分からない、誰か詳しい人居る?
型のデフォルト化は標準で警告出すほどではないけどオススメできないことなんだろうか
434デフォルトの名無しさん:2011/11/09(水) 20:43:09.66
知らないうちにInteger使っててパフォーマンスがやばい、
みたいなのを回避したいんじゃね、知らんけど
435デフォルトの名無しさん:2011/11/09(水) 21:55:59.53
代数データ型のラベルの名前って、みなさんどうしてますか?
(ラベルでなくともアクセス関数を自作しても本質的には同じ事です)

例えばの話でブロック崩しを作ってるとして、
ボールの状態を表すための情報が要りますよね
まぁざっと、位置ベクトル、速度ベクトル、あとはボールの半径を盛り込むとしましょう

data Ball = Ball
      { ballPos :: Vector2
      , ballVel :: Vector2
      , ballRad :: Double }

私はこうやって、位置を表す Pos や速度を表す Vel などに、接頭辞として
必ずそのデータ型の型構築子(値構築子ではなく)の名前を付けるようにしています

と言うのも、ではボールの他にバーやブロックの情報はどうなるかと言えば、
こちらも位置を表す情報は必要で、他にも重なる部分がいくつか出てきます
同じ pos という関数名を使い回すことが文法上できないので、
上記の方法でやるなら名前の中で何らかの区別をしなければならず、
であるなら変に省略文字で区別するよりは、もうフルネームで区別した方がマシだろ
という判断です

このように、複数のデータ型で同じ意味の情報を扱う場合のラベル名(アクセス関数名)は、
みなさんどうしてるのでしょうか

共通の情報は型クラスに追いやって、インスタンス化してるのでしょうか
その場合は、その関数の引数として対象のデータ型の値が要りますね
436デフォルトの名無しさん:2011/11/09(水) 22:01:28.32
俺も型名やその省略形を接頭辞にする
437デフォルトの名無しさん:2011/11/09(水) 22:54:34.31
ぽこぽこサブモジュールを作る。
438デフォルトの名無しさん:2011/11/09(水) 22:57:12.57
>>434
http://www.kotha.net/ghcguide_ja/latest/options-sanity.html
-fwarn-type-defaults:
数値型に対するデフォルト化機構が発動したときに警告・通知する。
これは、あるデフォルトを前提としたコードを別のデフォルトの下のコードに変換するときに便利である。
例えば、1という値に特に制約がないとき、Haskell 1.4の「デフォルトのデフォルト」は型Intを与えるが、
Haskell 98以降ではこれはIntegerである。
これは実行時性能と挙動に影響を与える可能性があるので、通知されると便利である。
って書いてあるからまさにその通りだと思う
パフォーマンスをカリカリに追求する場合にはこの警告が必要なんだろう
俺はそんなコード書いたこと無いけど
439デフォルトの名無しさん:2011/11/09(水) 23:04:27.78
>>435
> その場合は、その関数の引数として対象のデータ型の値が要りますね
これはデータ型に直接ラベルを定義しても同じ事でした、すいません

>>436
やはり、そうしますか

>>437
サブモジュールをどのように作って、どのようにアクセスさせているのでしょうか

モジュールを分けても、データ型のその情報にアクセスする為には関数が必要で、
当然その関数は各モジュールからエクスポートさせるのですよね

ボールの位置、バーの位置、ブロックの位置などの情報に対するアクセス関数の
名前のバッティングはどうしてるのでしょうか

もしかして、各モジュールをインポートする時に as で別名を与えてるのでしょうか
440デフォルトの名無しさん:2011/11/09(水) 23:15:13.56
>>439
うん。asで適当に別名付けてる。
441デフォルトの名無しさん:2011/11/10(木) 17:18:49.29
確かに(a^2)と書いただけで(2::Integer)と推論されて
重いIntegerの(^)が呼ばれるのは嫌なことがある(aはDoubleとして)
442デフォルトの名無しさん:2011/11/10(木) 17:40:52.38
先に型を書くというのはそういうのを防ぐためにも役に立つのかな
443デフォルトの名無しさん:2011/11/10(木) 17:48:18.08
はい
役に立ちます
444デフォルトの名無しさん:2011/11/10(木) 18:08:46.39
いや役に立たんだろ
コードを書いてない段階でどうやって(a^2)の2に型を指定するんだ
445デフォルトの名無しさん:2011/11/10(木) 18:27:39.40
>>444
え、どう言う型を受け取って、どう言う型を返したいか、を考えて指定すれば良いだけだよ?
446デフォルトの名無しさん:2011/11/10(木) 19:47:03.85
>>418
Yampa 関連のドキュメントは論文も含めてけっこう多いので、
どれがオリジナルなのかもさっぱりなんですが、
どれも個々の特徴を割り下げてたり、活用したり、
さもなければ全体を長々と解説してる感じのものばかり

もっと、全体の構造をスパッと語ってくれると、
それだけでもありがたいのですが、無いですね

reactive も勉強してみたんです
シンクの仕組みがなかなか独特で面白かったんですけど、
結局これは「今はまだ」使えんと思いました

挙動が予測と噛み合わない部分や、予測し難い部分がちょくちょくあるんですよね
例えば integral 関数を使ってると、タイムリークを起こすと言うのかな、
間に合わなかった計算処理がどんどん積み上がっていって次第に処理が遅くなりました

この辺り Yampa なら react 関数を呼ぶ(呼ばれる)タイミングを
そのタイミングの処理の重さに合わせてリアルタイムに調整することは楽にできるんですが、
reactive ではその辺りどうやればいいのかよく分からない
447デフォルトの名無しさん:2011/11/10(木) 19:53:02.29
>>445
(^) :: (Num a, Integral b) => a -> b -> a
だから、(a^2)の2の型が何になっても、式全体の型には関わってこない
448デフォルトの名無しさん:2011/11/10(木) 20:31:23.29
>>447
こうすりゃいいじゃん

(^(2::Int))
449デフォルトの名無しさん:2011/11/10(木) 21:08:18.64
>>448
それ>>442の話と関係なくね?
450デフォルトの名無しさん:2011/11/10(木) 21:24:40.76
>>449
自作の関数作るときとかは、型推論に任せるより自分で決めた方が速かったり、逆に遅い代わりに大きな数を扱えたりする
length関数と同じ機能の関数mylength作るとき、

mylength [] = 0
mylength (_:ns) = 1 + mylength ns

の型は[a]->aだが、

mylength::[a]->Int
mylength [] = 0
mylength (_:ns) = 1 + mylength ns

とすれば、当然ながら型は[a]->Intになる
451デフォルトの名無しさん:2011/11/10(木) 21:26:17.73
訂正

x [a]->a
o [t]->a
452デフォルトの名無しさん:2011/11/10(木) 22:01:08.03
>>450
だからそれは(a^2)のケースでは関係ないよね
453デフォルトの名無しさん:2011/11/10(木) 22:06:04.65
>>452
自分で作る関数なら自分で型を決めればいいし、すでにある関数なら、引数に渡す値の方の型を決める他あるまい
454デフォルトの名無しさん:2011/11/10(木) 22:16:47.46
>>453
大抵の場合は、自分で作る関数の型さえ決めれば型推論で自動的に全ての型が決まるんだよ
それだけで決まらないこともときどきあって、(^)はそれを発生させる例の筆頭
455デフォルトの名無しさん:2011/11/10(木) 22:33:42.23
>>454
そういう話だっけ?
速い型を使いたいけど、型を明示した方が良いのか?って話だった気が・・・

単なる数字(例えば5とか)は、通常Num a。定数として宣言すると、Integralにデフォルトでなるから、数字をInt型にしたいなら、5::Intって具合に宣言しないとダメ
>>441への回答としては(^(2::Int))と書け。が、妥当だと思うんだが・・・

*Main> :t 5
5 :: Num a => a
*Main> let a = 5
*Main> :t a
a :: Integer
*Main> :t 5::Int
5::Int :: Int
456デフォルトの名無しさん:2011/11/10(木) 22:48:37.04
>>441は何も質問してないのに回答とかよくわからん
俺は>>442に対する>>443の回答に反論してるだけだよ
457デフォルトの名無しさん:2011/11/10(木) 23:17:35.61
>>456
ん、んんん?
だったら、>>450の通り、先に型を書けば防げてるだろ?
(^(2::Int))は併用すればいい話じゃね?
ごちゃ混ぜに話すなよ
458デフォルトの名無しさん:2011/11/10(木) 23:20:16.10
何が防げてるの?
459デフォルトの名無しさん:2011/11/10(木) 23:32:16.57
>>458
遅いIntegerやNum aを使うのを防げてるだろ

だあ、もう

beki1 a = a ^ 2

beki2 :: Int -> Int
beki2 a = a ^ 2

beki3::Int -> Int
beki3 a = a ^ 2::Int

下に行くほど、遅い型を使うの防げてる

以上

460デフォルトの名無しさん:2011/11/10(木) 23:40:30.36
先に書くだけじゃ、2がIntegerになるのは防げないんでしょ?
461デフォルトの名無しさん:2011/11/10(木) 23:54:39.66
>>460
そうだな
ただ、一般的には自分で型を書いた方が速い型を選べる

(^(2::Int))も出してるのに、そこに拘るってのもどうなのよ?
併用すればいいじゃないかって書いたよな?
そこは認めるのか?
462デフォルトの名無しさん:2011/11/11(金) 00:20:31.17
もちろん併用は有効。
だけど>>442>>443の回答は誤り。
463デフォルトの名無しさん:2011/11/11(金) 00:32:29.31
>>462
絡むんじゃなくて、こうだから、間違いって指摘しろよ
時間の無駄
464デフォルトの名無しさん:2011/11/11(金) 00:42:49.60
それこそ

beki n = beki' n 2
465デフォルトの名無しさん:2011/11/11(金) 00:47:17.39
書き損じ・・・

それこそ

beki n = beki' n 2
where
beki'::double->Int->double
beki' n m = n^m

なら、ちゃんとn^2そのものを書く前に2の型も決められるしな
(さすがに、こんな反論もどうかと思うが)
466デフォルトの名無しさん:2011/11/11(金) 00:49:18.12
要するに型を書けば解決する話。
先に書くか後で書くかは無関係ですな。
467デフォルトの名無しさん:2011/11/11(金) 03:36:49.91
c言語でのint (*)[4]型っぽいものをhaskell的に表現する場合、
* = Pointer, [] = Array4, int = Intと置き換えて、
Pointer (Array4 Int Int Int Int)とでも書けるんだろうけれど、
int (*)[100]型とかになってくるととても書いていられない。
何か上手い方法はないだろうか。
用途ねーだろって突込みは無しで。
468デフォルトの名無しさん:2011/11/11(金) 08:48:39.45
>>467
コード生成じゃ駄目?
469デフォルトの名無しさん:2011/11/11(金) 08:49:33.54
Data.Arrayってそういうのじゃないの?使ったことないけど。
470デフォルトの名無しさん:2011/11/12(土) 01:01:56.40
reactive-glutを試そうとしたら依存パッケージのcategory-extrasがインストールできなかった。
out of dateなパッケージかどうかすぐに分かる手段ってあるのかな。
471デフォルトの名無しさん:2011/11/12(土) 08:11:04.13
ListはもうEducationalモジュールに引っ越せ
472デフォルトの名無しさん:2011/11/12(土) 12:18:07.24
>>471
引っ越したとして、代わりに何を標準ライブラリに入れるの?

今までの List と互換が無ければ今まで作ってきた資産が死ぬし、
さもなければ互換性を捨ててでも入れる大きなメリットがあるものじゃないと
473デフォルトの名無しさん:2011/11/12(土) 15:32:33.20
haskellはrubyと比べてダメな言語。 http://d.hatena.ne.jp/mizon9/20111112/1321046483
474デフォルトの名無しさん:2011/11/12(土) 15:49:26.84
>>473
こういう総合的使い勝手に関して
関数型言語は時の洗礼を十分に勝ち抜いてはいないと思う
当面C#からF#を操作すればいいと思うしまだまだ本格使用はしない
475デフォルトの名無しさん:2011/11/12(土) 15:49:41.43
>>473
そこで挙げられてる事に関しては俺もそうだと思う。
回避策はあるにはあるけど、いつも使える訳じゃないし。
476デフォルトの名無しさん:2011/11/12(土) 15:57:09.17
>>473
名前空間の問題はasでimportすれば解決するんじゃ?
module が抽象化の単位だから module毎に名前空間を設定できればいいわけだし

操作とデータ型の分離はいわゆるexpression problemによくあるトレードオフそのもので
どっちがいいとかじゃないと思う
分離してmoduleで管理でいいと思うけど
class前提の人には受け付けないのか
477デフォルトの名無しさん:2011/11/12(土) 15:59:22.58
>>473
SMLならモジュールで名前空間を実現しているから
uri.schemeやuri.pathみたいに書けて、Rubyと遜色ない

Haskellって大規模開発には適していないのかな?
478デフォルトの名無しさん:2011/11/12(土) 16:07:36.78
Haskellわかってないやつが批判してるってのは理解できた
479デフォルトの名無しさん:2011/11/12(土) 16:19:42.77
名前についてHaskellよりRubyの方がうまくやってるのはその通りだな
qualifiedでインポートしても結局修飾しなきゃいけなくて、.fooで済むオブジェクト指向言語には負ける

それ以外の点は的外れだと思った
関数の部分適用とsetterはまるで別物だし、パターンマッチはかっこいいifじゃないし、
高階関数の「固まり」を苦労して扱わなくて済むのはそれだけで利点だし
480デフォルトの名無しさん:2011/11/12(土) 16:23:39.76
>>477
そのuri.schemeのuriってモジュール名?そうならRubyと遜色ないとは言えないだろ
Ruby(や他のオブジェクト指向言語)はモジュールで修飾する必要がないのが自慢なんだから
481デフォルトの名無しさん:2011/11/12(土) 16:24:46.65
>>477
バイナリ互換性が糞だからな
それが一番大問題だと思う

名前空間は一長一短だろ、エディタでの補完考えるとhaskellみたいに関数名で完結してたほうが良い
482デフォルトの名無しさん:2011/11/12(土) 16:27:49.15
補完は静的であれば何でもいけるんじゃないかと
483デフォルトの名無しさん:2011/11/12(土) 16:28:53.90
http://hackage.haskell.org/trac/haskell-prime/wiki/TypeDirectedNameResolution
これがあれば短い名前を使って衝突しても解決してくれるという触れ込みだけどどうなんだろう
個人的には曖昧エラーの山になりそうだと思うんだが
SPJは使いものになると考えてるらしい
484デフォルトの名無しさん:2011/11/12(土) 17:07:16.80
>>480
SMLなら、open uri と宣言すれば、Rubyと同じように修飾を省略できるよ
Haskellはできないの?
485デフォルトの名無しさん:2011/11/12(土) 17:09:09.99
>>481
>名前空間は一長一短だろ、エディタでの補完考えるとhaskellみたいに関数名で完結してたほうが良い

まるでイソップ童話の「酸っぱいブドウ」みたいだ....
486デフォルトの名無しさん:2011/11/12(土) 17:11:25.72
>>484
できるけど、名前が衝突しない場合に限る。これはSMLも同じだよな?
Haskellで短かい名前を多用すると、けっこう頻繁に衝突して、けっきょく修飾インポートするはめになる
Rubyだとメソッド名はグローバルじゃないので衝突を気にする必要すらない
487デフォルトの名無しさん:2011/11/12(土) 17:16:42.29
>>486
>これはSMLも同じだよな?

いや、ゼンゼン(理由は下記を参照)

>Haskellで短かい名前を多用すると、けっこう頻繁に衝突して、

ナゼこんなことが起きるの?
SMLなら名前空間は(Rubyと同じように)階層化されているから、
適切にモジュール設計していれば、衝突なんて全く気にならないんだけど....

もしかしてHaskellの(モジュールに関する)名前空間というのは
フラット(平坦)なの?
488デフォルトの名無しさん:2011/11/12(土) 17:21:06.02
>>485
>>481は関数名しか補完してくれないテキストエディタしか使ったことが無いのかもしれない。
型を認識するIDEを使ったことがあれば、こんな発想にはならないだろ。
489デフォルトの名無しさん:2011/11/12(土) 17:23:06.27
>>487
Haskellの名前空間はフラットだよ
階層化されているから名前が衝突しないってのが良く分からん
実例かポインタある?

>SMLなら名前空間は(Rubyと同じように)階層化されているから、
Rubyで衝突を気にしなくていいのはメソッド名の解決に型情報を使う
(正確にはレシーバがメソッド名を実行時に解釈する)からであって、
階層化うんぬんは関係なくね?
490デフォルトの名無しさん:2011/11/12(土) 17:25:14.72
>>487
> もしかしてHaskellの(モジュールに関する)名前空間というのは
> フラット(平坦)なの?

どういうのをフラットと言うのか分からんが、
俺が Haskell のモジュール関係で不満なのは次のことができない事

AAA.BBB.CCC.DDD というモジュールがあったとして、
モジュール AAA.BBB をインポートして CCC.DDD.fff で関数 fff を使う事

関数 fff を使いたかったらモジュール AAA.BBB.CCC.DDD をインポートしないといけない
491デフォルトの名無しさん:2011/11/12(土) 17:36:29.05
すいません、Haskell初心者で
オライリーのプログラミング言語Haskellを買ってきたのです
プログラムをかきながら本を進めていくと
後半からimportできないモジュールばかりになるのですが…
環境はWindowsでGHC6.4.1ですが、CentOSでGHC6.10.4でもダメなので
単純に環境問題ではない気がするのですが…
492デフォルトの名無しさん:2011/11/12(土) 17:42:05.24
>>489
>実例かポインタある?

階層化されたディレクトリの無いファイルシステム(CP/Mや初期のMS-DOS)
過去の階層化されていないWindows Network(NetBIOS)

名前の衝突回避と階層化との関連はコンピュータ科学の知識があれば常識だよ

>階層化うんぬんは関係なくね?
Rubyのインスタンスメソッドについては、その通りだね。
ただし、Rubyにはクラスメソッドあるいはモジュール関数という概念がある。
これらのメソッドは(実際の実行は動的であっても、)構文上は静的に解釈できる。
ここで、M::N::O.func と M::N.func は同じモジュール関数名 func を使っているけど、
それぞれ名前空間が M::N::O と M::N とで異なっているから静的に区別できる。
493デフォルトの名無しさん:2011/11/12(土) 17:49:31.51
>>492
いやプログラミングの文脈ではぜんぜん常識じゃないと思うんだが

あるモジュールMを書いているとする
別のモジュールA.B.Cの関数fと、A.D.Eの関数fを使いたくなったので、両方ともインポートする
すると、単にfと書くだけではどちらを意味しているか決まらないので、なんらかの修飾が必要になる
これは名前空間が階層化されていようがいまいが関係ない

という理解だけど
494デフォルトの名無しさん:2011/11/12(土) 17:52:01.51
>>485,488
たしかに変なこと言っちゃったな
大規模開発云々で名前空間のrubyとhaskellでの差なんて大した問題じゃないってことが言いたかった
495デフォルトの名無しさん:2011/11/12(土) 18:05:45.44
>>493
修飾の無い名前 f だけじゃ区別がつかないのは、常識以前の当たり前な話だろ

>>493の例の場合、RubyやSMLならばモジュール空間Aだけをインポートして
B.C.f と D.E.f と書くことができる。あるいは、X=A.B.CおよびY=A.D.Eという
局所的なモジュール空間を宣言してX.f および Y.f という短い別名での参照が可能。

HaskellではAだけをインポートするとか、
あるいは局所的なモジュール空間を宣言するとかできないの?

RubyやSMLなら「普通に」できるんだけど....
496 [―{}@{}@{}-] デフォルトの名無しさん:2011/11/12(土) 18:08:18.90
>>495
>修飾の無い名前 f だけじゃ区別がつかないのは、常識以前の当たり前な話だろ
Rubyのインスタンスメソッドについてはそれができるんだよ。ずっとその話をしていたと思ったんだが

>HaskellではAだけをインポートするとか、
>あるいは局所的なモジュール空間を宣言するとかできないの?
できません
497 [―{}@{}@{}-] デフォルトの名無しさん:2011/11/12(土) 18:12:28.69
>局所的なモジュール空間を宣言してX.f および Y.f という短い別名での参照が可能。
これについては同様のことができるな。局所的なモジュール空間を宣言するわけじゃなくて
単なる別名の導入だけど

import qualified A.B.C as X
import qualified A.D.E as Y
498デフォルトの名無しさん:2011/11/12(土) 18:15:51.80
>>496
>Rubyのインスタンスメソッドについてはそれができるんだよ。

Rubyのインスタンスメソッドもレシーバで修飾しなければ区別できないよ。

たとえば
 c = A::B::C.new; e = A::D::E.new
という文脈の下で、レシーバで修飾された
 c.f および e.f
という式は正しく評価できるけど、単なる
 f
ではRuby処理形は式を評価できない。(当たり前の話だよね?)
499 [―{}@{}@{}-] デフォルトの名無しさん:2011/11/12(土) 18:22:34.43
>>498
もちろん。でもHaskellにはその能力がない
Rubyでuri.schemeと書くときにメソッド名schemeが他と衝突するのを心配する必要はないけど、
Haskellで(scheme uri)と書くならそうはいかない
これを指して>>486で「けっこう頻繁に衝突」と言った
>>487で否定されたのでSMLにもRubyみたいなレシーバ依存の名前lookupがあるのかと思ったけど、
そういう訳でもないってことで良いかな
500デフォルトの名無しさん:2011/11/12(土) 18:23:49.38
なんか一人すごい天然がいるなw
501デフォルトの名無しさん:2011/11/12(土) 18:36:14.30
お願い

感情に走らずに、もっと落ち着いて議論して
502デフォルトの名無しさん:2011/11/12(土) 18:39:16.82
>>499
>そういう訳でもないってことで良いかな

SMLはオブジェクト指向では無いし静的型付け言語だから、
Rubyのようなレシーバ(インスタンス)依存の名前参照は存在しない

ただし、SMLでは uri.scheme と書く時に、uri以外の他のモジュールで
schemeというアクセサ名が使われているかどうかを心配する必要はない
つまりHaskellのような urlScheme という冗長な命名は不要

こういう事で理解してもらえるかな?
503 [―{}@{}@{}-] デフォルトの名無しさん:2011/11/12(土) 18:51:56.84
>>502
>つまりHaskellのような urlScheme という冗長な命名は不要
Haskellでもこれは原理的には不要なんだよ
衝突が発生したら修飾した名前に切り替えればいいだけ
uriSchemeのような命名がされるのは修飾を面倒だと思っているから

これに関してHaskellでできないことをSMLができる訳じゃないと理解した
もちろん名前空間が階層化されてるのは良いことだけど、この話題には関係ない
504 [―{}@{}@{}-] デフォルトの名無しさん:2011/11/12(土) 18:54:26.76
あと、Haskellだってオブジェクト指向じゃないし静的型付けだけど、
レシーバ(に相当するもの)の型に依存して名前解決を行えるようにしようという提案があって、
それが>>483
505デフォルトの名無しさん:2011/11/12(土) 18:57:39.73
SMLとHaskellは同じ
Rubyは普通のOOPをやってる

新しい話題は無いわけね
506デフォルトの名無しさん:2011/11/12(土) 18:58:06.93
ようやく数セミにモナドの解説出たか。やっぱ京大スゲーわ。
507デフォルトの名無しさん:2011/11/12(土) 19:06:28.43
ここで出ている話題だと
コンパイル時に実装が選択できれば十分で
OOPの動的束縛を持ち出すのは道具が大きすぎな気がした
508デフォルトの名無しさん:2011/11/12(土) 22:08:46.75
僕ハスケルでOOPしたいです先生
509デフォルトの名無しさん:2011/11/12(土) 22:23:45.34
>>508
多相レコードを使え…あったっけ?
510デフォルトの名無しさん:2011/11/12(土) 23:01:33.64
>>508
どういうのをOOPと言ってるの?
何がどうできたらOOPと言っていいの?
511デフォルトの名無しさん:2011/11/13(日) 00:47:50.77
どんな言語でもまともなプログラムを作ろうと思うったらOOPしない方が難しい
512デフォルトの名無しさん:2011/11/13(日) 00:53:06.55
定義と思ってるものが各人違うから

http://ja.m.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0
- カプセル化 (振る舞いの隠蔽とデータ隠蔽)
- インヘリタンス (継承) --クラスベースの言語
- ポリモフィズム (多態性、多相性) --型付きの言語
- ダイナミックバインディング (動的束縛) --インタープリタの言語 この機能

これらの機能のうち、オブジェクト指向の考え方で不可欠なのは「カプセル化」の機能だけである
513デフォルトの名無しさん:2011/11/13(日) 00:58:52.92
隠蔽かあ。あんまり良い定義とも思えないな
PythonとかOOPLでなくなってしまう
なんでこう日本語版のWikipediaは(略
514デフォルトの名無しさん:2011/11/13(日) 01:03:23.86
そう思うのなら翻訳よろしく
http://en.wikipedia.org/wiki/Object_Oriented_Programming
515デフォルトの名無しさん:2011/11/13(日) 01:16:28.24
やさしいHaskell入門 型クラスと多重定義
http://www.sampou.org/haskell/tutorial-j/classes.html
Haskell vs OOP
http://d.hatena.ne.jp/kazu-yamamoto/touch/20080828/1219888005
OOP vs type class
http://www.haskell.org/haskellwiki/OOP_vs_type_classes

↓こういう考えかたも、分かりやすいと思うんだけどな。
Clojureは、皆さんがオブジェクト指向から望む多くのものを提供 *して* います。
http://www.infoq.com/jp/news/2009/02/clojure-interview-halloway
516デフォルトの名無しさん:2011/11/13(日) 01:18:40.31
> ダイナミックバインディング (動的束縛) --インタープリタの言語 この機能
これ dynamic dispatch のことだよね
インタープリタの言語じゃなくてもあると思うんだけど
517デフォルトの名無しさん:2011/11/13(日) 01:20:07.80
オブジェクト指向といえば、こんなのも有るよ。
Perl5's Moose ロールベース?のオブジェクト指向
http://perldoc.perlassociation.org/pod/Moose-Doc-JA/Moose/Manual.html
518デフォルトの名無しさん:2011/11/13(日) 01:36:57.23
宣言的とのことなので、ロールじゃ無くてルールだった。

そういえば、動的型付け言語も動的ディスパッチする部分を型推論したり、
宣言する方向で高速化してるな。
519デフォルトの名無しさん:2011/11/13(日) 01:45:46.50
What is "Object-Oriented Programming?" [B. Stroustrup ECOOP '87] によれば
(subtype) polymorphismとADTの組み合わせだと言ってる
データ隠匿やデータ抽象だけならADTで可能だけど、これだけではOOPじゃない
520デフォルトの名無しさん:2011/11/13(日) 02:46:52.16
それは二つに分岐した一方のオブジェクト指向ではないかい?
521デフォルトの名無しさん:2011/11/13(日) 03:05:26.23
Haskellの型クラスとかインスタンスという用語は
OOPの用語と重なっているからまぎらわしい
もちろんHaskellの型クラスがOOPのクラスとは全く異なる概念であることは
調べればすぐに理解できることだけど、
いざHaskellのFPとOOPを対比させた説明を始めようとすると、
いちいち「Haskellのクラスは...」と「OOPのクラスは...」というように修飾が必要
522デフォルトの名無しさん:2011/11/13(日) 03:10:45.95
もう一つのオブジェクト指向のひとたちは、環境全体を考えるから分かりにくいね。
オブジェクト指向プログラミング:筋悪だったのか?
http://www.infoq.com/jp/news/2010/07/objects-smalltalk-erlang
523デフォルトの名無しさん:2011/11/13(日) 08:17:08.75
#Ruby の人でHaskellを勉強したいと思っている人はけっこういる。
Haskellの人でRubyに興味がある人はあんまりいない。
両方使えるならHaskell使うだろ。
つまりそういうことだ。

ちなみにRubyはListをmapしたらArrayになる。こんなのをほったらかし
たままで新しい構文がどうのこうの言っている。Rubyはオワコン
524デフォルトの名無しさん:2011/11/13(日) 08:42:40.27
>>506
は?京大なんて傲慢レポート何位だと思ってんだよ?
525デフォルトの名無しさん:2011/11/13(日) 09:05:28.47
>>523
> ちなみにRubyはListをmapしたらArrayになる。
どゆこと?
526デフォルトの名無しさん:2011/11/13(日) 09:15:34.66
言葉通りの意味だろ
527デフォルトの名無しさん:2011/11/13(日) 09:26:08.75
いやだってRubyにListってクラスは(多分)無いし、
Listと同じように扱えてmapを呼べるArrayはmapしてもArrayを返す

rb> a1 = [1, 2, 3]
=> [1, 2, 3]
rb> a1.class
=> Array
rb> a2 = a1.map{|e| e * 2 }
=> [2, 4, 6]
rb> a2.class
=> Array

なのでもう少し説明が欲しい
528デフォルトの名無しさん:2011/11/13(日) 09:26:50.55
トートロジー
529デフォルトの名無しさん:2011/11/13(日) 09:45:49.75
イテレータであるEnumerableから実際のコンテナにアクセスするとかそういう意味ならばまだ分かったんだけどなぁ>rubyのmap
530デフォルトの名無しさん:2011/11/13(日) 10:27:18.52
>>523
そもそもRubyは関数型言語ではないんだよね
関数風の(=関数型言語スタイルの)プログラミングも可能だというだけで....
厳しく言えば、Rubyでは関数(メソッド)はファーストクラスじゃないし、
末尾再帰も最適化されないからすぐにスタックオーバーフローする

自分達の優位な土俵で下位レベルの言語をつかまえて、
自身の優越感に浸るとは、なんともはや心の狭い発想じゃないのかと思われ
そんなにもHaskellという言語に対して自信が無いの?
もっと胸を張ってもいいと思うんだけどなあ....
531デフォルトの名無しさん:2011/11/13(日) 10:33:02.71
その点トッポって凄いよな
末尾までちゃんとチョコが再帰してる
532デフォルトの名無しさん:2011/11/14(月) 04:23:49.84
>>530
>>473のどこから優越感が云々という話になるのか分からんのだが

Rubyは言語仕様を読むとけっこう滅茶苦茶、細部をつつくと大変な事になる言語だが
一方で、言語仕様の「良さ」で支持されてきた言語でもある
悪い意味じゃなくてHaskellとは対照的な感覚があると思うけど
533デフォルトの名無しさん:2011/11/14(月) 08:04:23.97
>>532
どこから473が出てきたのか分からんのだが
523は俺が読んでも酷いレスに思える
534デフォルトの名無しさん:2011/11/14(月) 16:30:43.08
そろそろ純粋関数型とそうじゃないやつは分けて話そうぜ
Lisp対Haskell並に不毛な議論
最強を決めたいなら、とりあえずラムダ計算にしとけばいいよ
535デフォルトの名無しさん:2011/11/14(月) 16:46:43.11
ラムダ計算vs型付きラムダ計算
536デフォルトの名無しさん:2011/11/14(月) 16:54:16.83
Typed Pi-CalculusとTyped Join Calculusも虎視眈々と最強を狙ってる。
537デフォルトの名無しさん:2011/11/14(月) 18:34:22.14
まーちんれふでも意味分からんのにホモとピーとか有向型理論とかどんどんでてきてついていけせんねん
538デフォルトの名無しさん:2011/11/14(月) 18:43:45.63
君たちがなんかやっても、外人Haskell使いのほうが詳しいし
何でHaskellやるの?教えて???
539デフォルトの名無しさん:2011/11/14(月) 18:56:08.83
釈迦の教えに通じるから
540やんやん ◆yanyan72E. :2011/11/14(月) 21:07:35.07
Haskellは現代数学をWikipediaで勉強するレベルの人間が
粋がって数学用語を多用するのがなんか鼻に付く。
541デフォルトの名無しさん:2011/11/14(月) 21:10:21.00
にわかほど語りたがる -- あるハッカー
542デフォルトの名無しさん:2011/11/14(月) 21:18:39.79
>>538
単純に楽しいから・・・かな
なぜか組み込み関数と同じもの自分で定義したり、+演算子と同じ機能定義しようとして数学の世界に片っぽ足を突っ込んで「おお!!これ、数学スレやLispスレで見たぞ!!大学数学を高卒なのに解いてる!!」とか、そんなことに興奮してるけど…
543デフォルトの名無しさん:2011/11/14(月) 21:34:31.55
証明するより、プログラムのが楽しいというのもあるし、、、
544デフォルトの名無しさん:2011/11/14(月) 21:40:08.83
>>543
証明するつもりなかったんだけどね…
単に+演算子と同じもの作りたかっただけだったのに、自然数から定義しなおす羽目になって、それがHaskellで動くもんだから、興奮しちゃうという…
545デフォルトの名無しさん:2011/11/14(月) 22:04:22.81
Yampa を調べているのですが、意味が分からない部分があります

dpSwitch 関数が第1引数として適用する関数
forall sf . (a -> col sf -> col (b, sf))
これの sf はこの関数においてどのような役割を果たすのでしょうか
546デフォルトの名無しさん:2011/11/14(月) 22:09:25.28
出番だ、>544
547545:2011/11/14(月) 22:23:14.00
>>545
質問がやや曖昧でした

> これの sf はこの関数においてどのような役割を果たすのでしょうか

これの sf は dpSwitch 関数おいてどのような役割を果たすのでしょうか
548デフォルトの名無しさん:2011/11/14(月) 22:51:01.97
>>542
楽しいとか病気かよ
数学やればいいじゃん
なんか モナドとか国論とかまじ意味不明
>>540 の言うとおり、花につくんですが
549デフォルトの名無しさん:2011/11/14(月) 22:52:14.13
プリン吹いた
550デフォルトの名無しさん:2011/11/14(月) 22:56:10.39
天才でも頭悪くもない

”普通”のやつがなんか 数学とか知的ぶったりしてて気持ち悪い

花につく
本当に気持ち悪いよ

エジソンとか気取ってるのかな?
知的遊戯好きアピール ”パズル、知恵の輪、囲碁、将棋、Haskell、数学”

インテリジェンス気取りたいだけ
551デフォルトの名無しさん:2011/11/14(月) 22:56:44.70
せいぜい、こういうのはMatzとかそういう頭のいい連中レベルになって語って
まじ気持ち悪い
花につきます


以上
552デフォルトの名無しさん:2011/11/14(月) 22:58:13.53
>>539-544
窓ガラスぶち壊してくれてありがとう

汚れたスレになったから書き込みやすくなったよ

またよろしく
553デフォルトの名無しさん:2011/11/14(月) 23:06:23.65
>>545
ttp://www.haskell.org/haskellwiki/Rank-N_types
こことか型変数の全称量化について簡潔に書いてあるよ。
554デフォルトの名無しさん:2011/11/14(月) 23:09:20.69
>>550
>インテリジェンス気取りたいだけ
インテリゲンチャだろwwwwwwwwww

これでよろしい?
555545:2011/11/14(月) 23:16:31.05
>>553
forall sf . (a -> col sf -> col (b, sf))

これが返す値 col (b, sf) の sf は何に使われるのでしょうか

b は分かります
dpSwitch 関数が管理するシグナル関数の入力に使われるのですよね
でも dpSwitch 関数の残りの引数には sf 型は無いです

論文「The Yampa Arcade」を読むと、
そこでは dpSwitch 関数の第1引数として自作の route 関数を敵用させていますが、
この route 関数を見てもやはり sf の意味が分からないです
556553:2011/11/15(火) 00:06:14.72
>>555
ソースは見た?
今見てきたんだけど、内部での使われ方はそんな複雑じゃなかったよ。
sfはdpSwitchの第3引数として渡した関数に与える値を生成する為に使用されるSF a b型の値。
Yampaを知らんから適切な説明ができん。
557デフォルトの名無しさん:2011/11/15(火) 01:16:49.61
>>546
いや、自分、基本バカだから
数学やりたかったんじゃなくて、+演算子を自分で作りたかっただけだから
558545:2011/11/15(火) 07:37:16.66
>>556
私も一応ソースは見ましたが、私にはけっこう複雑でまだ計算を正しく追えていません

> sfはdpSwitchの第3引数として渡した関数に与える値を生成する為に使用されるSF a b型の値

ということは、SF a b型の値ではなくて SF b c 型の値ではないでしょうか

どちらにしても、それなら dpSwitch 関数が第1引数として適用する関数は
次のような型で良いはずです

a -> col (SF a b) -> col (b, (SF a b))

あるいは(もし私の認識の方が正しければ)、

a -> col (SF b c) -> col (b, (SF b c))

そうではなく、わざわざ forall を付けて汎用の sf 型としているからには、
シグナル関数以外のどのような型でも受け付けるという事ではないでしょうか
そう考えると、ではこの sf とはどのような意味を持つものなのか、疑問が沸きます

559デフォルトの名無しさん:2011/11/15(火) 17:07:08.02
花・・・
560デフォルトの名無しさん:2011/11/15(火) 18:08:13.68
それより国論にツッコみたい。圏すら読めない奴がぐだぐだ語るのは(ry
561デフォルトの名無しさん:2011/11/15(火) 18:11:08.31
踏むなよウンコを
562デフォルトの名無しさん:2011/11/15(火) 20:23:31.93
気に入らないから勉強やめろってのは豪快でいいなw
扁桃体が直接口を利いてるようなものだな
563デフォルトの名無しさん:2011/11/15(火) 21:36:19.06
厳しい親元なら、たいてい娘に浪人するなら結婚しろという時代もあった。
その前は大学には行かさんか。
564デフォルトの名無しさん:2011/11/15(火) 22:53:30.31
今時彼氏や旦那の助けにもなれない女はダメだろ。
565デフォルトの名無しさん:2011/11/17(木) 10:46:12.88
haskellのために国富論なんて勉強してられないよ・・・
566デフォルトの名無しさん:2011/11/17(木) 16:27:25.00
だからやめろよ?
や め ろ
567デフォルトの名無しさん:2011/11/17(木) 16:36:41.92
中途半端なやつは嫌われる

天才でも馬鹿でもない=Haskell使ってるやつら

不良でもギャルでもヤクザでもない=パギャル、つっぱり、チンピラ ウザがられる

赤ちゃんでもない大人でもない=不細工な小学3年生 ポケモンでいうフシギソウ、カメール、リザード バッタでいう幼虫

Matzでもない小飼弾でもない=コガイよりつまらなくて、Matzより頭悪いHaskelやってるやつら

お前ら中途半端

中途半端は悪

なぜ悪か?悪いか答えてみてください 早く答えろ

ジャップ技術者=英語ができない、技術力も欧米以下、WEBサービスも微妙=中途半端
568デフォルトの名無しさん:2011/11/17(木) 17:12:12.26
>>567
じゃあ、俺の代わりにhaskellやってくれ
569デフォルトの名無しさん:2011/11/17(木) 18:07:51.06
天は自らHaskellものを助く
570デフォルトの名無しさん:2011/11/17(木) 19:07:23.43
>>567
おら、返事は?
お前も中途半端なのか?
中途半端を見下すってことは、お前は中途半端じゃないんだろ?
571デフォルトの名無しさん:2011/11/17(木) 20:03:23.41
>>570
>>567はツンデレだろ?
>>天才でも馬鹿でもない=Haskell使ってるやつら

「天才でも馬鹿でもない」のが世間の大半なんだから、567はHaskellerが実はメジャーだと言いたいんだよ。
シャイな奴だ。
572デフォルトの名無しさん:2011/11/17(木) 21:00:04.72
定期的にこういうやつ沸くな
573デフォルトの名無しさん:2011/11/17(木) 21:07:59.17
定期券破棄しろ
574デフォルトの名無しさん:2011/11/18(金) 07:38:08.92
初歩過ぎる質問なんだけど、引数の整数から1を減らした整数を返す関数

f x = x - 1

これをポイントフリーの無名関数で表現するのってどうやるんだっけ?

((-)1) これだと 1 - x になっちゃう
Enum クラスの関数 pred を使うしかない?
別にいいんだけど、マイナス演算子を使ってできなかったかなと思って
575デフォルトの名無しさん:2011/11/18(金) 07:46:39.63
(flip (-)) 1
576デフォルトの名無しさん:2011/11/18(金) 08:20:48.17
subtract = flip (-)
がPreludeに定義されてる
f = subtract 1
577デフォルトの名無しさん:2011/11/18(金) 10:27:44.65
>>574
ねえ?なんでHaskellやるの?!!!?!?!?!
int a(x)
{
return x-1;
}
ねえ?!!?!!?!?!?これでできるじゃん
あほかよ
何でHaskell使ってそんなくだらない低レベルなことやってるの?
早く死ね中途半端
天才Haskell研究者でもないゴミ お前はただのヘラクレス本あがめてるニワカ
社内でHaskell Haskell!とかほざいて共感意識あげてる 底辺の馴れ合い
国論やってろよゴミ
お前がやってることはただの低レベルな意味がないこと
ただHaskellを触って 「本物のプログラマはHaskellを使う」という記事に自分を当てはめて優越感
にひたってるごみ?!?!?!?!?!
578デフォルトの名無しさん:2011/11/18(金) 10:33:56.69
>>577
なぜ返り値を int にしたの?
579デフォルトの名無しさん:2011/11/18(金) 11:04:47.64
>>577
あなたの発言は傾聴に値する.是非これからは鳥あるいはコテハンをつけて発言して欲しい.
580デフォルトの名無しさん:2011/11/18(金) 12:02:18.38
http://www.f13g.com/や
http://www.sampou.org/haskell/ipsj/のデモを動かしたくて
Haskell Platform 2011.2.0.1-x86_64.pkg
をインストール、.zshrcにexport PATH="~/Library/Haskell/bin:$PATH"追記
しかし、importを使ったプログラムが動きません。

$ ghci -v
Using binary package database: /Library/Frameworks/GHC.framework/Versions/7.0.3-x86_64/usr/lib/ghc-7.0.3/package.conf.d/package.cache
wired-in package ghc-prim mapped to ghc-prim-0.2.0.0-d9df11f804556f362beb0ea4e67261ba
wired-in package integer-gmp mapped to integer-gmp-0.2.0.3-298c59ba68b7aaa7e76ae5b1fe5e876e
wired-in package base mapped to base-4.3.1.0-f5c465200a37a65ca26c5c6c600f6c76
wired-in package rts mapped to builtin_rts
wired-in package template-haskell mapped to template-haskell-2.5.0.0-b46cde34bfee890dc536d5be377e906f
wired-in package dph-seq not found.
wired-in package dph-par not found.
Hsc static flags: -static
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
Prelude> :show packages
active package flags: none
$ghc-pkg check
$ghc-pkg recache

環境は10.6 Xcode 3.26 です。どなたかご教授お願いします。
581デフォルトの名無しさん:2011/11/18(金) 12:24:03.45
肝心のエラーは?…
582デフォルトの名無しさん:2011/11/18(金) 12:29:56.15
>>581
四角形をぐるぐるまわすを
$cat > main.hs
-- コピペ
$ghc -package GLUT main.hs

main.hs:11:9:
The last statement in a 'do' construct must be an expression:
rot <- newIORef 0.0 initialDisplayMode
$=
[RGBAMode, DoubleBuffered] initialWindowSize
$=
Size 640 480 createWindow "guruGuru" displayCallback
$=
display rot reshapeCallback
$=
Just reshape addTimerCallback timerInterval
$ timerProc (display rot) mainLoop display rot

ほかのものは
Failed, modules loaded:ほにゃらら
となってしまいます
583デフォルトの名無しさん:2011/11/18(金) 12:42:38.02
>>575,576
アドバイスありがと

なんかか昔、関数の中置化とかいろいろこねくり回してたら
いつのまにか減算関数が (-) を使って綺麗に作れたような気がしてたけど、
気のせいだったかも知れん

Prelude に定義されているということで、subtract を使うことにする


>>577
Yampa でゲーム作ってて、敵の体力を1減らす処理が必要だったんだ
べつに >>577 のような方法でも全く問題ないんだけど、
なんかもっとスマートに書ける方法があったような記憶があって、
でもどうしても思い出せないから質問してみた

こういう事、時々ある
教えてもった後で、なんでこんな事思い出せなかったんだろ、
分からなかったんだろって思うんだけどね
584デフォルトの名無しさん:2011/11/18(金) 12:51:48.46
>>582
GLUT必須みたいだけど、入ってる?
HaskellじゃなくてOS側に。
585デフォルトの名無しさん:2011/11/18(金) 12:58:16.17
>>584
入れてません
GLUTによる「手抜き」OpenGL入門
をみてXcodeに入ってると思っていました
(引文)
シンボリックリンクを張っておく必要があります.〜
この最後のシンボリックリンクを作成しない場合は, 以下のソースプログラムにおいて GL/glut.h ではなく GLUT/glut.h を #include するようにしてください (Mac OS X ではそうするのがスジでしょう).
が原因でしょうか

もっと調べてみます!
586デフォルトの名無しさん:2011/11/18(金) 13:00:44.76
>>585
すまない。実はMacはよくわからないが答えてるんだ。
.soがHaskell側で読み込まれてないのか?と思った。
そのシンボリックリンクは必須だと思うよ。
587デフォルトの名無しさん:2011/11/18(金) 13:09:14.19
GLUTによる「手抜き」OpenGL入門

手抜きってつけた理由は、指摘されたり 批判されたとき

「手抜き」って書いてあるだろwww

っていうため
言い訳なんだよ
588デフォルトの名無しさん:2011/11/18(金) 13:10:07.41
書いたやつはセコくさそう 他人の評価におびえてそう
セコイヤチョコレート
589デフォルトの名無しさん:2011/11/18(金) 13:49:38.06
>>577
なんでって、haskellスレだからに決まってるだろ。
590デフォルトの名無しさん:2011/11/18(金) 15:12:59.98
NQueen問題を解くプログラムを作ったので
コマンドライン引数から盤面の大きさやコマの数のパラメータを渡せるようにしてやろうしています。
http://haskell.org/ghc/docs/7.0-latest/html/libraries/index.html
のそれらしい所をあたったりggったりして色々調べているのですが
取り合えずSystem.Environment.getArgsというものがつかえそうだ
と言う所がわかったまででとまっています
皆さん必要なライブラリ関数を探すときはどうやって探しているんですか?

591デフォルトの名無しさん:2011/11/18(金) 15:24:22.14
>>590
とりあえずググり、それからhackageとかで探してる。
標準ライブラリは何回も見てるうちに勘が働くようになる。
592デフォルトの名無しさん:2011/11/18(金) 15:49:14.03
hoogleやhayooとかあった。
593デフォルトの名無しさん:2011/11/18(金) 16:09:01.37
使う言葉が一般的すぎ。
Environment とか Args とかは色々な意味で使うから検索しにくい。
System に属しているからわかるっちゃわかるけど、
getArgs は getCommandLine とかの方が探しやすいんじゃないかと思った。
まぁ、それも慣れか。
594デフォルトの名無しさん:2011/11/19(土) 02:16:47.63
argsは他のプログラミング言語でも起動時の引数として頻出だけど、
getContentsってのはどうかと思うの。
595デフォルトの名無しさん:2011/11/19(土) 02:25:51.09
PHPにfile_get_contentsとかあるよ
596デフォルトの名無しさん:2011/11/19(土) 10:36:20.00
http://scan.netsecurity.ne.jp/article/img/2011/11/13/27625/93.html
tokuhirom、ma.la?っていう人の話だけ聞きたい
色々なスレで見かけるけどWEB業界で有名らしいね
動画ありませんか?
597増田:2011/11/19(土) 17:53:33.65
sutegoma2っていう最強ハッカーチーム知ってるか?
ハッカーの大会 CTF Defconで優勝したチーム
知らないなら帰っていい

malaなら勝てるかもしれない

君たちじゃ無理

君たちは本当に生産性のないことしてるね
なにが + を自作したいだよ
君たち本当に脳みそ使い方間違えてるね

Haskellとか言ってる連中よりセキュリティストのほうがマジすげーわ
じゃなあカーーーーーーーーース

お前らでてみろよw Haskellがいかにクズで役にたたねーかわかるからw
ボコボコだぜお前らなんて
真のインテリゲンチャの集いだから
598デフォルトの名無しさん:2011/11/19(土) 18:49:27.30
初耳
599デフォルトの名無しさん:2011/11/19(土) 19:25:01.74
>>597
これ?
マスコミが書かない「DEFCON CTF」
http://blog.f-secure.jp/archives/50623876.html
通りで日本人が知らないわけだな。

とりあえず、コテつけてください。
600デフォルトの名無しさん:2011/11/19(土) 19:32:00.09
うん、素晴らしいこと言ってるから是非コテつけて欲しい
601デフォルトの名無しさん:2011/11/19(土) 19:56:33.30
>>597
あなたの発言は傾聴に値する.是非これからは鳥あるいはコテハンをつけて発言して欲しい.
602デフォルトの名無しさん:2011/11/19(土) 21:40:31.39
xmonad-0.10 released!
603デフォルトの名無しさん:2011/11/20(日) 20:34:07.68
>>597
Hack In The Box
HITBなw
604デフォルトの名無しさん:2011/11/22(火) 12:56:10.35
みなさーん モナ道を極めましたか〜!
605デフォルトの名無しさん:2011/11/22(火) 13:35:30.96
>>585
>>586
解決しました
インデントとwindow初期化に問題があったようです
606デフォルトの名無しさん:2011/11/26(土) 00:31:01.41
今お前ら何にくびったけなの?
607デフォルトの名無しさん:2011/11/26(土) 08:17:29.42
お前のゲイ棒
608デフォルトの名無しさん:2011/11/26(土) 08:54:38.72
>>607
爽やかな土曜の朝に一曲どうぞ
http://www.youtube.com/watch?v=HTN6Du3MCgI
609デフォルトの名無しさん:2011/11/27(日) 03:51:58.41
start $ start haskell が必要
610デフォルトの名無しさん:2011/11/28(月) 19:21:31.13
型推論と型検査は同じ技術なのか?
611デフォルトの名無しさん:2011/11/28(月) 19:51:34.45
型検査って何?

具体的にどういう処理をするのが型検査なの?
612デフォルトの名無しさん:2011/11/28(月) 20:35:18.62
>>610
有限時間内に終わることを期待しないならば同じものだと思う
613デフォルトの名無しさん:2011/11/28(月) 23:57:50.74
MLでは型システムがプログラム全体に対して閉じているので、
同じというような話しを又聞きした
614デフォルトの名無しさん:2011/11/29(火) 18:40:40.43
「なあ、女の子に『可愛い』って言い続けたら、本当に可愛くなるらしいぜ」
「……それって、女の子だけなのか?」
「え?」
「お前、可愛いな」
「何の話だ」
「とぼけるお前も可愛い」
「だから何の話だ」
「マジで可愛い……」
「やめろ……」
「嫌がる姿も可愛いなあ……」
「やめろ!」
615デフォルトの名無しさん:2011/11/29(火) 21:11:17.76
616デフォルトの名無しさん:2011/11/29(火) 21:24:53.09
ここPerl忍者スレじゃないから
617デフォルトの名無しさん:2011/11/29(火) 22:07:28.89
ニンジャ死すべし
618デフォルトの名無しさん:2011/11/29(火) 23:01:30.60
hmatrix を使ってます

行列とスカラーの積ってどうやるのでしょうか
619デフォルトの名無しさん:2011/11/29(火) 23:11:22.90
>>618
* 演算子を使ってできましたけど、なんか変です

ghci 上で

(3><3) [1.0 ..] * 3.0

これだとエラーです
3.0 の所で No instance for (Num (Vector a0)) と
No instance for (Container Vector a0)

でも

let m = (3><3) [1.0 ..]
m * 3.0

これだと問題なく意図通りの計算がされます

なんで?
620デフォルトの名無しさん:2011/11/29(火) 23:13:02.31
((3><3) [1.0 ..]) * 3.0
621デフォルトの名無しさん:2011/11/29(火) 23:25:20.10
>>620
それでも同じエラーですね
というか、* 演算子よりも、関数 (3><3) を [1.0 ..] に適用する方が
優先順位が高いので、その括弧は計算順の指定としては意味が無いです

今気づきましたが、
Matrix Double や Matrix Float などの型を特定しないとダメでした

(3><3) [1.0 ..] * 3.0 :: Matrix Double

これ、出力されたエラーからは原因が分かりにくいですね
622デフォルトの名無しさん:2011/11/29(火) 23:58:26.42
mapMatrix (3*) (3><3) [1.0..]
623デフォルトの名無しさん:2011/11/30(水) 07:20:54.93
>>622
そちらの方は括弧が必要ですよ

mapMatrix (3*) ((3><3) [1.0..])

あるいは $ 演算子

mapMatrix (3*) $ (3><3) [1.0..]

いずれにしても、問題は解決しました
624デフォルトの名無しさん:2011/11/30(水) 07:33:42.39
なんかmapMatrixの方じゃないと通らない 
Matrix DoubleはNumでもFractionalでもねぇよって言われる
625デフォルトの名無しさん:2011/11/30(水) 08:54:00.53
(ε><3) にしたほうが 謎
626デフォルトの名無しさん:2011/11/30(水) 12:36:35.36
>>624
そうなんですか
バージョンの違いですかね

私のは GHC 7.2.1、hmatrix 0.12.0.1 です

この環境において、ghci 上で >>621 ので通りました
(ちなみに、Numeric.LinearAlgebra モジュールをロードしておきました)
627デフォルトの名無しさん:2011/12/01(木) 08:12:41.14
(忍^人^殺)<ドーモ、パール・ニンジャ=サン。ニンジャスレイヤーです
628デフォルトの名無しさん:2011/12/01(木) 12:28:37.86
(^^) 9 4とか
(><) 3 3とかみてるとネットの暗号か何かに見える。
629デフォルトの名無しさん:2011/12/01(木) 18:46:34.31
Data.Bits の顔文字はイマイチだよね
630デフォルトの名無しさん:2011/12/01(木) 19:16:22.95
使い所もイマイチ

今までアプリ作ってて Data.Bits のお世話になったことがない
631デフォルトの名無しさん:2011/12/01(木) 19:34:11.24
Data.Bitsのお世話になった事があったのはGUIでフラグ渡す時くらい。
632デフォルトの名無しさん:2011/12/01(木) 21:16:47.24
grepしてみたら乱用してた
代数的データ型だと遅すぎるから手動でIntのビットフィールドに押し込めるとか
633デフォルトの名無しさん:2011/12/01(木) 22:37:10.20
>>630
遺伝アルゴリズムとか
634デフォルトの名無しさん:2011/12/01(木) 22:48:12.00
>>633
勉強以外で、専用ライブラリを使わずに自作する理由が特に見つからない
635日系アメリカ人 ◆japYJPNx6A :2011/12/02(金) 00:05:27.78
くだらね
つまらないやつばっかり
636デフォルトの名無しさん:2011/12/02(金) 08:37:29.94
セッツァーノ イタリアじん
637デフォルトの名無しさん:2011/12/02(金) 11:30:31.05
>>634
専用ライブラリが遅かったら?
638デフォルトの名無しさん:2011/12/02(金) 12:34:38.78
>>637
許容できる速度に達していないライブラリしか存在せず、
かつ、絶対に遺伝的アルゴリズムが必要なら何らかの方法で自作するしかない

しかし、FFI によって C のライブラリも使える中で、
専用ライブラリが問題になるほど遅い状況が考えにくいのだが、
そんな状況があったの?
639デフォルトの名無しさん:2011/12/02(金) 12:59:59.60
>>638
結果が出るのに何時間もかかるような大規模演算が必要な状況なら
ピンポイントでそういう部分がボトルネックになることが多いんだよ。
640デフォルトの名無しさん:2011/12/02(金) 15:24:14.88
>>635
救世主キタ━━(゚∀゚)━━!!!
641デフォルトの名無しさん:2011/12/02(金) 17:55:57.58
>>639
じゃあ、そういう部分だけ C 用の高速ライブラリを使えば良いのではないか?
探したことないから知らんが、商用とかではいくらでもあると思う

Data.Bits を使う理由がないな
642デフォルトの名無しさん:2011/12/02(金) 18:01:00.24
>>641
ああ、Data.Bitsの話だったか。
643デフォルトの名無しさん:2011/12/02(金) 18:01:55.83
Haskellは遅いから速さにシビアな部分はどうしてもCで書いて呼び出すことになるね。
644デフォルトの名無しさん:2011/12/02(金) 18:11:55.42
簡単に切り出してCで再実装できるような部分なら
大抵Haskell内部でもチューニングしやすいと思う
「ボトルネックだけCで書いて最適化」って良く言われるけど成功したことがない
コードの大部分を最適化のためにC++で書き直したことならあるけど
645デフォルトの名無しさん:2011/12/02(金) 19:01:57.22
前 Haskell で物理シミュやった時に、
初めは処理は遅いわ、メモリは食うわでとてもシミュできなかった

ボトルネックを探したら、行列演算の部分がヤバイ感じだったから、
その部分だけ hmatrix(つまり LPACK)に変えた
そしたら、笑っちゃうほど速くなって、メモリ使用量も適正になった

知識が増えた今なら、All Haskell の行列演算ももう少し速くできそうだが、
それでも、やはりそういう部分は素直に他言語用ライブラリを使った方が良い

特に、Haskell(関数型)らしい適切なラッパーが用意されているのなら、
迷わず使うべきだよ
646デフォルトの名無しさん:2011/12/02(金) 19:09:51.60
既にCライブラリがあるならそうだな
647日系アメリカ人 ◆japYJPNx6A :2011/12/02(金) 21:04:22.55
無駄なんだよ
648デフォルトの名無しさん:2011/12/02(金) 21:09:26.58
FFI書けるようになると成長した気になれる
649デフォルトの名無しさん:2011/12/03(土) 02:51:07.16
haskellで速いプログラムを書くって大変なんですね。。。。
とhaskell初心者 orz...
650日系アメリカ人 ◆japYJPNx6A :2011/12/03(土) 09:23:15.48
お前が早いプログラム書いてもそれが意味がない
自分で動作チェックする程度のプログラムだから別にいい

意味がわからない
なぜHaskellをやるのか

早く死ねよ??・!?!お願い死んで
651デフォルトの名無しさん:2011/12/03(土) 09:27:23.33
>>650
ttp://www.nisseikyo.or.jp/ 最寄りのところを探して検診してきたほうがいいよ。
652 ◆QZaw55cn4c :2011/12/03(土) 10:16:56.22
>>650
こっちでいろいろ煽ってくださいよー
http://hibari.2ch.net/test/read.cgi/tech/1322562648/
653日系アメリカ人 ◆japuuq4c3Y :2011/12/03(土) 19:42:53.36
日本はクソ
Haskellやっても天才数学者とかがいるわけでもない
ゴミ
カスに等しい国=Japan
654デフォルトの名無しさん:2011/12/03(土) 21:42:14.87
655デフォルトの名無しさん:2011/12/04(日) 00:30:55.46
>>653
早朝からそれしか書くことないのか
656デフォルトの名無しさん:2011/12/04(日) 23:51:53.72
QuickCheck の解説やチュートリアルで何かお勧めありますか?
英語でもOK

ここ以外で(ここが良くないという意味ではなくて、他にもないかという意味)
http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/?ST=ittrend
657デフォルトの名無しさん:2011/12/07(水) 19:40:29.44
>>649
大丈夫!ハードウェアが進化していくからo(^-^)o
658デフォルトの名無しさん:2011/12/08(木) 01:41:47.78
ヴィルトの法則ですね。
659デフォルトの名無しさん:2011/12/08(木) 18:55:56.10
「本物のプログラマはHaskellを使う」やっとこさ更新

http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/?ST=ittrend


更新は毎月第1水曜日(1月のみ第2水曜日)は消しても良いと思う
660デフォルトの名無しさん:2011/12/08(木) 21:32:34.36
「Perlで有名な小飼弾に暴言を吐いたキチガイw OSSコミュニティから物凄いパッシングw」
http://blog.livedoor.jp/dankogai/archives/51733482.html

北畠徹也氏が代表の「テラ・インターナショナル」がPerlを勝手に商標登録

>>この北畠って人は、ツイッターとかでも自殺するって言って話題になったり
よく分からないNPOか何かに募金をしてくれってメールを数万人規模のMLに流したり
それらは実はチョットした技術的ミスだって釈明してたりする人らしいね

Tetsuya_K 北畠徹也
@dankogai の家に電話したら、「小飼弾は死にました」らしい。ざまみろ。ざまみろ。というか、死んだ方が社会にとって幸せ。以上。# どうでもいいが、jcode.plなんて簡単につくれるじゃろ。あんなので調子に乗るアホもどうかしてるぜ。
Tetsuya_K 北畠徹也
I compared my @klout with @dankogai, how does your @klout compare? klout.com/user/dankogai/… @Tetsuya_K に比べたら全く大したことねーな。大口叩く愚か者が。

コメントの一覧

「みんなおもしろいおもしろいいってるけど北畠さん完全にかわいそうな精神病の患者ですよね」
「コメント欄が病的で怖い。人格が分裂してる?」
「本当に何がしたかったんだろう・・・」
「無事取り消されたそうで。本当によかった。」
661デフォルトの名無しさん:2011/12/08(木) 21:42:23.60
小飼弾相手だったら北畠を応援したくなる
662デフォルトの名無しさん:2011/12/08(木) 21:49:10.68
HaskellスレでなぜにPerlの話題?
663デフォルトの名無しさん:2011/12/09(金) 01:49:11.82
キモいからよそでやって
純粋にHaskellの話してよ
664デフォルトの名無しさん:2011/12/09(金) 13:41:34.98
人格分裂してるな・・・怖い怖い
665デフォルトの名無しさん:2011/12/09(金) 17:02:50.08
質問です。
[1, 2, 3, 4, 5, ...] のようなリストを受け取って、
先頭から各要素までの総和のリスト [1, 3, 6, 10, 15, ...] を返す関数の上手い書き方ありますか?
666デフォルトの名無しさん:2011/12/09(金) 17:10:54.87
頼むからこのスレでそんな質問しないでおくれよ
667665:2011/12/09(金) 17:11:31.39
すみません、scanl で行けました。

>>666
どこで質問したらよかったのでしょうか?
668デフォルトの名無しさん:2011/12/09(金) 17:51:36.87
>>667
いいえ、ここで良いです
そのような下等な質問に文句があるというのなら
Haskell初心者質問スレを立てていない彼らにこそ非があります
堂々とここで質問なさい
669デフォルトの名無しさん:2011/12/09(金) 18:27:59.93
ここまでワンセット
670デフォルトの名無しさん:2011/12/09(金) 18:31:27.74
質問です。
[3,1,4, ...] のような任意の整数のリストを受け取って、
各要素の階乗のリストを、同じ階乗の計算を繰り返さずに計算する方法はありますか?
つまり、3!を計算した後で4!を計算する場合では
前回計算した3!の答えを使って4*3!=4*6=24
と計算するコード。
671デフォルトの名無しさん:2011/12/09(金) 18:33:46.88
Haskellはscanlとか便利な関数多くて助かるけど、一所懸命実装してたら実は既にライブラリにあった事も時々ある。
欲しい機能から検察出来れば良いんだけど、皆さんはどうやってますか?
主な関数は覚えちゃってるのかな?
672デフォルトの名無しさん:2011/12/09(金) 18:35:16.11
factorials :: [Integer]
factorials = scanl (*) 1 [1..]

f :: [Int] -> [Integer]
f = map (factorials!!)

(!!)でO(n)掛かるのが嫌ならリストじゃなくて木で持っておく必要がある
673デフォルトの名無しさん:2011/12/09(金) 18:36:28.60
>>671
Hoogleなら型から検索できる
しかしPreludeとData.Listくらいは使ってれば大部分覚えることになると思うけど
674665:2011/12/09(金) 19:30:51.46
>>668
ありがとうございます。
675デフォルトの名無しさん:2011/12/09(金) 20:56:28.53
>>670
階乗特有の性質を利用するのではなく、一般的に解決する方法のひとつとして
メモ化 memoization という方法もある

関数の一度計算した戻り値とその引数とを紐付けして記憶させておき、
次回同じ引数に同じ関数を適用した時、再計算する代わりに、
記憶しておいた戻り値を即座に返すメカニズム

正格的な方法、非正格的な方法、いろいろある
もし興味があるなら調べてみると良い
676デフォルトの名無しさん:2011/12/09(金) 21:05:38.92
調べてみるといい! ( ー`дー´)キリッ
677デフォルトの名無しさん:2011/12/09(金) 21:06:48.74
>>673
レスありがとうございます。
Hoogle便利ですね。
自分で実装した機能が、ライブラリ関数数個の組み合わせで出来る事もあるので、
やっぱり主な関数は覚えちゃった方が良さそうですね。
678デフォルトの名無しさん:2011/12/10(土) 13:46:56.31
Haskell Wiki の Tutorials のページ
http://www.haskell.org/haskellwiki/Category:Tutorials

単なるチュートリアルページへのリンク集だが、数が豊富で結構使える
679デフォルトの名無しさん:2011/12/10(土) 14:33:34.03
Cabal でパッケージをインストールする際に、
「ソースへのリンクも付いたドキュメント」を生成して登録するには
どうすればいいのでしょうか

Cabal のコンフィグファイルに documentation:True を指定しただけでは、
ドキュメントはインストールされますが、ソースへのリンクは付きませんでした
680デフォルトの名無しさん:2011/12/10(土) 14:34:00.51
haskell始めかけては、他が忙しくなってストップ。忘れた頃に再開、またストップ。
を繰り返してるわいはどれを見ればいいかな。HuttonのプログラミングHaskell本もあるからこれの方がいいかな
681デフォルトの名無しさん:2011/12/10(土) 14:44:54.32
>>680
それだけの情報では貴方が今Haskellで何ができるレベルなのか分からない
682デフォルトの名無しさん:2011/12/10(土) 16:38:39.58
モナド以外は大半を読んで知ったよ。
でももう忘れかけてるから、また見て思い出して、あーこれこれ、はいはい、これね、って感じ。
表面的なことは理解したけど、浅いと思う。
683デフォルトの名無しさん:2011/12/10(土) 16:44:52.76
>>682
RWHを1章ずつ
684デフォルトの名無しさん:2011/12/10(土) 16:55:27.75
じゃあ「プログラミングHaskell」は要らないと思う

モナドも、学ばなければ先に進めない、理解しなければ問題が解決しない、
という時になるまで覚えようとする必要はない
使わなきゃどうせ忘れる

使ってるライブラリがやや古いが「Real World Haskell」見てアプリを作りながら、
内容がやや難しいが「Algorithms A Functional Programming Approach」や
「Pearls of Functional Algorithm Design」見て
関数型らしいアルゴリズムを体験するのが良いと思う

とにかく、表面的なことを理解したのなら、
後はもういっぱいいっぱいアプリを作れ(小粒でも大粒でも、トイでも本格的なものでも)
IOが必要になったら、それからIOを学べばいいし、
GUIが必要になったら、それからGUIを学べば良い

モナドについては、Haskellプログラミング的には
「ある演算ができる箱」でしかないことは自然に分かる
685680:2011/12/10(土) 18:04:11.70
なにやら真面目に付き合ってもらってありがとう。
今↓見てざっと思い出した。
http://d.hatena.ne.jp/ruicc/20100131/1264905896

じゃあここから何をしようか、いつまでも素数がどうのとか、リストを並べ替えて、とかじゃつまらないよ、って時のRWHかなあ。
あの本もあるんだけどw、話が無駄に長いのが難ですわ。
本当はリスティッシュな週末を過ごして、もっと身に染み込ませるべきなのかも知れませんが。
686デフォルトの名無しさん:2011/12/10(土) 18:52:14.74
>>685
ブロック崩しを作れ
687デフォルトの名無しさん:2011/12/11(日) 01:53:45.51
今Haskellのホットな話題ってなんなの?
イテレーティ?
688デフォルトの名無しさん:2011/12/11(日) 12:29:56.39
JVMへの移植

だったらいいなあ。
仕方ないのでscalaをつかってるけど。
689デフォルトの名無しさん:2011/12/11(日) 16:36:41.13
Cabal について質問です

cabal install の --package-db オプションで指定するパスの先には、
どのようなファイルが存在していればpackaheDBとして認識されるのでしょうか
690日系アメリカ人 ◆japYJPNx6A :2011/12/11(日) 22:21:02.87
タイムイーターの巣窟・・・
691デフォルトの名無しさん:2011/12/12(月) 10:04:13.72
Haskellでメモ化って相性が悪そうに思うけど、どうやってるの?
692デフォルトの名無しさん:2011/12/12(月) 10:09:09.98
メモ化とメモカではだいぶん意味が違うなぁ
693デフォルトの名無しさん:2011/12/12(月) 12:43:25.93
>>691
例えば Conal Elliott のブログにあるトライ木を使ったメモ化
http://conal.net/blog/posts/elegant-memoization-with-functional-memo-tries

彼のブログには他にもメモ化に関するトピックが色々ある
http://conal.net/blog/tag/memoization

Haskell Wiki の解説
http://www.haskell.org/haskellwiki/Memoization

"haskell メモ化" や "haskell memoization" などで検索すればまだまだたくさんあるだろう
694デフォルトの名無しさん:2011/12/12(月) 21:50:46.00
メモを持って回る必要があるだけだよね。
695デフォルトの名無しさん:2011/12/12(月) 22:01:44.28
無限リストとか無限木とかでグローバルにメモを置けば持って回る必要がない
>>693の一番上のリンクとか
696デフォルトの名無しさん:2011/12/12(月) 22:02:39.89
スコープの話じゃないからグローバルってのはおかしいか
トップレベルにメモを置けば、ね
697デフォルトの名無しさん:2011/12/12(月) 22:19:05.48
HaskellらしくStateMonad使って持ちまわればいいんじゃね
698デフォルトの名無しさん:2011/12/12(月) 23:11:05.85
>>697
そうやってモナドの階層がどんどん深くならない?
699デフォルトの名無しさん:2011/12/12(月) 23:12:38.56
男ならIORefで
700デフォルトの名無しさん:2011/12/12(月) 23:13:32.73
StateMonad って全然 Haskell らしくない
関数的と手続き的の真ん中で、どっちつかずの中途半端な感じがする

Data.StateVar の方がまだ潔いし、見た目綺麗だし、使いやすい

手続き的だけど OpenGL のラッパなど広く使われてて、
もうほとんどデファクトスタンダードでしょ・・・ そこまでは普及してないか
701デフォルトの名無しさん:2011/12/13(火) 00:04:26.95
プログラムにおけるグローバル変数的なものはトップレベルにおくのと、
IORefやらReader/Writerやらで持ちまわるの
どっちが美しいのだろうか。
702デフォルトの名無しさん:2011/12/13(火) 19:25:07.49
メモリを圧迫してきたら消したいとかいう要求がない限り
純粋なメモ表はトップレベルに置いとけば素直だし簡単
703デフォルトの名無しさん:2011/12/13(火) 21:51:02.26
トップレベルのメモを書き換えられるのが不思議だ。
無限リストを使うとしても、どんな順序で関数を評価してもいいとか、どんな魔法なんだ。
704デフォルトの名無しさん:2011/12/17(土) 04:42:28.69
諸君、議論したまえ
705デフォルトの名無しさん:2011/12/18(日) 00:06:43.11
ゲーム会社は凄いと思う

Haskell使いと違って
何がHaskellだよ
小さい黒い画面に計算結果表示させて俺ハッカーってドヤ顔してるレベル

ゲームとHaskellプログラムじゃ驚きも違う
見てビジュアル的
Haskellは何がすごいの? 意味がわからない 素人には見てて苦痛にしか思えない

どう凄いか素人たちにも教えてくれ!!
アホじゃん

ゲーム会社のやつは凄いと思う
あんな人間離れした

3Dグラフィック+C++プログラミング+サウンド

すべてを束ねるコンピューター技術者最強

最強だよ

そうおもわないかい?
706デフォルトの名無しさん:2011/12/18(日) 00:09:00.06
ゲーム会社はぱねぇと思う

Haskell使いと違って
何がHaskellだよ
小さい黒い画面に計算結果表示させて俺ハッカーってドヤ顔してるレベル

ゲームとHaskellプログラムじゃ驚きも違う
見てビジュアル的
Haskellは何がぱねぇの? 意味がわからない 素人には見てて苦痛にしか思えない

どう凄いか素人たちにも教えてくれ!!
ぱねすぎる
何であんなにぱねぇんだろう
ぱねぇ
ぱねぇよ!?!?!?!!!!!!!!!!!!!!!!!!!!!!!!!
ぱねぇい!!!!!!!!!!!!!!!!!!!!!!!!!!!!


ゲーム会社のやつはぱねぇと思う
あんな人間離れした

3Dグラフィック+C++プログラミング+サウンド

すべてを束ねるコンピューター技術者最強

最強だよ

そうおもわないかい?
707 ◆QZaw55cn4c :2011/12/18(日) 00:10:03.26
>>705
「ゲーム」の作成技術がいくら高かろうと、最終目的が「ゲーム」にしか過ぎない点で、以下略
708デフォルトの名無しさん:2011/12/18(日) 00:11:16.73
お前の目的何?
Haskelha??マジ意味不明
709デフォルトの名無しさん:2011/12/18(日) 00:13:35.52
Haskellは何がしたいのか言ってみろ
710デフォルトの名無しさん:2011/12/18(日) 00:45:37.22
「わからないことをわからないままにしたくないが、勉強も調べ物も一切したくない」
「自分の漠然とした感情は正しく、その合理的な理由は必ずどこかにあるはずだ」
「情報や知識は口を開けて待っていれば勝手に入ってくる」
この3つが揃うと、出所不明のデマは信じるわりに他人の話を聞かなくなる感じ。
711デフォルトの名無しさん:2011/12/18(日) 01:10:36.93
煽るにもテクノロジーのバックグラウンドが要るが、最近はν速から逃げ込んで来てるからなあ。
712デフォルトの名無しさん:2011/12/18(日) 01:52:22.20
Windows + ghci での日本語表示について質問です

コンソールの文字コードを cp65001 (UTF-8) に変えて、
フォントも UTF-8 が表示できる [MS ゴシック] を使ってます

Haskell 関係無しに、コンソール上で type "ファイル名" とコマンドを打てば、
UTF-8 エンコードされた日本語テキストファイルは問題なく表示されます

この状態で ghci を立ち上げて、
s = "テスト" と記述された hs ファイルをロードし、
putStrLn s とすると、「テ・・ス・・ト・・」と表示されます

どうして余計な文字まで表示されるのでしょうか

ちなみに、実際のところ余計な文字は全角中点「・」ではなく「�」です
MSゴシックだとたまたま全角中点に見えるだけで、何か別の文字みたいです

[環境]
Windows 7
GHC 7.2.2
713712:2011/12/18(日) 01:55:56.12
>>712
> MSゴシックだとたまたま全角中点に見えるだけで、

すいません
コンソールの表示をよく見たら、全角ではなく「半角中点」に見えます

つまり 「テ・・ス・・ト・・」 と表示されているように見えます
714デフォルトの名無しさん:2011/12/18(日) 06:36:54.72
で、実際問題、Haskellって何の役に立つの?
GUIも含めたアプリを作るのに、C++やJavaよりも生産性が高いの?
それとも計算結果をコマンドプロンプトに表示するだけでドヤ顔?
715デフォルトの名無しさん:2011/12/18(日) 07:54:03.36
なんでコテ外すの?
716デフォルトの名無しさん:2011/12/18(日) 07:56:42.82
>>707
ドカタ乙
717デフォルトの名無しさん:2011/12/18(日) 08:00:51.61
少なくともGUIでは終わってる
HaskellでまともにGUIのガワが作れるようになるのはC++11がまともに使えるようになるよか遅いだろうね
718デフォルトの名無しさん:2011/12/18(日) 10:49:28.17
「わからないことをわからないままにしたくないが、勉強も調べ物も一切したくない」
「自分の漠然とした感情は正しく、その合理的な理由は必ずどこかにあるはずだ」
「情報や知識は口を開けて待っていれば勝手に入ってくる」
この3つが揃うと、出所不明のデマは信じるわりに他人の話を聞かなくなる感じ。

「わからないことをわからないままにしたくないが、勉強も調べ物も一切したくない」
「自分の漠然とした感情は正しく、その合理的な理由は必ずどこかにあるはずだ」
「情報や知識は口を開けて待っていれば勝手に入ってくる」
この3つが揃うと、出所不明のデマは信じるわりに他人の話を聞かなくなる感じ。

それとも計算結果をコマンドプロンプトに表示するだけでドヤ顔?
それとも計算結果をコマンドプロンプトに表示するだけでドヤ顔?
それとも計算結果をコマンドプロンプトに表示するだけでドヤ顔?
それとも計算結果をコマンドプロンプトに表示するだけでドヤ顔?
それとも計算結果をコマンドプロンプトに表示するだけでドヤ顔?
719デフォルトの名無しさん:2011/12/18(日) 11:01:23.60
Haskellで概念を学びScalaで応用する。GUIも簡単だぞ
あとはIDEサポートがJava並になれば最強(typesafeが開発中らしい
720デフォルトの名無しさん:2011/12/18(日) 17:07:32.03
>>706

ゲームプログラミング界の巨人、Tim Sweeneyが「未来のゲーム開発テクノロジー」を語る
超並列処理、次世代のゲームグラフィックスはソフトウェアレンダリングに回帰する
http://game.watch.impress.co.jp/docs/20080911/epic.htm
抜粋

Sweeney氏は純粋関数型言語のもつ並列処理安全性に着目しており、将来的にゲームプログラミングはそういった処理系に移行していくべきだとした。
Sweeney氏はそのひな形として言語“Haskel”を挙げているが、ゲーム開発のメインストリームたり得る言語はまだ登場しておらず、将来に期待しているという。

721デフォルトの名無しさん:2011/12/18(日) 17:15:56.34
やーよ!やーよ!
722デフォルトの名無しさん:2011/12/18(日) 17:37:09.59
>>720
> ゲーム開発のメインストリームたり得る言語はまだ登場しておらず
> ゲーム開発のメインストリームたり得る言語はまだ登場しておらず
> ゲーム開発のメインストリームたり得る言語はまだ登場しておらず
> ゲーム開発のメインストリームたり得る言語はまだ登場しておらず
> ゲーム開発のメインストリームたり得る言語はまだ登場しておらず
> ゲーム開発のメインストリームたり得る言語はまだ登場しておらず
> ゲーム開発のメインストリームたり得る言語はまだ登場しておらず

まだまだドヤ顔するには早すぎるってことだなw
723デフォルトの名無しさん:2011/12/18(日) 17:43:54.42
>>718
顔真っ赤にするのはいいけどさ、GUI全盛のこの時代に、
Haskellプログラムのほとんどが文字列入出力だという
現実を直視しろ。
724デフォルトの名無しさん:2011/12/18(日) 17:52:27.23
GUIのコーディングなんて年収300〜400万円の仕事だろ
底辺すぎる
725デフォルトの名無しさん:2011/12/18(日) 18:03:04.05
VB厨はVB使ってれば?

実際あのポトペタ環境の出来の良さだけは他に比肩するものがない
726デフォルトの名無しさん:2011/12/18(日) 18:09:43.96
ここで話すことじゃない
議論に戻りたまえ
727デフォルトの名無しさん:2011/12/18(日) 18:24:30.32
VBにも劣るわけかw
728デフォルトの名無しさん:2011/12/18(日) 18:36:55.57
>>727
関数型じゃなくても、大抵の言語はGUIに関してはVBやC#、Delphi・C++(Bilder)に劣る
MS(または円馬鹿出ろ)に気に入られるかどうかの問題
729デフォルトの名無しさん:2011/12/18(日) 18:54:57.93
>>724
VBにも劣るハスケルドカタは年収100万円を切っちゃうの?
かわいそう…
730712:2011/12/18(日) 19:04:38.59
年収100万切ったら、Haskell なんかやってる場合じゃないと思うんだ
731712:2011/12/18(日) 19:08:03.37
それはそうと、私の質問 >>712 はだれか分かりませんか

一応あれから色々やってみて、wtiteFile など使えば、
UTF-8 でファイルに保存できることは確認しましたが、
それで済ますならコンソールをわざわざ UTF-8 に切り換えなくても良いわけで、
なんとかコンソールに普通に表示させたいです
732デフォルトの名無しさん:2011/12/18(日) 19:13:52.02
年収の話は板違いなのでやめましょうか。
733デフォルトの名無しさん:2011/12/18(日) 19:20:21.47
>>729
>>720の記事に載ってるとおり、今Haskell覚えるのは趣味や投資目的の意味合いが大きいしね
RubyやC#、Javaとかも、今でこそ仕事有るけど、出た当初は個人の趣味でしか無かった

記事抜粋

それにプラスして、Sweeney氏は現在のゲームプラットフォームハードウェアが複雑すぎることも指摘した。
もし、Sweeney氏のいう純粋関数型言語によるゲーム開発が実現したとして、それを基準とするならば、C++によるプログラム開発コストは、マルチスレッド版で2倍、
プレイステーション 3版において5倍、シェーダー言語で記述するGPGPU版において10倍かそれ以上にもなるという。2倍以上のコストはゲーム会社のビジネスにとって合理的とは言えない。

 従って、6コア、8コアどころでは済まないメニーコア世代のプラットフォームに備えて、ゲーム会社は開発基盤を備える必要がある。このような議論を踏まえた上で
、Sweeney氏は最後にこう述べた。「『Unreal Engine 3.0』の開発には3年の期間を要しました。そして、次世代のエンジンを開発するには5年くらいはかかるでしょう。
つまり、今年開発をはじめたなら、出荷可能になるのは2013年です。だから、今はじめるべきなのです。我々は既に、次世代への投資をはじめています」。


734デフォルトの名無しさん:2011/12/18(日) 19:34:16.49
お前はスレ荒らしたりHaskell勉強は先行投資と言ってみたり
本当にいそがしいな
735デフォルトの名無しさん:2011/12/18(日) 20:12:01.15
>>734
>>706見て、たまたま記事を思い出しただけだよ
もともと、自分がHaskellに興味持ったのもマルチスレッドプログラミングに向いてるってのが取っ掛かりだったしね
736デフォルトの名無しさん:2011/12/18(日) 20:27:25.38
>>731
もっと詳細を書いてくれないと、同じ環境で同じ問題にぶち当たった人しかアドバイスできないよ。
737デフォルトの名無しさん:2011/12/18(日) 21:30:46.50
>>705-706って有名なスクリプトだよね?単語入れると自動でテンプレが出来上がるやつ。
こういうスクリプトもHaskellで書けるのだろうか。
javascript版をHaskellで書き直したというなら最高の釣りだなw
738712:2011/12/18(日) 21:56:10.45
>>736
すいません

まず最終的にやりたいことは、PostgreSQL に作ったテーブル内のデータが UTF-8 の日本語で、
その文字列データを取得してコマンドプロンプトに表示するプログラムをHaskellで作る
ということ

Haskell コード内でその文字列データ([Char] 型)を変数に束縛するとことは問題なくできた
というのも、その変数に System.IO.writeFile 関数を適用して得られたファイルを見ると、
正しく UTF-8 エンコードの日本語になっていたから
(当然だけど、writeFile の前に hSetEncoding 関数を utf8 に適用している)

コマンドプロンプトの方は、cmd.exe へのショートカットファイルのプロパティで
[オプション タブ]-[現在のコードページ] を "932" に、
[フォント タブ]-[フォント] を "MS ゴシック" に、
[ショートカット タブ]-[リンク先] を "%windir%\system32\cmd.exe "/K chcp 65001" に設定

このプロパティでコマンドプロンプトを起動し、その上で ghci を立ち上げ、
自作の *.hs ファイルをロードして、関数を評価しているが、
先ほどの [Char] 型の変数を ghci 上で評価すると utf-8 文字がエスケープされる
( ascii 文字以外は \ マークと数字数桁で表示される)

同じ [Char] 型の変数に putStrLn 関数を適用すると、
>>712(正確には >>713)のように日本語部分だけ各日本語文字1字に対して
余計な文字が2つずつ後に付随してくる(まぁエスケープに比べて読めなくはない)

どうすれば、コマンドプロンプト(コンソール)に UTF-8 日本語を正しく表示できるのだろうか

上記の現象はデータベース処理とは関係なく、UTF-8 エンコードされた
Haskell プログラムが書かれたファイル内に直接 s="テスト" と書いて、
それを ghci 上で同じように評価したりしても再現できるため、
>>712 では現象再現のための最低限の情報だけで質問しました
739712:2011/12/18(日) 21:58:27.43
>>738
訂正

> [ショートカット タブ]-[リンク先] を "%windir%\system32\cmd.exe "/K chcp 65001" に設定

[ショートカット タブ]-[リンク先] を "%windir%\system32\cmd.exe /K chcp 65001" に設定
740デフォルトの名無しさん:2011/12/19(月) 03:22:15.55
これってコマンドプロンプト側の問題じゃなかったっけ・・・
他の言語でも似たようなことになった記憶が
申し訳ないがhaskellでの解決法は知らない
741デフォルトの名無しさん:2011/12/19(月) 07:05:30.63
>>737
自動でテンプレとかはHaskellだけじゃなく、関数型全体として得意分野だから、>>720の記事の企業が作ってても全く不思議じゃないな
742デフォルトの名無しさん:2011/12/19(月) 14:54:36.00
Haskell使ってるゴミが小学生やガキ相手に
コマンドプロンプト開いて計算結果みせてみろよw

ガキ「なにこれ 意味不明」
大人「なんですかこれ DOS窓っていうやつですか? ハッカーですか?」

ゲーム開発者のほうが驚きや感動がすごいね

まじ君たち意味ないじゃん

なんかすげーでかいシステムとか 最適化  ノーベル賞とかもらってるわけじゃない
クソ研究しちゃって
頭大丈夫かよ病気かよ
743デフォルトの名無しさん:2011/12/19(月) 15:00:20.08
Haskellを作ったやつはすごいけど
それ使ってインテリゲンチャ気取ってる天才でもないお前らはマジゴミのきわみ

お前らがHaskell使っても アルバイト以下の賃金量だろWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW

ヘラクレス本片手に持って くそみてーな計算式
足し算とかモナドとかほざいちゃって
Macbook片手に持って 作ってもくだらねえ 計算式やHaskell GUI
そんなのVBでできますよ レベルの
まじごみなんじゃないんですかね ぱねえっす ぱねえ まじぱねえ
頭おかしい印ですか??
ぱねぇまじぱねぇ

744デフォルトの名無しさん:2011/12/19(月) 15:05:56.65
はい
745デフォルトの名無しさん:2011/12/19(月) 15:12:24.76
>>743
プログラミングの話をしないなら板違いなのでマ板行ってください
746デフォルトの名無しさん:2011/12/19(月) 15:35:36.00
金正日死んだのがそんなにショックなのか
747デフォルトの名無しさん:2011/12/19(月) 17:29:25.73
正日がGHCコミッタだったという可能性がヒッグス粒子レベルで存在している?
748デフォルトの名無しさん:2011/12/19(月) 17:36:58.30
諸君、そろそろ議論に戻りたまえ
749デフォルトの名無しさん:2011/12/19(月) 17:57:20.01
742が言ってることは事実だからな
750デフォルトの名無しさん:2011/12/19(月) 18:02:47.67
742乙
751デフォルトの名無しさん:2011/12/19(月) 18:24:53.12
>>742が小学生やガキまたはそれに準ずるものという事が読み取れるわけですね
752デフォルトの名無しさん:2011/12/19(月) 18:25:14.03
理解できない人間を病人と呼ぶ病気にかかってるから仕方がない
753デフォルトの名無しさん:2011/12/19(月) 18:36:53.90
haskellでWEBアプリって簡単にでける?
作ってる奴いるか?
754712:2011/12/19(月) 18:48:59.59
>>753
snap とかのフレームワークを使え

簡単かどうかは気分次第
755712:2011/12/19(月) 18:51:02.49
>>740
そうですか

私も心が挫けそうで、もう諦め気味です
Windows 標準搭載のコマンドプロンプト以外のコンソールでもダメだったら諦めます
756デフォルトの名無しさん:2011/12/19(月) 18:53:56.67
精神科医の春日武彦先生から統合失調症の前駆症状は「こだわり・プライド・被害者意識」と教えていただいたことがある。
「オレ的に、これだけはっていうコダワリがあるわけよ」というようなことを口走り、
「なめんじゃねーぞ、コノヤロ」とすぐに青筋を立て、「こんな日本に誰がした」というような他責的な文型でしか
ものごとを論じられない人は、ご本人はそれを「個性」だと思っているのであろうが、実は「よくある病気」なのである。
統合失調症の特徴はその「定型性」にある。
757デフォルトの名無しさん:2011/12/19(月) 19:14:50.98
>>742
あなたの発言は傾聴に値する.是非これからは鳥あるいはコテハンをつけて発言して欲しい.
758yuitest:2011/12/19(月) 20:00:59.47
相手が会話の主体なのか、会話の内容が主体なのかという議論をするときの主体は何か
742は主体
759デフォルトの名無しさん:2011/12/20(火) 11:32:27.13
やっとこさ新版 Hasklell Platform2011.4.0.0 がリリースされてたよー
ghc 7.0.4 で 7.2 ぢゃないんですね。
760712:2011/12/20(火) 12:36:53.70
7.2 はライブラリの方がまだ追いついていない場合が多い
base のバージョンとかコンパイル仕様の変更とか
761712:2011/12/20(火) 12:40:57.01
>>755
msys とかでもダメっぽいんで、もう諦めました
762やんやん ◆yanyan72E. :2011/12/20(火) 12:56:27.76
統合失調症に定型性なんてねーよ。
陽性症状、陰性症状、人によって症状は様々。
精神医学の専門書の一つでも読んでからそういうこと言えよ。
大雑把にいえば、心の中の自分と他人の境界に穴が開く病気だ。
だから、自分が思っていることが人の声として幻聴で聞こえたりする。
763デフォルトの名無しさん:2011/12/20(火) 13:35:49.93
5年から10年ぐらい前ぐらいに思考盗聴こえええ皆も気をつけろとか叫んでた人を結構みたけど
あれがそうだったのか・・・
764デフォルトの名無しさん:2011/12/20(火) 13:50:48.26
Database.HDBC.MySQLのfromSqlでstringに変換するとasciiデータはputStrLnで表示出来るのですがunicodeは文字コードが表示されます。
まだunicodeに対応できていないのでしょうか?
765デフォルトの名無しさん:2011/12/20(火) 15:03:12.99
unicodeも表示出来ました。
766デフォルトの名無しさん:2011/12/20(火) 16:29:36.21
742がやってることはホームレスを無差別にいじめてる事と同じでしょ。
767デフォルトの名無しさん:2011/12/20(火) 21:54:07.97
listAは重複がないリストとする。
listBは空でなく、順序は不明だがlistAの要素の連続になっている。
listAの要素であるxを渡された時、それがlistBと比較して前方にあるか
後方にあるか、それともlistBに含まれるかを判定したい。
例で書くと
listA = ["A","B","C","D","E",...]
listB = ["C","D","B"]
xが"E"なら、listBに含まれるB,C,Dに対して「後方」ということになる。
このとき、haskellらしい考え方だとどういうアプローチになる?
俺の手続き脳だと
1. xがlistBにあるかどうかを判別
2. xとlistBそれぞれの要素のlistA内での位置を調べる
3. 調べた位置を比較して「前方」「後方」を判定する
と考えたんだけど、ザ・手続きっぽくてダサいよなぁ、と思って。
768デフォルトの名無しさん:2011/12/20(火) 22:49:41.06
こんな感じ?
filter (flip all listB . (/=)) listA
769デフォルトの名無しさん:2011/12/20(火) 22:52:12.32
ごめん問題読んでなかった。取り除くんじゃないのな。
770デフォルトの名無しさん:2011/12/20(火) 22:55:42.52
>>767
めっさ力技

data Pos = F | M | E deriving Show

getPos :: Eq a => [a] -> [a] -> a -> (Maybe Pos)
getPos listA listB = fmap f . (`lookup`listE) where
    listC = map (`elem` listB) listA
    listE = zip listA $ zip listC $ scanl1 (||) listC
    f (True,_)      = M
    f (False,False) = F
    f (False,True)  = E

listA = [0,1,2,3,4]
listB = [2,3,1]
x=0
main = do
 let g = getPos listA listB
 print $ g 0
 print $ g 1
 print $ g 2
 print $ g 3
 print $ g 4
771デフォルトの名無しさん:2011/12/20(火) 23:35:56.81
>>767
1. listAをlistA1 ++ [x] ++ listA2にわける
2. listA1とlistBのintersectionを取って判定

f listA listB x =
if y == 0 then 1 else if y == length listB then -1 else 0
 where y = length $ takeWhile (/= x) listA `intersect` listB
772デフォルトの名無しさん:2011/12/21(水) 01:20:13.13
>>767
f listA listB x = (elem x as, elem x listB) where as = takeWhile (not.flip elem listB) listA
773デフォルトの名無しさん:2011/12/21(水) 08:25:55.14
>>771
(y == 0)のあとに(elem x listB)でもう一回場合分けが必要でない?
774デフォルトの名無しさん:2011/12/21(水) 12:32:22.50
>>759
元々4月の予定だったよな……
775デフォルトの名無しさん:2011/12/21(水) 12:43:01.28
>>767 の解法としていくつか提示された例は、
たとえば1ヶ月後とかに自分が読んでも、あるいは他人が読んでも、
どんな計算をして答えを求めているのか簡単に分かるもんなの?
776デフォルトの名無しさん:2011/12/21(水) 16:52:03.13
listBの要素はソートすればlistAの連続部分列になるってこと?
777デフォルトの名無しさん:2011/12/21(水) 17:20:50.31
>>776 listAは整列だという仮定はない。「listAでの出現位置」に基づいてソートするなら話は別だが。
778デフォルトの名無しさん:2011/12/21(水) 19:40:34.62
>>767
data Where = Before | Here | After

whereIncluded :: (Eq a) => [a] -> [a] -> a -> Where
whereIncluded _ [] _ = After
whereIncluded (a:as) (b:bs) x
| x == b = Here
| x == a = if elem x bs then Here else Before
| otherwise = whereIncluded as bs x

[説明]
・listA と listB それぞれの head と x を比較する
・listB の head と x が同じなら、x は listB に含まれる
・そうではなく listA の head と x が同じ場合、
 x が listB に含まれていなければ、x は後方にある
・どちらの head とも異なっていれば、両者の tail に対して同計算を繰り返す
・計算を繰り返した結果 listB の tail が空なら、x は後方にある

提示された条件を全て完全に満たすものとして式を書いたので、
エラー処理は省いてある
779767:2011/12/21(水) 21:02:56.56
>>770,771,772,778
まさかこんなに素早く返事があるとは思ってなくて
反応遅れました。すみません。
具体的なコード例までわざわざありがとうございます。
見事に誰一人としてelemIndexなんて使ってないですね……。
順序を調べる、という発想自体を捨てないと駄目だということが
よくわかりました。

>>775
個人的には770さんの例以外は見て何をしているかは
すぐ把握できました。

>>776
777さんが返してくれていますが、listAは整列とは限らないです。
listAの位置に基づいてlistBをソートすれば、listBは確かに連続
部分列になります。

というわけで、どうも皆さんありがとうございました。
780デフォルトの名無しさん:2011/12/22(木) 05:28:49.45
>>778
whereIncluded [1..6] [5] 4 = whereIncluded [2..6] [] 4 = After
781デフォルトの名無しさん:2011/12/22(木) 07:22:14.40
>>780
あぁなるほど、そうか

ちょっと修正案を考えてみる
782778:2011/12/22(木) 07:52:15.94
>>780 に指摘されて修正案を考えてる時に、
全然違うアイデアが思い浮かんだんだが、
これは今まで出てきたかな(特に >>771 と同類か)

listA から x の位置を探す
x の位置の直後から
783778:2011/12/22(木) 07:55:25.77
途中でレスってしまった

>>780 に指摘されて修正案を考えてる時に、
全然違うアイデアが思い浮かんだんだが、
これは今まで出てきたかな(特に >>771 と同類か)

listA から x の位置を探す
x の位置の直後から listB の要素数分の要素をリストとして取り出す listC
x が listB に無い場合、head listB が listC に有れば「前」
head listB が listC に無ければ「後ろ」
784778:2011/12/22(木) 08:55:12.79
>>783
訂正

> x の位置の直後から listB の要素数分の要素をリストとして取り出す listC

x の位置の直後から末端までをリストとして取り出す listC
785778:2011/12/22(木) 12:54:37.61
>>783,784
式にするとこんな感じ

whereIncluded :: (Eq a) => [a] -> [a] -> a -> Where
whereIncluded as bs@(b:_) x
| elem x bs = Here
| elem b as' = After
| otherwise = Before
where as' = takeWhile (/=x) as

ダサいかな
786デフォルトの名無しさん:2011/12/22(木) 20:08:59.62
Haskell Platform じゃなくて素の GHC の方には、
random パッケージってデフォルトでは入ってないんだね

地味に驚いた
787デフォルトの名無しさん:2011/12/22(木) 21:36:01.61
QuickCheck を調べてて、ステキなリファクタリング テクニックに出会った
http://www.haskell.org/haskellwiki/Introduction_to_QuickCheck

リファクタリング前は(インデントに全角スペースを入れた)、

getList = find 5 where
  find 0 = return []
  find n = do
   ch <- getChar
   if ch `elem` ['a'..'e'] then do
      tl <- find (n-1)
      return (ch : tl) else
     find n

というコードなんだが、副作用がある処理と無い式とが混ざっててテストし難い
(また、全体の処理もぱっと見分かりにくい)

これがリファクタリングで次のようになる

getList :: IO [Char]
getList = fmap take5 getContents

take5 :: [Char] -> [Char]
take5 = take 5 . filter (`elem` ['a'..'e'])

ちょっと感動した
こういうことがサラっとできるようになりたいもんだ
788デフォルトの名無しさん:2011/12/22(木) 21:56:17.35
遅延I/O怖い><
789デフォルトの名無しさん:2011/12/22(木) 22:55:08.11
モナドって大した概念なの?
790デフォルトの名無しさん:2011/12/22(木) 22:59:36.72
ものごとを抽象化するための仕組みとしては大したもんだよ
791デフォルトの名無しさん:2011/12/23(金) 10:28:44.71
>>790
なんかいい例希望
モナドはものごと全部を抽象化するんじゃないよね?
792デフォルトの名無しさん:2011/12/23(金) 10:30:00.16
STMとか?
793デフォルトの名無しさん:2011/12/23(金) 12:02:29.11
>>790 >>791
そうだな。なんでも抽象化できるんならこれまた意味不明になるし。
だいたい、何なんだよ抽象化って。
794デフォルトの名無しさん:2011/12/23(金) 17:44:45.43
モナドによる抽象化ってのは、だいたい(Monad m) =>で始まる型のある関数を書くこと
具体例はControl.Monadとか見れば
795デフォルトの名無しさん:2011/12/23(金) 17:52:14.34
それで、何をどう抽象できて、何は抽象できないの?
モナドで抽象する前と後とで何が変わるの?
796デフォルトの名無しさん:2011/12/23(金) 18:06:55.65
いつもの糖質が現われる頃合いだな
797デフォルトの名無しさん:2011/12/23(金) 18:16:45.13
>>795
Control.Monadにあるようなものは抽象化できるし、
(Monad m) =>で書けなさそうなものは抽象化できない
言葉で言われて分かる類の問題じゃないから具体例を見たり書いたりして慣れるしかないよ

>モナドで抽象する前と後とで何が変わるの?
関数の型が変わって任意のモナドに対して使えるようになる。たとえば、
foreach :: [a] -> (a -> IO ()) -> IO () -- foreach xs f はxsの各要素に対してfを実行
をモナドに関して抽象化すれば、
forM_ :: (Monad m) => [a] -> (a -> m b) -> m ()
になって、IO以外でも使えるようになる
798デフォルトの名無しさん:2011/12/23(金) 18:19:11.21
抽象化できないものの証明って難しいな。もうあるのだろうか。
799デフォルトの名無しさん:2011/12/23(金) 18:22:51.88
800デフォルトの名無しさん:2011/12/23(金) 18:24:52.49
コードが書いてあるあたりだけでもざっと見ればいいよ
801デフォルトの名無しさん:2011/12/23(金) 18:26:57.57
>>797
サンクス
802デフォルトの名無しさん:2011/12/23(金) 18:32:22.82
>>797
それってオブジェクト指向でメソッドの引数の型を
IO型からObject型にするのと、どう違うの?
803デフォルトの名無しさん:2011/12/23(金) 18:47:13.75
メソッドの引数に限定する意味が良くわからないが
bindとかreturnというメソッドを持ったIO型を一般化して、
Monadという抽象クラスから派生するようにしたら便利なのと一緒。
804デフォルトの名無しさん:2011/12/23(金) 18:53:48.59
>>802
色んなものの「共通する性質」や「共通する関係」を抜き出し、
具体的な実態では無くその性質や関係のみで以て語るのが「抽象化」だから、
抽象化するという意味は同じ

どう抽象化するかという点で、IO型からObject型へとMonadへとで違いがでる

Haskell のモナドは (m を Monad クラスのインスタンスとして)
forall a b. m a -> (a -> m b) -> m b
forall a b. m a -> m b -> m b
a -> m a
String -> m a
という4つの「演算で抽象化」してる(うち2つだけで十分だが)

特にモナド同士の演算がまたモナドになるという性質と、
モナドの外からはモナドの具体的な実態は見えないという性質が特徴的だから、
そういう性質が活かせるところでもてはやされる

オブジェクト指向のObject型がどういう性質の抽象化なのかは忘れた
805デフォルトの名無しさん:2011/12/23(金) 18:59:26.87
なんかHaskellPlatform DLできないんだけど鯖どうなってんこれ
806デフォルトの名無しさん:2011/12/23(金) 19:27:53.45
>>799
ありがとう。読んでみる。
807デフォルトの名無しさん:2011/12/23(金) 19:37:49.40
>>802
その例だと、内部でやってることもだいたい同じ
実際の型に応じて実装が選ばれる
実装を選ぶタイミングがコンパイル時か実行時かは違う

型クラスは ad-hoc polymorphism を使いやすくしたものでオーバーロードの親戚
OOPのほうはsubtype polymorphismといって、部分かなり違う部分がある
例えばsubtype relationが推移律をみたすみたいな強い性質がある
subtypeがあるとどうなるかは、Scalaが壮大な社会実験中
808デフォルトの名無しさん:2011/12/23(金) 20:08:50.39
Objectにしたらキャストがいるよね
interface Monadみたいの定義しないと
809デフォルトの名無しさん:2011/12/23(金) 21:29:18.89
抽象化と言うか普遍化だな。
810デフォルトの名無しさん:2011/12/23(金) 21:51:15.90
同じ事やねんで
811デフォルトの名無しさん:2011/12/23(金) 21:51:38.33
モナドって、ひょっとしてHaskellにおけるデザインパターンのことかい?
812デフォルトの名無しさん:2011/12/23(金) 21:52:28.95
>>809
ラムダ抽象の抽象?
813デフォルトの名無しさん:2011/12/23(金) 21:58:23.43
>>811
モナドの方が抽象度高いけど似たようなもん(だと思ってる)
814デフォルトの名無しさん:2011/12/23(金) 21:59:35.27
普遍化というのはある特定の性質から全体の性質が定まるようにすることで、
単なる抽象化とは違うだろ。
815デフォルトの名無しさん:2011/12/23(金) 22:03:10.73
デザインパターンが何を指しているのかわからない。
816デフォルトの名無しさん:2011/12/23(金) 22:04:44.75
【普遍化】個別的・特殊なものを捨て、共通なものをとり出すことによって概念や法則などを引き出すこと。
【抽象化】対象から注目すべき要素を重点的に抜き出して他は無視すること。
817デフォルトの名無しさん:2011/12/23(金) 22:14:01.93
よかったな。
818デフォルトの名無しさん:2011/12/23(金) 22:21:35.79
どっちでも良いと思うけど、性質を式にするような場合は一般化(普遍化)のほうがしっくるくるよね
819デフォルトの名無しさん:2011/12/23(金) 22:31:42.28
>>815
あのGoFのデザインパターンがその代表だが。
>>813
そうか。そうならデザインパターンと同じくつまらんものだ。
長くは続かん。
>>816 >>818
もっと乾いた理解をしないといかんのじゃないか?
820デフォルトの名無しさん:2011/12/23(金) 22:43:16.57
>>819
> そうか。そうならデザインパターンと同じくつまらんものだ。
> 長くは続かん。

2ch で質問して、たった1個のレスでそんなに早く結論を得た気になるなんて
ほんと馬鹿としか言いようがない

このまま行くと、お前は一生その考えなんだろうなぁ
821デフォルトの名無しさん:2011/12/23(金) 22:45:15.16
そもそもデザインパターンがつまらんという感覚が良く分からない
822デフォルトの名無しさん:2011/12/23(金) 23:03:06.92
うむ。つまるとかつまらんてものではないわな
823デフォルトの名無しさん:2011/12/23(金) 23:04:36.28
>>820
2ch
824デフォルトの名無しさん:2011/12/24(土) 00:21:37.64
つまらない物だということにして安心したいんだよ
そうすれば理解する努力しなくていいから
825デフォルトの名無しさん:2011/12/24(土) 00:50:28.05
理解できない自分の頭を嘆く必要もなくなるし。
826デフォルトの名無しさん:2011/12/24(土) 05:44:34.49
>>804 , >>807
ありがとう。
でも、その理屈でIO()をモナドに抽象できるのだとすると、

「IO()で提供されていた種々の関数は全て、
モナドで提供されている演算子に置き換え可能である」

という前提条件が存在すると思うのだけど、どうだろう?

この条件が成立しないと、結局forallはIO()型の値を必要とするよね。
IO()をMonad m=>mで置き換え可能であるためには、forallを使っている
コードも含めて、IO()型に関連する「全ての関数」のモナド版を
用意してあげなくちゃいけないと思うのだけど。
827デフォルトの名無しさん:2011/12/24(土) 08:41:32.68
>>=, returnとそれと対応するIO版の関数の範囲に限ってその前提条件は成立する。
それが型クラスとそのインスタンス宣言の意味するところで、
この前提条件の表明がMonad m =>みたいな型シグニチャのコンテキスト。
828デフォルトの名無しさん:2011/12/24(土) 08:55:33.85
>827の翻訳

一般にその前提条件は成立しない。
829デフォルトの名無しさん:2011/12/24(土) 11:15:48.48
cabal updateしようとしたんだけど落ちてる?
なんかタイムアウトしてしまうんだが。

取り急ぎ対応したいんだけど、ミラーとか指定できる?
830デフォルトの名無しさん:2011/12/24(土) 11:20:48.10
さっき俺の方でも実行してみたけど、問題なくいけた
831デフォルトの名無しさん:2011/12/24(土) 11:24:36.08
なんか自分だけっぽいな。どうすればいいんだろう。
pingも帰ってこない。
832デフォルトの名無しさん:2011/12/24(土) 13:21:02.06
>>824 >>825
理解するとか理解できるとか言ってる時点でダメなんよ。
833デフォルトの名無しさん:2011/12/24(土) 13:24:10.63
最初に言ったのはラオウ
834デフォルトの名無しさん:2011/12/25(日) 03:51:05.99
DNS引けてないようだったら、
DNSサーバーをgoogle提供の8.8.8.8にしてみるとかどうだい。
/etc/hostsとかでipアドレス指定してもいいけど。

ほかの要因だったら、proxyかますとか。
835デフォルトの名無しさん:2011/12/25(日) 10:41:23.31
硬派なお前らなら勿論イヴもコーディングだったよな?な?
836デフォルトの名無しさん:2011/12/25(日) 11:41:56.88
遺伝子をコーディングしてました
837デフォルトの名無しさん:2011/12/25(日) 12:07:45.95
アレをコーティングして入れてました
838デフォルトの名無しさん:2011/12/25(日) 18:07:33.55
>>835
IO Monadをかぶせて副作用なし。
839デフォルトの名無しさん:2011/12/25(日) 18:31:48.82
いろいろ見てみたけどモナドってやっぱおれには難しいわ。
なんか純粋な関数型言語にふつうのプログラミング言語ならふつうにできることを
組み込みたいという空気かなと思うが、あまりそう強調されてもいないようだし、
まず目的がようわからんわ。
抽象化とか言うけど、それはモナドに限らん関数型の特徴だと思うし。
だれかこういうのちょっと教えてくれんかなスマンが。
840デフォルトの名無しさん:2011/12/25(日) 18:41:00.60
「こういうの」って何だ?
具体的に訊いてくれ
841 [―{}@{}@{}-] デフォルトの名無しさん:2011/12/25(日) 18:48:48.79
まずモナドとIOモナドを区別してくれ
純粋さを保ったまま入出力をする仕組みがHaskellにはあって、IOという名前の型が使われる
モナドというのはある種の型を抽象的に扱う枠組み
(どういう型をどうやって扱うのかは一言では説明できない)
で、IOはたまたまモナドの枠組に適合する(ので、IOモナドと呼ばれる)

で、モナドが知りたいの?IOが知りたいの?
842デフォルトの名無しさん:2011/12/25(日) 18:51:02.48
関数に副作用があるかどうかが型を見るだけで解るのは利点
843デフォルトの名無しさん:2011/12/25(日) 19:00:41.02
チューしようか
844デフォルトの名無しさん:2011/12/25(日) 19:03:59.38
すぐ反応してくれてうれしいな
>>840
モナドでやりたいことは何なの?ってことなんだが。
関数型にどうのこうのって書いたんだが、そういう「目的」っていうの?
そういうのが知りたいんだが。
いろんなモナドがあるようなんで、それがわかいにくいんだが。
>>841
IOモナドはモナドのひとつじゃないん?
その「純粋さを保ったまま入出力をする仕組み」がモナドなんやろ?
純粋さって関数型のってこと?もしそうなら、どの程度保てるものなの?
知りたいのはモナド。IOがその代表ならそれも知りたい。
>>842
それは型指定を工夫したらできるんじゃないん?
こんな質問じゃったんじゃが、みなスマンのう
845デフォルトの名無しさん:2011/12/25(日) 19:04:09.30
IO がモナドで表現されるようになった経緯は、
「A History of Haskell」の Section 7 に詳しく書かれている

http://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/
846デフォルトの名無しさん:2011/12/25(日) 19:05:37.16
>>841
> で、IOはたまたまモナドの枠組に適合する(ので、IOモナドと呼ばれる)

なるほど。
いつまでもIOモナドは難しいと言われ続ける理由がわかったよ。

本当にIOモナドは「たまたま」モナドの枠組みに適合してるの?
わざわざモナドとしての宣言をしているのを「たまたま」というの?

わざわざ色々なIOをモナド則にあわせて整理して宣言しているのを
「たまたま」とか言って誤魔化しているわけでしょ。
学ぶ人達の能力を信用していないから、そうやって誤魔化すわけだ。

そうやって学ぶ人達を信用せずに、ありのままを伝えず、
取って着けたようなすぐバレるデッチアゲばかり言うから、
学ぶ人達はどの言葉を信用すればいいかわからなくなって、
「Haskellは難しい」という結論になっているんじゃないの?
847 [―{}@{}@{}-] デフォルトの名無しさん:2011/12/25(日) 19:10:26.88
>>844
>IOモナドはモナドのひとつじゃないん?
そうだよ
>その「純粋さを保ったまま入出力をする仕組み」がモナドなんやろ?
IOモナドがその仕組み。それ以外のモナドは全然別のことをする(構文解析とか)
>純粋さって関数型のってこと?もしそうなら、どの程度保てるものなの?
副作用のある関数を一切使わずに入出力のあるプログラムが書ける
848デフォルトの名無しさん:2011/12/25(日) 19:10:45.98
モナド則が
{
nop
foo
bar
baz
nop
}
みたいなのを正しく扱うのに都合がいいということはわかる
849デフォルトの名無しさん:2011/12/25(日) 19:12:41.64
>>847
> 副作用のある関数を一切使わずに

ダウト。Haskell上の値としては副作用はないが、
裏でランタイムがちゃんと副作用を起こしている。
850デフォルトの名無しさん:2011/12/25(日) 19:16:51.65
>>846
モナドは副作用を保証してくれないから、
モナドだけではI/Oは不可能。
副作用をうまく取り扱うための枠組みを、
モナドは提供できているというだけの関係。
851デフォルトの名無しさん:2011/12/25(日) 19:16:52.65
厳密には何を以て副作用と言うかを(ここだけでも)統一されて議論すべきだが、
「Haskell上の値としては副作用はない」というのを副作用が無いと認識している
Haskell プログラマは多いし、暗黙の了解になっていたりもする
852 [―{}@{}@{}-] デフォルトの名無しさん:2011/12/25(日) 19:16:53.25
>>846
なんか誤解してるような気がする
1. IOは、純粋さを保ったまま入出力するための型である
2. IOはMonadのインスタンスである
この二つの事実が両方成り立つのは別に必然ではないという意味で「たまたま」と言った
モナドにならない型で入出力を表現することはできる(ストリームIOとか)し、
入出力と関係ないモナドももちろんある

つまりHaskellの入出力を理解するのにモナドを知っている必要はないし、(助けにはなるが)
モナドを理解するのにIOを知っている必要もない(助けにはなるが)
853デフォルトの名無しさん:2011/12/25(日) 19:16:55.59
いや、それはおかしいだろ
OCamlで実装されたHaskellインタプリタだったらそのHaskellは純粋ではないことになるのか?
854デフォルトの名無しさん:2011/12/25(日) 19:17:44.83
>>853>>849
855 [―{}@{}@{}-] デフォルトの名無しさん:2011/12/25(日) 19:18:27.47
>>849
そこを気にするなら、「副作用のある関数」を
「呼ばれて評価されたときに副作用を起こす関数」と読み替えてくれ
856デフォルトの名無しさん:2011/12/25(日) 19:21:55.56
>>845
ありがと。ちょっと見てみるけどおれにはわからんだろな
>>846
怒らんで
>>847
>それ以外のモナドは全然別のことをする
うん。そのときの共通性っていうの?それが知りたいんやが
>副作用のある関数を一切使わずに入出力のあるプログラムが書ける
ほんま?そんなことできるわけないやろ。なんかトリックなんやろ?
857デフォルトの名無しさん:2011/12/25(日) 19:25:40.76
>849 から >>855
わ。レスポンスしたら他の兄さんらの難しい議論が始まって付いていけへん。
しばらく勉強や。
858 [―{}@{}@{}-] デフォルトの名無しさん:2011/12/25(日) 19:30:01.84
>>856
>うん。そのときの共通性っていうの?それが知りたいんやが
モナドの具体例(2〜3個)を知らない人に説明するのは難しい。俺にはできない

>ほんま?そんなことできるわけないやろ。なんかトリックなんやろ?
うん。おおさっぱに言うと、入出力をする関数がない代わりに、入出力をする変なもの(アクション)がある
関数とアクションは型が違うから、関数を見たらそれが入出力をしないことは保証されてる
859デフォルトの名無しさん:2011/12/25(日) 19:32:00.64
>>850
>副作用をうまく取り扱うための枠組みを、モナドは提供できている
どこで、なんで、それができてるんや?ちゅうのが知りたいんやな

860デフォルトの名無しさん:2011/12/25(日) 19:39:14.42
自分は手下に命令しただけで、直接手を下していないことを
「俺は潔白だ」
というようなものだな。

MLのように自分が手を下した範囲をちゃんと自供するほうが
ずっと罪は軽い。
861デフォルトの名無しさん:2011/12/25(日) 19:41:31.09
IO aをRealWorld -> (a,RealWorld)とみなした上で外延性から
∀ x :: IO a, ∃s.s' :: RealWorld. x s /= x s'について解釈することで参照透明性をもう少し厳密に言えないのかな
862デフォルトの名無しさん:2011/12/25(日) 19:45:03.85
RealWorld型を導入しなくても参照透明にはなるよ
IO a型の値をプリミティブにしたって良いし
863 [―{}@{}@{}-] デフォルトの名無しさん:2011/12/25(日) 19:45:45.33
>>860
実際にコードを読んだり(自動でも手動でも)最適化する場合に
直接手を下しているかどうかが重要になるんだから仕方ない
864デフォルトの名無しさん:2011/12/25(日) 19:48:09.17
Moggiが表示的意味論(もちろんI/O、状態、並列などが扱われている)で
使われている技法に共通構造を見出した。
それがどんな構造かってのは、数学分からない人には、絶対に演繹的に理解できないです。
数々のMonadを体得することで帰納的に理解してください。
帰納的な理解だから身体動かさないと無理です。
頑張ってMonad入門を読みこなして、さらにプログラムを書いてください。
865デフォルトの名無しさん:2011/12/25(日) 20:02:04.02
茂木=サン
866デフォルトの名無しさん:2011/12/25(日) 20:21:29.09
継続やストリームを使ったIOの表現よりも、
モナドを使ったIOの表現の方がシンプルで、処理を追いやすい

IOモナドが作られた理由はこれに尽きるだろ
867デフォルトの名無しさん:2011/12/25(日) 20:21:39.10
>>858 >>864
ああ、また見捨てられてしもた。いっつもこうや。わしに学がないばっかりに。
ふつうのプログラムはやってるから、あのIOやエラーは知ってるし、
Maybeなんちゅうのがあるらしいのも知ってるけど、そんなんじゃ
話がわからんちゅうこっちゃろな。
Monad入門ってどこにあるんですか?
今日は冷えるわ。
868デフォルトの名無しさん:2011/12/25(日) 20:27:46.78
>>861
問題意識がおもしろそう。
参照透明性が厳密に表現できると、モナドも厳密に表現できるのでは
という動機?
869デフォルトの名無しさん:2011/12/25(日) 20:36:19.03
IOモナドに関してはこれがいい。
特にボトムアップで理解したい人。実装について触れられてる。
http://haskell.org/haskellwiki/IO_inside
870デフォルトの名無しさん:2011/12/25(日) 20:50:43.45
>>867
俺も学の無い人間だけど、モナドはOOPでいうインターフェースに当たる型クラスって機能を使って構築されてるって言えば何をしたいものか大体わかる?
871デフォルトの名無しさん:2011/12/25(日) 21:58:46.16
Haskell で GUI のアプリ作った・作ってる人っている?
872デフォルトの名無しさん:2011/12/25(日) 22:04:17.40
XMonadの拡張なら
873 [―{}@{}@{}-] デフォルトの名無しさん:2011/12/25(日) 22:10:00.15
オセロなら
874デフォルトの名無しさん:2011/12/25(日) 23:04:12.41
>>872,873
Haskell でも MVC や Doc-View アーキテクチャが基本なの?

Model あるいは Doc の部分ってどうやって実装してる?
やっぱり IORef のようなミュータブルな IO モナドになっちゃうのかな
875 [―{}@{}@{}-] 873:2011/12/25(日) 23:14:40.98
MVCっぽい感じだった
モデルにはMVar使ってた
876デフォルトの名無しさん:2011/12/25(日) 23:39:17.99
ちゃんと教えてあげなよ。
>>867
Schemeになるが、Semantic Lego
http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.31.2885
877デフォルトの名無しさん:2011/12/25(日) 23:46:03.80
インストール作業が非常に面倒だった記憶があるから、
インストールする前に訊きたいんだが、

以前 windows 上で wxHaskell を使ってた時は、
ghci では動かせず、動作を試すのにいちいちコンパイルしてたんだ

今(ghc 7.2.2、wx-0.12.1.6)でもそうなの?
878デフォルトの名無しさん:2011/12/26(月) 01:50:40.57
>>867じゃないけど>>876面白いな
モナドとモナド変換子を使ってプログラミング言語の意味を表現しておけば
そこからその言語のインタプリタを自動生成してくれるのか
879デフォルトの名無しさん:2011/12/26(月) 10:20:49.85
>> 878
>モナドとモナド変換子を使ってプログラミング言語の意味を表現しておけば
>そこからその言語のインタプリタを自動生成してくれる
そりゃできるに決まってるよ、と思うのだが、そう思うのってあまりにdetailに
鈍感ってことかなあ?
ところで、このときモナドが本質的(モナドだからできる)ってことでもない
と思うのだが、どうですか?
880デフォルトの名無しさん:2011/12/26(月) 10:31:03.06
>>879
構文と意味を分離するのだから、モナドが相当本質的ではないの?
881デフォルトの名無しさん:2011/12/26(月) 15:45:22.21
ようやくlearn you a haskell ~ を2周読み終えるわ。この本やっぱり
面白かった。純粋な関数型のデータ構造を扱うための入門にも向いてるよ。
特に最後の2つの章がね。
ただの入門かと思ったけど、そうでもなかった感じがした。

もちろん、ちょっと話題になってるモナド変換子のことは現実世界Haskell
になってくる。でも、Learn you a Haskell~を2,3度読むと基礎は十分
じゃないかと思った。

ええ本ですわ。
882デフォルトの名無しさん:2011/12/26(月) 15:51:58.71
他の本も同時に読んでるけど、Tree based tech-nick の言語でもあるし
なにもかも他とは異質という印象があった。LispやSmalltalk,Prologと
は違うまた異質な世界。

でも、オブジェクト指向でやったほうが良いようなシミュレーションの問題
などは向いてないなと思った。Haskellでもできないことはないというのは、
ライブラリを探して、サンプルを見てたら分かるんだけど、無理矢理感が
拭えないな。

簡単なところを学んだあとに改めてHaskellというのを考えたけど、学んで
有益だったのか明確な答えがでなかった。

ここのベテランさん達はHaskellを学んで、そして実用的?に利用して何が良
かったと感じてますか?
883デフォルトの名無しさん:2011/12/26(月) 15:52:52.02
technique だったな。
884デフォルトの名無しさん:2011/12/26(月) 15:54:03.41
もうひとつ感じたことh,HaskellのタプルはLispのconsみたいなもんなんだな。ってね。consとtupleは違う点ももちろん明確なんだけど。
885デフォルトの名無しさん:2011/12/26(月) 20:04:36.55
>>882
・便利な機能(というより、無いと苦痛な機能)が揃ってる
 代数的データ型、型クラス、型推論、…
・構文が簡潔なので書いていて苦痛が少ない(括弧を閉じなくて良いのは大きい)
・静的な型

もっと地味に良いところはたくさん挙げれられる
 GC、生ポインタ操作、パーサコンビネータ、ユーザレベルスレッド、並列処理、
 do構文、where構文、純粋であること、末尾再帰の最適化、…
でも個人的な感覚としては、他の言語に比べて大きな欠点が少ないから使ってる
886デフォルトの名無しさん:2011/12/26(月) 20:04:44.07
>>884
問1. HaskellのタプルとLispのconsの共通点は何?
問2. その共通点は本質的なものか?
887デフォルトの名無しさん:2011/12/26(月) 21:40:09.83
>>878
2時間たらずでそこまで理解できたなら大したもんだ。
自動生成というか、各プログラミング言語の概念(環境、ストア、継続)をモジュール化することで、
レゴのブロックのように意味の組み合わせが可能になる言語の枠組みとして使えるという内容。
いろんな先入観を払拭するのに最適だし。
残念ながら入出力については実装があたえられていないので、言語SLは実践的にはまったく使い物にならない。
逆に言えば、入出力をちゃんと理解して組み込めるようにすれば、実用的にも結構すごいことだと思う。
888デフォルトの名無しさん:2011/12/26(月) 23:00:19.71
表示的意味論の教科書でも大抵入出力は端折ってる。
889デフォルトの名無しさん:2011/12/26(月) 23:25:08.69
>>885
そうですか。更に学べば面白いところありそうですね。:-)
>>886
自分が感じたのは、便利な小物扱いしてるところ。consを使ったもので
associate listというものがあるんだけど、その扱いと特に似てると感じた。
tupleは無名構造体という言い方をするとどこかで読んだことがあるけど、
もちろんtupleでリストを作るわけではないので違いは歩けd.
890878:2011/12/26(月) 23:55:02.17
>>879
俺がモナドをよく知らないから新鮮に思えるだけかも

>>887
説明ありがとう
Haskellerがモナドモナドうるさい理由がちょっと解ってきたよ
891デフォルトの名無しさん:2011/12/27(火) 00:02:02.11
うるさくはないよ。控え目だよ。
892デフォルトの名無しさん:2011/12/27(火) 04:33:07.77
うるさくはないよ。針小棒大だよ。
893デフォルトの名無しさん:2011/12/27(火) 09:38:15.07
うるさくないよ。短小早漏だよ。
894デフォルトの名無しさん:2011/12/27(火) 12:44:32.22
>>886
>>884ではないけど、横レスしてみる

Lispのような動的型付け言語の場合、2つの要素から構成されるタプルと
リスト構成子である cons は同一であり、互いに置き換えることができる

Haskellのような静的型付け言語の場合、
タプルは直積構造であるから各要素のデータ型は互いに異なっていてもかまわないが、
リストにおいては各要素のデータ型は同一でなければならない
したがって、2要素のタプルとリスト構成子との間に互換性はない
895デフォルトの名無しさん:2011/12/27(火) 13:38:57.62
無理矢理なぐらい広議にしたモノイドという観点に立てば関連性が無いとも言えない
896デフォルトの名無しさん:2011/12/27(火) 19:54:07.22
cabal で stm をインストールしようとしたら、

Control\Concurrent\STM.hs:0:4: lexical error (UTF-8 decoding error)

というエラーで止まってしまい、インストールできません

そもそも cabal の lexical error というのはどういう時に起こるのでしょうか

[環境]
GHC 7.2.2
cabal-install 0.10.2
Cabal library 1.10.2.0
897896:2011/12/27(火) 23:18:53.79
問題がだいぶ絞り込めました

{-# LANGUAGE CPP #-}

たったこれだけ書かれた Test.hs ファイルを ghci 上でロードすると、

Test.hs:0:4: lexical error (UTF-8 decoding error)
Failed, modules loaded: none.

と表示されエラーとなりますが、エラーの意味が分かりません

{-# LANGUAGE Arrows #-}

例えばこれだけ書かれた Test.hs ファイルなら、普通にロードできます

これ GHC 7.2.2 のバグでしょうか
それとも意図された振る舞いなのでしょうか

後者なら、このエラーはどのような意味なのでしょうか
898829:2011/12/28(水) 03:00:47.10
>>829です。解決しました。
原因はIPv6周りだったらしく、Ubuntuの設定をしたら直りました。

自分の対処法としては。参考にしたサイトとは若干違い。

/etc/ufw/ufw.conf にIPV6の記述がなかったので
IPV6=yesに。

/etc/NetworkManager/system-connections/Auto eth0の[ipv6]のmethodがignoreになっていたのを、
method=autoにそれぞれ変更し直りました。



参考にしたサイト 
hackage.haskell.org に繋がるようになりました。 - sirocco の書いてもすぐに忘れるメモ
http://d.hatena.ne.jp/sirocco/20110905/1315255573
899829:2011/12/28(水) 03:12:45.40
まずプロバイダに特定のサイトが繋がらないんだけど?と連絡したら中の人がぐぐってくれたらしく
ipv6の設定を変えてみてくれという返事が帰ってきました。なんか検索したらそういうものが見つかったとのこと。
ipv6の問題とか自分の身に降りかかってくるとは思ってなかったのでパニクリました。
向こう側がググったサイトは教えてくれない感じで、Windowsでの設定方法を教えますって言われたので、うは、逆にUbuntuでの設定方法を教えてくれwと思いながらWinじゃないので、と言ってとりあえず引き下がって自分で対処しようとすることに。
うわー、面倒くさそうと思って、プロバイダ側で何が引っかかったのだろうとぐぐってみたら1番上が思いっ切りUbuntuの人のページでしたw

ちなみにAndroidケータイがXperiaなんですが、それでもhackageのサイトに通じなかったので、ipv6の設定がどうかなってるんですかね。
Windowsでipv6とかgoogleのグローバル版で調べてみてもあまりipv6と関連した情報みたいなのは出てきませんが。
外人さんは困ったりしないんだろうか。全くよくわからないところです。日本人・日本語だと困ってる人が少し出てきましたね。

で、結局Ubuntuでipv6の設定しなおしたらなんで繋がるようになったのかは理解してません。w
どうしてなんでしょうか?

この方のところも参考にしました。
UbuntuでIPv6 - とある技術屋の戯言
http://www.sonorilo.net/2010/05/10/2730
900デフォルトの名無しさん:2011/12/28(水) 07:16:43.53
馬鹿には無理
901896:2011/12/28(水) 07:35:30.95
>>900
賢い人でしたら >>897 の問題分かるでしょうか

ちなみに、ghci -XCPP というオプションで ghci を起動させれば、
たとえ何も書かれていない空白の hs ファイルをロードしても、
全く同じ lexical error になります
902デフォルトの名無しさん:2011/12/28(水) 07:47:55.90
適当に推測すると、cppの出力が非UTF-8の何かを含んでるんじゃないの?
cpp -traditional Test.hs
の出力を見てみるとか
903デフォルトの名無しさん:2011/12/28(水) 07:49:15.11
まさにそれでした
ありがとうございます
904896:2011/12/28(水) 07:54:57.28
>>902
ありがとうございます

色々な ghc のバージョンで試す環境が作れたので、
丁度今試していたのですが、どうも 6.12.3 なら OK で
7.0.0 以上なら NG みたいなんです

もう仕事に向うので、帰宅したら cpp -traditional Test.hs の方を試してみます
905896:2011/12/28(水) 19:09:32.91
>>902
cpp -traditional Test.hs の結果が以下のように出力されました

-------------------------------
# 1 "Test.hs"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "Test.hs"
{-# LANGUAGE CPP #-}


-------------------------------

何か問題あるでしょうか
906デフォルトの名無しさん:2011/12/28(水) 19:25:33.17
>>905
わからん。念のためghci -v Test.hsをやってみて、
そこで出てきたプリプロセスコマンドをそのまま打ち込んでみたら出力はどうなる?
カレントディレクトリかテンポラリディレクトリのパスに日本語が入ってるとか
907896:2011/12/28(水) 19:58:14.00
CPP 言語オプションだけを記述した Test.hs に対して ghci -v Test.hs すると、
*** C pre-processor: でプリプロセスコマンドが表示され、
その直後に次のように表示されて処理が止まります

ghc.exe: fd:5: hGetContents: invalid argument (invalid UTF-8 byte sequence)

ここで、[Ctrl+C] キーで処理を止めると Interrupted. と表示されてから、
いつもの ghci のプロンプトになります

Arrows 言語オプションだけを記述した Test.hs ファイルの場合は、
全く問題なく(処理は止まらず)いつもの ghci のプロンプトになります

*** C pre-processor: で表示されたプリプロセスコマンドは以下の通りです
(見やすさの為適当に改行を入れ、パスに本名がローマ字で入っているので伏せました
また、最後の -o の出力パスはテンポラリファイルなので適当に変えました)

-------------------------------
"Haskell Platform2011.4.0.0のフォルダ\lib\..\mingw\bin\gcc"
-E -undef -traditional -v
-I "Haskell Platform2011.4.0.0のフォルダ\lib\base-4.3.1.0\include"
-I "Haskell Platform2011.4.0.0のフォルダ\lib/include"
-D__GLASGOW_HASKELL__=700 -Dmingw32_BUILD_OS=1 -Di386_BUILD_ARCH=1
-Dmingw32_HOST_OS=1 -Di386_HOST_ARCH=1 -x c Test.hs -o out.hscpp
-------------------------------

このプリプロセスコマンドを実行してみたところ、
こちらは止まらず、また特にエラー報告もなく out.hscpp が出力されました
このファイルの内容は >>905 の結果の出力と同一です

どうも、この現象は私だけみたいですね
908896:2011/12/28(水) 20:00:23.21
>>906
> カレントディレクトリかテンポラリディレクトリのパスに日本語が入ってるとか

それは無いです
909デフォルトの名無しさん:2011/12/28(水) 20:16:52.26
>>897
暇だったからLANGUAGE CPPの方やってみたけど、問題なかった。当たり前か。ghciはversion 7.0.4でした。
変な制御文字でも埋まってるんじゃない?od -x -c Test.hsで見てみたら?
910896:2011/12/28(水) 20:44:13.27
>>909
od コマンドが無いんで(Windows 7 環境)適当なバイナリエディタで見てみた

-------------------------------
{-# LANGUAGE CPP #-}
-------------------------------
7B 2D 23 20 4C 41 4E 47 55 41 47 45 20 43 50 50 20 23 2D 7D
-------------------------------

全く問題ないですよね


とりあえず、問題の stm パッケージさえインストールできれば作業は進むから、
#ifdef __GLASGOW_HASKELL__ などのマクロを外して自力でプリプロセスしようと思います

ですが、ひとつ問題が
#if ! (MIN_VERSION_base(4,2,0))
これは今使ってる base のバージョンが例えば 4.3.1.0 の場合、
これと #endif で挟まれている部分のコードは生きるんですよね
911896:2011/12/28(水) 21:41:55.67
あかん

たとえ stm パッケージが無事インストールできても、
他の必要なパッケージで同じ問題が起きることに気づいた

もう OS 再インストールしか方法はないのかも知れん
912896:2011/12/28(水) 21:59:15.96
意味も分からず解決してしまった

mingw-get-inst-20111118.exe をインストールしていたんだが、
これをアンインストールして、そのインストール先の mingw フォルダも全て削除したら、
何事も問題なく C のプリプロセッサ(CPP オプション)が使えるようになった

環境変数に mingw フォルダ内のどこかへのパスがあったわけでもないんだが、
なんでこれで解決するのか意味が分からない
GHC 内の mingw と干渉していたのではないかと思うが、
今まで普通に GHC と外部の mingw は共存できてたと思うんだが・・・

まぁいいや
お騒がせしました
913デフォルトの名無しさん:2011/12/30(金) 15:54:38.20
windowsなんて捨ててlinux/mac系でやれば楽なのにね。
914デフォルトの名無しさん:2011/12/30(金) 17:05:32.28
全くだ
915デフォルトの名無しさん:2011/12/30(金) 17:09:47.04
馬鹿には無理
916デフォルトの名無しさん:2011/12/30(金) 17:30:27.49
むしろ馬鹿ほどmacだと思う
917896:2011/12/31(土) 11:39:52.12
wxHaskell を使ってるんだけど、以下のコードの挙動が予想外だ
(dc は paint イベントのハンドラの第1引数 DC () 型)

drawText dc "abc" (Point 0 0)
[ textColor := green
, textBgcolor := blue
]

俺の予想だと、青色の背景に緑色の文字が表示されると思ってたんだ
でも実際は、透明の背景に青色の文字が表示される

これは正しい挙動なのか、それともバグなのか?

[環境]
OS : Windows7
GHC : 7.2.2
wxPack : 2.8.12.01
wx : 0.12.1.6
wxCore : 0.12.1.7
918デフォルトの名無しさん:2011/12/31(土) 11:48:50.85
wxHaskellは知らないけど
wx的にはwxDC::setBackgroundMode()で挙動が変化したような?
919デフォルトの名無しさん:2011/12/31(土) 13:36:42.19
>>918
ありがと

ただ、残念なことに、今の wxHaskell では
DC の BackgroundMode を設定できないみたいだ
それらしい関数やプロパティが見当たらない
920デフォルトの名無しさん:2011/12/31(土) 16:32:13.81
921デフォルトの名無しさん:2011/12/31(土) 18:43:32.49
>>920
あ、なるほど dcSetBackgroundMode か

頭文字 s とか b で探してた
(部分一致とかで検索できないと不便だなぁ)

ありがと
922デフォルトの名無しさん:2011/12/31(土) 19:26:08.59
>>918,920
dcSetBackgroundMode 関数に 100(wxSOLID)を設定してみたところ、
文字の背景に色が付きました
しかし、これだけでは背景の色は真っ白でした

そこで、次の様にしてみたところ、意図通りの結果
背景が黒で文字が赤色になりました

withBrushStyle (brushSolid black) $ \b -> do
 dcSetBackground dc b
 dcSetBackgroundMode dc 100
 dcSetTextForeground dc red
 dcSetTextBackground dc black
 drawText dc "abc" (Point 0 0) []

どうも、drawText 関数とか set 関数で設定する textColor や textBgcolor は
正しく反映されないみたいです
(textBgcolor が文字の色になり、textColor が反映されない?)

おかげさまで目的は達成できました、ありがとうございました

時間がとれたらバグ報告してみようと思います(英文作るのにかなり時間がかかるんで)
923デフォルトの名無しさん:2011/12/31(土) 23:24:55.57
よいHaskellを!
来Haskellは更に良いHaskellになるよう祈ってます。
924デフォルトの名無しさん:2012/01/01(日) 00:00:43.17
おめでとう
925デフォルトの名無しさん:2012/01/01(日) 21:54:51.56
なんだよ。789、790あたりを見てから、やっぱりモナドは注目すべきなんだろう
と思ってちょっと調べていたんだが、もうとっくの前に情報処理上で和田英一
さんが喝破しているじゃないか。やっぱりモナドなんて騒ぐほどのものじゃねえよ!
「関数プログラミングの泣き所は入出力を含む副作用である。...Haskellは
シリアルに計算を進めるメカニズムのmonadを考案し、これを解決したと言っ
ているが、関数型を一部手放したと言うべきであろう。Lispにも最初からprog
があった。」
926デフォルトの名無しさん:2012/01/01(日) 22:18:00.73
理解が追いつかないことでの話のすり替えだね
927デフォルトの名無しさん:2012/01/01(日) 22:30:27.00
和田英一って適当なこと言うんだな
「関数型を手放した」というのは意味不明だし、
モナドとIOを区別してないのは(言いたいことは分からんでもないが)雑な議論
928デフォルトの名無しさん:2012/01/01(日) 22:36:12.24
和田サンは鞍とキーボードを同一視するくらいの人だからな
モナドとIOなんて同じようなもんなのだろう
達観してる
929デフォルトの名無しさん:2012/01/01(日) 22:39:50.46
うーん。そうとも限らないよ。
やみくもに理解・学習しようとするだけでなく、理解・学習に値する事か
どうかも時々気にしておいた方がいいよ。
930デフォルトの名無しさん:2012/01/01(日) 22:40:05.36
ああ、HHKの人か
キーボードは良いけど発言はいただけないな
931デフォルトの名無しさん:2012/01/01(日) 22:45:22.74
>>925
お前、自分の考えは言わないのな
932デフォルトの名無しさん:2012/01/01(日) 22:49:34.63
追従する学習者たちは細かい区別を気にする。創造的達人は大きく同一視
できる。いずれ時がたつと後者に収斂する。
933デフォルトの名無しさん:2012/01/01(日) 22:55:26.90
>>927
あなたはモナドを発明した人かそれとも学習しつつある人か
934デフォルトの名無しさん:2012/01/01(日) 22:56:07.14
じっじゃんだからなぁ。もう80超えてるんだぜ
935デフォルトの名無しさん:2012/01/01(日) 23:00:33.34
年は関係ない。
若い凡百のHaskellプログラマーの見解を聞くより、ずっと傾聴に
値する。
936デフォルトの名無しさん:2012/01/01(日) 23:01:16.44
>>933
モナドを発明した人ではないよ
学習しつつあるとは言えなくもない。別に積極的には学習してないが
937デフォルトの名無しさん:2012/01/01(日) 23:16:32.98
>>933
微分積分などの計算方法と違って、
モナドって発明というよりは発見なんじゃないか?

誰かは忘れたが、圏論の中でモナドの構造を見抜いた
違うか、ある共通の構造を見抜いて、それにモナドと名前を付けた

まぁその応用は発明に近いかも知れんが

Moggi氏が、言語の表示的意味論の構造を要素分解するのに、
そのモナドという眼鏡(見方・枠組み)が使えることを見いだした

で、Wadler氏が、表示的意味論に使えるのなら、
ある意味それに近い関数型言語にも利用できると閃いた
938デフォルトの名無しさん:2012/01/02(月) 00:49:38.34
上の方にpdfのリンクあったろ
発作起こしてないで読め>>925
939デフォルトの名無しさん:2012/01/02(月) 02:01:59.64
FFI 関連について質問です

C言語で構造体と、それを引数として受ける関数などを作りました(*.h、*.c)

*.hsc ファイル内でそのヘッダファイルを include し、
C言語で定義したのと同じ構造のデータ型を定義しました
そして、Storable 型のインスタンス宣言の中で、
#size や #alignment マクロを使って
Storable.sizeOf や Storable.alignment を定義しました

(#alignment マクロは下記のサイトのものをそのまま使いました
http://stackoverflow.com/questions/8350706/how-do-i-find-the-alignment-value-when-defining-a-storable-instance
ghc 7.2.2 ですけど、まだ組み込みマクロではないようですね)

そのあと、ghc2hs コマンドで *.hsc から *.hs を生成し、
また *.c をコンパイルして *.o を生成し、
それらを一緒に ghc でビルドしようと思います
(まぁ実際は、*.c のまま ghc に一緒に放り込んでも良いわけですが)

そこで質問なのですが、この場合、
*.c は ghc 付属の gcc、あるいは別に用意した同Var.の gcc でコンパイルしないと、
構造体のメモリマップが ghc2hs の解釈と(理論上は)合わないと思うのですが、
この認識は間違ってないでしょうか

正確に言えば、ghc の -pgmc オプションで指定したC言語コンパイラ、
hsc2hs の --cc オプションで指定したC言語コンパイラ、
そして *.c をコンパイルしたC言語コンパイラ、
この3つのコンパイラが同じ物でないと危険なのではないでしょうか
(たまたま、VC++ のコンパイラなどとその辺りの仕様が同じ場合もあるでしょうが)
940デフォルトの名無しさん:2012/01/02(月) 04:39:12.66
理論を否定する連中は自分の能力を過信してるようだが
そいつらも現場で役立たずであることには変わりない
941デフォルトの名無しさん:2012/01/02(月) 04:47:38.34
誰か声のでかい人や、口当たりの良い事をいう人に付いていくだけで
本当に良いのかどうか、今から考えた方が将来の為になると思われ。
942デフォルトの名無しさん:2012/01/02(月) 04:55:48.51
そこにハスケルがある
ただそれを楽しむだけ
ただ、それだけなのさ
943デフォルトの名無しさん:2012/01/02(月) 08:20:03.67
だけど関数型と副作用の問題って本当に解けるものなのか?
解けるときはどういう形で解けるんだ?
モナドはどこまでそれを解いたんだ?
944デフォルトの名無しさん:2012/01/02(月) 08:36:01.55
まず現状何が問題なのか定義してくれよ
そっからだろ
945デフォルトの名無しさん:2012/01/02(月) 08:54:08.83
>>943
ListとIOとMaybeは大体同じだということがモナドによって示された
つまりListが問題ないなら副作用も問題ないしnullポインタも問題ないと思われる
946デフォルトの名無しさん:2012/01/02(月) 09:33:13.90
同じだということを否定する連中は自分の能力を過信する
947デフォルトの名無しさん:2012/01/02(月) 10:49:17.93
>>939
構造体のレイアウトは、コンパイラが違えば異なる可能性があるし
同じコンパイラでも、コンパイルオプションによっても変わる可能性がある

構造体のサイズやレイアウトに依存したコードは、比較的大きな危険をおかしている、と思っている
実際に問題が起ることは少ないと思うけど
948デフォルトの名無しさん:2012/01/02(月) 11:36:03.29
関数型マトモに勉強してたら和田先生をdisるなんて考えられん。
どう考えてもモグリだわw
949デフォルトの名無しさん:2012/01/02(月) 11:37:17.46
>>945
それ、MonadどころかLISPのS式の時点で示されてるじゃんw
950デフォルトの名無しさん:2012/01/02(月) 11:54:20.89
>>948
京都の先生にSICPの訳をdisられた疑惑が浮上して以来2chでの権威はストップ安です
951デフォルトの名無しさん:2012/01/02(月) 12:19:02.82
>>950
disられたってどういうこと?
952デフォルトの名無しさん:2012/01/02(月) 12:26:28.49
モナドは中身はともかく、どう書けるかって話だと確かに関数型捨ててるでしょ。
特にdoを使って書いてると手続き型とほとんど変わらんし、似たようなスパゲティ化もしやすいし。
953デフォルトの名無しさん:2012/01/02(月) 12:30:08.48
>>948
和田(笑)
954デフォルトの名無しさん:2012/01/02(月) 12:54:56.37
>>951
http://togetter.com/li/215803
ここにまとめられてる湯浅先生の発言を、
キチガイが拡大解釈して必死に広めてるだけ。

キチガイ死ねよ。
955デフォルトの名無しさん:2012/01/02(月) 13:02:10.78
>>948
こういう人は具体的に何故モグリなのか全然説明してくれないから説得力が全くない
権威主義の人って大体そんな感じ
956デフォルトの名無しさん:2012/01/02(月) 13:29:14.03
>>954
なんで自分で噂に根拠与えちゃってるの?
そのままほっとけば単なる噂ですんだのに。
957デフォルトの名無しさん:2012/01/02(月) 13:43:07.49
クロージャーとかジェネレーターの辺りで完結するべきだった。
最近の関数型はだらだら引き伸ばしているだけ。
958デフォルトの名無しさん:2012/01/02(月) 13:44:07.71
>>956
根拠のない噂を広める罪がわからないゴミカスのようなキチガイは死ねよ。
959デフォルトの名無しさん:2012/01/02(月) 14:06:34.63
>>952
つまり、プログラマが式をどう考えるかや、コンパイラが式をどう扱うかではなく、
式をどう書くかによって関数型かそうでないかを判断しているのか、お前は

じゃあ、お前の言う関数型を捨てた書き方である

do {x <- getLine; putStr $ "> " ++ x}

これを

getLine >>= putStr . ("> " ++)

こう書いたら、関数型に戻るのか?


あともう一つ、本当にdo表記で似たようなスパゲティ化が起きやすいのか?
お前はdo表記で頻繁にスパゲティ化してしまっているのか?

スパゲティ化という事は、実行順序、Haskellなら計算順序が複雑に絡まるんだよな
それはdo表記だから絡まるのか? むしろdo表記の方が絡みにくくないか?
960デフォルトの名無しさん:2012/01/02(月) 14:14:42.26
>>959
前者に関しては、俺の感覚ではイエス。
後者に関しては俺の書き方が悪かった。
手続き的なコードが縦にダラダラ長くなるとぐちゃぐちゃに見えてキモいってだけなんだ。
961デフォルトの名無しさん:2012/01/02(月) 14:27:45.34
好き嫌いだけで一歩も進んでないのな
962デフォルトの名無しさん:2012/01/02(月) 14:33:23.75
>>945
どんなもの達をもってきても、それらが「大体同じである」と見る視点はいくら
でも作れるわけだが、ListとIOとMaybeは大体同じだというモナドの視点はそんな
ナンセンスな視点ではないのだね?
963デフォルトの名無しさん:2012/01/02(月) 15:05:16.12
>>962
> そんなナンセンスな視点ではないのだね?

「そんな」がどんなのを指しているのか曖昧だな
もっとはっきりと言ってくれ

大体同じであるという視点はどのような集合に対しても適用できるけど、
「どう同じなのかが論理的に説明できる」ことと、
その視点が応用する上で「役に立つ」こと、
この2点が無いとせっかくの発見も後の時代まで残らない

モナドはとりあえず今のところ残ってる
964デフォルトの名無しさん:2012/01/02(月) 15:12:39.30
>>960
お前の手続き的なコードが縦に「ダラダラ長くなる」原因は何だ?
それはdo表記のせいなのか?

お前はもしかして、自分のコードがdo表記で縦にダラダラ長くなったら、
その原因がdo表記にあると考えて、getLine >>= putStr . ("> " ++)
みたいな表記に直すのか?

それとも、キモいって言うだけで、後が続かず終わってるのか?

もし本当にそうなら、関数型や手続き型うんぬんの前に、
プログラムそのもの構造を学んだ方が良いぞ(SICP なんか読みやすくてお勧め)
965デフォルトの名無しさん:2012/01/02(月) 15:26:49.59
>964
縦に長くならなくても、
do {x <- getLine; putStr $ "> " ++ x}
のxも、関数型からすれば嫌だろ。
966デフォルトの名無しさん:2012/01/02(月) 15:37:53.22
>>965
では構文的な構造が似ている

let x = 3 in f x

これも「関数型からすれば嫌」なのか?
967デフォルトの名無しさん:2012/01/02(月) 15:53:19.26
>>963
最初からモナドと言わずにリストと言えば通じやすかったと思うが。
968デフォルトの名無しさん:2012/01/02(月) 16:15:00.92
>>967
すまん、言わんとしていることがよく分からん
俺の発言の何に対する意見なんだ?

通じやすかったというのは世間にか? それともここ一連の会話の誰かにか?
前者なら最初から委員会の連中はリストはリストと言っている(モナドは後付け)
後者なら誰だよそんな事言ったの

俺は >>962
ListとIOとMaybeは大体同じだというモナドの視点はナンセンスかどうか、に対して、
モナドはどう同じなのかが論理的に説明できており、かつ役に立つ視点である、
だからナンセンスではない、という自分の考えを謂わば逆説的に述べただけだよ
969デフォルトの名無しさん:2012/01/02(月) 16:34:00.46
>>953
それはスーフリの方。
>>959
do表記は手続きっぽくなるから、スパゲティーメイカーになりやすいかも。
スパゲティーにするならせめてカルボナーラかミートソースにしてくれよ。
970デフォルトの名無しさん:2012/01/02(月) 16:36:45.39
手続きっぽくなるとスパゲティになる理由は?
ちゃんと自分の言葉で説明できるか?
971デフォルトの名無しさん:2012/01/02(月) 16:39:56.99
>>968
俺の方が曖昧な言い方ですまんかった。
まず通じやすかったというのは世間に対してという意味だった。
「ListとIOとMaybeは大体同じだ」というときの共通性が、言ってしまえばリスト化
(多元化)にあるのだとすれば、モナドなどというよりリストと言った方が
伝わり易いと思ったわけだ。また曖昧なこと言ったかな。
(ナンセンスうんぬんの方はもういいよ)
972デフォルトの名無しさん:2012/01/02(月) 16:57:05.72
>>971
あぁ、なるほどな

> 「ListとIOとMaybeは大体同じだ」というときの共通性が、
> 言ってしまえばリスト化(多元化)にあるのだとすれば、

そう解釈してしまったのなら、

> モナドなどというよりリストと言った方が伝わり易いと思ったわけだ。

と言うのも十分に分かる、というか当然の反応だ

ただ残念ながら、少なくとも「それらに見いだした共通性はリスト化だ」
という解釈に関しては間違っている(多元化の意味は分からんが)

Wadler氏が List、IO、Maybeなどにどのような共通性を感じたのかは
Monad型クラスの関数に間接的に表れてはいるが、俺の力ではとても一言で言えない
それこそちゃんと知るには彼の論文や基になったMoggi氏の論文を読まないといけない

ただ、一般的なプログラマには「Monad型クラスの関数がモナドに共通する構造だ」
と言いうだけで応用上は十分だと思う
その共通構造をモナドが応用される前のListやIOに見いだしたと言っていい
973デフォルトの名無しさん:2012/01/02(月) 18:16:38.74
>>972
よくわかってないが、非決定計算、副作用、継続についてはMoggiの最初の論文の中で定式化されてる。

共通性といいたいところは多分普遍的性質のことだろうと思う。
普遍性の構造が共通している、というかそれぞれモナドで整理可能だからモナドなんだろう。
974デフォルトの名無しさん:2012/01/02(月) 18:20:45.89
>>970
デバッグが困難になる。
975デフォルトの名無しさん:2012/01/02(月) 18:25:00.71
>>973
普遍的性質って具体的には?
976デフォルトの名無しさん:2012/01/02(月) 18:27:24.82
モノイダル圏におけるモノイド対象が存在すること
977デフォルトの名無しさん:2012/01/02(月) 18:33:35.46
>>975
ある一つの性質から全体の性質が定まることで、
モナドの場合はそれが入れ子状になっている、ようだ。
正直そんな説明できるほどわかってない。
978デフォルトの名無しさん
>>974
それは全く説明になっていないと思うぞ

>>970 が訊いているのは手続きっぽくなるとスパゲティになる理由だ

[1] 手続きっぽくなる --> [2] スパゲティになる

原因 [1] によって結果 [2] になることを筋道を立てて説明してほしいのだろう

しかし、デバッグが困難になるというのは、さらにその先の結果だ

[2] スパゲティになる --> [3] デバッグが困難になる

デバッグが困難になるからスパゲティになるのではない([3]-->[2])
スパゲティだからデバッグが困難になる([2]-->[3])