5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :a36 ◆K0BqlCB3.k :2011/10/07(金) 12:27:25.71
haskell.org
ttp://www.haskell.org/

日本語サイト
ttp://www.sampou.org/cgi-bin/haskell.cgi
ttp://www.shido.info/hs/

過去ログ
関数型プログラミング言語Haskell
Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html
Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/
Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/
Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/
Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/
Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/
Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/
Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/
Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/

2 :a36 ◆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でスレが立つとか割と久々に見た

4 :a36 ◆K0BqlCB3.k :2011/10/07(金) 12:29:39.25
関連リンク
・GHC Wiki
 ttp://hackage.haskell.org/trac/ghc/wiki/TitleIndex

・A History of Haskell
 ttp://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/

・関数型関連の用語集
 ttp://sky.zero.ad.jp/~zaa54437/programming/concepts/

・本物のプログラマはHaskellを使う
 ttp://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/?ST=ittrend

5 :デフォルトの名無しさん:2011/10/07(金) 12:48:08.04
>>3
テンプレ書いてる途中に汚すな馬鹿

6 :a36 ◆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]

7 :a36 ◆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するしかないと思う。

43 :42: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とか自分が使いたくなったライブラリくらい。

55 :48: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な書き換えがないこと(純粋な関数型言語であること)には、
実用的な意味が全くない、と思ってるんじゃないかな。

並列実行とか最適化に全く興味がないプログラマなら、そう考えるんだろうね。

61 :48: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
あどけない話
http://d.hatena.ne.jp/kazu-yamamoto/touch


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
ラーメン食べたい

109 :Perl忍者:2011/10/13(木) 19:07:32.82
ここって童貞しかいなさそうだね

110 :Perl忍者: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.
という紹介になってた。

182 :179: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を法とする商群をなんとかすれば・・・ みたいなことを考えていて、思いついた

188 :186:2011/10/20(木) 23:29:22.83
>>187
C、java、rubyと来たのでmapは理解していたけど、手続き型言語には無い発想だと思う。
ついでに言うと、今なら手続き型言語ユーザーが何故、関数型言語を誤解するのか判る気がする。
「関数」「型」「評価」など、同じ字面でも関数型言語とは違う意味で説明される物が多い。

189 :SCHEME餃子 ◆8X2XSCHEME :2011/10/20(木) 23:52:51.12
要するに根本的なパラダイムが違うって話だよな

英語で話すときは英語で考えなきゃ滑らかに話せないって話は聞くけど、
Haskell で書くときは Haskell で考えなきゃいけないってことだろ

190 :デフォルトの名無しさん:2011/10/20(木) 23:53:46.97
>>186
いいかどうかは別にして、カウンタやインデキシングを避けて、
何でもリストで考えればそうなる。
そうするとリストの代数的操作でプログラミングするようになる。
Richard Bird先生の本を読むのがいいかもしれない。

191 :187: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の駄目な部分がわかるかも

196 :186: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
>>214
http://www.pearsoned.co.uk/bookshop/detail.asp?item=100000000010900

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要素一つのサイズ


237 :SCHEME餃子 ◆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
>>254
>>252

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パターンと組み合わせることものできるから、かなりの柔軟性が確保できるはず。

303 :302: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になる

306 :301: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言語のパーサーを作ろうとしているのですが、
他にこれは読んでおけ、このページは見ておけというものはありますか?

319 :318: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
どうでもいい。
好きなほう選べば良い。

413 :301: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
http://ja.wikipedia.org/wiki/%E8%87%AA%E5%B7%B1%E8%A8%80%E5%8F%8A%E3%81%AE%E3%83%91%E3%83%A9%E3%83%89%E3%83%83%E3%82%AF%E3%82%B9
にならないかなってね。

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

547 :545: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

これでよろしい?

555 :545: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 の意味が分からないです

556 :553:2011/11/15(火) 00:06:14.72
>>555
ソースは見た?
今見てきたんだけど、内部での使われ方はそんな複雑じゃなかったよ。
sfはdpSwitchの第3引数として渡した関数に与える値を生成する為に使用されるSF a b型の値。
Yampaを知らんから適切な説明ができん。

557 :デフォルトの名無しさん:2011/11/15(火) 01:16:49.61
>>546
いや、自分、基本バカだから
数学やりたかったんじゃなくて、+演算子を自分で作りたかっただけだから


558 :545: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
Perl忍者の顔が晒されてる
http://img.pics.livedoor.com/011/7/b/7b93db5444cf92f7cc91-LL.JPG
http://img.pics.livedoor.com/011/3/7/37af7e092c96cad7b14f-LL.JPG
http://img.pics.livedoor.com/012/5/1/51bc3004b6b4ec99063a-LL.JPG
http://img.pics.livedoor.com/012/a/6/a6cf04c9fe815ad28228-LL.JPG

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
>>653
>>652

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
頼むからこのスレでそんな質問しないでおくれよ

667 :665: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くらいは使ってれば大部分覚えることになると思うけど

674 :665: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プログラミング的には
「ある演算ができる箱」でしかないことは自然に分かる

685 :680: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やらで持ちまわるの
どっちが美しいのだろうか。

174 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)