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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
2デフォルトの名無しさん:2006/02/24(金) 03:03:28
関連スレ
・関数型言語Part IV
 http://pc8.2ch.net/test/read.cgi/tech/1083649982/
・【数学者】Haskellはクソ言語【オナニー】
 http://pc8.2ch.net/test/read.cgi/tech/1128011645/
・純粋関数型言語Concurent Clean
 http://pc8.2ch.net/test/read.cgi/tech/1075629340/
・関数型言語ML(SML, OCaml, etc.), Part 4
 http://pc8.2ch.net/test/read.cgi/tech/1133003340/
・Common Lisp, Scheme Part 14
 http://pc8.2ch.net/test/read.cgi/tech/1132275726/
・【入門】CommonLispその2【質問よろず】
 http://pc8.2ch.net/test/read.cgi/tech/1140012484/
・Emacs Lisp 2
 http://pc8.2ch.net/test/read.cgi/tech/1068467385/
・   F#相談室   
 http://pc8.2ch.net/test/read.cgi/tech/1054523453/
3デフォルトの名無しさん:2006/02/24(金) 03:04:19
関連書籍
・Introduction to Functional Programming Using Haskell
 http://www.amazon.co.jp/exec/obidos/ASIN/0134843460/
・Haskell: The Craft of Functional Programming
 http://www.amazon.co.jp/exec/obidos/ASIN/0201342758/
・The Fun of Programming
 http://www.amazon.co.jp/exec/obidos/ASIN/1403907722/
・The Haskell School of Expression: Learning Functional Programming Through Multimedia
 http://www.amazon.co.jp/exec/obidos/ASIN/0521644089/
・入門Haskell (2006年3月発売予定)
 http://item.rakuten.co.jp/book/1794880/
・ふつうのHaskellプログラミング (2006年5月発売予定)
 http://i.loveruby.net/d/20051129.html
4デフォルトの名無しさん:2006/02/24(金) 07:43:18
乙です
5荒川静香:2006/02/24(金) 07:55:49
>>1


まだ実感が、湧きません。
6デフォルトの名無しさん:2006/02/24(金) 10:03:35
  ,:'´//7,'  ,' .,' ,:'   !  } i  !', ':,  ':,    ゙:,.
  ,' / ,' {l.  ! {/   ,イ / }|  !|', !.  ',  ', ゙,
 ハ〃 ! !|  | |  ∠/ ,:'-ノ} /リ l ,ム.  !  } |!
  ハヽ、ゝ!|  l | ,:',;='ィ'、'´ ,'.ノ ノ.,;lノ=、l .,' ,' ,' ノ
    {   l l ', |'ヲi(_ノ.}  ´    i(ノ.}゙!ノ,:',:''´
     ',  h. ', ',゙、 ':゙゙_.ノ.     ':゙_ノ〃ン
     ':, { ',', ':,':,         丶   ,' l .}
      ヾ ':,':, ':ヾ、._    「´/    ,' | .,'   新スレおめでとうございます!!
        `ヾ-、`ヽ_    `´ _,.ィリ.ノ ,'
         リ';',ヾ|  ` ‐┬ ´ _ノノ,'/
          ヾ,、-- 、 _ |     ´ノ'
          f ヾ、..___ ヽ、 ー‐''
7デフォルトの名無しさん:2006/02/24(金) 10:05:16
                     _____
    / ̄ ̄ ̄ ̄\,,      /−、 −、    \
   /_____  ヽ    /  |  ・|・  | 、    \
   | ─ 、 ─ 、 ヽ |  |   / / `-●−′ \    ヽ
   |  ・|・  |─ |___/   |/ ── |  ──   ヽ   |
   |` - c`─ ′  6 l   |. ── |  ──    |   |
.   ヽ (____  ,-′   | ── |  ──     |   l
     ヽ ___ /ヽ     ヽ (__|____  / /
     / |/\/ l ^ヽ    \           / /
     | |      |  |     l━━(t)━━━━┥
8デフォルトの名無しさん:2006/02/24(金) 12:40:46
関数型ってどういう意味ですか?
メンヘラのボクにも分かるように説明してください
9デフォルトの名無しさん:2006/02/24(金) 14:13:02
prologはどうなったのさ?
シグマ計画
第5世代コンピュータ!
10デフォルトの名無しさん:2006/02/24(金) 14:40:03
>>9
ここってHaskell板じゃ...

Prologはまだ生きてるよ。
11デフォルトの名無しさん:2006/02/24(金) 15:39:47
12デフォルトの名無しさん:2006/02/25(土) 00:10:07
セキュアな大規模システム開発にHaskellは使われることだろう。
13デフォルトの名無しさん:2006/02/25(土) 09:29:28
Pivotal使えてる人いますか?
コンパイルはできるんですが,サンプル読み込もうとすると
エラー吐いて死ます.
Gtk2Hsかhs-pluginsのインストールに失敗してるのかなー?
14デフォルトの名無しさん:2006/02/25(土) 10:02:16
エラーメッセージは? panic! てやつ?

hs-plugins のインストールに失敗して、 ghci -package plugins なだけで
panic になったことはあるけど、それならコンパイルにも失敗するし違うかな。
15デフォルトの名無しさん:2006/02/25(土) 11:09:41
>>14
どうもです.エラーメッセージは以下のような感じです.

pivotal: /.../PIVOTAL025/Pic.o: unknown symbol `GraphicsziUIziGtkziGdkziPixbufData_zdfMArrayPixbufData_closure'
pivotal: user error (resolveObjs failed with <<False>>)

どうやら (System.Eval.Haskellの) evalのところでコケてるようなので
hs-plugin の問題かなとも思ったんですが
16デフォルトの名無しさん:2006/02/25(土) 15:00:41
unknown symbol なんで、 gtk か hsGtk のライブラリがうまくリンクできて
ないんではないでしょうか。
シンボルの名前的には hsGtk のインストールを疑った方が良いのでは。
17デフォルトの名無しさん:2006/02/25(土) 20:10:32
Haskellで作ったプログラムがフロッピーに収まり切りません。
何とかしてください。
18デフォルトの名無しさん:2006/02/25(土) 20:20:14
zipでくれ
19デフォルトの名無しさん:2006/02/26(日) 02:45:52
>>17
stripしてupxするとだいぶ減る
20デフォルトの名無しさん:2006/02/26(日) 10:51:35
ストリップ画像をうpすると何だって?
21デフォルトの名無しさん:2006/02/26(日) 11:53:08
>>20
だから、精嚢の内容物がだいぶ減るんだって
22デフォルトの名無しさん:2006/03/01(水) 11:53:45
簡単でセキュアに作れて、デブでとろいんですね
ハスケルって
23デフォルトの名無しさん:2006/03/01(水) 21:25:17
haskell 簡単< lisp.
haskell セキュア> lisp.
haskell 速い> lisp.
haskell デブ> lisp.

24デフォルトの名無しさん:2006/03/02(木) 03:11:31
>>23
>haskell 速い> lisp.
>haskell デブ> lisp.

マジレスすると、ここら辺は処理系/処理内容依存じゃないの。
25デフォルトの名無しさん:2006/03/03(金) 07:00:26
ハスケルの参考書くれ
和書で
26デフォルトの名無しさん:2006/03/03(金) 09:56:12
あと数ヶ月待て
27デフォルトの名無しさん:2006/03/03(金) 10:05:48
ままま待てないぃぃっっ!!
28デフォルトの名無しさん:2006/03/03(金) 11:57:43
やさしいHaskell入門 じゃ駄目なの?
わざわざ金出して本買う必要も無いような…。
29デフォルトの名無しさん:2006/03/03(金) 12:44:13
やさしいHaskell入門はちっともやさしくないのがなあ。わかってる人にはよ
く書けているドキュメントに見えるんだけどねぇ。

まあ、これから出る本があれに比べてやさしい保証はどこにもないわけだが。
30デフォルトの名無しさん:2006/03/03(金) 12:50:15
読者をPerlerに絞って書いてくれないかな・・・
31デフォルトの名無しさん:2006/03/03(金) 19:11:17
perlなんてもう忘れちまったよ。PythonかRubyユーザ向けに書いとくれ。
32デフォルトの名無しさん:2006/03/04(土) 00:12:37
http://item.rakuten.co.jp/book/1794880

売り切れてもうた!!
33デフォルトの名無しさん:2006/03/04(土) 00:49:48
おまえら期待しすぎ
34デフォルトの名無しさん:2006/03/04(土) 21:32:27
35デフォルトの名無しさん:2006/03/04(土) 22:14:53
>Haskellは、それをモノにした悟り体験のために勉強をしましょう。
>この体験は、その後のよりよいプログラマー人生での手助けとなるはずです。

ESR かよ。
36デフォルトの名無しさん:2006/03/04(土) 23:14:22
>>34
なんだこの表紙はw
37デフォルトの名無しさん:2006/03/04(土) 23:20:27
http://www.frgm.org/
でmonadiusが紹介されていますな。
38デフォルトの名無しさん:2006/03/04(土) 23:20:37
トリさん風のλだと信じたい...
39デフォルトの名無しさん:2006/03/04(土) 23:27:48
mycomか…
40デフォルトの名無しさん:2006/03/04(土) 23:49:03
団子にハスケル馬鹿にされた!
くやしい!!キーーッ!><。
41デフォルトの名無しさん:2006/03/05(日) 00:45:43
アセンブラは大事だぞ。
42デフォルトの名無しさん:2006/03/05(日) 01:10:49
最近HaskellでOpenGLの勉強をはじめたのですが、
CのglBegin()やglEnd()に相当する式がわかりません。
ハスケル階層ライブラリとにらめっこして色々試してみましたが、
さっぱりです。誰か偉い人、教えて下さい。
あとHOpenGLと(Cの)OpenGLの関数の対応表(?)みたいなのがあれば
ぜひ教えて下さい。お願いします。
43デフォルトの名無しさん:2006/03/05(日) 01:21:09
>>42
とりあえずチュートリアルは読みました?
44デフォルトの名無しさん:2006/03/05(日) 01:23:39
団子なあ。
フットワーク軽いのは凄いと思うが、1年後に期待なヤツだよなあ。
45デフォルトの名無しさん:2006/03/05(日) 01:43:14
>>43
フヒヒヒヒ! すいません!
読んでから出直してきます。英語の奴ですよね?
46デフォルトの名無しさん:2006/03/05(日) 16:54:47
やらしいHaskell入門キボン
47デフォルトの名無しさん:2006/03/06(月) 03:37:30
また萌え絵満載本か!
48デフォルトの名無しさん:2006/03/06(月) 08:58:56
>>47
レイジーたんがたらい回してる本なら買ってもいい
49デフォルトの名無しさん:2006/03/06(月) 09:03:47
>>7
ワロタ
なんか言えよw
50デフォルトの名無しさん:2006/03/06(月) 09:08:01
>>49
何も言わないのがネタ。詳しくは
http://hendora.com/dora_sp/siradora/siradora.htm
51デフォルトの名無しさん:2006/03/06(月) 23:02:07
この表紙はありえない

52デフォルトの名無しさん:2006/03/06(月) 23:05:02
俺は結構好きよ、こういうの。脱力系?
53デフォルトの名無しさん:2006/03/07(火) 12:30:58
54デフォルトの名無しさん:2006/03/08(水) 00:38:34
で、そのアオキとやらは期待できるのか?
55デフォルトの名無しさん:2006/03/08(水) 11:45:01
>>54
レビューに参加すればわかるんでね?
56デフォルトの名無しさん:2006/03/09(木) 16:22:33
Haskell Script
57デフォルトの名無しさん:2006/03/10(金) 00:27:26
http://d.hatena.ne.jp/kzk/20060309
HaSL: SL(1) in Haskell
58デフォルトの名無しさん:2006/03/10(金) 04:52:36
もっと議論したまえ
59デフォルトの名無しさん:2006/03/10(金) 14:39:54
すません、
do i <- j
  (k i l)
をdo無しで表現するにはどうすればいいのでしょうか?
60デフォルトの名無しさん:2006/03/10(金) 14:53:19
j >>= flip k l
61デフォルトの名無しさん:2006/03/10(金) 14:58:19
ありがとうございます。
[解決]
62デフォルトの名無しさん:2006/03/11(土) 01:09:20
C++とアセンブリとHaskellをマスターすれば万能になれる…
そんな気がする…
63デフォルトの名無しさん:2006/03/11(土) 01:45:11
>>62
そのうち一つでもすごいぜ
64デフォルトの名無しさん:2006/03/11(土) 03:55:04
ハスケルこそJavaスクリプトととって替わるべきだ!
ieは標準搭載しろ。
65デフォルトの名無しさん:2006/03/11(土) 05:15:56
Haskell Script
66デフォルトの名無しさん:2006/03/11(土) 08:28:23
はすけるとえむえるってどっちがつよいのよ、けっきょくのところはさ。
67デフォルトの名無しさん:2006/03/11(土) 09:59:56
68デフォルトの名無しさん:2006/03/11(土) 11:54:58
>>62
C++をマスターした時点でHaskellとSchemeとアセンブラとJavaをマスターしたも同然。
それだけC++のマスターは難しいってことだ。
69デフォルトの名無しさん:2006/03/11(土) 14:02:21
>>68
お前、HaskellとScheme知らないだろ?
70デフォルトの名無しさん:2006/03/11(土) 14:09:01
ムハッ
C++のマスターが難しいだって(藁
ものを知らんというのは面白いな。
71デフォルトの名無しさん:2006/03/11(土) 14:10:15
いや、そこは間違いないぞ。
問題は前半だ。
72デフォルトの名無しさん:2006/03/11(土) 14:13:47
ああ、前半だな。
コンパイルエラーは。
73デフォルトの名無しさん:2006/03/11(土) 14:22:04
リア中ばっかだなここ。
ゆとり教育の反動なのか義務教育でHaskellとはずいぶん難しいことやってるな。
74デフォルトの名無しさん:2006/03/11(土) 14:46:33
普及のためにはリア厨の存在が欠かせません。
75デフォルトの名無しさん:2006/03/11(土) 15:28:35
Haskellって所詮踏み台だろ?
理屈だけ覚えて実践は他の言語で。
76デフォルトの名無しさん:2006/03/11(土) 15:43:12
リア厨的に言うと、普通に最強だろハスケル。
何かのグランプリだろ?
77デフォルトの名無しさん:2006/03/11(土) 20:02:07
>>69
Boostだっけ? ライブラリ使って関数プログラミングやれるらしい。
そういう意味では>>68は正しいと思うぜ。
78デフォルトの名無しさん:2006/03/11(土) 20:09:06
ライブラリ関係なく
もともとC/C++は関数プログラミング言語なんだが。
79デフォルトの名無しさん:2006/03/11(土) 20:13:06
C++は難しいし、まともに使うには関数プログラミングの知識は必須だけど、
C++をマスターしたらHaskellもマスターしたようなもの、ってのは言い過ぎだろ。
80デフォルトの名無しさん:2006/03/11(土) 20:26:12
Boostのlambda見たときはもう笑うしかないとオモタ
81デフォルトの名無しさん:2006/03/11(土) 20:29:23
>もともとC/C++は関数プログラミング言語なんだが。
>もともとC/C++は関数プログラミング言語なんだが。
>もともとC/C++は関数プログラミング言語なんだが。

こんな事が後何年続くのでしょう...
82デフォルトの名無しさん:2006/03/11(土) 20:41:28
SchemeのS式の柔軟性とか動的性質はC++には難しいだろうな。
83デフォルトの名無しさん:2006/03/11(土) 21:03:29
>>77=78
お前、HaskellとScheme知らないだろ?
知らないなら黙ってろよ。
84デフォルトの名無しさん:2006/03/11(土) 21:08:51
>>83
お前、C++知らないだろ?
知らないなら黙ってろよ。
85デフォルトの名無しさん:2006/03/11(土) 21:09:23
> Boostのlambda見たときはもう笑うしかないとオモタ
boostのlambdaをみたときは、こんな小細工してラムダを
使いたいなら素直に関数型言語使えよと、アホかと思った。
86デフォルトの名無しさん:2006/03/11(土) 21:10:52
C++に代わるような低レベルの関数型言語がないんだからしょうがないだろ。
87デフォルトの名無しさん:2006/03/11(土) 21:13:25
>>84
むしろ、知らないのは77=78のようだがw
88デフォルトの名無しさん:2006/03/11(土) 21:14:39
そもそも「C++をマスター」にboostをマスターすることは入らないと思うぞ。
C++をマスターしてなおかつboostをマスターしないとダメってことだ。
89デフォルトの名無しさん:2006/03/11(土) 21:16:39
そろそろHaskellの話でもしませんか。
90デフォルトの名無しさん:2006/03/11(土) 21:16:43
それもlambdaがわかるだけw
到底Haskellはマスターしたことにならんだろw
91デフォルトの名無しさん:2006/03/11(土) 21:22:55
>85
というかいい加減C++なんか捨てたらどうだとオモタヨ
92デフォルトの名無しさん:2006/03/11(土) 21:24:32
C++オナニー野郎はどこへ行っても嫌われる。
本人にその自覚がないからさらにやっかいだよな。
9377:2006/03/11(土) 21:25:03
プログラミング言語の文法だけ解ればいいとしたら、凄く幸せなことだよな。
リファレンスひいたりしなくていいわけだ。

>>83
お前、日本語知らないだろ?
知らないなら黙ってろよ。
94デフォルトの名無しさん:2006/03/11(土) 21:30:22
>>93
ライブラリの使い方だけを解ればいいとしたら、凄く幸せなことだよな。
リファレンスをひくだけでいいわけだ。

C++ユーザって言語仕様やライブラリの使い方を理解して悦にいっている
人覆いね。

(C++ユーザ)∧¬(関数型言語ユーザ)のうち、ラムダ計算を理解している
人って何%ぐらいなんだろう。
95デフォルトの名無しさん:2006/03/11(土) 21:30:31
(主に政治的な理由によって)代替となる言語が無いから、
ああいう小細工をして頑張ってるわけです。
96デフォルトの名無しさん:2006/03/11(土) 21:31:12
Javascriptの代わりにHaskell使えるようにしてくだされ
9777:2006/03/11(土) 21:40:57
>>94
いや……俺はC++知らないよ。というか煽ってわるかった。ごめん。
ただ「C++でもそういうことが出来るらしい」ということは知っているけれど。
最近 Haskell をやりだしたんだが、コード書く時間1に対して
リファレンスひいてる時間が10ぐらいあるからそう表現したんだ。
98デフォルトの名無しさん:2006/03/11(土) 21:52:23
人間、向き不向きが在るからな。
99デフォルトの名無しさん:2006/03/11(土) 22:29:36
C++をマスターするって、普通は標準ライブラリをマスターするところぐらいまでしか
含まないだろ。
さすがに他のライブラリまで含めだしたらきりかない。
100デフォルトの名無しさん:2006/03/11(土) 22:36:14
>>99
Boost は次期標準なので、最近はここまで含めるのが普通。

また、Boost 自体の使い方はともかくBoost で使われてるような手法は
C++ の範囲だから、マスターというからにはそれらが使えることは要求したい。
101デフォルトの名無しさん:2006/03/11(土) 22:57:30
次期標準たって、採用されるのは一握りだろ。
まあ、今までなら1つも採用されてないけどなw
102デフォルトの名無しさん:2006/03/11(土) 22:59:20
ここで話題になったのはboost自体の使い方だし。それもlambdaだけw
103デフォルトの名無しさん:2006/03/11(土) 23:05:49
Haskellユーザーは熱いですね
104デフォルトの名無しさん:2006/03/11(土) 23:09:34
>>96
JavaScriptって聞いた話によると「Cの皮をかぶったLisp」らしいから、
Haskellユーザーは好きな人多いんじゃないかな。
Haskell好きはLispも好きな人が多いから。
105デフォルトの名無しさん:2006/03/11(土) 23:10:15
boostっつーても使われてるメジャーの大部分は技法はすでにSTLに
組み込まれている(組み込まれてないのはETとか)いてそれの応用
なので、ライブラリの使い方の話ではなく、ジェネリックプログラミング
の技法という意味ではboostを含めても含めなくてもそんなに
この話題については差がない。

どちらにしても、C++ユーザが関数型言語の深い知識があるとは
思えないけど。関数型言語の一部の表層だけでしょ。
STLを設計したアレックス・ステファノブは解っているかもしれないけど。

106デフォルトの名無しさん:2006/03/11(土) 23:14:58
まあ、lambdaがわかってるというだけじゃ、Haskellをマスターしたことにはならんわな。
モナドがわかってるというのならともかく。
107デフォルトの名無しさん:2006/03/11(土) 23:16:06
>どちらにしても、C++ユーザが関数型言語の深い知識があるとは
>思えないけど。関数型言語の一部の表層だけでしょ。
C++ユーザを一くくりにしてもしょうがないかと思われ。
俺がHaskellを勉強したきっかけもC++だし。
108デフォルトの名無しさん:2006/03/11(土) 23:17:31
今は、C++をマスターしたらHaskellをマスターしたことになるのかという話題なのだから、
そこはC++以外の知識は全く皆無のユーザーのことだろう。
109デフォルトの名無しさん:2006/03/11(土) 23:17:50
JavascriptはHaskellの対極にあるような気もする。
動的さとか、なんでも型変換できるとことか。
110105:2006/03/11(土) 23:18:34
訂正「C++ユーザ」→「C++しか知らないユーザ」
111デフォルトの名無しさん:2006/03/11(土) 23:22:15
「C++しか知らないユーザは決してC++をマスターできない」とか。

スレちがいだな。スマソ
112デフォルトの名無しさん:2006/03/11(土) 23:24:12
>>111
同じこと書こうとしてた。

C++ ってマルチパラダイムな言語だし、最近は Haskell の影響を強く受けてるから
きっちり理解するためには Haskell の知識は必須なんだよね。
113デフォルトの名無しさん:2006/03/11(土) 23:31:19
C++の知識の中にHaskellの知識が含まれるのであったとしても、
それは、「C++以外の知識」ではなく、「C++の知識」に含まれる。
114デフォルトの名無しさん:2006/03/11(土) 23:32:12
>>112
そのHaskellの知識って何のことか知らんけど、lambdaとかなら
Haskellをマスターしたことにはならんよ。
115105:2006/03/11(土) 23:34:07
113は日本語で書くとあいまいで意味が取れないんだけど、

「Haskellの知識はC++の知識の部分集合」



「Haskellの知識の一部はC++の知識の部分集合」

かどっち?前者なら賛同しかねるが。
116デフォルトの名無しさん:2006/03/11(土) 23:35:16
>>109
その部分は型推論なんかと似たところがありそうだけどね。
それに、関数型と言われることもあるという点では共通してるように、
関数型みたいな考え方に関する部分は似てるんじゃないかな。
117デフォルトの名無しさん:2006/03/11(土) 23:35:20
118デフォルトの名無しさん:2006/03/11(土) 23:37:08
>>115
前者の意味で言ってる人は皆無だろう。
まあ、前者を主張すべきところで後者の主張をしてしまってる間違った人は
いるかも知れんが。
119デフォルトの名無しさん:2006/03/11(土) 23:37:27
コンビネータライブラリとかかな。
120デフォルトの名無しさん:2006/03/11(土) 23:39:10
結局、「C++をマスターしても、Haskellの一部の知識を知ってるに過ぎない」でFA
12185:2006/03/11(土) 23:42:08
>>117
spiritは簡単なパーサを書くときにつかったことがあるよ。
便利でいいね。

>>120
それも「ごく一部」。
122デフォルトの名無しさん:2006/03/11(土) 23:42:58
C++をマスターしても、モナドや型クラスや再帰型なんかの知識はないだろうしなあ。
型推論とかも知らないだろうし。この辺はすぐわかるだろうけどね。
123デフォルトの名無しさん:2006/03/11(土) 23:46:23
「ライブラリ」の使い方も知らないだろうしなw
124デフォルトの名無しさん:2006/03/11(土) 23:47:47
>>122
最近の C++ の論文には、再帰型や型推論の話は出てきてます。
125デフォルトの名無しさん:2006/03/11(土) 23:48:21
それはC++をマスターすることには含まれないでしょう。
126デフォルトの名無しさん:2006/03/11(土) 23:51:33
またboostの話でスマンけど、再帰型みたいなのはrecursive_variant
というので実現できるな。boostのvariantはunionに近い。
127デフォルトの名無しさん:2006/03/11(土) 23:59:20
>>121
俺もspirit使ってパーサ書いたことある。
まぁ便利ではあるんだけど、Parsecと比べると面倒なことも多い。

記述量が多かったりするあたりや、ちょっと間違ったときのエラーメッセージの大洪水とか。
128デフォルトの名無しさん:2006/03/12(日) 00:00:17
spirit なんて実用になりますか?
他の手堅い方法に比べてどうですか
129デフォルトの名無しさん:2006/03/12(日) 00:01:01
>>127-128 C++プロパな話はboostスレでやろうぜ。ここは Haskell スレだ。
130デフォルトの名無しさん:2006/03/12(日) 00:01:24
unionやvariantとHaskellのデータ型を同一視されてもねぇw
131デフォルトの名無しさん:2006/03/12(日) 00:19:03
C++をマスターしたやつが、main = putStrLn "Hello World!"を見ても、
「なんでmainに代入してるんだ!」とか言い出すのがオチ。
132デフォルトの名無しさん:2006/03/12(日) 00:27:12
>>131
unsigned char main[] = { 0x82,0x10,0x20,0x04, ...
なんてコードもあるので,普通のユーザですらそんなことは言わない.
133デフォルトの名無しさん:2006/03/12(日) 00:40:00
意味わかってない
134デフォルトの名無しさん:2006/03/12(日) 00:51:35
>>133
>>132 は 『 「なんでmainに代入してるんだ!」とか言い出すのがオチ 』 に対する
反論なので,>>131 にどんな高尚な意味があろうとも関係ない.
135デフォルトの名無しさん:2006/03/12(日) 02:31:37
131は間違いだな。
C++プログラマは131を見ても、131がHello worldプログラムの全体で、
mainがmain関数にあたるということすらわからないみたいw
136デフォルトの名無しさん:2006/03/12(日) 07:03:07
boost::numeric::ublas::matrix とかって遅延評価してるね
137デフォルトの名無しさん:2006/03/12(日) 07:58:06
--------------------------ここまで読み飛した--------------------------
138デフォルトの名無しさん:2006/03/12(日) 11:22:07
wwww
boost::numeric::ublas::matrixでようやく遅延評価が出てくるのかよw
13968:2006/03/13(月) 08:41:45
ごめんwwww俺が悪かったwwwww

C++の強力なテンプレート機能を念頭においての発言だったが、
>>79の言う通り確かに言いすぎだったな。

>>99
boost/lokiに代表される変態ライブラリは、C++の言語仕様外のことをしているわけではない。
boostの変態さはすべてC++が持つ変態さである。

あと俺が言うマスターってのは「言語仕様を理解し使いこなせる」くらいの意味な。
C++においてそれがどれだけ難しいかと言ったら……
140デフォルトの名無しさん:2006/03/13(月) 09:19:26
>oost/lokiに代表される変態ライブラリは、C++の言語仕様外のことをしているわけではない。

その論法で行けば機械語最強だな(w
141デフォルトの名無しさん:2006/03/13(月) 12:15:30
ライブラリまで含めだしたらなんでもありじゃねぇか
ライブラリを全部マスターするのはそりゃ難しいだろ
それこそモナドや継続を実現するためのライブラリだって作れるだろうがw
142デフォルトの名無しさん:2006/03/13(月) 16:01:54
HaskellでプログラミングするときとC++でプログラミングするときでは思考のレベルが違う。
いくらboostをマスターしたと言ってもHaskellで思考できるとは限らない。boostにHaskellと同じような機能があったとしても。

ここでboostの話を出すのはもう勘弁して欲しい。
143デフォルトの名無しさん:2006/03/13(月) 18:04:58
ブーストってなに?
簡潔に二行で
144デフォルトの名無しさん:2006/03/13(月) 18:08:31
C++で近代的プログラミングをするためのライブラリ。
http://www.boost.org/
145デフォルトの名無しさん:2006/03/13(月) 18:25:29
ありがとうございました
146デフォルトの名無しさん:2006/03/14(火) 00:10:09
Haskell初心者です.

Haskellにevalみたいに動的に式を評価できるような仕組みってありますか?
147デフォルトの名無しさん:2006/03/14(火) 00:27:59
148デフォルトの名無しさん:2006/03/14(火) 00:34:17
>>147
ありがとうございました.
TextSS のWindowsXP(Professional)64bit化おながいします

もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
150デフォルトの名無しさん:2006/03/18(土) 21:06:30
.oO(haskellで書けということ??)
151デフォルトの名無しさん:2006/03/18(土) 22:00:36
Haskellをしって1週間、
初カキコ記念として
>About Haskell(A Short Introduction to Haskell)を 永田章人が勝手に翻訳したもの
という
http://web.yl.is.s.u-tokyo.ac.jp/~ganat/memo/aboutHaskell.html

>表計算ソフトを使ったことがある人は
>関数型プログラミングを 経験済みだと言えるでしょう
という一文に、関数とExcelねと、妙に納得したことを発表してみる・・・
152デフォルトの名無しさん:2006/03/22(水) 04:39:42
最近やたらと過疎化しているな。
153デフォルトの名無しさん:2006/03/22(水) 09:50:52
むしろこれまでがおかしかったんだと思う
154デフォルトの名無しさん:2006/03/22(水) 11:45:20
もうすぐ本がでるから犯人当てとかネタバレトークで盛り上がるかと
155デフォルトの名無しさん:2006/03/22(水) 16:54:49
ハスケりたいけどネットに繋がってないから環境がダウンロードできない。
156デフォルトの名無しさん:2006/03/22(水) 17:48:08
次々妙な言語が出てきては消えてゆくけど、
学ぶ価値はあるかい?時間の無駄?
157デフォルトの名無しさん:2006/03/22(水) 18:33:02
厨的に言うと、まさに地球最強らしいよ。
現時点で
158デフォルトの名無しさん:2006/03/22(水) 22:42:07
>>156
知的好奇心から学びたいならオススメ。
ある意味最強だ。

就職やキャリアアップとか仕事方面の足しにしたいなら
他にもやる事いっぱいあるだろう。
発想が広がるから時間の無駄とまでは言わないけれど。
159デフォルトの名無しさん:2006/03/22(水) 23:18:32
Haskellを許容できるほどに人類は豊かになったと言うことだよ
160デフォルトの名無しさん:2006/03/22(水) 23:36:04
Haskellを超える言語はHaskell'しか存在しない。
161デフォルトの名無しさん:2006/03/23(木) 04:40:06
LispとHaskellってどっちがいいの?
162デフォルトの名無しさん:2006/03/23(木) 04:55:09
Haskell
163デフォルトの名無しさん:2006/03/23(木) 04:57:37
誰か起きてる?
164デフォルトの名無しさん:2006/03/23(木) 13:27:53
ハスケルが業務標準になるまでに、どれくらい?
10年?
165デフォルトの名無しさん:2006/03/24(金) 07:43:32
来週出るHaskell本、いまいちっぽいな・・・。
http://book.mycom.co.jp/user/preview/4-8399-1962-3/index.shtml
166デフォルトの名無しさん:2006/03/24(金) 12:47:52
この本を街角で配ることから始めよう・・・
167デフォルトの名無しさん:2006/03/24(金) 14:38:13
>>165
日本語の本が出ただけでもいいじゃん
168デフォルトの名無しさん:2006/03/24(金) 15:33:04
ttp://i.loveruby.net/d/images/stdhaskell.png
こっちの情報はないか
169デフォルトの名無しさん:2006/03/25(土) 00:28:41
170デフォルトの名無しさん:2006/03/26(日) 02:08:52
例外とかは無いの?
171デフォルトの名無しさん:2006/03/26(日) 02:15:11
>>164
こなれた解説書(WEB含)が出てからかな・・
>>1のサイトも学術的には立派だけど、ちょっと敷居が高い

なんで、今度出る新刊に期待
172デフォルトの名無しさん:2006/03/26(日) 07:47:56
「萌えるHaskell!」で行くしかない
173デフォルトの名無しさん:2006/03/26(日) 12:17:21
>>170
あるよ。
174デフォルトの名無しさん:2006/03/27(月) 01:21:03
C++ より速くて、Perl より簡潔で、Python よりきちんとしていて、Ruby より柔軟で、C# より型が充実していて、Java より頑強で、PHP とは何の共通点もないものって?
175デフォルトの名無しさん:2006/03/27(月) 03:01:49
>>174
LISP じゃねえ?

#スレ的にはHaskellって云いたいが、コンパイラの枯れ具合を考えた
176デフォルトの名無しさん:2006/03/27(月) 04:00:26
>175
それ Autrijus Tang の文章だよ。
前にも見かけた気がするが、とりあえず次の YAPC の書き出しもコレだな。
http://tokyo.yapcasia.org/sessions/learning_haskell.html
お気にいりのフレーズなんだろうか。
177デフォルトの名無しさん:2006/03/27(月) 06:00:27
>C++より速くて
速くねーだろ。
あ、実行速度じゃなくて開発速度の事か。
178デフォルトの名無しさん:2006/03/27(月) 07:26:00
Cには負けるだろうけど、C++とはいい勝負なんじゃね?
179デフォルトの名無しさん:2006/03/27(月) 07:31:03
ttp://halogen.note.amherst.edu/~jdtang/scheme_in_48/tutorial/overview.html

Haskellのチュートリアルなのか、Schemeのなのか紛らわしいな・・・。
180デフォルトの名無しさん:2006/03/27(月) 10:18:34
rubyより柔軟か?
どの辺が?
181デフォルトの名無しさん:2006/03/27(月) 10:23:02
少なくとも動的な型と静的な型という点では、柔軟性は負けてるな。
そのかわり型が充実してて頑強なんだろうけれど。
182デフォルトの名無しさん:2006/03/27(月) 14:44:49
Prologみたいな論理型言語も結構柔軟なんだけどな。
遅いけど。
183デフォルトの名無しさん:2006/03/27(月) 16:20:02
Template Haskellを使うと結構柔軟性は増す……かも。
184デフォルトの名無しさん:2006/03/27(月) 16:59:02
そもそもプログラミング言語の柔軟性って何?
185デフォルトの名無しさん:2006/03/27(月) 17:05:17
>>184
プログラムからプログラムを操作できること
186デフォルトの名無しさん:2006/03/27(月) 17:21:08
>>184
俺も聞きたい
187デフォルトの名無しさん:2006/03/27(月) 17:30:35
>>184
恋人のように振る舞うこと
188デフォルトの名無しさん:2006/03/27(月) 18:18:38
>>174
つうか、型が充実してるって奴以外全部怪しくね?
しかも、Rubyより柔軟とかC++より速いとか例えあってても
あんまり自慢にならないし。
189デフォルトの名無しさん:2006/03/27(月) 19:29:56
ハスケルの本は出たかね?
190デフォルトの名無しさん:2006/03/27(月) 20:15:19
C == 三沢さん
191デフォルトの名無しさん:2006/03/27(月) 20:21:15
まあ、Haskellを褒めてることとPHPがバカにされてることだけはわかった。
192デフォルトの名無しさん:2006/03/28(火) 17:26:38
いや……だってPHPだしなぁ。
193デフォルトの名無しさん:2006/03/28(火) 19:02:30
Fun of Programming, Jeremy Gibbons, 2004, Palgrave Macmillan
http://www.amazon.co.jp/exec/obidos/ASIN/0333992857/

この本だれか読んだ?感想教えて。

194デフォルトの名無しさん:2006/03/28(火) 19:02:57
HaskellとPHPに共通点が1つもない?
へー。Haskellには変数や型がないのか。
関数も演算子もないんだな。
変わった言語なんだなHaskellって。
195デフォルトの名無しさん:2006/03/28(火) 21:12:10
変数はないよ全部関数
演算子も関数
196デフォルトの名無しさん:2006/03/28(火) 22:10:25
>>194-195
つまらん応酬はよそでやれ。
197デフォルトの名無しさん:2006/03/28(火) 22:20:13
>>193
Arrowの章はダウソできるよ。
ttp://www.soi.city.ac.uk/~ross/papers/fop.html
198デフォルトの名無しさん:2006/03/28(火) 23:11:40
>>195
関数がある時点でPHPと共通点があるな。
199デフォルトの名無しさん:2006/03/28(火) 23:23:44
Haskellは神が作りし言語

PHPは人が作りし言語

同じ土俵で語ること自体が不自然
200デフォルトの名無しさん:2006/03/28(火) 23:57:39
>>198
へー、PHPって関数あるんだ
201デフォルトの名無しさん:2006/03/29(水) 00:25:56
phpのそれは関数の皮を被った変なものですから、
202デフォルトの名無しさん:2006/03/29(水) 01:03:44
本来たぞ
203デフォルトの名無しさん:2006/03/29(水) 01:13:21
「関数と呼ばれているもの」があるという共通点はある。
204デフォルトの名無しさん:2006/03/29(水) 01:13:59
まあ、言語という時点で共通点なんだけどな。
205デフォルトの名無しさん:2006/03/29(水) 01:31:52
で?本の出来は?
206デフォルトの名無しさん:2006/03/29(水) 01:48:54
明日かってくるか……。
207デフォルトの名無しさん:2006/03/29(水) 08:47:54
14000円もする…
208デフォルトの名無しさん:2006/03/29(水) 08:57:17
FOPの方かよ
209デフォルトの名無しさん:2006/03/29(水) 11:00:11
クフース先生のアルゴリズムバイブルより高いじゃないか!
210デフォルトの名無しさん:2006/03/29(水) 12:53:29
クスース
211デフォルトの名無しさん:2006/03/29(水) 13:04:37
ふっはっは、ワタシがクスクス先生だ!
212デフォルトの名無しさん:2006/03/29(水) 18:30:37
で?本のできは?
213デフォルトの名無しさん:2006/03/30(木) 18:17:33
Haskell は Perl より簡潔と言いつつ、
Audrey Tang が Perl を使う理由ってなんなんだ?
214デフォルトの名無しさん:2006/03/30(木) 19:29:03
きっとコーディング時のブドウ糖消費量の違いによるものだろう。
215デフォルトの名無しさん:2006/03/31(金) 22:29:45
入門Haskell買ってきて読んだ。
できは悪くないと思うんだが、
付録にGHCのPrelude.htmlの訳を載せるならサンプルコードも付けて欲しかった。
あと練習問題の答えも。
216デフォルトの名無しさん:2006/03/32(土) 01:00:33
GUI版さめがめをHGL使って実装してあるけど、
Windows版のGHC 6.4.1ってHGLはまともに動かないよね。
標準添付でWindowsでも動かせるからHGLにしたって書いてるけど、
動作チェックはしてないんだろうな。
217デフォルトの名無しさん:2006/03/32(土) 01:32:37
quicksort のコードのあまりの美しさに感動。
その感動を誰かに伝えたくて思わずカキコ
218デフォルトの名無しさん:2006/03/32(土) 01:38:15
でもこれではメモリの消費云々のあとに
次のページにはC言語並のソースが
書いてあるんだけどな
219デフォルトの名無しさん:2006/03/32(土) 09:45:15
結局チューンするならCでいいじゃん。
220デフォルトの名無しさん:2006/03/32(土) 11:18:09
あと数十年したらメモリ消費云々いわれるコードを書いても
勝手に素敵ものにプログラム変換してくれる時代が来るんじゃねーの
221デフォルトの名無しさん:2006/03/32(土) 11:25:50
融合変換やMathematics of Program Construction等の研究がうまくいけば来るだろう。
222デフォルトの名無しさん:2006/03/32(土) 12:17:04
Shift_JISが使えない実装は糞杉。
俺はHugsと心中する。
223デフォルトの名無しさん:2006/03/32(土) 12:42:46
>>222
俺もそう思ってGHC.Handleのパッチを書いてたんだが、なんとなく放置中。
224デフォルトの名無しさん:2006/03/32(土) 14:14:45
>>219
おそらく50年後もそんな風に言われてそうなキガス
情報科学の人らは数学じゃなくて経済学を勉強するべきかもね。
225デフォルトの名無しさん:2006/03/32(土) 21:00:52
Haskellとひまわり
226デフォルトの名無しさん:2006/03/32(土) 21:03:15
入門Haskell読んだ。
基本的な要点は抑えられてると思う。
後半は説明が不親切なところもあったが。

それから、30頁7行目の
>thenとelseは同格なので同じインデントにする必要があります
は間違い。
227デフォルトの名無しさん:2006/03/32(土) 21:50:19
Haskell本、全体的に読者を突き放してる感じ。
webで簡単に予習してから読むのがちょうどいいかもしれん。

まあそれでも日本語の本が出たことはめでたい。
布教もしやすくなるってもんだ。
228デフォルトの名無しさん:2006/04/02(日) 00:23:32
本当に入門レベルで解説したら、Monadまで辿り着けないで終わると思われ
229デフォルトの名無しさん:2006/04/02(日) 01:44:29
索引のページ番号がめちゃくちゃだなぁと思ったらサポートページに修正版の索引がPDFで置いてあった。
230デフォルトの名無しさん:2006/04/02(日) 01:49:07
買う気無くした
231デフォルトの名無しさん:2006/04/02(日) 04:04:36
>>229
致命的だな……
232デフォルトの名無しさん:2006/04/02(日) 08:17:12
ダウンして印刷して貼りつけろよ
233デフォルトの名無しさん:2006/04/02(日) 09:49:07
ヒドス・・・
なんだそのド素人みたいなミスは
234デフォルトの名無しさん:2006/04/02(日) 10:05:24
索引なんて見ないからどうでもいい
235デフォルトの名無しさん:2006/04/02(日) 10:21:14
>>234
カワイソス
236デフォルトの名無しさん:2006/04/02(日) 11:04:22
購入者全員にPDF版ダウンロード可能にしてくれないと買う気しないな。
237デフォルトの名無しさん:2006/04/02(日) 11:07:39
238デフォルトの名無しさん:2006/04/02(日) 12:52:30
Haskellこそ文系プログラマをクチクする鍵だと思う。
239Rubyはどうよ:2006/04/02(日) 21:06:32
ハスケル

ハッスル

ちょとだけ似たもの同士

Perl6の開発でハスケルってのが使われてるんだよね?

PHPの次はハスケルが来るんか?〜Webプログラミング

…なわけねーか
240デフォルトの名無しさん:2006/04/03(月) 03:35:51
ハスケルは偏差値60以上の理系じゃないと満足に扱えないから
主流にはならないかもね。
馬鹿文系の体力勝負に迎合するものじゃないと
241デフォルトの名無しさん:2006/04/03(月) 03:41:24
Haskell信者になりに、門を叩きに来ました。
洗脳して下さい。
242デフォルトの名無しさん:2006/04/03(月) 07:06:23
青木さんは文系プログラマらしいけど?
243デフォルトの名無しさん:2006/04/03(月) 09:55:49
>>240
偏差値ってなんですか?
244デフォルトの名無しさん:2006/04/03(月) 10:09:45
統計学もマスターしていない人がプログラミングなんてしないで下さい。
ヘドが出ます。
245デフォルトの名無しさん:2006/04/03(月) 10:34:07
高卒ですが入門Haskellやってます^^
これはプログラミング入門者にはまったくもって薦められないですね
246デフォルトの名無しさん:2006/04/03(月) 10:38:55
で、生産性の高さを実証できた奴っているの?
生産性低かったら何の意味もないし。
247デフォルトの名無しさん:2006/04/03(月) 10:47:03
>>244
統計はデータがあってこそ、だよね。
248デフォルトの名無しさん:2006/04/03(月) 10:52:50
>>244
統計学をデータ処理の手法としてしか見ていないマスターには程遠い人
249デフォルトの名無しさん:2006/04/03(月) 11:10:03
HaskellってTabが面倒ですね。
250デフォルトの名無しさん:2006/04/03(月) 11:36:49
haskell-mode for emacsを使えって話ではなく?
251デフォルトの名無しさん:2006/04/03(月) 12:13:39
いや、俺は秀丸エディタだよん。
Eclipse3.1でPlugin使おうと思ってインストールしたけど、うまくいかなかった。
252デフォルトの名無しさん:2006/04/03(月) 13:01:40
vimは?
253デフォルトの名無しさん:2006/04/03(月) 13:53:19
WindowsなんでvimはおろかviもEmacsもありません。
秀丸とcmdでがんばります。
254デフォルトの名無しさん:2006/04/03(月) 14:03:25
調べずに聞くけど vim の haskell インデントのスタイルファイルで良いのある?
255デフォルトの名無しさん:2006/04/03(月) 14:16:08
>>244
マスターってなんですか?
256デフォルトの名無しさん:2006/04/03(月) 14:27:31
修士号
257デフォルトの名無しさん:2006/04/03(月) 14:28:17
どうしても書きたくなるやつが出てくると思っていた。
258デフォルトの名無しさん:2006/04/03(月) 15:57:26
この言語のユーザの9割は研究屋だと思う
259デフォルトの名無しさん:2006/04/03(月) 16:09:02
俺は元数学屋
260デフォルトの名無しさん:2006/04/03(月) 16:17:27
屋ってなんなの?
大学時代の研究室の講師も「僕は物理屋だから…」って言ってた。
261デフォルトの名無しさん:2006/04/03(月) 16:23:29
プロっていうこと
262デフォルトの名無しさん:2006/04/03(月) 16:33:47
プロっていうとそれで飯食ってなきゃ駄目なイメージがあるけど
俺はそれよりは弱く、得意分野がそれである、くらいで取ってる。
263デフォルトの名無しさん:2006/04/03(月) 16:53:33
アカデミックな専門分野に限定したイメージはあるな。
俺パチンコ屋だからとかあんま聞かないしw

それはそうと入門Haskell発売に対抗して
やさしいHaskell入門印刷したらすごい量になりましたよ。
264デフォルトの名無しさん:2006/04/03(月) 16:56:00
俺はケンカ屋だから・・・
265デフォルトの名無しさん:2006/04/03(月) 20:43:43
俺は洗濯屋です
266デフォルトの名無しさん:2006/04/03(月) 20:57:58
俺はあやや
267デフォルトの名無しさん:2006/04/03(月) 21:08:38
俺は餅屋
268デフォルトの名無しさん:2006/04/03(月) 21:09:31
俺はパン屋
269デフォルトの名無しさん:2006/04/03(月) 21:10:46
>>258
のわりにこのレベルの低さは一体何?
270デフォルトの名無しさん:2006/04/03(月) 21:11:51
オレは小室哲屋
271デフォルトの名無しさん:2006/04/03(月) 21:13:20
>>269
そこはラベルの低さと書くものだよ。
272デフォルトの名無しさん:2006/04/03(月) 21:50:14
バカばっか
273デフォルトの名無しさん:2006/04/03(月) 21:59:06
バカと天才は髪一重
274デフォルトの名無しさん:2006/04/03(月) 22:03:24
>バカと天才は髪一重
以外で自らのバカさ加減をフォローできないのか?
275デフォルトの名無しさん:2006/04/03(月) 22:55:47
Haskell はラの何活用ですか?>文系へ
276デフォルトの名無しさん:2006/04/03(月) 23:24:06
理系のギャグは面白くないという事のデモンストレーションですか?
277デフォルトの名無しさん:2006/04/03(月) 23:53:48
はすけて!
278デフォルトの名無しさん:2006/04/04(火) 02:00:41
じゃあシドは工学屋?
279デフォルトの名無しさん:2006/04/04(火) 20:58:00
ベース
280デフォルトの名無しさん:2006/04/04(火) 23:18:42
Ask Hell
281デフォルトの名無しさん:2006/04/05(水) 01:19:55
入門本読んだけどモナド分かりませんですたorz
282デフォルトの名無しさん:2006/04/05(水) 07:38:50
typeとnewtypeの違いがわかりません。
class定義する際には後者をつかうみたいなんだけど…
283デフォルトの名無しさん:2006/04/05(水) 07:39:01
284デフォルトの名無しさん:2006/04/05(水) 08:30:53
なんでモナドで定式化したんだろ。
ほかのアプローチは無かったんかな?
285デフォルトの名無しさん:2006/04/05(水) 10:28:47
「モナドの全て」の付録にあるコンビナートの例を図入りで説明すればよかったのに。
それだけわかれば十分使えるでしょ。モナド。
286デフォルトの名無しさん:2006/04/05(水) 12:59:36
>>282
typeは既存の型の別名を作る。単なる別名であって全く同じ型。だから、例えば、
type String = [Char]
と定義されているとき、
f :: String -> Int
という関数があったら、fを[Char]型の値に適用できる。

newtypeはdataと同じように、既存の型から別の型を作る。
newtype Nat = Nat Int
という定義は、
data Nat = Nat Int
という定義とほぼ同じ意味で、使いかたも同じ。
逆に言うと、newtypeはdataの制限されたバージョンといえる。
具体的には、データ構築子が一つしかなく、その唯一のデータ構築子が
引数を一つだけ取るような代数的データ型(つまり、フィールドが一つしかないレコード)を
実行効率を損なうことなく定義できるようにしたのがnewtype。

従って、オーバーヘッドを気にしないなら、newtypeを使う必要はない。
逆に、特殊な場合を除いて、フィールドが一つしかないレコードは、
全てdataの代わりにnewtypeを使って定義しても良い。
287デフォルトの名無しさん:2006/04/05(水) 14:24:35
フィールドが一つしかないか静的には分からないの?
288デフォルトの名無しさん:2006/04/05(水) 14:41:58
>>287
分かるけど、dataとnewtypeは微妙に意味がちがうから、最適化で変換するのは嫌なんだろう。
data D = D Int
newtype N = N Int

unD (D x) = True
unN (N x) = True
と定義すると、
unD undefined === undefined
unN undefined === True
289288:2006/04/05(水) 14:44:01
unD, unNって名前はうんこだった。ゆるしてくれ。
290デフォルトの名無しさん:2006/04/05(水) 18:45:18
>>286
ありがとうございます。
dataがseparated sumなのに対してnewtypeはcoalesced sumのような
感じでliftされないのですね。
コンパイル時にのみ存在するタグみたいなものでしょうか。
291デフォルトの名無しさん:2006/04/05(水) 19:29:56
質問です。

ワニさんマークの靴下をママが買ってくれたんですが、履いたときにマークは外側にあるのが正しいのか、内側にあるのが正しいのか分かりません。
教えてください。
292デフォルトの名無しさん:2006/04/05(水) 19:31:34
>>291
ワニさんマークはワンポイントだよな.なら,普通は外側だと思う.
293デフォルトの名無しさん:2006/04/05(水) 19:42:17
>>291
内側と外側の差異は、むしろ連続的な、程度の差なのではないでしょうか?
294デフォルトの名無しさん:2006/04/05(水) 20:16:11
いいえ、正しく履いたとしたら離散的な値です。
(左足のマークの向き,右足のマークの向き)として、
(左向き,左向き),(左向き,右向き),(右向き,左向き),(右向き,右向き)
の4つの状態が考えられます。
295デフォルトの名無しさん:2006/04/05(水) 21:16:43
>>294
いいえ、「ねじれ」や「重なり」も考慮に入れると、連続性という概念は欠かせないものとなります。
同様に、正しさというのも、私にとって正しい、あなたにとって正しくない、その程度の差なのではないでしょうか?
296Lisper:2006/04/05(水) 21:21:24
このプログラムは私にとっては正しいが、あなたにとっては型エラーだ。
297デフォルトの名無しさん:2006/04/05(水) 23:05:24
>>294

(左向き,左向き), (右向き,右向き)

はあるけど、

(左向き,右向き), (右向き,左向き)

はないですよね?
inside-out も含めるのでしょうか?
298デフォルトの名無しさん:2006/04/05(水) 23:45:05
型クラスのインスタンスにしたいけどdata宣言による
オーバーヘッドはやだ、ってときに使うもんなのかな>newtype
299デフォルトの名無しさん:2006/04/06(木) 00:21:00
>>298
>型クラスのインスタンスにしたいけど
他にも使い道はある。
モジュールから抽象型としてエクスポートしたいときとか、
再帰的な型を使いたいときとか、
もっと単純に、新しい型の表現がたまたま既存の型と同じときとか。
300デフォルトの名無しさん:2006/04/06(木) 02:31:07
>>288
>unN undefined === True
こうなっている理由はなんなの?
301デフォルトの名無しさん:2006/04/06(木) 02:55:15
>>300
一言でいうと、liftされないので、undefined≡(N undefined)だから。

かみくだいて言うと、構築子Nはコンパイル時に解決? されるので、
実行時の unN (N x) のパターンマッチにおいて、引数を (N x) の形に
簡約するまでもなく評価結果をTrueとするから。
302デフォルトの名無しさん:2006/04/06(木) 06:24:07
>>300
>290
303デフォルトの名無しさん:2006/04/06(木) 06:26:01
>>221
Mathematics of Program Constructionって何?
304デフォルトの名無しさん:2006/04/06(木) 06:48:36
305デフォルトの名無しさん:2006/04/06(木) 07:19:19
>>297

(左向き,右向き), (右向き,左向き)

はあるけど、

(左向き,左向き), (右向き,右向き)

はないですよね?

の間違いでは?
306デフォルトの名無しさん:2006/04/06(木) 07:22:15
>>304
日本語のページはほとんど引っかからないすね
307デフォルトの名無しさん:2006/04/06(木) 09:48:41
日本語がないなら英語を読んだらいいじゃない。
308デフォルトの名無しさん:2006/04/06(木) 11:09:06
英語も読めない底偏差値にはもともと使いこなせない言語です。
309デフォルトの名無しさん:2006/04/06(木) 11:33:50
自分で書く分には難しい言語じゃないと思うが。
ただ、Haskellで書かれたコードが難しくなる傾向があるのは事実かも知れん。
310デフォルトの名無しさん:2006/04/06(木) 11:37:28
ワニさんマークの靴下の香具師はどうなった?
311デフォルトの名無しさん:2006/04/06(木) 20:12:12
新しい職場で忙しいんです。
312デフォルトの名無しさん:2006/04/07(金) 08:25:09
新しい職場で忙しいからってママに靴下買ってきてもらわんでも…
313デフォルトの名無しさん:2006/04/08(土) 23:18:36
Haskellにおいて、圏論ってどんな位置づけなのでしょう?

1. 圏論も知らん奴が何でHaskellなんて使ってるの?
2. より良い(Haskellの)コードを書く上で役立つ
3. 背景にある理屈は理解できるが、プログラミング上は大して役に立たない
4. 全く役に立たない
314デフォルトの名無しさん:2006/04/08(土) 23:29:40
>>313
プログラム理論の道具として使われる圏論は 4 に近い 3。
ただしプログラム理論で研究をするつもりなら 1 。

代数幾何とかの道具として使われる圏論は、4。
315デフォルトの名無しさん:2006/04/09(日) 07:49:47
>>313
圏論とHaskellの距離は、圏論とAlgolやMLやLispやJavaやCとの距離と大差ないよ。
それらの個別的な言語の特徴を一般化する際に使うものだから。
316デフォルトの名無しさん:2006/04/09(日) 14:39:29
最近Haskellはじめました。
リストの処理をするとき、同じことをするのに例えば

(fは非モナド関数、xsはリスト)
l1 = [ f x | x <- xs ]
l2 = map f xs
l3 = liftM f xs
l4 = xs >>= return . f

などと書けるようですが、効率などに違いはあるんでしょうか?
317デフォルトの名無しさん:2006/04/09(日) 15:08:52
>>316
普通気にする程の違いはない。気になるなら計測してみるといいかと。以下与太話。

liftMの定義により、l3とl4は同等。
リストの>>=はconcatMapの事だから、l4は以下と同等。
l4' = concat $ map ((:[]) . f) xs
(ただし、多重定義の解決のオーバーヘッドがあるかも知れない)
従って、単なるmapに比べて余計な操作が入る。
l1は定義からするとl4と同等だけど、リストに特化した記法だから
最適化が入ってl2と同等になる可能性がある。
318デフォルトの名無しさん:2006/04/09(日) 15:38:33
数学に効率などない
319デフォルトの名無しさん:2006/04/09(日) 16:01:57
318 は無知
320デフォルトの名無しさん:2006/04/09(日) 18:07:11
なぁに。高々有限時間だ。
321デフォルトの名無しさん:2006/04/09(日) 19:47:25
(:[]) って顔みたい。
322デフォルトの名無しさん:2006/04/09(日) 20:07:23
(:D)| ̄|_
323デフォルトの名無しさん:2006/04/10(月) 11:27:16
Eclipseのプラグインfpですが、3.1.**2**じゃないと駄目みたいね。
3.1.2にしたらきっちり動きました。3.1は駄目です。
324デフォルトの名無しさん:2006/04/14(金) 19:54:52
結局入門Haskellは買いなの?
325デフォルトの名無しさん:2006/04/14(金) 20:43:10
>>324
おまえが何者かに依る。
326デフォルトの名無しさん:2006/04/14(金) 20:59:04
>>325
著者です
327デフォルトの名無しさん:2006/04/14(金) 21:26:17
著者って見本もらえるんじゃないのか。
328デフォルトの名無しさん:2006/04/14(金) 21:29:48
相手にすんな
329デフォルトの名無しさん:2006/04/14(金) 21:33:07
>>325
猛者です
330デフォルトの名無しさん:2006/04/14(金) 21:33:48
>>325
先行者です
331デフォルトの名無しさん:2006/04/14(金) 21:36:15
>>325
曲者です
332デフォルトの名無しさん:2006/04/14(金) 21:37:14
>>325
影武者です
333デフォルトの名無しさん:2006/04/14(金) 21:38:02
>>325
悪魔の使者です
334デフォルトの名無しさん:2006/04/14(金) 21:39:08
>>325
カチューシャです
335デフォルトの名無しさん:2006/04/14(金) 21:39:58
>>325
貴社の汽車で記者が帰社です
336デフォルトの名無しさん:2006/04/14(金) 21:41:19
>>325
第三者です
337デフォルトの名無しさん:2006/04/14(金) 21:42:37
>>325
読者です
338デフォルトの名無しさん:2006/04/14(金) 21:43:18
>>325
むしゃくしゃです
339デフォルトの名無しさん:2006/04/14(金) 21:45:26
>>325
生きとし生けるものです
340デフォルトの名無しさん:2006/04/14(金) 21:46:38
>>325
モナドです
341デフォルトの名無しさん:2006/04/14(金) 21:51:15
>>325
じゃあ私はウェブデザイナーになる!
342デフォルトの名無しさん:2006/04/14(金) 22:19:16
暫く見ていたが、このスレには何ひとつ役立つものがないな。
343デフォルトの名無しさん:2006/04/14(金) 22:21:33
ただ見てるだけで役立つスレの方が珍しいと思うが。
344デフォルトの名無しさん:2006/04/14(金) 23:06:09
ひさしぶりにレスがついたと思ったら…ツマンネ。
345デフォルトの名無しさん:2006/04/15(土) 13:26:15
で、結局入門Haskellは買いなの?
346デフォルトの名無しさん:2006/04/15(土) 13:49:57
>>345
おまえが何者かに依る。
347デフォルトの名無しさん:2006/04/15(土) 14:09:23
金があまっているなら買えばいいよ。
348デフォルトの名無しさん:2006/04/15(土) 15:03:50
>>346
愛読者です
349デフォルトの名無しさん:2006/04/15(土) 15:39:59
Haskellは入出力が不便かつ貧弱すぎるので実用には使えない。
所詮研究者のおもちゃ。
350デフォルトの名無しさん:2006/04/15(土) 15:53:49
実用ってのは、要するに金の為に書くコードってことだろ。
そんなもんはどうでも良い。
351デフォルトの名無しさん:2006/04/15(土) 16:01:49
むしろ俺にとっては研究こそ実用
352デフォルトの名無しさん:2006/04/15(土) 16:24:05
>>349
不便だとは思うが、貧弱ってどの辺が?
353デフォルトの名無しさん:2006/04/15(土) 16:28:41
日本語対応
354デフォルトの名無しさん:2006/04/15(土) 16:50:44
>>353
なるほど、サンクス。
355デフォルトの名無しさん:2006/04/15(土) 17:04:35
>>352
ファイルIOとかネットワークIOとか基本的な機能
356デフォルトの名無しさん:2006/04/15(土) 17:41:44
わざわざ関数型言語でI/Oなんてやらなくていいじゃん。
357デフォルトの名無しさん:2006/04/15(土) 17:44:39
>>356
I/O無しで何ができる?何もできないだろ。何もできなきゃ無いのと同じ。
358デフォルトの名無しさん:2006/04/15(土) 17:48:58
>>355
何が不満なのかよく分からん。
確かに環境に依存する機能を使おうと思うと面倒だが。

>>356
Haskell並に使いやすい手続き型言語があればそれでもいいがな。
359デフォルトの名無しさん:2006/04/15(土) 18:01:19
HaskellのIOがダメダメな例。

Haskell vs. Erlang, Reloaded
ttp://wagerlabs.com/articles/2006/01/01/haskell-vs-erlang-reloaded
360デフォルトの名無しさん:2006/04/15(土) 18:15:54
>>345
どんな人にとってもお勧めできない。
入門者にとっては説明が足りなさ過ぎるし、熟練者にとっては発展的内容が少なすぎる。
唯一の救いはAppendixにあるPreludeのドキュメントの日本語訳のみ。
361360:2006/04/15(土) 18:18:33
おそらく5月に出版されるであろう「ふつうのHaskellプログラミング」が本当のHaskell入門書になると思う。
362デフォルトの名無しさん:2006/04/15(土) 18:36:30
ふつうのHaskellプログラミングは買いなの?
363デフォルトの名無しさん:2006/04/15(土) 19:16:45
>>359
そのリンク先、3ヶ月程度の学習でHaskellで大規模アプリを作ろうとしたのが無謀だろ。
不勉強すぎて参考にならん。
364デフォルトの名無しさん:2006/04/15(土) 19:23:03
たまたま愛用しているめっちゃ便利で高機能なアプリが実はHaskell製だったなんて事を体験できる日がいつか来るのだろうか。
365デフォルトの名無しさん:2006/04/15(土) 19:37:09
銀行の勘定系がHaskellでした、とかもサプライズでね?
366デフォルトの名無しさん:2006/04/15(土) 19:37:50
>>364
つdarcs
367デフォルトの名無しさん:2006/04/15(土) 19:39:20
既に関数型言語を知ってる奴にとって三ヶ月は無謀とはいえぬと思う。
368デフォルトの名無しさん:2006/04/15(土) 19:51:35
たまたま試してみたアプリが Erlang 製だった事はあったなぁ。
普通のデスクトップアプリだったけど。
369360:2006/04/15(土) 20:05:43
>>362
話を聞くところによると、王道的に順序立てた言語本のようだね。
少なくともハズレはないと思う。
実物を見ていないので良書かどうかは答えられない。
370デフォルトの名無しさん:2006/04/15(土) 20:06:33


 著  者  乙

371デフォルトの名無しさん:2006/04/15(土) 20:12:58


 愚  者  乙
372デフォルトの名無しさん:2006/04/15(土) 20:40:42
>>361
じゃあ5月までにバイトしてお金つくっておきます^^
373デフォルトの名無しさん:2006/04/15(土) 21:01:18
perl6 は、haskellで動く。
haskellがすぐれていたので選ばれた。
374デフォルトの名無しさん:2006/04/15(土) 21:04:03
「Nightmare Haskell Programming」という本を書いたら買いますか?
375デフォルトの名無しさん:2006/04/15(土) 21:27:26
プログラムがruntime library内で落ちた時のdebugの悪夢を赤裸々に
つづってくれたら買う。stack dumpに何も情報もない恐怖とか。
376デフォルトの名無しさん:2006/04/15(土) 21:32:20
それは恐ろしい・・・
377デフォルトの名無しさん:2006/04/15(土) 21:35:12
習得に3ヶ月もかかるような言語が本当に優れてるといえるのか?
378デフォルトの名無しさん:2006/04/15(土) 21:38:10
誰が3ヶ月って言ったの?
379377:2006/04/15(土) 21:38:11
すいません誤爆しました
【数学者】Haskellはクソ言語【オナニー】
http://pc8.2ch.net/test/read.cgi/tech/1128011645/
380デフォルトの名無しさん:2006/04/16(日) 00:45:59
>>377
修得にコストがかかるというだけでは何の根拠にもならんだろ。

それとも、自転車とかあまつさえ自動車学校に通わなきゃいけない
いけない自動車よりも三輪車を愛用する人ですか。

381デフォルトの名無しさん:2006/04/16(日) 00:50:54
てめー三輪車なめんなよ?
382デフォルトの名無しさん:2006/04/16(日) 10:20:12
すいません。関数型マスターのかたがたにお伺いしたいんですが・・・
手続き型に比べて関数型が生産性高いといわれているのですが、それはどのようなところから着てるんでしょうか?
またそれはC++のテンプレート、それを応用したSTL,Boostなどの総称プログラミング、C#のGenerics,delegate、Reflection,CodeDOM、属性などを使って代替することは出来ないものなのでしょうか?
383デフォルトの名無しさん:2006/04/16(日) 10:40:15
384デフォルトの名無しさん:2006/04/16(日) 11:28:26
>>382
・Haskellは関数型言語です。
・関数型言語とは関数中心のプログラミング言語です。
・関数は入力に対して出力を返します。
・関数型言語には代入が存在しません。

Haskellのメリット
・プログラムが短く書ける
・型チェックが強力
・遅延評価
・代入がない(代入文はプログラムを煩雑にする。たとえば大域変数。オブジェクト指向でいうメンバ変数も規模をクラス内にとどめた大域変数のようなものである。)
・みんなが難しいと思っている言語なのでカッコイイ
385デフォルトの名無しさん:2006/04/16(日) 11:34:47
>>384 
この代入がないっていう部分が理解できてないんですね。手続き型と考え方が違うんだろうけどそれがわかってない。
オブジェクトという概念はもたないんですか?この場合オブジェクトとは状態をを持つ何かとします。
たとえば、押されている状態とそうでない状態のどちらかを持つチェックボックスとか。
逆にそういうものをHaskellで取り扱いする場合にはどうするんでしょう?
386デフォルトの名無しさん:2006/04/16(日) 11:46:50
>>385
レコード型とか使ったらできるんじゃない?
387デフォルトの名無しさん:2006/04/16(日) 12:15:52
>>384
「代入がない」といういい方は不正確だと思う。
必要ならいつでもIORef, STRefを使って代入を表現できる。
「不必要に代入を使うことを強制されない」と言った方がいいんじゃないか。
388デフォルトの名無しさん:2006/04/16(日) 12:17:10
つーかそこらへん関数型の肝なんだから興味あるなら入門記事でも読めや。
389デフォルトの名無しさん:2006/04/16(日) 12:26:41
>>387
それよりもむしろ 代入文がない の方が正しいかも?
390デフォルトの名無しさん:2006/04/16(日) 12:31:51
>>388 いい記事見つけられなかったのかもしれんし、自分の理解足りないと思うんだが代入とかしないでどう処理を進めてくのかがまったく理解できんのよ。
391デフォルトの名無しさん:2006/04/16(日) 12:33:03
>>390
つ モナド
392デフォルトの名無しさん:2006/04/16(日) 12:33:47
>>389
それはメリットなのか?
393デフォルトの名無しさん:2006/04/16(日) 12:35:32
>>390
まず、遅延評価は理解してる?

あと、プログラミングが「慣れ」であることは大体は共通の認識だろうけど、
とりあえずサンプルプログラムをたくさん見るべきだね。
394デフォルトの名無しさん:2006/04/16(日) 12:36:19
>>390
まず、入出力の絡まない処理が代入無しでできるのは分かるか?
395デフォルトの名無しさん:2006/04/16(日) 12:37:07
>>393
遅延評価は無関係かと。
396デフォルトの名無しさん:2006/04/16(日) 12:48:59
具体的なコードを例示して教えてくださいよ。
話のわからない人たちですね。
397デフォルトの名無しさん:2006/04/16(日) 12:51:15
>>394 理解できていないかも。
自分の中でプログラムのイメージは複数ある生成・消滅するオブジェクトの状態が、複数の実行スレッドによって変わり行くさまというものなので。
代入なしでオブジェクトの状態を変えることができるのか?という疑問が。
その考え方と関数型のものの考え方はまったく異なるんですかね?
398デフォルトの名無しさん:2006/04/16(日) 12:54:35
>>396
いつでも聞けば答えてもらえると思うなよ。
例が見たいなら自分で調べろ。
Haskellを広めたい人がHaskellで書いたプログラムをオープンソースとして公開しているはずだ。
399デフォルトの名無しさん:2006/04/16(日) 13:02:12
ダメだ。ここの住民生産性低杉。
400デフォルトの名無しさん:2006/04/16(日) 13:06:51
>>397
効率を考えない方法だと、状態の違うオブジェクトを毎回生成するような感じ。

### 手続き的なOOP
#oldobj = obj.copy
rtn_val = obj.do_something
#newobj = obj.copy
## newobj.state != oldobj.state

### 関数型
(newobj, rtn_val) = do_something obj
## newobj.state != obj.state
401デフォルトの名無しさん:2006/04/16(日) 13:12:55
>>397
個々のデータを、「生成・消滅するオブジェクト」と見る代わりに、
「単なる無個性な値」とみなす。
例えば、住所録を扱うことを考えると、手続き型言語では
「空の住所録オブジェクトを生成し、そこにfoo氏の情報を追加し、bar氏の情報を追加し、…」
と操作するのに対し、関数型言語では、
「「空の住所録にfoo氏の情報を追加したもの」にbar氏の情報を追加したものを、…」
というイメージで操作する。
この方法では、「空の住所録」と「foo氏の情報を含む住所録」と
「foo氏及びbar氏の情報を含む住所録」は全て異なる「値」で、互いに無関係。
402デフォルトの名無しさん:2006/04/16(日) 13:15:54
>>400 ・・・わからんです・・・
オブジェクトを毎回生成するのは元のオブジェクトを元に生成?
そうでないなら、どうやってそのオブジェクトの状態の整合性を保障する?
オブジェクトで考えないほうがいいのかな・・・



403デフォルトの名無しさん:2006/04/16(日) 13:22:22
>>401 その場合手続き型の考え方のほうが自然に思えるんですが・・・
関数型で住所録にfoo氏及びbar氏の情報を登録したい場合、「foo氏及びbar氏の情報を含む住所録」を作るとして、
今度それにあとからdog氏を追加したい場合、「foo氏及びbar氏の情報を含む住所録」というのはどこかにとっといてるんですよね?それを元に「foo氏及びbar氏及びdog氏の情報を含む住所録」をつくると。
だとしたら形式的には毎回オブジェクトを生成してるのかもしれないけれど、実質的には住所録オブジェクトに住所オブジェクトを追加すると変わらない?

404デフォルトの名無しさん:2006/04/16(日) 13:25:14
object is poormans closer!!!!!!!!!!!!
405デフォルトの名無しさん:2006/04/16(日) 13:31:50
>>402
>オブジェクトを毎回生成するのは元のオブジェクトを元に生成?

当然。そのためにobjを引数に取っている。


>>403
>実質的には住所録オブジェクトに住所オブジェクトを追加すると変わらない?

常に最新の住所録オブジェクトだけを利用し続けるのであればそう。
406デフォルトの名無しさん:2006/04/16(日) 13:32:32
関数の引数に住所録を持たせる。
407デフォルトの名無しさん:2006/04/16(日) 13:38:18
>>405 住所録を複数の場所(入力処理、削除処理、検索処理、表示処理)から扱いたい場合、結局は最新の状態である住所録をどこかに保持しないといけないんですよね?
だとしたら、それがどのように関数型のメリットであるプログラムが煩雑にならない?とむすびつくのでしょう?
それとも考え方がおかしい?
408デフォルトの名無しさん:2006/04/16(日) 14:00:03
>>407
確かに、「最新の住所録」という唯一の住所録があって、それを操作することにしか興味がない場合は、
「プログラムが煩雑にならない」は当てはまらないかもしれない。
409デフォルトの名無しさん:2006/04/16(日) 14:03:50
>>407
>だとしたら、それがどのように関数型のメリットであるプログラムが煩雑にならない?とむすびつくのでしょう?

全部が全部煩雑にならないように出来るというわけではないよ。
状態変化とかは手続き型で書いた方が簡単だし。

OOPではデータの特徴を括りだして共通した操作をクラスにまとめ上げるけど、
関数型では処理の共通部分を括りだしてより抽象化した関数にまとめる感じ。
410デフォルトの名無しさん:2006/04/16(日) 14:15:23
object is poormans closer!!!!!!!!!!!!
411デフォルトの名無しさん:2006/04/16(日) 15:09:14
http://www.ipl.t.u-tokyo.ac.jp/~hu/pub/teach/fp/src/
http://www.ipl.t.u-tokyo.ac.jp/~hu/pub/teach/fp/index.html

ここら辺見てみたらどう?実務アプリケーションじゃないけど。
412デフォルトの名無しさん:2006/04/16(日) 16:19:33
結局、明確な生産性の差を述べるレスはなしですか・・・
413デフォルトの名無しさん:2006/04/16(日) 16:26:19
>>412
研究中です。
414デフォルトの名無しさん:2006/04/16(日) 16:32:17
>>412
「聞けば答えが返ってくるような問題」なら、ググれといわれるだろう。
研究的価値があるのはそれ以上のことで、
たとえアイデアがあったとしても、研究も競争なのでこんなところでは書かないし、
すぐに思いつくようなことなら「聞けば答えが返ってくるような問題」になるから。
415デフォルトの名無しさん:2006/04/16(日) 16:34:32
>>414 説明できないのはわかってないから。これまでの質問でそんな研究のことなんか誰も聞いてないことぐらいわかるだろうに・・・
416デフォルトの名無しさん:2006/04/16(日) 16:35:57
なんて生意気な質問者なんだろう。
俺は放置するよ。
417デフォルトの名無しさん:2006/04/16(日) 16:41:26
>>412
そんなに生産性が気になるなら自分で勉強して試してみてくれ。
それだけの調査にも値しないと思うなら世間の評価が固まるまで待てばいい。
Haskellを学んでいて分からないところがあるならここで聞いてくれれば喜んで手伝うが、
生産性の高さを自慢するような芸当は少なくとも俺にはできん。
418382:2006/04/16(日) 16:41:33
>>415は自分じゃないです。
419382:2006/04/16(日) 16:42:22
>>412
420デフォルトの名無しさん:2006/04/16(日) 17:52:18
誰だよ、関数型言語を使うと生産性があがる、なんて宣伝した奴は。
関数型言語は他にはない高度な抽象化機能を提供する、とでも言っておけば良かったのに。
421デフォルトの名無しさん:2006/04/16(日) 17:59:29
誰も、手続き型との違いを言えません。本当にありがとうございました。
422デフォルトの名無しさん:2006/04/16(日) 18:00:28
>>420
とりあえず胡先生は、そう言ってた。
423デフォルトの名無しさん:2006/04/16(日) 18:00:28
そもそも違いなど尋ねられていないわけだが。
424デフォルトの名無しさん:2006/04/16(日) 18:02:57
生産性が高い→違いがあることから生じる。
読解力だかめとこうや。
425デフォルトの名無しさん:2006/04/16(日) 18:10:09
>>424
論法がおかしい。
違いを挙げろというなら簡単だ。
それらの違いのうち、何が生産性の差をもたらすかという質問はまた別の話だ。
426デフォルトの名無しさん:2006/04/16(日) 18:11:41
>>425 すまん。それらの違いのうち、何が生産性の差をもたらすかという質問にしてくれ。
427デフォルトの名無しさん:2006/04/16(日) 18:13:46
「Productivity Haskell」という本を書いたら買いますか?
428デフォルトの名無しさん:2006/04/16(日) 18:29:17
>>382
やろうと思えば大体は代替出来る。
429デフォルトの名無しさん:2006/04/16(日) 18:36:40
>>428 それは、CでC++みたいなクラスをまねるようなもので作りやすさでは段違いということなんでせう?
430デフォルトの名無しさん:2006/04/16(日) 18:43:29
根拠のない生産性を強調しすぎると、
RubyやCurlみたいな立場になるぞ。

せいぜい面白い言語です、にとどめておけばアンチも出ない。


こんなこと今更言っても既にRubyの道を辿っているようにしか見えない。乙。
431デフォルトの名無しさん:2006/04/16(日) 18:44:17
>>429
書きやすいということだけではなく、エラーチェックとかのデバッグ面でも段違いだと思う。
432デフォルトの名無しさん:2006/04/16(日) 19:01:25
>>426
考えてみた。あまり当てにしないでくれ。括弧内はそれを可能にする言語要素。

1.抽象化の能力
分離できる概念はかなりの確率で分けて定義できる。(代数的データ型、遅延評価)
共通部分のある処理はかなりの確率で共通化できる。(高階関数)

2.コードの簡潔さ
不要なものを書く必要がない。(変数の値が不変であること)

3.良い設計をencourageする(代数的データ型、第一級の関数)
自信無し。気のせいかも知れない。

で、それぞれC++と比較してみると、
1.はほぼ同等。ただしC++のコードは2.を犠牲にしやすい。
2.は圧倒的にHaskellが有利。
3.(不明)
433デフォルトの名無しさん:2006/04/16(日) 19:19:08
C++のテンプレートって展開が停止するかどうかっていう判定が不可能らしいね。
434デフォルトの名無しさん:2006/04/16(日) 19:30:11
17回でちょんぎっていいことになってるんでコンパイラは困らない。
ユーザは困るが。
435デフォルトの名無しさん:2006/04/16(日) 19:31:11
フィボナッチ書けるだろ
436デフォルトの名無しさん:2006/04/16(日) 19:32:50
だからここでC++の話をするなと
437デフォルトの名無しさん:2006/04/16(日) 19:33:48
>>432
ちょっと聞いてもらえます?
ヒドイんです…。今の彼とは、もぉ〜えっちしたくないんです。
なにがヒドイって、めっちゃくちゃイクの早いんです。
どんなに頑張っても3分間…3分間ファッキングですよ(>。<)
「絵里のアソコが物凄い喰いついてくるんだ」って言うから
私のせいなのかもしれないけど、このままじゃ困っちゃう!
ハマチだって刺身にされても3分間以上は生きているのにね。
私だってもぅハタチ、喰いつくなら美味しいモノが食べたいよ。
3分間でイッてもいいけど、せめて早く動いて欲しいのマイドリーム。
速くか長くか、2者選択のけなげな私にリスペクト。

あなただったら美味しい思いが出来るかな?
試してみたいな。。。
438デフォルトの名無しさん:2006/04/16(日) 19:36:56
>>437
彼に遅延評価してもらえ。
実際に評価するまでは速く動くだろうよ。
439デフォルトの名無しさん:2006/04/16(日) 19:54:03
>>437
eagerの限界だな
440デフォルトの名無しさん:2006/04/16(日) 19:55:09
ありがとう。
やってみたけど、正格性解析されて一気に評価されちゃいました。。。
441デフォルトの名無しさん:2006/04/16(日) 20:00:41
>>440
そりゃ、あなたが解析しやすい、単純な女だからさ。
442デフォルトの名無しさん:2006/04/16(日) 20:42:45
ネタはネタスレで
443デフォルトの名無しさん:2006/04/16(日) 20:46:30
ネタはネタスレで
444デフォルトの名無しさん:2006/04/16(日) 20:46:58
ネタはネタスレで
445デフォルトの名無しさん:2006/04/16(日) 20:50:45
ネタはネタスレで?
446デフォルトの名無しさん:2006/04/16(日) 21:04:17
このスレのPart1の過去ログは読んで役に立った。
今のスレは役に立たない。
447デフォルトの名無しさん:2006/04/16(日) 21:15:52
>>432 2.は状態がないということに関連するの?
448デフォルトの名無しさん:2006/04/16(日) 21:19:06
>>446
自分が役に立とうという気はないらしいな
449デフォルトの名無しさん:2006/04/16(日) 21:21:15
>>432
これ読んだか? http://www.sampou.org/haskell/article/whyfp.html

なんで 1.はほぼ同等なんだ?C++で持ち運んで代入したりできるものといったらプリミティブぐらいだろ?
もっと高位の抽象化の話ならBASICやアセンブラでもできるぞ?

比較するんならC++みたいなメモリリークが起こるバキーな言語じゃなくてJavaとかの方がまだましだと思うんだが。
450デフォルトの名無しさん:2006/04/16(日) 21:30:48
>>447
新しいインスタンスを得るのにわざわざnewしたり、既存のものをcopyしたりするのは面倒。
それから、Haskellのコードが簡潔になる傾向がある原因の一つとして、
Haskellでは繰り返しを表現するのに明示的な再帰ではなくリスト操作を使うことが多いんだが、
そういうときリストをサクサク使い捨てることができないととても不便。
451デフォルトの名無しさん:2006/04/16(日) 21:33:10
>>449
>なんで 1.はほぼ同等なんだ?C++で持ち運んで代入したりできるものといったらプリミティブぐらいだろ?
ユーザー定義型を持ち運んだり代入したりできる。
書き忘れてたけど、>>432で「C++」と言ってるのは
Boost(や、場合によってはFC++)などのライブラリを十分活用した場合の話。
452デフォルトの名無しさん:2006/04/16(日) 21:40:34
Boostには、例えば次のものが含まれている。
function 第一級の関数
optional Maybeに相当
variant 代数的データ型に相当
lambda 無名関数を構築するためのコンビネータライブラリ 関数の部分適用もできる
tuple タプル
iterator 遅延リストのようなもの

>比較するんならC++みたいなメモリリークが起こるバキーな言語じゃなくてJavaとかの方がまだましだと思うんだが。
俺はJavaは詳しくないんだが、上に挙げたようなライブラリは用意されているんだろうか。
453デフォルトの名無しさん:2006/04/16(日) 21:45:06
なんか賑わってますね。
ようやくhaskellの真の実力が世間に認知され始めたのかな?
454デフォルトの名無しさん:2006/04/16(日) 21:50:54
>>449 C#ならどう?
455デフォルトの名無しさん:2006/04/16(日) 22:11:03
あんな本でも、日本語の本の影響は大きいんだな。
むしろ、あんな本だから影響が大きいのか。
456デフォルトの名無しさん:2006/04/16(日) 22:24:40
>>453
ごめんなさい。
はじめの方で自演していました。
あまりに人が少なかったから。
457449:2006/04/16(日) 22:25:10
真面目なスレですね。通りすがりで後ろのほうだけ読んだせいで煽り気味の文章を書いてしまったのでフォローします。

C++でアルゴリズムや型を抽象化するには必ずクラスやテンプレートを定義しなければならない。

関数型言語の場合は、とりあえず書き始めてアルゴリズムができてきたらその部分をコピーしたり必要ならクロージャに入れて外で使うなり関数内で移動するなり割と簡単にできる。

関数の引数が増えた、とかローカル変数を共有したくなったりしたら、その時点で型を作るなり言語の抽象化機能を使う。(これ自体はC++でもできる)

型の実装を変更しても、ML以降の関数型ならアルゴリズムの実装の変更に対して型を推論させながら修正できるから、わりとスムーズに移行できる。インタプリタがあることが多いのでその場合はリターンも早い。

(つづく)
458449:2006/04/16(日) 22:26:14
(つづき)
カリー化その他の抽象化能力の話もいろいろありますが、こういう感じで関数型言語は書きながら抽象化を進めていくのが容易だ、と言えると思います。
この話はC、C++(Boost含む)、Java、C#、Basic、その他手続き型言語とML以降の関数型言語との比較に於て言える内容でしょう。

>比較するんならC++みたいなメモリリークが起こるバキーな言語じゃなくて
これがまずかったみたいですね。煽るつもりはありませんので。
459449:2006/04/16(日) 22:29:52
読み返したら口調が変わりすぎて気持悪いから自分でツッコミ入れとく
460デフォルトの名無しさん:2006/04/16(日) 22:32:35
>>459
  ( ゚д゚)
_(__つ/ ̄ ̄ ̄/_
  \/    /

  ( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_
  \/    /
461デフォルトの名無しさん:2006/04/16(日) 22:37:09
こっちみんな
462デフォルトの名無しさん:2006/04/16(日) 23:05:32
  ( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_
  \/    /

 (゚д゚ )
_(__つ/ ̄ ̄ ̄/_
  \/    /
463432=451=452:2006/04/16(日) 23:07:55
>>457
結論は分かったけど、例が全然理解できない。
特に、関数型言語でできてC++で出来ないことと、
型推論がコードの修正にどう影響するかがわからない。
良かったら解説してもらえないだろうか。あるいは参考文献でも。
464デフォルトの名無しさん:2006/04/16(日) 23:34:52
使ってみりゃわかるよ。
465デフォルトの名無しさん:2006/04/16(日) 23:46:00
5000行位は書いたんだが…
466デフォルトの名無しさん:2006/04/17(月) 00:05:44
50000行ぐらい書いてみろ。
467デフォルトの名無しさん:2006/04/17(月) 00:12:08
違いという話では、C++には
パターンマッチは流石にねーだろ。
468デフォルトの名無しさん:2006/04/17(月) 00:13:18
>>464 ちょっと興味はあるんだけど、使ってみていじくるまで今元気じゃない・・・orz
469デフォルトの名無しさん:2006/04/17(月) 00:14:39
>>467
そういう話をすると、どうせBoostでどうのとか信者が言い出すんだろ。
470デフォルトの名無しさん:2006/04/17(月) 00:27:06
>>467
boost::variantにapply_visitorってのがある。

すごく面倒だが。
471デフォルトの名無しさん:2006/04/17(月) 00:44:48
HaskellはHaskellコンパイラーを書くための言語(ニヤリ
472デフォルトの名無しさん:2006/04/17(月) 01:47:00
ム板でこれだけコードの出ないスレも珍しい。
473デフォルトの名無しさん:2006/04/17(月) 02:08:53
コード要りません。理論だけで十分です。
474449:2006/04/17(月) 02:24:00
>>463
ライブラリで関数型言語をエミュレートできることと、関数型言語であるということには遥かにへだたりがあります。
Boostで関数型の振舞いができても、C++のコアに関する細かい知識が無いと結局使いこなすことはできないでしょう。
Boost氏の意見は自分でクラスやテンプレートを定義しないという前提でしか成り立たないのではないでしょうか。

>>464を言わないために言葉で説明してみたけど、これ以上言葉だけの説明は無理に思えます。私も464に同意です。

449はMLの人間でC++ vs 関数型言語にレス付けただけなのでこれで消滅します。すんません。

参考書が示せないので、何かプログラムのテーマを考えておいてください。Haskell初心者で参加します。
475デフォルトの名無しさん:2006/04/17(月) 02:36:08
名無しに戻りました。
>>474
木を使うアルゴリズムが分りやすいんでないだろうか。
そんでBoost氏がC++で書いてくれるのか?
プログラムの過程を示すってコードに文字数が要りそうだけど・・・
476デフォルトの名無しさん:2006/04/17(月) 05:51:47
>>399
このスレよりもここの作者にメール投げた方が早いよ
http://homepage3.nifty.com/Aransk/contents2.html
477デフォルトの名無しさん:2006/04/17(月) 22:14:58
木を使うアルゴリズムなんてほとんど知らないんだが…
いちおうこんなのを考えてみた。
data Bound a = Inclusive a | Exclusive a | Unbounded -- 範囲の境界
type Range a = (Bound a, Bound a) -- (下限、上限)
data RangeMap k a =... -- kの範囲にaの値を対応させる写像。木で表現される。平衡木だとなおよい。
empty :: (Ord k) => RangeMap k a -- 空の写像
insert :: (Ord k) => Range k -> RangeMap k a -> RangeMap k a --既存の写像を部分的に上書き
update :: (Ord k) => Range k -> (a -> Maybe a) -> RangeMap k a -> RangeMap k a --既存の写像を部分的に更新
lookup :: (Ord k) => k -> RangeMap k a -> Maybe a

>そんでBoost氏がC++で書いてくれるのか?
いつのまにかBoost氏にされている訳だが。
「書きながらの抽象化」を示してくれるというなら頑張って書きますぜ。
478デフォルトの名無しさん:2006/04/17(月) 22:17:34
ネタ: DOM風の木を走査する

・ノードはテキストもしくはエレメント
・エレメントはタグ文字列と子ノードからなる

とりあえず型を定義
data Node = Text String | Element(String,[Node])
deriving (Eq,Show)

・再帰型の中にリスト(子ノード)があると適度に複雑な気がした。
・実はHaskellで相互再帰型の定義の仕方がわからなかった。
・Element a b ではなくて Element(a,b)にしたのはサンプル木を書くときに
Element("html",
[Element("head",
[Text "foo",
Element("meta", [])])])
のように途中で改行してもエラーにならないというコーディングの都合だけの理由。

ステップ:
1 左・深さ優先前順序、いわゆる文書順序でノードを訪れるアルゴリズムを書く
2 左右の順序、深さ・幅の優先順位、前・中・後の順序を変えつつアルゴリズムを書換えていく
3 木の構造を定義しなおして書換える

2の途中である程度見えてくる気がするナァ
479デフォルトの名無しさん:2006/04/17(月) 22:39:05
>>447
もう皆どうでもよくなったんじゃないかと思ってたら被ってしまった。
447を見てもすぐには理解できません。Haskell文法のAAの出現を予感。
BoundのInclusive/Exclusiveはどういう意味ですか?
Boost初めて覗いたけど面白そう。
Boostでも再帰型が定義できるんですか?かなり見てみたいです。

でも478でインデントされなかったのは何故だろう?
480デフォルトの名無しさん:2006/04/17(月) 22:43:36
481デフォルトの名無しさん:2006/04/17(月) 22:48:00
>>479
>BoundのInclusive/Exclusiveはどういう意味ですか?
半開区間(0, 4]を(Exclusive 0, Inclusive 4)と書けるといいな、と。

>でも478でインデントされなかったのは何故だろう?
HTMLの仕様と思われる。&nbsp;を半角スペースの代わりに使うといいかと。
482デフォルトの名無しさん:2006/04/17(月) 22:52:20
もしかして半角はインデントされないってこと?

  全角インデント
半角インデント

kita使ってるけど プレビューでもインデントされない。
kitaと板とどっちがおかしいんだろ
483デフォルトの名無しさん:2006/04/17(月) 22:53:10
>>481
ありがとう
484デフォルトの名無しさん:2006/04/17(月) 22:56:48
firefoxで試してみる。
  半角インデント
485デフォルトの名無しさん:2006/04/17(月) 22:58:28
        残念でした。
486デフォルトの名無しさん:2006/04/17(月) 22:59:17
>>484
プレビューと間違えた。しっかり&nbsp;入ってます
487デフォルトの名無しさん:2006/04/17(月) 22:59:27
パチンコ&スロット解析用ソケット

メイン基盤上のチップLE2080,2280,4280のプログラムが
市販品のロムライターで読み込みできます。
確率や連チャンの仕組みが一目瞭然!
攻略法はあなた自身で見つける時代です。

http://www.3-you.com/
488デフォルトの名無しさん:2006/04/17(月) 23:08:28
>でも478でインデントされなかったのは何故だろう?
タコな2chスクリプトがインデントを展開してくれないから
&nbsp;と書くか全角スペースでインデント汁
489デフォルトの名無しさん:2006/04/18(火) 00:29:38
>>477
ツォルンの補題まで行ってきました。
なんでそうなったかは自分でもよくわかりません。
明日のナゾナゾにしてもう寝ます。
490デフォルトの名無しさん:2006/04/18(火) 08:50:42
Haskell書いてると疲れるのは何故?
491デフォルトの名無しさん:2006/04/18(火) 09:26:25
慣れてないから
492デフォルトの名無しさん:2006/04/18(火) 11:46:15
Schemeみたいな言語になれちゃって,Haskellではいつも型宣言を書かずにプログラムを書いてしまう。そしてインタプリタに読み込ませて型が何かをチェック。

俺ってHaskell向いてないかな?
493デフォルトの名無しさん:2006/04/18(火) 13:49:43
>>492
自分で書いているように、慣れの問題
494デフォルトの名無しさん:2006/04/18(火) 15:40:09
よく自分の書いた型宣言よりもさらに抽象度の高い型宣言を型推論さんが教えてくれるのですが,Haskellerの皆さんはこのようなときはどうしているのでしょうか?それともこのようなギャップはあまり生じない?
495デフォルトの名無しさん:2006/04/18(火) 17:07:15
>>477
a<b<c<d のとき(a,c)<(b,d)ということでしょうか?
でも(a,d)と(b,c)の比較がやっぱり分りません。(a,d)>(b,c)なんだろうか・・・

RangeMapはこういう解釈でいいんでしょうか?

・RangeMap型のオブジェクトは次の写像と同値である。
 r(1),r(2)...r(n)のn個の整列された範囲が与えられているとき、
 範囲rを自然数iに対応させる写像であって、rをr(i)とr(i+1)との間に挿入すると
 また順序列となる。だだしr(1)の前に挿入するときはi=0。

・順序木を導入して効率アップ
496デフォルトの名無しさん:2006/04/18(火) 20:13:26
>>495
説明不足だった。申し訳ない。
意図としては、RangeMapはk型の値からa型の値への写像。
例えば、
a0, a1 :: RangeMap Integer String
a0 = insert (Unbounded, Unbounded) "foo" empty
a1 = insert (Inclusive 0, Inclusive 10) "bar" a0
と定義すると、a0はあらゆる値に"foo"を対応させる定数関数で、
a1は、0以上10以下の値には"bar", それ以外の値には"foo"を対応させる関数。

どっちにしても、>>478がまともな例題を提示してくれたので、>>477は用済みな気がする。
497デフォルトの名無しさん:2006/04/18(火) 21:05:04
>>478
やってみた。
一応、「書きながらの抽象化」の意味は分かったような気もするけど、
C++で書いた場合との本質的な違いのようなものは分からなかった。
コードの修正に型推論を活用するというのもよくわからなかった。
(これは修正自体をあまりしていないせいかも。)

満足できる結果じゃないけど、いろいろ勉強になった。
良い問題をありがとう。
参考までに、コードを揚げてみた。
ttp://hs.or.tp/php/uploader/up/code321.txt
498デフォルトの名無しさん:2006/04/18(火) 21:07:44
本物のプログラマは型推論に頼らない
499デフォルトの名無しさん:2006/04/18(火) 21:09:03
本物のプログラマはそもそも型に頼らないだろ
500デフォルトの名無しさん:2006/04/18(火) 21:10:15
確かに本物のプログラマはHaskellで書かれているからな
501デフォルトの名無しさん:2006/04/18(火) 21:16:59
本物のプログラマはuniversal domainを使う
502デフォルトの名無しさん:2006/04/18(火) 21:26:26
一方ロシアはJavaを使った。
503デフォルトの名無しさん:2006/04/18(火) 21:40:07
>>492
型に慣れてないなんて時代遅れだね。
504デフォルトの名無しさん:2006/04/18(火) 21:42:15
型がないと、ある種のパラドックスに陥る。
それは容易にバグに結びつく。
強い型付きの言語というのは、そういう意味で安全なんだよ。
505デフォルトの名無しさん:2006/04/18(火) 21:43:46
型型うるせえな!!
506デフォルトの名無しさん:2006/04/18(火) 22:12:10
>>497
reading A Gentle Introduction to Haskell Version 98 ... done
reading Twe Dozen Short Lessons in Haskell ... (Interrupt)
reading Yet Another Haskell Tutorial ... (Interrupt)
error: unresolved keywords: class instance deriving monad '...' '>>=' ...

やっと477が普通に見えてきたところです。
相互再帰は普通にできるんですね。

478のステップ2ではこういうかんじで使う関数を想像してました。
 traverse Left2Right BreadthFirst InOrder node

ちなみにC++で nodeGenFoldr を書くとどうなるんですか?
速すぎてついていけませんが解析中
reading 2ch/code321.txt ...
507デフォルトの名無しさん:2006/04/18(火) 22:17:15
型推論はなるべく使わないほうが良い。初心者なら特に。
508デフォルトの名無しさん:2006/04/18(火) 22:23:04
>>497
そういえば以前MLでfoldを使わずに相互再帰で走査していくときに型推論が役に立ったことがあります。
509デフォルトの名無しさん:2006/04/18(火) 22:53:37
>>497
478はXML文書をPythonのElementTreeのように手軽に扱えるライブラリはないかと思って、Haskellに限らずいろいろ探しているときに考えていたことの一部です。
ElementTreeで日本語を読み込むにはかなり細工が必要で、またテキストをエレメントと対等に扱わないので検索がやりにくかったです。

http://haskell.org/hawiki/GhcUnicodeによるとGHC6.6からUnicodeがHaXmlでも普通に扱えるように読めるんですが、ご存知ありませんか?
510デフォルトの名無しさん:2006/04/18(火) 23:23:12
>>509
現在のGHCは入出力の際にエンコーディングをiso-8859-1と仮定するので、
日本語を正しく扱うことは出来ません。
ただし、情報が失われる変換ではないので、文字列をブラックボックスとして操作する限りでは
問題は起こらないかも知れません。
実際、私はHaXmlを日本語を含む文書を操作するのに使っています。

上記の問題はGHC付属のIOライブラリの欠陥であって、プログラムからUnicodeの文字を扱うこと自体は正しく出来ます。
従って、入出力用の外部ライブラリとHaXmlを組み合わせることで正しい扱いが出来るかも知れません。
例えば、使ったことはないのですが、
http://www.repetae.net/john/recent/out/HsLocale.html
に、ロケール依存の入出力をするライブラリがあります。

>http://haskell.org/hawiki/GhcUnicode
リンク先の記述はUnicodeの文字クラスに関するもので、この問題には関係ないかと思います。
511デフォルトの名無しさん:2006/04/18(火) 23:24:16
>>492
関数を書いたあと推論を固定したいときはコピペして宣言、気にくわなければ型に手を加える、で十分だと思います。
512デフォルトの名無しさん:2006/04/18(火) 23:27:13
関数型言語、特にHaskellのようなpureな言語では、型を見るだけでどういう関数なのかほぼ解る。
a -> a 型の関数はまず間違いなく id だし、a -> b -> b 型は、第二引数をそのまま返すものであろう。
a -> Int とかなら、何を適用してもIntの定数を返す関数と推測される。
(a -> b) -> [a] -> [b] なんていう型の関数があったら、返値の要素は、第一引数である関数で
もって第二引数の要素から作ったものである。
自分で書いた関数が (a -> b) -> a -> a とか推論されたら、第一引数の関数またはその返値を
どこかで捨ててしまっている。

型推論を活用しながらコーディングってつまりこういうことだと思っているが、違う?
513デフォルトの名無しさん:2006/04/19(水) 00:30:38
>>512
>自分で書いた関数が (a -> b) -> a -> a とか推論されたら、第一引数の関数またはその返値を
>どこかで捨ててしまっている。
> 型推論を活用しながらコーディングってつまりこういうことだと思っているが、違う?
だいたいそう。

1) 予想した型と推論された型が一致しなければ、実装か、そもそもアルゴリズが間違っていた
2) 予定の型を書いておいて型エラーが無くなるようにコーディグする
2a) 関数の型を修正するときに先に型を書き、型エラーが無くなるまで中身を修正する
2a') 関数を分割するときに部分的な型を抜き出し、コピペした実装と一緒に宣言して2a)
2c) 最初に型を宣言して頑張ってコーディングする

2c)はあまり記憶が無いけどこんなかんじかなあ。

予想とはいっても型が長いときはびっくりするような推論が帰ってくるから、それをもとに正確な型はこうだ、と決めてる気がします。

始めのころは推論にびっくりしてストップしていましたが、何かを書きかけている途中でそれが起こるとしょうがなく解析して理解しました。慣れていくと実は逆の活用ができるんだ、と感じるようになりました。

ありきたりだけど、型推論に慣れる・慣れないというのはそういう「driving application」があるかどうかの話だと思います。
結局464という話になりますが。
514デフォルトの名無しさん:2006/04/19(水) 01:04:24
>>506
ttp://hs.or.tp/php/uploader/up/code322.cpp
C++版。
C++には関数的なリストが用意されていないので、vectorと副作用でごまかした。
もちろん、自分で定義すればいいんだけど、面倒だったので。
515デフォルトの名無しさん:2006/04/19(水) 01:07:25
>>510
参考になりました。ありがとう。

fptoolsでHaXmlをダウンロードしてあるのにghc6.4には何故かインストールされてませんでした。libraries/以下だけを再ビルドする方法も思い出せません。そもそもできたかどうか。トップからビルドし直すとまた信じられないような時間かかるし。
ghcはインストールがうっとうしいです。FFIもいっぱいあって、バージョン間の互換性も低いし。Makefileを書きかえてライブラリを追加したりとか。

インストールが成功したころには全然別の所に行ってしまってることが多いのでもうしばらくして試してみます。

reading 2ch/code321.txt(continued) Yet Another Haskell Tutorial(continued)...
516デフォルトの名無しさん:2006/04/19(水) 01:16:07
>>514
わざわざありがとう。
これがHaskellと同じように読み書きできるんですね。恐れ入りました。
ちょっと頭のリソースが足りないので、今度Boostを試してみるときに参考にします。
517デフォルトの名無しさん:2006/04/19(水) 13:49:44
ghcのコンパイルに 100時間以上かかってるんですがこんなもんですか?
前は半日くらいでできてたはずなのに。
518デフォルトの名無しさん:2006/04/19(水) 17:33:13
いくらなんでも時間かかりすぎ
どんなコンピュータだよ
519デフォルトの名無しさん:2006/04/19(水) 20:58:50
GHC 6.4.2来たよ
520デフォルトの名無しさん:2006/04/19(水) 22:22:00
いつもソースからビルドしてるんだけど、バイナリよりどれだけ速いか比べたことある人いませんか?
521デフォルトの名無しさん:2006/04/19(水) 22:33:47
どう考えてもビルド時間を回収できるほどには速くなりません。
522デフォルトの名無しさん:2006/04/19(水) 22:48:02
じゃあバイナリにします。ありがとう。
523デフォルトの名無しさん:2006/04/20(木) 07:17:46
>>512
っ [ P. Wadler, Theorems for Free! ]
524デフォルトの名無しさん:2006/04/20(木) 07:49:05
>>523
もちろん読んでる。Reynoldsも。
525デフォルトの名無しさん:2006/04/20(木) 21:16:08
もっと議論したまえ。
526 ̄ ̄\| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄:2006/04/20(木) 23:12:51
  ミ    二__, --、r'"___、 ヾ ト、::ヽ
  ミレ'"~,-,、 !  ! ' '" ̄ .ノ \ヾ:、
  K/ー'~^~_/  ヽミ:ー‐‐'"   ヽ i.
 !〉 ー―'"( o ⊂! ' ヽ       Y_
 i     ,.:::二二ニ:::.、.       l i
 .!     :r'エ┴┴'ーダ       !Kl
 .i、  .   ヾ=、__./        ト=
  ヽ. :、   ゙ -―-    ,;    ,!
  \.  :.         .:    ノ
   ヽ  ヽ  .  . .  .  .  .イ
527デフォルトの名無しさん:2006/04/21(金) 19:26:11
過去ログ読まずに質問するですがHaskellで言語処理系実装するのってどんなメリットありますか?
Microsoft Researchの人が書いてた埋め込み言語のコンパイラHaskellで書くとこんなにスゲェぜ!
風なペーパーを見掛けて気になってたんですが、どこで見掛けたのかすらわからなくなって
もう気になって気になって・・・
+compiler +"in haskell" とかでググってもそれっぽいの出てこないし。あぁ気になる。
528デフォルトの名無しさん:2006/04/21(金) 19:42:51
Haskellはあらゆる開発であらゆる言語を遥かに凌駕するのは周知の事実。
だから言語処理系の実装も例外ではないというだけの話。
特にI/Oが比較的単純でロジックの実装に集中できるから得意中の得意といっていい。
529デフォルトの名無しさん:2006/04/21(金) 20:21:19
Haskellと比べれば他の言語は子供だまし。
あらゆる分野で断トツ。
530デフォルトの名無しさん:2006/04/21(金) 20:35:17
学者もどきが礼賛してるただの
一風変わったオモチャだと思ってるけど違うの?
531デフォルトの名無しさん:2006/04/21(金) 20:42:36
.NETに連携できればなぁ。グルーはC#でかくから。
532デフォルトの名無しさん:2006/04/21(金) 21:47:47
Haskell にも格好良い渾名がいるんじゃないだろうか。
533デフォルトの名無しさん:2006/04/21(金) 22:07:29
唯一Haskellに対抗できそうなのがC++
534デフォルトの名無しさん:2006/04/22(土) 09:47:58
「ふつうのHaskellプログラミング」マダー(AAry
Racc本の青木峰郎さんに期待age
535デフォルトの名無しさん:2006/04/22(土) 10:24:06
俺も入門Haskellが糞だったのでふつうのHaskellプログラミングに期待
536デフォルトの名無しさん:2006/04/22(土) 11:14:58
勝手にナイトメアHaskellにも期待
537デフォルトの名無しさん:2006/04/22(土) 16:41:51
haskellの悪夢か…

プログラム中で定数として色々な計算に使っていた値(重力定数とか)を、
「コマンドラインの引数で値を指定できるようにして」といわれた時とか。

main以下のほぼすべての関数に、その値を表す引数を追加する
(もしくはmonadを使ってその受け渡しをラップする)羽目に…

こういう時だけは破壊的なMLが羨ましくなる。
538デフォルトの名無しさん:2006/04/22(土) 16:47:50
>>537
激しく同意。
パラメータつきモジュールみたいな言語要素が欲しい。
\(g :: Double) -> module Foo where ...
539デフォルトの名無しさん:2006/04/22(土) 16:55:40
>>537→バグが増える
540デフォルトの名無しさん:2006/04/22(土) 17:06:39
>>537
つ Implicit parameters
541デフォルトの名無しさん:2006/04/22(土) 17:19:48
確かに他の言語ではあり得ないおぞましさがあるからな
542デフォルトの名無しさん:2006/04/22(土) 17:54:26
実際 Haskell って「可変性」って観点からはどういう評価なん?
543デフォルトの名無しさん:2006/04/22(土) 18:05:54
>>538
こういうのは?

data Foo = Foo {f1 :: ..., f2 :: ..., f3 :: ...}

ConstructFoo g = Foo f1 f2 f3
where
f1 = ...
f2 = ...
f3 = ...
544デフォルトの名無しさん:2006/04/22(土) 18:24:20
>>543
それもちょっと考えたけど、いちいち型を定義するのが面倒だし、
対話環境から使いにくいような気がした。

でも見直してみたら
First-class Modules for Haskell
http://research.microsoft.com/~simonpj/Papers/first-class-modules/index.htm
もそんな感じで実装してあるな。
545デフォルトの名無しさん:2006/04/22(土) 19:15:38
まあ最初から可変になることがわかっていたら色々手もあるだろうが、
後から可変にするのはやっかいだね。
546527:2006/04/22(土) 21:49:47
>> 528, 529
マジですか。ちょっと勉強してみようかなとか思ってきた。
HaskellにLispのマクロみたいな機能ある?コレがないと暮らせないんだけども。
547デフォルトの名無しさん:2006/04/22(土) 22:14:18
>>546
勉強したいというなら止めないが、>>528-529を真に受けるなよ。

>HaskellにLispのマクロみたいな機能ある?コレがないと暮らせないんだけども。
標準じゃないけど、template haskellってのがある。
548デフォルトの名無しさん:2006/04/23(日) 07:16:21
>>543
538ではないが、もう少し詳しく教えてください
549デフォルトの名無しさん:2006/04/23(日) 07:36:00
>>537, 541, 545
Haskell への憧れが一気に冷めました
時代の最先端をいく言語だと思ってたんですが
550デフォルトの名無しさん:2006/04/23(日) 08:44:35
Hugsって死滅しちゃうの???
551デフォルトの名無しさん:2006/04/23(日) 09:23:49
ghciがあの遅さではhugsの代わりとしては使えない。
552デフォルトの名無しさん:2006/04/23(日) 13:31:37
まあいろいろ考えると結局LISP最強なんだな
553デフォルトの名無しさん:2006/04/23(日) 18:56:04
>537 cleanなら getEnvironmentVariable で環境変数を使う手があります。
worldが関係ないので。
554デフォルトの名無しさん:2006/04/23(日) 22:33:04
HaskellのIOが使いづらい理由の一つは、世界の状態に影響をあたえる動作と
そうでない動作を区別しないことじゃないだろうか、とふと思った。
getHomeDirectoryとかreadArrayなんかの読み出し動作は
相対的な実行順序を指定せずに使うことができるべきだよな。
555デフォルトの名無しさん:2006/04/23(日) 23:25:54
>>554
読み出すだけの動作は、影響を与えないが、
「影響を受ける」から、やはり実行順序依存なのだが。
純関数的なものはモナドに入れずに、例えばdo構文の外で
let, where束縛すりゃいいし。
556デフォルトの名無しさん:2006/04/24(月) 02:20:08
STとSTRefの使い方がやっと分かった。
こんな仕組み作るぐらいなら素直にimperative使えよ・・・。orz
557デフォルトの名無しさん:2006/04/24(月) 08:11:10
>>555
いや、「世界に影響を与える」動作との相対的な実行順に依存するのは分かるんだが、
v[i] = v[i-1] + v[i+1];
みたいな操作でreadArray間の実行順を指定するのは馬鹿馬鹿しい。
厳密には違う話かも知れないけど、
home <- getHomeDirectory
h <- openFile (home++"/.foorc")
とか、
eof <- isEOF
if eof ...
とかも同様に馬鹿馬鹿しく感じる。
558デフォルトの名無しさん:2006/04/24(月) 08:14:55
おっと、openFileの第二引数を付け忘れた。まあ察してくれ。
559デフォルトの名無しさん:2006/04/24(月) 14:29:12
Audrey Tangが性転換してたとは知らなかった
560デフォルトの名無しさん:2006/04/24(月) 18:48:07
561デフォルトの名無しさん:2006/04/24(月) 22:03:25
入門Haskell結構売れてるみたいなのに、このスレが初心者質問で賑わわないのはなんでだろう。
562デフォルトの名無しさん:2006/04/24(月) 22:19:02
読者が理解できてないから。
563デフォルトの名無しさん:2006/04/24(月) 22:27:00
日経ソフトウェア読んだ人いる?
あのDQN雑誌にHaskellの記事が載ったそうだけど。
564デフォルトの名無しさん:2006/04/24(月) 22:28:40
>>562は本物の馬鹿です。
565デフォルトの名無しさん:2006/04/25(火) 00:22:29
生産性ねぇ.経験からいうと静的型付け?と変数への代入がないことが間接的に生産性をあげてるとは思う.

手続き型言語とかオブジェクト指向言語でプログラム書いてると,つねにプログラム全体を意識してないと
きちんとしたプログラムを書けないわけですよ.「この変数 hoge はこのループに入る前にこの関数でこういう処理を
されたから値は A か B か C のはず.だから今書きかけのこの行で foo という処理をしても問題ない.」てな感じ.
最近集中力が落ちてきてるうえに日常的にプログラムを書くわけではない僕にはこれが辛い.
ちなみに先日 elisp でプログラム書いてて,型をあわせるのに随分気を使ったです.

でも Haskell だと
*関数の定義を積み上げてプログラムを書く
*プログラム中に現れる値は恒に同じ値(参照透過性)
*型の間違いをコンパイラがチェックしてくれる
などから,考える範囲を局所化してもちゃんとしたプログラムを書くことができる.
つまり,頭は使うかもしれないけど神経は使わなくてよい.頭を使うと後で生かせるけども神経を使っても疲れるだけ.
神経が消耗しないだけ生産性はあがってると思うよ.
566デフォルトの名無しさん:2006/04/25(火) 00:27:12
ま,Haskell で書いたプログラムの行数は合計しても三桁行程度の素人の意見だから
参考にならんかしらんけど.
567デフォルトの名無しさん:2006/04/25(火) 00:50:12
プログラムの正当性とか考え始めると、C みたいな言語は使いにくいよね。
一応 C で書くときはHoare論理を意識してるけど、かなりめんどい。
568デフォルトの名無しさん:2006/04/25(火) 01:01:05
>>567
お前はHoare論理と書きたかっただけとちゃうんかと・・
569デフォルトの名無しさん:2006/04/25(火) 02:54:38
得意げな顔して何が、Hoare論理を、だ。
お前は本当にHoare論理を意識してるのかと問いたい。問い詰めたい。小1時間問い詰めたい。
お前、Hoare論理って書きたいだけちゃうんかと。
570デフォルトの名無しさん:2006/04/25(火) 10:57:51
ほ、ほーっ、ホアアーッ!! ホアーッ!!
571デフォルトの名無しさん:2006/04/25(火) 13:36:34
声優オタは詩ね
572デフォルトの名無しさん:2006/04/25(火) 15:43:07
>>565
>頭は使うかもしれないけど神経は使わなくてよい.
>頭を使うと後で生かせるけども神経を使っても疲れるだけ.

なるほどね。でも現状CやJavaがこれだけ使われてる時代において、
神経を使うことを嫌うっていうのは、もうプログラマとしての適性を
亡くしてしまったともいえるな。
もしかしてプログラマの適性を亡くしてしまった人、もしくは最初からない人が
関数型言語に興味を持ってたり。
573デフォルトの名無しさん:2006/04/25(火) 16:04:49
とりあえず紳士的にHaskellお勉強中だけどこのスレ読んでてつまらん。
もっとコードベースのお話してよ。
574デフォルトの名無しさん:2006/04/25(火) 16:25:52
>>573
同意。
しかし、ネタがない。
575デフォルトの名無しさん:2006/04/25(火) 16:36:44
くだすれHaskellなんてどうでしょう?
576デフォルトの名無しさん:2006/04/25(火) 16:46:02
ここだと何か問題でもあるのか?
577デフォルトの名無しさん:2006/04/25(火) 16:50:06
回答者のレベルが低い。口先だけ
578デフォルトの名無しさん:2006/04/25(火) 16:51:27
それは新しくすれ建てて解決する問題じゃないと思うが。
579デフォルトの名無しさん:2006/04/25(火) 17:13:00
では ナイトメア言語Haskell Part1 で
580デフォルトの名無しさん:2006/04/25(火) 18:04:34
数理論理学勉強してない人が、このタイプの言語使ってみたところで、言語の目的とかが見えないんじゃないかな・・と思う。
言語仕様を覚えるだけなら誰でもできるけど、本質的なことは本当に理解している人しか見えてこないよね。
581デフォルトの名無しさん:2006/04/25(火) 18:05:37
はいはい雑談雑談
582デフォルトの名無しさん:2006/04/25(火) 18:06:42
雑談以外に何をしろと?
583デフォルトの名無しさん:2006/04/25(火) 18:07:41
ここでHaskellプログラミング演習の講義でもしてほしいのか?
584デフォルトの名無しさん:2006/04/25(火) 18:19:10
俺にとって役に立つなら言語の目的なんぞどうでもいい。
585デフォルトの名無しさん:2006/04/25(火) 18:34:28
>>584
それを知らなければ有効に活用できないから言ってんじゃん。
586デフォルトの名無しさん:2006/04/25(火) 18:34:45
はいはい雑談雑談
587デフォルトの名無しさん:2006/04/25(火) 18:47:16
雑談以外に何をしろと?
588デフォルトの名無しさん:2006/04/25(火) 18:47:19
>>585
「有効」って言葉をどういう意味で使ってるか分からんが、
他の言語と比べて(そいつにとって)役に立つならHaskellを使う動機として十分であって、
必ずしもHaskellの能力を最大限活用する必要はないだろ。
589デフォルトの名無しさん:2006/04/25(火) 18:47:23
>>580
ほら、こういう口だけ理屈屋しかいないから、具体的なコードの質問ができないんだよ。
590デフォルトの名無しさん:2006/04/25(火) 18:48:17
ラムダ計算の質問なら答えてやるよ。
591デフォルトの名無しさん:2006/04/25(火) 18:49:31
このスレでは言語仕様は理解しているものとして話を進めてOKだよね。
Haskellを触ろうと思っているような人なら素人じゃないだろうし。
592デフォルトの名無しさん:2006/04/25(火) 18:50:41
具体的なコードの質問は>>580以外の住人が答えるから大丈夫です。たぶん。
593デフォルトの名無しさん:2006/04/25(火) 18:52:05
だいたい、これからプログラミングを始めよう、がいるんだとしたら、「どうしてHaskellを選んだの?」って聞きたくなるよ・・
594デフォルトの名無しさん:2006/04/25(火) 18:53:26
>>591
議論はそれでいいんじゃね?
言語仕様を把握していない初心者は発言するな、って意味だったら賛成できんが。
595デフォルトの名無しさん:2006/04/25(火) 18:57:39
Haskellはまだまだ素人には使いにくい言語だし、環境も十分に整備されているとは考えられない。
世の中でもっとも力のあるパラダイムであるオブジェクト指向やらアスペクト指向やら、また様々な開発手法との連携という点では
はっきり言ってまだ何も確立されていない。
このような状況の言語を一般的なプログラマ・ど素人プログラマが理解できるわけがない。
596デフォルトの名無しさん:2006/04/25(火) 19:05:31
>>595は結局「俺は素人にあらず」と言いたいだけなんでしょ
597デフォルトの名無しさん:2006/04/25(火) 19:06:28
>>596
そんなことは一言も言っていない。論理的思考が苦手なのか?
ただ自分の体験談を語っているだけだ。
598デフォルトの名無しさん:2006/04/25(火) 19:16:48
これからHaskellに乗り換えてみようかなと考えている人は、今使っている言語を提示してみるといいよ。
そしてその言語ではこういうことができるんだけどHaskellではどれくらい簡単にできるのか聞けばいいんじゃないかな。

まったくプログラミングしたことがない人は比較対象がないからHaskellがいいのか悪いのか判断するのが難しいと思う。取り敢えず他の言語を使ってから話に参加するといいんじゃない?
599デフォルトの名無しさん:2006/04/25(火) 19:39:16
>>595
>Haskellはまだまだ素人には使いにくい言語だし
>(...)
>このような状況の言語を一般的なプログラマ・ど素人プログラマが理解できるわけがない。
前提と結論が同じ訳だが。
600デフォルトの名無しさん:2006/04/25(火) 19:43:03
使いにくいと理解しにくいは別ですよ?
601デフォルトの名無しさん:2006/04/25(火) 19:43:49
HaskellでSQLサーバと通信するコードはどんな感じになるのか見てみたい。
602デフォルトの名無しさん:2006/04/25(火) 19:44:53
>>600
確かに。しかし、
>Haskellはまだまだ素人には使いにくい言語だし
これには全く同意できんな。
少なくとも議論の前提にすることじゃない。
603デフォルトの名無しさん:2006/04/25(火) 19:55:32
>>598
これからHaskellに乗り換えてみようかと考えています。
今使っている言語はCiCです。
CiCではimpredicativeな型を使って、sort済みlist型のような洗練型を
定義できるのですが、Haskellではどれくらい簡単にできますか?
604デフォルトの名無しさん:2006/04/25(火) 19:58:07
>>600
>>595の「理解」というのは、利用する価値があるという理解のことね。
605デフォルトの名無しさん:2006/04/25(火) 21:51:38
haskellは凄いことができるのは保証できるが、
まだ、実用として使えるレベルにないのと
便利さ的にも発展段階な感じがする。
606デフォルトの名無しさん:2006/04/25(火) 22:04:29
まず、どうやって周りの開発環境と並存していくか、というのが一つの問題だよね。
607デフォルトの名無しさん:2006/04/25(火) 22:21:35
入門者です。
再帰処理を学ぶには最適な言語な気がしますが、
実用がまるで思い浮かびません。
皆さんは何に使ってるのですか?
ぼくは普通のテキスト処理ならperl、guiならjavaを普段使ってます。
趣味でpythonも好きですが、
Haskellだと言語自体を学んだら
次に何をしたらよいやら…
道は険しいのでこのまま勉強だけでも
実は楽しいですが。
608デフォルトの名無しさん:2006/04/25(火) 22:38:39
>>607
言語を覚えたいだけなら別に何も文句は言わないけど、何のための言語かというのはちゃんと理解しておいたほうがいいよ。
あと、Haskellはマイナー言語の一つなので、確かに知っていることは悪くないことなんだけど、誰もそれを評価してくれないよ。
面接で「Haskellを覚えています」と言ったところで、せいぜい「ふーん・・・」と返されるだけだからね。

再起処理がしたいならあなたが覚えている言語で十分できるから、別にHaskellでなくてもいいんじゃないかな?
609デフォルトの名無しさん:2006/04/25(火) 22:45:40
>>608
>603にも回答お願いします。
610デフォルトの名無しさん:2006/04/25(火) 22:51:29
>>609
わかりません
611デフォルトの名無しさん:2006/04/25(火) 22:57:55
CiCってなに
612デフォルトの名無しさん:2006/04/25(火) 23:09:47
Combat Information Center
613デフォルトの名無しさん:2006/04/26(水) 16:41:10
>変数への代入がない

変数がなくて、なんで動くの?
使う人がたとえば5番を選んだとき、それは、どこに入力されるの?
614デフォルトの名無しさん:2006/04/26(水) 17:03:57
計算モデルとして代入がないというだけであって、計算機の中で代入が行われないという意味ではないよ。
615デフォルトの名無しさん:2006/04/26(水) 17:14:54
>>613
代入はなくても初期化はある、という落ちだと思っとけばおk
616デフォルトの名無しさん:2006/04/26(水) 17:23:14
再代入が存在しないというのが正しいのかな
617デフォルトの名無しさん:2006/04/26(水) 17:24:07
ところで、CiCってなんだったの?
618デフォルトの名無しさん:2006/04/26(水) 18:20:36
619デフォルトの名無しさん:2006/04/26(水) 18:29:04
Common instance andCommunicationS
一言で言うと、
全ての可能な関数の挙動があらかじめ抽出されていて、
その組み合わせでプログラミングを行う
オブジェクト志向と関数型言語の合いの子


だったらいいな
620デフォルトの名無しさん:2006/04/26(水) 18:34:26
>>618
出てこないんだけど。
621デフォルトの名無しさん:2006/04/26(水) 18:59:25
Calculus of Inductive Contructionsでいいのか?
定理証明器とかそっちの話か。
622デフォルトの名無しさん:2006/04/26(水) 18:59:57
>Contructions
Constructionsね、失礼。
623デフォルトの名無しさん:2006/04/26(水) 19:07:33
一度代入されたら固定されて定数になるのか。
なんとなくわかった。
624デフォルトの名無しさん:2006/04/26(水) 19:25:30
lambda cube上だとHaskell(System Fのsubset)が手前側左上、
CiC(CCのsuberset)が奥側右上だな。
625デフォルトの名無しさん:2006/04/26(水) 19:36:20
よくわからんが、つよそうだということは分かった。
626デフォルトの名無しさん:2006/04/26(水) 22:52:29
haskellerは細かい所を異常に気にするし、
そうあるべきだから、
代入がないと断言するのが正しいと思う。
627デフォルトの名無しさん:2006/04/27(木) 11:30:02
GHC 6.4.2 のWindowsバイナリがようやっと出たので
喜び勇んでインストールしたんだが、lib/ が無くて、
HS*.o やら libHS*.a やら gcc.exe やら perl.exe やらが
ベースディレクトリ直下にずらずらと並んでおる。
どういう構成変更があったんだ。
628デフォルトの名無しさん:2006/04/27(木) 14:37:13
Unix版と同じになったんじゃない?
linuxでビルドすると .../ghc-6.4.2 以下に hslibs-imports/ icons/ imports/ include/ ができるよ。
629デフォルトの名無しさん:2006/04/27(木) 21:08:32
入門 Haskell を呼んでいるんですけど State モナドが判らなくて・・・
get ってどこから中身を持ってきているんですか?

しかしこの本簡単なところばかり詳細に説明して難しいところは説明も例も無いって・・・
630デフォルトの名無しさん:2006/04/27(木) 21:22:45
>>629
Stateモナドの動作は、外部から「状態」を受け取って、それに応じて変更された「状態」を返す。
getは、外部から受け取った「状態」を、そのまま結果にする動作。

get :: State s s
get = State (\s -> (s, s))

つまり、現在の状態がsの時、get後の状態もsで、getの結果もs。

>しかしこの本簡単なところばかり詳細に説明して難しいところは説明も例も無いって・・・
多岐にわたる高度な内容を掘り下げて説明するのは大変だと思う。
631デフォルトの名無しさん:2006/04/27(木) 21:52:22
日経ソフトウェアのHaskellの記事で初めてHaskellの解説を
(立ち)読みしましたが、かなり分かりやすかったです。
高階関数とか遅延評価とか無限列を扱えるとか凄かったです。
632デフォルトの名無しさん:2006/04/27(木) 21:57:30
>>629
do構文を見たら>>=、returnに置き換えてみるべし
633デフォルトの名無しさん:2006/04/28(金) 00:26:59
Stateモナドの場合は更にrunStateを適用してlet inに置き換えて考えると動作が解る。

runState (m0 >>= f1 >>= f2 >>= ... >>= fi) s0

let (v1, s1) = runState m0 s0
(v2, s2) = runState (f1 v1) s1
(v3, s3) = runState (f2 v2) s2
...
in runState (fi vi) si

get >>= 〜の場合は
runState get s0 == (s0, s0)で上のv1がs1と同じ値になる。
634デフォルトの名無しさん:2006/04/28(金) 03:31:02
遅延評価って問題先送り機構でしょ?
日本の政治家が好みそう
635デフォルトの名無しさん:2006/04/28(金) 03:33:15
http://haskell.org/ghc/download_ghc_642.html
GHC6.4.2でたぞ〜
















以上。今だhaskell一行もプログラミングしていない 入門Haskellを飾っているおいらがお伝えしました。
636デフォルトの名無しさん:2006/04/28(金) 07:33:06
637デフォルトの名無しさん:2006/04/28(金) 10:50:56
          ,:::-、       __
      ,,r   〈:::::::::)    ィ::::::ヽ
      〃   ,::::;r‐'´       ヽ::ノ
    ,'::;'   /::/  __
     l:::l   l::::l /:::::)   ,:::::、  ji
    |::::ヽ j::::l、ゝ‐′  ゙:;;:ノ ,j:l
    }:::::::ヽ!::::::::ゝ、 <:::.ァ __ノ::;!
.    {::::::::::::::::::::::::::::`='=‐'´:::::::::/
    ';::::::::::::ト、::::::::::::::i^i::::::::::::/
      `ー--' ヽ:::::::::::l l;;;;::::ノ
          `ー-"

【ラッキーコアラ】
このレスを見た人はコピペでもいいので
10分以内に3つのスレへ貼り付けてください。
そうすれば14日後好きな人から告白されるわ宝くじは当たるわ
出世しまくるわ体の悪い所全部治るわでえらい事です。
638デフォルトの名無しさん:2006/04/28(金) 19:33:59
【ラッキーコアラ】にだまされてコピペしたやつは、みんな不幸になるらしいよ。
639デフォルトの名無しさん:2006/04/28(金) 20:18:13
【ラッキーコアラ】にだまされてコピペした奴が、
>>638 みたいに言われて、
「あー、俺は、不幸になるんだ。」
と、思い込んだおかげで、
些細な事にも感謝するようになって、
幸せになったらしいよ。
640デフォルトの名無しさん:2006/04/28(金) 20:40:24
>>638
俺はお前なんかにだまされないよ
641デフォルトの名無しさん:2006/04/28(金) 20:57:12
これが由緒正しきhaskellerの会話か!
642デフォルトの名無しさん:2006/04/28(金) 21:02:23
↑何言ってんの、こいつ
643デフォルトの名無しさん:2006/04/28(金) 21:04:05
    /ノ´: /: : : : : : : : : : : : : :i: : : ::i: ::ヽ: : : : : :\   \
   /": : :/: : : : : : : : : : : : : : ::|: : :|: |: : : ヽ: : : : : : :ヽ  /
  /: : : ::/: : : : : : : : : : : : :/:/}: : i: :|: : : : :ヽ: : : : : : :V
  /: : : : :|: : : : : : : /: ::/:: / /: :/: / ヽ: : : : }: : : : : : :l        、′     、 ’、  ′     ’
`.{: : : : : :|: : : : : : : : ::/.// /://:/-―--:、; |: : : : : : :|
 |: : : :{: : |: : : :,斗ァ''フ"  /"  //    \ヽ|: : i : : ::|        .
 |:i: : :i: : :l r彡"´    "   /        }: :ノ : : ::|       、′・. ’   ;   ’、 ’、′‘
 l: i: : { : : l |     __,..    /  ''ェ;___,ェ; /: : : : /∧           ’、′・  ’、.・”;  ”
.  ',ヽ: : : : ヽl ,r==="         ̄ ̄ ./: : : :ノ/  l      .  ’、′  ’、  (;;ノ;; (′‘ ・.′”
   \\: : : \        !       /, r '´ }: : :ヽl      ’、′・” ;
   |: : : { `ー >              /{ * }: :  ヽl    .   、 ’、 ’・ 、´⌒,;y'⌒((´;;;;;ノ、"'人
   |:/: : { __ i/ ヽ             ./: {   }:_:: : : : l      、(⌒、   ヽ
.  //: : : :{  "iヽ { :ヽ、    ⌒   /:__ : { / ノ: : : : :.'.,    _( ´;`ヾ,;⌒)´  从⌒ ;) `⌒ )⌒:`.・
  l/: : : : : :} r−┘、: ::r`vr‐ -  ´|: : : | _」_{./  ./: : : : : : : '.,    :::::. :::  >>>>641::::)."::⌒) ;;:::)::ノ
 /: : : : : : : { `ヽ、 ヽ.L._ヽ.    レ'V__ ヽ/: : : : : : : : : :'.,        ノ  ...;:;_)  ...::ノ  ソ ...::ノ
/: : : : : : : : r ト *|ヽ/ ノ ヽ.'、  / { (___  〕r、_: : : : : : : '.,
: : : : : : : : :∧.l.}  }〔 ´ / ヽG=ニ:|(    ./r'/rく: : : : : : : : :',
644デフォルトの名無しさん:2006/04/28(金) 21:31:59
【ラッキーコアラ】にだまされてコピペしたら、母親が死にました。最悪です。
みなさんだまされないでください。
645デフォルトの名無しさん:2006/04/28(金) 21:34:31
HSPスレのがまだ高度な話題を扱ってるな
646デフォルトの名無しさん:2006/04/28(金) 22:10:02
おまえら本当にHaskellが好きならもっとドキュメント書け!
もっとライブラリ書け!
もっとアプリ書け!

…と自分を煽ってみるてすと
647デフォルトの名無しさん:2006/04/28(金) 22:18:15
結城タソはもうやってないのだろうか・・・
648デフォルトの名無しさん:2006/04/29(土) 01:15:39
>>647 結城タソってhyuki.comのひとのこと?
だったら青木さんの原稿チェックMLに参加してたみたいだから、まだ興味は持ってると思う。
649デフォルトの名無しさん:2006/04/29(土) 01:41:39
今のHaskellは、GPL等に抵触せずにポータブルな(すなわち、
非標準的な外部ライブラリを別途インストールしなくても動く)
バイナリを作れるのか?
そうでなければ、オープンソース外の世界には到底広まらんだろう。
650デフォルトの名無しさん:2006/04/29(土) 01:50:41
2chでスタンダードなんとかライブラリ作って、
日々あの実装はいただけないとか、この方が高速だとかジェダイ会議して
ライブラリ広めれば?
651デフォルトの名無しさん:2006/04/29(土) 04:14:26
それだ! おまいならできる!
652デフォルトの名無しさん:2006/04/29(土) 04:56:13
オードリーとか言う人がhaskel学んで一年くらいでperlを動かせるようにしたそうだよ。
おまえらも、これから学んで一年後くらいにruby動かせるようにしたら?
653デフォルトの名無しさん:2006/04/29(土) 05:54:35
動機が不純だといいものはできない
654デフォルトの名無しさん:2006/04/29(土) 07:50:24
haskell で haskell 書くのって簡単?
655デフォルトの名無しさん:2006/04/29(土) 08:24:18
HaskellからCへの変換はHaskellで書かれている。
656デフォルトの名無しさん:2006/04/29(土) 09:24:19
>>654
John Meachamは5年くらいかけてほぼ一人でHaskellコンパイラ(jhc)を書いた。
今のjhcのソースは35000行ほど。
657デフォルトの名無しさん:2006/04/29(土) 10:04:22
>>656
1日平均20行ほど。
658デフォルトの名無しさん:2006/04/29(土) 10:10:43
>>654
難しい
659デフォルトの名無しさん:2006/04/29(土) 10:13:23
プログラム・プロムナード/Haskellプログラミング
http://www.ipsj.or.jp/07editj/promenade/
660デフォルトの名無しさん:2006/04/29(土) 12:02:16
>>656
年間7000行しか書かなかったのか
661デフォルトの名無しさん:2006/04/29(土) 16:42:25
662デフォルトの名無しさん:2006/04/30(日) 00:26:51
RTypeってどのくらいのレベルの人が参加できるの?
663デフォルトの名無しさん:2006/04/30(日) 07:04:51
>>656>>658
Haskell って最先端とか言っておきながら
自分自身を記述するのも大変なのか…?
664デフォルトの名無しさん:2006/04/30(日) 11:28:55
ていうかそもそも GHC が Haskell で書かれている件についてはみんな無視ですか。
665デフォルトの名無しさん:2006/04/30(日) 11:41:59
そもそもHaskellコンパイラを書くのが難しいような。
666デフォルトの名無しさん:2006/04/30(日) 12:20:27
自己記述するってなんか論理的に利点でもあるの?
667デフォルトの名無しさん:2006/04/30(日) 12:51:10
Perl6が本家より先にHaskellで作られたのって凄いよね。
Haskellってそんなに処理系を記述するのに向いてるの?
668デフォルトの名無しさん:2006/04/30(日) 12:57:18
>>666
遊びに決まってんじゃん ばーか
669デフォルトの名無しさん:2006/04/30(日) 12:58:01
>>667
インタプリタを書いた場合のメモリ使用量・実行速度の問題を別にすれば、
処理系を書くのにものすごく適した言語だと思う。
670デフォルトの名無しさん:2006/04/30(日) 13:07:30
あれ、そういえばghciって中間コードのインタプリタだっけ?
結構速いような。
671デフォルトの名無しさん:2006/04/30(日) 13:19:01
>>670
いいえ
672デフォルトの名無しさん:2006/04/30(日) 13:39:04
>>671
どっちの文の否定ですか?
673デフォルトの名無しさん:2006/04/30(日) 14:13:12
>>672
そっちのです
674デフォルトの名無しさん:2006/04/30(日) 14:30:17
>>669
> インタプリタを書いた場合のメモリ使用量・実行速度の問題を別にすれば、
> 処理系を書くのにものすごく適した言語だと思う。

>>179 みたいなチュートリアルがあるくらいだしね。
675デフォルトの名無しさん:2006/04/30(日) 20:16:14
ちょっと、キョン!当然あたしたちのCD予約したわよね?
――えっ、まだしてないの?あんた、SOS団の一員としての自覚あるの?
――何、「曲のほうは?」って?それなら心配いらないわ!
なんったって、団長のあたしが保証するんだから間違いないわ!
一度聴いたら、ぜ〜〜ったい踊りたくなるんだから!
涼宮ハルヒの憂鬱ED「ハレ晴レユカイ」5月10日発売!
絶対買いなさい!!
676デフォルトの名無しさん:2006/04/30(日) 22:07:15
SOS団にはPlotkinとかKahnとかMilnerがいるのでしょうか?
私もぜひ入りたいです。
677デフォルトの名無しさん:2006/04/30(日) 23:39:07
HGLを試してみたが、Windows+GHCでは固まってまともに動かん。
Hugsでは動いた。

以上、チラシの裏
678デフォルトの名無しさん:2006/04/30(日) 23:40:58
>>676
KahnはNS団にいます。
679デフォルトの名無しさん:2006/05/01(月) 07:49:15
六歳の誕生日から、何故か毎日20行ずつコンパイラを書き始めた僕の数奇な生涯。

『Haskell Boy』

映画化決定
680デフォルトの名無しさん:2006/05/01(月) 08:42:13
以下のソースだとエラーになるのは何故ですか?

main = putStrLn hoge
hoge = 2
681デフォルトの名無しさん:2006/05/01(月) 08:51:39
>>680
putStrLnは引数としてStringを取る。
一方hogeは数値なので、型が合わない。
682デフォルトの名無しさん:2006/05/01(月) 09:28:14
>>680
main = putStrLn $ show hoge で。

あるいは単純に

main = print hoge
683デフォルトの名無しさん:2006/05/01(月) 10:39:05
>>681-682
おおーできた!
ありがとうございました。
684デフォルトの名無しさん:2006/05/01(月) 10:57:31
二分探索を書こうとしたのだが、どうも上手くできない。

--リストの中央インデックスを求める
middle :: [a] -> Int
middle [] = -1
middle x = (ceiling half) - 1
where half = fromIntegral (length x) / fromIntegral 2

--リストの中央値を返す
median :: [a] -> a
median x = x !! (middle x)

bsearch k [] = -1
bsearch k x
| median x > k = bsearch k (take (middle x) x)
| median x == k = middle x
| median x < k = middle x + 1 + bsearch k (drop ((middle x)+1) x)

「bsearch k [] = -1」が悪いのはわかってるんだが、
うまく動くよう記述する方法がわかんない。
どうすればいい?
685デフォルトの名無しさん:2006/05/01(月) 11:13:45
>>684
bsearchの最後の等式で、再帰的に呼ばれたbsearchが-1を返したときにまずいことになる。
これを防ぐには、結果が-1かどうかを明示的にテストすればいい。
bsearch k [] = -1
bsearch k x 
  | median x > k  = bsearch k (take (middle x) x) 
  | median x == k = middle x 
  | median x < k  = case bsearch k (drop ((middle x)+1) x) of
    -1 -> -1
    r -> middle x + 1 + r

以下、本題とは関係ないけど、
・Haskellではbsearchのような「失敗する可能性のある」関数の結果はMaybeでラップするのが普通。
失敗時に-1を返すよりNothingを返した方が直感的だし、間違いも少ない。
・ceiling (fromIntegral (length x) / fromIntegral 2) は div (length x) 2と書ける。
686デフォルトの名無しさん:2006/05/01(月) 11:15:39
よくわからんのだけど、Haskelの場合、数学の証明とかのように定義を延々と書いていってつじつまが合うと、そのとおりに動作すると考えればよろしいのでしょうか?
687685:2006/05/01(月) 11:18:02
>ceiling (fromIntegral (length x) / fromIntegral 2) は div (length x) 2と書ける。
嘘でした。
div (length x + 1) 2
が正解。
688デフォルトの名無しさん:2006/05/01(月) 11:20:56
>>685
おお。素早い回答ありがとう。
689デフォルトの名無しさん:2006/05/01(月) 12:46:11
Haskellでパーサでも書こうかと思ってるんですけど
どのくらい簡単に書けるものなんですかね?
四則演算程度の簡単なパーサのサンプルとかありませんか?
690デフォルトの名無しさん:2006/05/01(月) 13:38:36
691デフォルトの名無しさん:2006/05/01(月) 16:07:44
692デフォルトの名無しさん:2006/05/01(月) 21:43:21
693デフォルトの名無しさん:2006/05/01(月) 21:45:45
男には一生に一度、Haskellしないといけないときがある。
694デフォルトの名無しさん:2006/05/01(月) 23:11:44
六歳の誕生日から、何故か毎日20行ずつコンパイラを書き始めた僕の数奇な生涯。

『Haskell Boy』

映画化決定
695デフォルトの名無しさん:2006/05/02(火) 09:53:00
>>694
享年14歳
696デフォルトの名無しさん:2006/05/02(火) 10:17:30
ネイティブアプリ作成できるよね?勿論
697デフォルトの名無しさん:2006/05/02(火) 10:44:15
うん
698デフォルトの名無しさん:2006/05/02(火) 11:52:01
699デフォルトの名無しさん:2006/05/02(火) 11:53:24
うする
700デフォルトの名無しさん:2006/05/02(火) 18:50:44
つもりなのか?
701デフォルトの名無しさん:2006/05/02(火) 18:51:34
Curry 喰うか?
702デフォルトの名無しさん:2006/05/02(火) 20:01:51
Windowsで日本語が表示できるGUIライブラリってないですか?
でないとまともなアプリなんて作れません。
703デフォルトの名無しさん:2006/05/02(火) 21:24:10
>>702
WxHaskell。
でも、たぶん、Shift_JISをバイトごとに分けてCharに入れないとちゃんと動かない。
704デフォルトの名無しさん:2006/05/02(火) 23:58:13
ほんの数時間前にHaskellかじり始めました。んでちょっと質問です。
quicksort [] = []
で空リストは空リストでマッチさせるのに対して
quicksort (x:xs) = ...
と空ではないリストについての表記が`('と`)'で囲まれてるのが
ペアみたいでいまいち納得いかないんですが、これは何でですか?
書いててふと思ったけど結合強度の関係でx:xsをグルーピングしてるだけとかいう落ち?
705デフォルトの名無しさん:2006/05/03(水) 00:15:40
>>704
そのとおり。

「宣言の左辺の時だけ結合度変えてよ」なんて無茶言ったらだめよ。
706704:2006/05/03(水) 01:00:16
やはりそうでしたか。

普段はLISP使ってるので()[]{}を使い分けたりインデントを意識する習慣が
まったくないのですが、このあたりのつまらない約束事を乗り越えたら
新しい境地が広がっているといいなぁ。Haskell. OCamlとどっち勉強しようか
微妙に迷ったけど。
707デフォルトの名無しさん:2006/05/03(水) 01:42:12
Lisp でインデントを意識しないって、マヂで言ってる?
708デフォルトの名無しさん:2006/05/03(水) 01:46:56
Lispのインデントはただ単に見やすくするだけの意味しかないでしょ。
709デフォルトの名無しさん:2006/05/03(水) 01:56:34
Python でもやっとけ
710デフォルトの名無しさん:2006/05/03(水) 09:32:09
Haskell人気だな。
違う意味で使えそう。
http://pc8.2ch.net/test/read.cgi/tech/1129792060/
711デフォルトの名無しさん:2006/05/03(水) 21:20:33
普通emacsまかせだからLispでインデントなんて意識しないよ
シンプルそうに見えて割と変な記号多いのは嫌だな、いつか治るのかな?
712デフォルトの名無しさん:2006/05/03(水) 22:58:03
他人のソースを読まない人?
713デフォルトの名無しさん:2006/05/03(水) 23:02:22
lispを型付き言語に改造するラッパってありますか?
714デフォルトの名無しさん:2006/05/03(水) 23:07:10
Common Lisp なら最初から型あるじゃん...
715デフォルトの名無しさん:2006/05/03(水) 23:34:09
Monadクラス(>>=, return)のシグネチャには合うけど、Monad則を満たさないサンプルってどんなものがありますか?
716デフォルトの名無しさん:2006/05/03(水) 23:44:19
>>715
いくらでもあると思うが。自明な例は、
data Id a = Id a
instance Monad Id where
 return = undefined
 (>>=) = undefined

もうちょっとまともな例は、ListT IO。
http://haskell.cs.yale.edu/hawiki/ListTDoneRight
717デフォルトの名無しさん:2006/05/03(水) 23:47:23
>>711
変な記号を駆使してやたらと簡潔なコードを書けるのがHaskellの良いところの一つだと思うので、なくなると困る。
718デフォルトの名無しさん:2006/05/04(木) 00:05:11
>>716
おお、ありがとうございます。リンク先の方、じっくり読んでみます。
719デフォルトの名無しさん:2006/05/04(木) 00:23:04
>>717
それってどこの Perl ?
720デフォルトの名無しさん:2006/05/04(木) 00:47:34
ネタなのかマジなのか…
721デフォルトの名無しさん:2006/05/04(木) 20:59:02
「数値リスト内の全ての要素が同じ数字」ってどう書きますか?
722デフォルトの名無しさん:2006/05/04(木) 23:31:45
isSameNumber :: (Num a) => [a] -> Bool
isSameNumber (x:xs) = all (==x) xs
723デフォルトの名無しさん:2006/05/05(金) 00:54:37
リストが空の場合は?
724721:2006/05/05(金) 01:57:05
そう言えばリストが空の場合「同じ」で良いのだろうか…
何はともあれ参考にします。
725デフォルトの名無しさん:2006/05/05(金) 02:47:19
>>715に関連して
Monad則を絶対に満たしてるという証明はどうやってするの?
726デフォルトの名無しさん:2006/05/05(金) 11:22:59
普通に式変形するんじゃだめなのか?

例えば、
return = Just
Just x >>= f = f x
Nothing >>= f = Nothing
と定義されているとき、 x >>= return = xを証明する。

x >>= return
= x >>= Just -- returnの定義から
= case x of -- (>>=)の定義から
   Just r -> Just r
   Nothing -> Nothing
= case x of -- パターンマッチの性質から
   Just r -> x
   Nothing -> x
= x -- case式の性質から
727デフォルトの名無しさん:2006/05/05(金) 20:54:57
今月にまたHaskellの書籍が出ると聞いて待ち望んでおります。
詳しく。
728デフォルトの名無しさん:2006/05/06(土) 00:38:38
>>726
> = case x of -- パターンマッチの性質から
> Just r -> x
> Nothing -> x

これが思いつかなかった。
729デフォルトの名無しさん:2006/05/06(土) 00:41:22
>>727
こういう内容らしい。
ttp://i.loveruby.net/d/20060402.html
730デフォルトの名無しさん:2006/05/06(土) 00:52:35
ちょっと質問いいでしょうか。
Haskellで作ったバイナリは、ライセンスはどうなるでしょうか。
731デフォルトの名無しさん:2006/05/06(土) 01:08:45
>>730

それは処理系のライセンスによるでしょ。
732デフォルトの名無しさん:2006/05/06(土) 02:34:13
>>729
楽しみ。
733デフォルトの名無しさん:2006/05/06(土) 08:04:42
>>730
Haskellに限らず、コンパイラ系が吐き出した実行ファイルに
コンパイラの製作者側のライセンスが及ぶ場合ってあるのか?
734デフォルトの名無しさん:2006/05/06(土) 08:13:04
exeにリンクされるスタートアップルーチンやライブラリが
LGPLではなくGPLに汚染していたらそのプログラムもGPLにしないとまずい。
例えばCygwinのgccは問答無用でGPLなdllに依存してしまう。
735デフォルトの名無しさん:2006/05/06(土) 08:31:06
ライブラリはそうだろうけど、基本的なスタートアップで縛りの強い
ライセンスってある? Cygwinのgccはdllに依存しないようなオプ
ションがなかったっけ?

具体的な質問に直すと(おれは730じゃないけど)Helloworldレベルの
EXEでGPLに感染しちゃうようなEXEしかはけない(他に選択肢の無い)
コンパイラあったら教えて。
736デフォルトの名無しさん:2006/05/06(土) 08:37:11
Cygwinのgcc
737デフォルトの名無しさん:2006/05/06(土) 08:47:12
ランタイム必須な言語では helloworld だろうが web browser だろうが一緒。
GNAT が確かそうだったような気がする >> 強制 GPL
738デフォルトの名無しさん:2006/05/06(土) 11:59:42
新刊はいつ発売
739デフォルトの名無しさん:2006/05/06(土) 15:42:27
GPLが感染するコンパイラなんか使うか
740デフォルトの名無しさん:2006/05/06(土) 16:00:27
えっ?GHCで作ったプログラムってexeにできるの?
741デフォルトの名無しさん:2006/05/06(土) 16:26:53
742デフォルトの名無しさん:2006/05/06(土) 16:36:18
ghcの出力したバイナリはlibgmp(LGPL)に依存してるはずだが
これってWindowsで問題にならないのか?
743デフォルトの名無しさん:2006/05/07(日) 18:46:38
Haskell での文字コード変換はどうするのが一般的でしょうか?
744デフォルトの名無しさん:2006/05/07(日) 19:23:51
何故Haskellでは日本語が使えませんか?
745デフォルトの名無しさん:2006/05/07(日) 19:45:41
>>744
GHCで使えないのはコンパイラの字句解析器とIOライブラリが日本語を解さないから。
字句解析器は6.6で改善されるはず。
HugsだとWindowsやLinuxでは日本語が普通に使えると思う。
746デフォルトの名無しさん:2006/05/07(日) 22:41:50
>>745
HEAD branch snapshotの
ghc-6.5.20060328-i386-unknown-mingw32.tar.gz
だと、UTF-8なら読み込めるが、6.4でOKだったeucが駄目になってる。
747デフォルトの名無しさん:2006/05/09(火) 00:14:28
Haskellかじり始めの者ですがいきなりWrite Yourself a Scheme in 48 Hoursから
取り掛かるのはやっぱり無謀ですか? 3. Parsingから途端について行けなくなったけど
リファレンスとか調べながら読んで行ってどうにかなるものかしら。
748デフォルトの名無しさん:2006/05/09(火) 07:12:03
自分のやりたいことをやれ
手強かったら、一時撤退すればよい。
749デフォルトの名無しさん:2006/05/09(火) 08:00:40
50歳ですが、haskellを学ぶといいことがありますか?
750デフォルトの名無しさん:2006/05/09(火) 08:18:11
極楽浄土へ行ける
751デフォルトの名無しさん:2006/05/09(火) 10:20:07
人生が静的になる
752デフォルトの名無しさん:2006/05/09(火) 10:51:32
型推論で人生が決まる!
強く型付けされた人生で幸福をあなたの元へ
753デフォルトの名無しさん:2006/05/09(火) 11:03:33
人は中身ではなく型が重要です。
754デフォルトの名無しさん:2006/05/09(火) 13:00:21
755デフォルトの名無しさん:2006/05/10(水) 04:20:02
人生が停止することが保証されますか?
756デフォルトの名無しさん:2006/05/10(水) 07:49:43
必要とされない人生は評価されません
757デフォルトの名無しさん:2006/05/10(水) 21:33:19
停止するか否かはこの時重要ではありません
必要に応じてプロシージャを走らせます
758デフォルトの名無しさん:2006/05/11(木) 09:53:54
Haskellを勉強すると金になりますか?
759デフォルトの名無しさん:2006/05/11(木) 09:58:53
オペレータを自由に定義できます。
760デフォルトの名無しさん:2006/05/11(木) 14:02:22
えっ!?俺オペレータなんだよ…困ったな
761デフォルトの名無しさん:2006/05/11(木) 20:49:01
762デフォルトの名無しさん:2006/05/11(木) 20:53:52
むしろVisual Haskell使ってる人いる?
763デフォルトの名無しさん:2006/05/11(木) 21:03:08
日経を多値読みしたら向井氏の記事の脚注に nobsun も Haskell 本を執筆中らしい。
かなりの期待あげ。
764デフォルトの名無しさん:2006/05/11(木) 21:30:49
nobsunって何者?
765デフォルトの名無しさん:2006/05/11(木) 21:32:02
sampou.org の中の人
766デフォルトの名無しさん:2006/05/11(木) 21:32:59
もしかして噂のNightmare Haskell?
767デフォルトの名無しさん:2006/05/11(木) 23:04:00
>>762
Cabal何とかエラーで動かなかった
768デフォルトの名無しさん:2006/05/12(金) 01:15:51
>>762
ノ 使ってる
769デフォルトの名無しさん:2006/05/12(金) 04:35:08
入門 Haskell 酷いな
誤字、脱字は多いし説明は例を示さないで文章だけとかも結構あるし
読者の想定レベルもページめくるごとに変わってくる始末w
入門書でここまで酷いの久しぶりに見た
っと思ったら学生か しゃーないな
770デフォルトの名無しさん:2006/05/12(金) 10:04:44
>>769
まあ、確かに。
771デフォルトの名無しさん:2006/05/12(金) 10:38:36
>>763
それは青木さんの本では?
772デフォルトの名無しさん:2006/05/12(金) 10:48:04
>>769
>>770
青木さんが256本執筆したのは、まだ学生だった時のような希ガス。
クオリティ高杉で舌を巻いた。
773デフォルトの名無しさん:2006/05/12(金) 10:56:06
>>766
でねーよw
774デフォルトの名無しさん:2006/05/12(金) 11:00:08
>>772
そんなにクオリティの高い本だとは思わなかったけど・・
775デフォルトの名無しさん:2006/05/12(金) 14:15:18
義 Yi -- Haskell で書かれた Haskell で拡張可能なテキストエディタ
http://www.cse.unsw.edu.au/~dons/yi.html
776デフォルトの名無しさん:2006/05/12(金) 14:23:37
>>775
sugeeeeeeeeee!!!
777デフォルトの名無しさん:2006/05/12(金) 14:24:17
というか、emacsより敷居高いようなw
778デフォルトの名無しさん:2006/05/12(金) 20:26:30
Cabal って楽チンー。cabal-get まだー。
779デフォルトの名無しさん:2006/05/13(土) 14:26:56
『ふつうのHaskellプログラミング』
http://i.loveruby.net/ja/stdhaskell/

5/31確定っぽい。
780デフォルトの名無しさん:2006/05/13(土) 21:45:05
>>779
入門Haskell買ったばかりなのに orz
781デフォルトの名無しさん:2006/05/13(土) 22:15:01
『かんたんなHaskellプログラミング』
『むずかしいHaskellプログラミング』
『応用Haskell』
『演習Haskell』
782デフォルトの名無しさん:2006/05/13(土) 22:17:31
『ふしぎなHaskellプログラミング』
『もっとふしぎなHaskellプログラミング』
『ふかしぎなHaskellプログラミング』
783デフォルトの名無しさん:2006/05/13(土) 22:42:49
『Haskell Haskell』(通称ダブルエッチ)
『Haskell Haskell Haskell』(通称トリプルエッチ)
784デフォルトの名無しさん:2006/05/13(土) 22:54:04
Haskell向けの問題ってどんなのある?
785デフォルトの名無しさん:2006/05/13(土) 23:19:52
『独習Haskell』
『Haskellを256倍使うための本』
『The Haskell Super Text (上)(下)』
786デフォルトの名無しさん:2006/05/13(土) 23:22:42
『なんとなくHaskell』
787デフォルトの名無しさん:2006/05/13(土) 23:29:52
『Haskell以外はウンコ』
788デフォルトの名無しさん:2006/05/13(土) 23:34:29
『3、2、1、Haskell Haskell』
789デフォルトの名無しさん:2006/05/13(土) 23:35:44
今度つまらないコと書いたらマジ殺す↓
790デフォルトの名無しさん:2006/05/13(土) 23:40:28
『噂のHaskell』
791デフォルトの名無しさん:2006/05/13(土) 23:52:46
『空から降る一億のHaskell』
792デフォルトの名無しさん:2006/05/13(土) 23:54:32
『No-pants Haskell』
793デフォルトの名無しさん:2006/05/13(土) 23:55:32
『Perfect Haskell』
794デフォルトの名無しさん:2006/05/13(土) 23:56:49
『くるくるHaskell』
795デフォルトの名無しさん:2006/05/13(土) 23:58:36
『Morning Haskell』
796デフォルトの名無しさん:2006/05/13(土) 23:59:47
『Deep Haskell』
797デフォルトの名無しさん:2006/05/14(日) 00:00:29
『Taskell Haskell』
798デフォルトの名無しさん:2006/05/14(日) 00:15:51
『はすけりんこ』
799デフォルトの名無しさん:2006/05/14(日) 01:03:50
『Takeshi's Haskell』
800デフォルトの名無しさん:2006/05/14(日) 01:37:23
『Haskellは死んだ』
801デフォルトの名無しさん:2006/05/14(日) 01:37:28
["Haskell"..]
802デフォルトの名無しさん:2006/05/14(日) 01:52:28
このくだらなさ速度なら言える!
『あらいぐま Haskell』
803デフォルトの名無しさん:2006/05/14(日) 02:02:32
じゃ、俺も。
『世界の中心で Haskell と叫ぶ。』
804デフォルトの名無しさん:2006/05/14(日) 02:25:35
『Effective Haskell』
805デフォルトの名無しさん:2006/05/14(日) 02:28:22
『Haskellと共に去りぬ』
806デフォルトの名無しさん:2006/05/14(日) 07:38:38
『Haskell Hacks』『やさしいHaskell』
『軽快なHaskell』『Haskell魂』『マスタリングHaskell』
807デフォルトの名無しさん:2006/05/14(日) 08:14:57
『Haskellの動く城』
808デフォルトの名無しさん:2006/05/14(日) 08:48:08
『陽気なHaskellが地球を回す』
809デフォルトの名無しさん:2006/05/14(日) 10:11:08
『Haskellの錬金術師』
810デフォルトの名無しさん:2006/05/14(日) 12:21:24
『Haskell Potter と秘密のエディタ』
811デフォルトの名無しさん:2006/05/14(日) 12:37:27
『スーパーHaskellブラザーズ』
812デフォルトの名無しさん:2006/05/14(日) 12:38:00
『Haskellの奇妙な冒険』
813デフォルトの名無しさん:2006/05/14(日) 13:00:49
このまま1000まで行くのか
814デフォルトの名無しさん:2006/05/14(日) 13:41:34
『へっぽこ実験言語Haskell』
・・・実験失敗?
815デフォルトの名無しさん:2006/05/14(日) 17:09:11
『空は透けるように青かった』
816デフォルトの名無しさん:2006/05/14(日) 17:17:31
>>815
感動した。
817デフォルトの名無しさん:2006/05/14(日) 20:51:15
『ブラは透けるように濡れていた』
818デフォルトの名無しさん:2006/05/14(日) 23:04:13
シャツじゃないの?
819デフォルトの名無しさん:2006/05/14(日) 23:20:34
『ケットは透けるように濡れていた』
820デフォルトの名無しさん:2006/05/14(日) 23:23:06
『超Haskell』
821デフォルトの名無しさん:2006/05/14(日) 23:24:02
『нд∫κёll』
822デフォルトの名無しさん:2006/05/14(日) 23:50:33
823デフォルトの名無しさん:2006/05/15(月) 00:27:48
言語ねたの定番だな
824デフォルトの名無しさん:2006/05/15(月) 00:50:23
Haskellって、どれをインストールしたらいいのか分かりません。
教えてください。
よろしくお願い致します。
825デフォルトの名無しさん:2006/05/15(月) 00:52:43
>>824
GHCかHugsを入れればいいんじゃないか?
826デフォルトの名無しさん:2006/05/15(月) 03:04:36
>>824
そんなことも分からないのに、Haskellをインストールしてもやることないんじゃないの?
何でインストールするの?
827デフォルトの名無しさん:2006/05/15(月) 04:49:53
>>806
オライリーktkr
828デフォルトの名無しさん:2006/05/15(月) 06:30:48
何で埋めてるの?
829デフォルトの名無しさん:2006/05/15(月) 20:04:03
素直に埋めないでって言えよ
830デフォルトの名無しさん:2006/05/15(月) 20:11:32
べ、別に埋められるのが怖いからなんて、言ってないんだからねッ!
831デフォルトの名無しさん:2006/05/15(月) 20:14:49
>>830
Haskellってツンデレっぽいよな
832デフォルトの名無しさん:2006/05/15(月) 20:18:50
コンパイル通すまでがとっつきにくい
通ったらかなりデレデレ
833デフォルトの名無しさん:2006/05/15(月) 20:54:45
「Haskell」って「破透ける」って読むの?
834デフォルトの名無しさん:2006/05/15(月) 21:11:19
http://www.cse.unsw.edu.au/~dons/haskell-1990-2000/msg07152.html
これからすると一番忠実な表記はハスクルかな。
835デフォルトの名無しさん:2006/05/16(火) 16:23:13
「俺が女だったら」
「センターへのファウルフライ」
「高速なハスケル製アプリ」
836デフォルトの名無しさん:2006/05/16(火) 18:21:13
質問です。

ghciで無限リストを表示したんですが、処理の中断の方法が分かりません。
どうすればいいですか?
837デフォルトの名無しさん:2006/05/16(火) 18:32:48
>>836
Ctrl+Cで止まらないか?
838デフォルトの名無しさん:2006/05/16(火) 18:48:12
>>837
すでに試しましたが、残念ながらとまりません。
839デフォルトの名無しさん:2006/05/16(火) 18:52:34
ちなみに、ghciはwindows版です。
840デフォルトの名無しさん:2006/05/16(火) 19:05:48
俺はghc-6.4.1をWindowsXPのcmd.exeから使ってるけど、Ctrl+Cは普通に効く。
UNIX系のシェルから使ってるならghcii.shをghci.exeの代わりに使うと良いらしいが。
841デフォルトの名無しさん:2006/05/16(火) 21:15:49
Hugs May 2006きた。正式なWindows版がある。



WindowsのHugsって多バイト文字を扱えないんだな。知らなかった。
842デフォルトの名無しさん:2006/05/16(火) 22:19:02
>>837
ロンチック止まらなくなりますた!
843デフォルトの名無しさん:2006/05/16(火) 22:40:48
>>841
HGLが動かなくなりますた。(つД`)
WinHugs Beta3では動いてたのに。
844デフォルトの名無しさん:2006/05/16(火) 22:53:58
>>838
それで止まったのか?
845デフォルトの名無しさん:2006/05/16(火) 23:14:31
>>836
どんな無限リストなの?
846デフォルトの名無しさん:2006/05/17(水) 00:40:26
誰か寂しい私をHugsして。
847デフォルトの名無しさん:2006/05/17(水) 01:04:59
誰か私をGHQの様に占領して
848Haskell初心者:2006/05/17(水) 02:40:33
hIDEのビルドってどうやんの?
CabalとMakefileとbuild.shとSetup.lhsの関係がよくわからん。精進せねば。
darcsってのも始めて使った。Subversionみたいなもんかな。何かが違うんだろうけど。
849デフォルトの名無しさん:2006/05/17(水) 05:45:00
鳳たんの blogより:

Linspire's OS team standardizes on Haskell
http://pugs.blogs.com/pugs/2006/05/linspire_os_tea.html

乱用され気味じゃね? と心配してみる
850デフォルトの名無しさん:2006/05/17(水) 12:14:04
>>848
Cabal しか知らんが。

http://www.haskell.org/cabal/
http://www.haskell.org/ghc/docs/latest/html/Cabal/builders.html

runhaskell Setup.hs configure
runhaskell Setup.hs build
runhaskell Setup.hs install

ちゃんと Cabal されていれば、これですべてよし。
ドキュメントも一読の価値はあるのでおすすめ。
851デフォルトの名無しさん:2006/05/17(水) 16:55:45
>>849
社内に関数プログラマが多く O'Caml を使ったりしてましたが、
O'Caml から Haskell に転向しましたってことだから、別にふつー。
最近の Haskell 人気を見ると O'Caml からの転向組は多そう。
852デフォルトの名無しさん:2006/05/17(水) 21:19:02
>>851 何の仕事してると?
853デフォルトの名無しさん:2006/05/17(水) 21:26:25
>>852
Linspire の話でした。
Linspire がO'Caml から Haskell に転向したって話。
854デフォルトの名無しさん:2006/05/17(水) 21:59:11
すまん、よくレスよんでなかった・・・
855デフォルトの名無しさん:2006/05/17(水) 22:39:30
ライブドア社員キター?
856848:2006/05/17(水) 23:14:44
>>850
ども。runhaskell Setup.lhs configureでConfigがないよと怒られるのは
「ちゃんとCabalされていれば、」の前提が満たされてないのだろうと理解。
Gentooのportageで突っ込んでるだけなので問題点を解決できるまでには遠そうです。

Config.hsを欲しがってるらしいけど、どこから持ってくればよいものやら。
857デフォルトの名無しさん:2006/05/19(金) 01:46:10
hugsでChurch数の計算をやろうとしてみた。

two f x = f (f x)
three f x = f (f (f x))
dec n f x = n (g h->h (g f)) (_->x) (i->i)
sub a b = b dec a

と定義して、sub three twoを評価させると以下のエラー

Main> sub three two
ERROR - Type error in application
*** Expression : sub three two
*** Term : two
*** Type : ((a -> e -> g) -> a -> e -> g) -> (a -> e -> g) -> a -> e -> g
*** Does not match : ((((a -> b) -> (b -> c) -> c) -> (d -> e) -> (f -> f) -> g) -> a -> e -> g) -> (a -> e -> g) -> a -> e -> g
*** Because : unification would give infinite type

OCamlではこんな感じで対策してるけど、
http://ocaml.jp/archive/document/church.html
Haskellではどうすればいいんだろ?
858デフォルトの名無しさん:2006/05/19(金) 03:03:39
859858:2006/05/19(金) 03:23:04
↑に載ってるdecはタプルを使ってるので、857のdecで定義する場合は

dec (Ch n) = Ch (\f x -> n (\ g h->h (g f)) (\ _->x) id)

でOK

Main> sh $ sub three two
1
860デフォルトの名無しさん:2006/05/19(金) 04:18:25
>>779
http://www.cbook24.com/bm_detail.asp?sku=4797336021
こっちでは6月1日発売になっております。
861デフォルトの名無しさん:2006/05/19(金) 18:58:44
>>860
配本が31日、発売が1日ということのようです。
もうすぐですね。
862デフォルトの名無しさん:2006/05/19(金) 20:13:06
はじめてのC
ふつうのH
863デフォルトの名無しさん:2006/05/19(金) 21:23:55
自分のセックスに自信がない奴が買いそうなタイトルだな。ふつうのH
864デフォルトの名無しさん:2006/05/19(金) 21:39:12
ふつうじゃないHが溢れる世の中にふつうって何だよって気になったりするのかね
865デフォルトの名無しさん:2006/05/20(土) 09:25:45
WinHugs May 2006、アンインストールできない。エラーで落ちる。
新手の嫌がらせか?
866デフォルトの名無しさん:2006/05/20(土) 12:18:12
Haskell教に感染したので状態の変更はできなくなりました。
867デフォルトの名無しさん:2006/05/20(土) 12:57:49
hugsはもうつかわねー
868デフォルトの名無しさん:2006/05/20(土) 13:21:46
ももももう待てない><
869デフォルトの名無しさん:2006/05/20(土) 22:53:18
なんでHaskell微妙にブームなの?
870デフォルトの名無しさん:2006/05/20(土) 23:16:39
裏で手を引いてる奴がいるんだよ
871sage:2006/05/20(土) 23:24:27
>>869
私見レスだけど,
「純粋関数型」という小難しさがギークを自認する人々を惹き付けるのだと思う。
昔はC++がその役割を果たしていたのだけど(自分を含め踊らされた人の何と多い事か)。
# .NETやJavaがある今,わざわざMFCの為にC++を覚えようと言う人間も少ないし,
# C++の「正しい」コーディング法だとかも固まって来た感がある。

逆にOCaml本が出ないのは,call by valueなのである程度動きの予測がつくからかな?
実用性からいえばOCamlのほうが断然分があると思うのだけど。
872871:2006/05/20(土) 23:25:34
sage失敗…逝ってきます
873デフォルトの名無しさん:2006/05/20(土) 23:29:06
>>872
これからはsageさんと呼ばせてもらうよ
874デフォルトの名無しさん:2006/05/20(土) 23:30:11
賢者なんだね。
875デフォルトの名無しさん:2006/05/21(日) 00:14:20
OCaml本もいいが、ページの半分近くがObjectの説明に費やされたら俺は切れる。
876デフォルトの名無しさん:2006/05/21(日) 07:08:32
MFCてw
877デフォルトの名無しさん:2006/05/21(日) 08:06:14
GHC 6.4.2のWindows版が消えてるけど何か問題あったの?
878デフォルトの名無しさん:2006/05/21(日) 15:27:15
>>871
># C++の「正しい」コーディング法だとかも固まって来た感がある。
個人的にはかなり異議あり.
879デフォルトの名無しさん:2006/05/21(日) 15:30:53
>>878>>295によると、
正しさというのも、私にとって正しい、あなたにとって正しくない、その程度の差なのではないでしょうか?
880さげ:2006/05/21(日) 20:37:44
>>878
正しい,というのは違ったかもしれない。
今更ながらC++のコーディング規約に関わる本が沢山出ているなあ,という実感から書きました。

あと>>876のレスに困惑。MFCはオブジェクト指向じゃないとかそういう話がしたいのだろか?
C++Builderの方がイイヨーとかWindows系以外にも目を向けろとかそういう話?まあいいか。
881デフォルトの名無しさん:2006/05/21(日) 20:52:27
モナドの合成をマスターすれば、Haskell をマスターできる。
882デフォルトの名無しさん:2006/05/21(日) 20:54:05
渋谷の女子高生の間でモナドを合成するのが流行ってるらしい
883デフォルトの名無しさん:2006/05/21(日) 21:28:02
call by valueなλ計算のモデルがco-productとstrong monadで作れることが
わかれば、Haskellをマスターできる。
884デフォルトの名無しさん:2006/05/21(日) 21:44:46
λ.......
            λ......

    λ.........
885デフォルトの名無しさん:2006/05/21(日) 21:45:38
λと入の違いが分かればHaskellをマスターできる
886デフォルトの名無しさん:2006/05/21(日) 22:58:06
>>871
.NETとJavaてw
887デフォルトの名無しさん:2006/05/21(日) 23:14:12
>>886 何を持って笑ってるのかわからんな
888デフォルトの名無しさん:2006/05/22(月) 01:53:22
>>887
え?笑っているように見えた?
889デフォルトの名無しさん:2006/05/22(月) 05:00:13
>>886-888
ここで喧嘩するなよw
890デフォルトの名無しさん:2006/05/22(月) 06:37:27
OSの書けない言語なんて存在すらしてない
891デフォルトの名無しさん:2006/05/22(月) 07:21:36
>>889
安易に喧嘩認定し杉
892?:2006/05/22(月) 09:08:59
いや,喧嘩でしょー.しつこい>>886とか.煽りで怒りを買っているというか.別にいいけど
893デフォルトの名無しさん:2006/05/22(月) 09:12:32
誤解招く書き方する奴もよくないけど
炊きつける奴もよくない
894デフォルトの名無しさん:2006/05/22(月) 09:21:03
このスレで煽ろうが喧嘩しようが構わないと思うが、すれ違いな話題は止めてくれ。
895デフォルトの名無しさん:2006/05/22(月) 09:49:51
遅レスながら>>675-676にワロタ
896デフォルトの名無しさん:2006/05/22(月) 12:04:04
Haskellやってる人の平均的プロフィールってどんな感じ?
897デフォルトの名無しさん:2006/05/22(月) 12:54:30
大学院生が多いと思ってた(というか東大か京大ばかりだと思ってた.私は違うけど
でも>>871みたいに他言語使いの例があるなら分からないな
898デフォルトの名無しさん:2006/05/22(月) 13:10:49
東大京大て…一体どんな根拠があってそんな考えに至ったんだよw
無駄にトップクラスの大学挙げてくる辺りが学歴厨くさいな。
899デフォルトの名無しさん:2006/05/22(月) 13:17:10
自分は、Haskellやろうと思ったけど、HaskellをせずにLispをやり始めた。
ていうかチャイティンの本が面白いんでそうなった。
Haskellの勉強会に出てるのは、良く分からんけど、
学生とか変わった会社員とかと言う感じっぽいな。
900デフォルトの名無しさん:2006/05/22(月) 13:57:41
>>898
>東大京大て…一体どんな根拠があって
う〜ん,根拠かあ.webページとかICFPとか見てて浮かんだ憶測だけど,全くの当て推量ではないです.
あと学歴厨って言葉は久しぶりに聞いた.よくそんな言葉を恥ずかしげもなく吐けると思うよ.
そんなに気分が悪いの?怒ってるの?
901デフォルトの名無しさん:2006/05/22(月) 14:20:07
学歴コンプレックスって言ってやった方が良かったですか?(笑)
902デフォルトの名無しさん:2006/05/22(月) 14:41:59
はぁー,自分が低脳・低学歴だからって他人を僻むのはみっともないよ.
もっと大人になった方がいいんじゃないかな.
903デフォルトの名無しさん:2006/05/22(月) 15:11:30
そこらへんでやめておけ
904デフォルトの名無しさん:2006/05/22(月) 15:17:10
すまんな。俺がどうでも良い質問をしたばっかりに。
905デフォルトの名無しさん:2006/05/22(月) 15:23:39
いや,むしろおれが悪かった.
みんな,ごめん.
906デフォルトの名無しさん:2006/05/22(月) 16:25:30
>>904
お前いい奴だな。
907デフォルトの名無しさん:2006/05/22(月) 17:34:23
なんて、うそよねん
908デフォルトの名無しさん:2006/05/22(月) 18:12:55
>>895
どこが面白いのかわからない…
909デフォルトの名無しさん:2006/05/22(月) 18:48:59
涼宮ハルヒって何か知らんが、最近興味が出てきたよ。
何とか見ないように我慢してるけど。
910デフォルトの名無しさん:2006/05/23(火) 03:05:16
いや、ハルヒたらはどうでもいいんだけどね
911デフォルトの名無しさん:2006/05/23(火) 04:19:48
もう片方のハルヒはいいぞ。
912デフォルトの名無しさん:2006/05/23(火) 07:42:15
Haskell使いは高学歴アニヲタの傾向あり、と
913デフォルトの名無しさん:2006/05/23(火) 08:14:50
Haskellの話題で盛り上がれよ。
914デフォルトの名無しさん:2006/05/23(火) 16:12:47
最近、代入を多用した他の言語で書かれたプログラムと同じ動作をするものをHaskellで書きました。それでStateモナドの使い方が分からないので無限ストリームを使ってみたのですが、無限ストリームは分かりづらいからStateモナド使えと言われました。

無限ストリームを使うよりもStateモナドを使った方がHaskellらしいのでしょうか?
教えて下さい。

915デフォルトの名無しさん:2006/05/23(火) 16:35:05
ストリームとStateモナドのどっちを使うか迷うという状況を想像できんのだが。
例えばどんなコード?
916デフォルトの名無しさん:2006/05/23(火) 16:39:04
Haskellで他の言語のVM作っていて、命令が実行される毎にそのVMのレジスタの値を変更するようなコードです。

全てのVMの状態がならんだストリームを作って、ある状態のVMを返すってなコードを作ってました。
917デフォルトの名無しさん:2006/05/23(火) 17:10:38
そのVMがレジスタの値以外に内部状態を持たないなら、
Stateモナドやストリームを使っても特に嬉しくないんじゃないか?
そういう場合は、
nextState :: Code -> RegisterState -> RegisterState
みたいな状態更新関数を作るのが自然なような気がする。

役に立たない回答ですまん。
918デフォルトの名無しさん:2006/05/23(火) 17:13:01
> Stateモナド使えと言われました。
そう言ってくれる人がいることが羨ましい。
919デフォルトの名無しさん:2006/05/23(火) 19:11:20
>>914
その辺は好みじゃないかなぁ。
具体的なものを見てみないとわからないけど。

あえて言うなら、将来他のモナドと組み合せて使うならモナドで書いておいた方が良いかもしれない。
920デフォルトの名無しさん:2006/05/23(火) 19:12:29
> そのVMがレジスタの値以外に内部状態を持たないなら〜特に嬉しくない
なんで?「レジスタの値以外に内部状態を持たないなら」という前提がよくわからない。

どちらにせよStateモナドはかなり嬉しいと思う。
nextState :: Code -> RegisterState -> RegisterState
... let new = nextState code old in ...
と書くより,
nextState :: Code -> State RegisterState ()
として,
... do
nextState code
とやったほうが明示的に状態を持って回らなくて楽じゃん。
All About MonadsのState Monadの「動機」が分かりやすい:
ttp://www.sampou.org/haskell/a-a-monads/html/statemonad.html#motivation

むしろ自分としては
> 全てのVMの状態がならんだストリームを作って、ある状態のVMを返すってなコード
こっちの書き方が気になる。コード貼って欲しいです。
921デフォルトの名無しさん:2006/05/23(火) 19:18:58
> 将来他のモナドと組み合せて使うならモナドで書いておいた方が良い
これ読んで思ったのだけど,例えばStateなら,
nextState :: (MonadState RegisterState m) => Code -> m ()
みたいに,より一般的に定義するって手があるよね
これなら
nextState :: Code -> State RegisterState ()
nextState :: (Monad m) => Code -> StateT RegisterState m ()
この両方の型が付けられる (←表現あってる?)。

ただ,読みにくくなる(と僕は思う)し,ムキになって一般化するよりも,
使いどころは考えないとな,というのがプログラマの印象。
922デフォルトの名無しさん:2006/05/23(火) 19:21:49
あ,MonadStateは
http://www.haskell.org/ghc/docs/latest/html/libraries/mtl/Control-Monad-State.html
こっちみてください。でも既にfundepsとか使ってあって,ちょっとわかりにくいか…
923デフォルトの名無しさん:2006/05/23(火) 20:03:15
>>920
>「レジスタの値以外に内部状態を持たないなら」という前提がよくわからない。
ごめん。余り意味のない前提だったから忘れてくれ。

>どちらにせよStateモナドはかなり嬉しいと思う。
>(...)
>とやったほうが明示的に状態を持って回らなくて楽じゃん。
それが嬉しいのはRegisterStateを変化させるコードがnextStateの他にあって、そこから
nextStateを呼び出したい場合だけじゃないか?
nextStateはレジスタの状態を1クロック進めるVMの本体であって、
他にレジスタをいじるコードはほとんどないと仮定したんだがどうだろうか。

仮にnextStateをStateモナドから呼び出したいことがあったとしても、
monadicNextState :: Code -> State RegisterState ()
monadicNextState code = modify (nextState code)
みたいに定義しておけばいいので、nextState自体をStateモナドで書く理由にはならないと思う。

…しかし、nextStateの実装にStateモナドを使って嬉しいことは普通にあるような気がしてきた。
複数のレジスタ操作アクションを組み合わせてnextStateを書く場合とか。
924デフォルトの名無しさん:2006/05/23(火) 20:59:10
要するに,nextStateにどんな型を持たせるか,というのは,
nextStateを使う側がどんな風に呼び出しているか,って事でそ?
Code -> State RegisterState () も Code -> RegisterState -> RegisterStateも同型な訳で,
どっちでも使いやすいほうでいい.>>923でも良いし,それはここでは別問題な気がする.

ここでは「VMを作るけど実装のうえで状態の扱いをどうするか?」という質問なので
「それならStateモナドがいいんじゃね?」という答えはストレートで合ってると思う.

処理の全体を表す関数がどんな型を持っているかは,わりとどうでもいいと思う.なんでもいいけど
925デフォルトの名無しさん:2006/05/23(火) 21:05:51
s->(a,s)もState s aも同型だろうよ
926デフォルトの名無しさん:2006/05/23(火) 21:27:39
>処理の全体を表す関数がどんな型を持っているかは,わりとどうでもいいと思う.
これには同意するけど、nextStateはいま問題になっている「処理の全体を表す関数」じゃない。
>>914は「処理の全体を表す関数」をストリームで書くかStateモナドで書くかという問題を提起していて、
それに対して>>917で、nextStateを用意して、それを使って「処理の全体を表す関数」を書いたらいいんじゃないか、と提案した。
この方針が採用されたとして、nextStateの実装にStateモナドを使うかどうかは、また別の話だろ。
927デフォルトの名無しさん:2006/05/23(火) 21:58:09
もういいよ
928デフォルトの名無しさん:2006/05/23(火) 23:02:50
>nextStateの実装にStateモナドを使うかどうかは、また別の話だろ。
その「別の話」が聞きたかったんじゃないのか.
だからStateモナドを使えば状態の管理が楽なんだよ,と答えたんじゃないの

というか処理の全体って何だよ
nextStateだか何だか知らないけど,おまいらどういう文脈を仮定しているのかと
929デフォルトの名無しさん:2006/05/23(火) 23:06:13
自分(>>914)から話題をふっておきながら,返事が遅れてしまい申し訳ありません。

私が疑問に思ったのは以下のようなことです.

  スタックやレジスタを持つVMがいくつかの関数から参照されているとき,
  そのVMの中のレジスタだけを変化させて他の関数にその変化を反映させた
  い時,Haskellではそれをどのように解決するのかが疑問に思いました。

これはStateモナドを使えば可能ということでしょうか?
Haskellで代入のような状態変化を表現するのに私は無限ストリームを使う方法しか知らなく,他にもっと良い方法があるのか疑問に思ったので質問しました.
無限ストリームを使って上記のようなことをできるのであればその方法も教えて頂きたいです.
930デフォルトの名無しさん:2006/05/23(火) 23:07:30
それと私が書いたコードは以下のような感じです(若干略していますが)。

data VM = VM Stack RegisterTable

runVM :: VM -> Codes -> VM
runVM vm codes = selectUnChangedVM $ generateAllVM vm codes
    where
      selectUnChangedVM :: [VM] -> VM
      selectUnChangedVM (vm1:vm2:vms)
          | vm1 == vm2 = vm1
          | otherwise = selectUnChangedVM (vm2:vms)
      generateAllVM :: VM -> Codes -> [VM]
      generateAllVM vm codes = iterate (execOne codes) vm

execOne :: Codes -> VM -> VM
execOne codes vm = newvm
    where
      code = selectCode vm codes
      newvm = execCode code vm

やっていることは以下の通りです.

  (1) 1クロックごとのVMの状態を持つ無限ストリームを生成
  (2) その中で次のクロックに移っても状態が変わっていないVMを見付けてそのVMを返す
931デフォルトの名無しさん:2006/05/23(火) 23:09:22
そんなことより>>883の解説きぼん
932デフォルトの名無しさん:2006/05/23(火) 23:13:35
>>930
止まる,というのを,「VMの状態が変化しないこと」としているのは,どうなんだろう。
普通はhalt命令とか入れるんでわ
933デフォルトの名無しさん:2006/05/23(火) 23:15:30
というか後々副作用を導入する為にStateT IOで書くってのはどうよ
934デフォルトの名無しさん:2006/05/23(火) 23:35:11
data RegisterTable = RegisterTable {r1::Int, r2::Int, pc::Int, sp::Int}

updateR1 :: Int -> State RegisterTable ()
updateR1 v = do
old <- get
put (old {r1=v})

jump addr = do
old <- get
put (old {pc=addr})

めんどくさくなってきた…かなり反復気味のコードねコレ。良策求む。

ところでこのまま行って State VM a の a は () 以外に何かありえるのかな?
全部状態更新しかしない (State VM Bool などを使わない) ならState使う意味がない気がする
935デフォルトの名無しさん:2006/05/24(水) 00:20:52
>>930
俺はそのままで問題ないと思う。execCodeの処理が複雑なら
そこだけ>>934みたいにStateモナドを使って実装してもいいかも知れないが。

それはごく普通のストリームの使いかただから、
これが分かり辛いと言う奴はHaskellに慣れてないだけなんじゃないだろうか。
936デフォルトの名無しさん:2006/05/24(水) 00:36:13
まあでもVMを状態の無限ストリームで実装すると聞いたらびっくりするんじゃないだろうか。
実際>>930のコード読むまで私は質問者がどう実装したのか分からなかった。

あと,モナドなら>>933が言っているように(?)、
将来VMから環境に副作用を及ぼす(ファイル入出力やコンソール出力など)ように拡張したい場合、
StateTとIOと合成すれば一発、とかちょっとエレガントじゃなかろうか。やってないので分からんけど
937デフォルトの名無しさん:2006/05/24(水) 00:53:32
>>932
アセンブラの演習とかで,終了を
halt:
 jmp halt
みたいに書くのはよくある。

Stateモナドは状態の履歴を持たないから、この場合に無限ストリームを使うのは結構賢いかも
938デフォルトの名無しさん:2006/05/24(水) 01:29:59
ネタだけど、あとあと入出力を扱うためにもなでぃっくなストリームをつかう、とか
newtype MonadStream m a = MS (m (a, MonadStream m a))
type Stream = MonadSteram Identity
type IOStream = MonadStream IO
939デフォルトの名無しさん:2006/05/24(水) 07:33:04
MLとかMirandaの話になってしまうが、
モナドがない頃は、無限ストリーム専門だったよ…
940デフォルトの名無しさん:2006/05/25(木) 00:37:27
   λ,,,,,,λ ガオー!
  ∩`iWi´∩ λ,,,,λ グオー!
  ヽ |m| .ノ∩`iWi´∩
   |  ̄| ヽ |m| .ノ
   |   | |  |
   U⌒U  U⌒U
941デフォルトの名無しさん:2006/05/28(日) 21:47:49
Haskell面白そうなんだけど、サーバプログラム書けるのかな?
50本から100本くらいのソケットを効率良く処理したいから、
UNIXのselectシステムコールみたいな操作使って、
多重化したI/Oを準備OKなやつを片っ端からてきぱきさばきたいんだけど、
そういう処理って書けて効率良く実行できるのかな?

あと、XMLも扱いたいけどライブラリはどれくらいあるの?

さらに、通信部分とは別のところで、ユーザといろいろインタラクション
するためのスレッドをたくさん動かして、スレッド間で複雑に相互作用が
あるんだけど、そういった処理も書きやすいのかな?
942デフォルトの名無しさん:2006/05/28(日) 21:52:47
そうそう、Haskel用のGUIは何がお勧めかな?Linuxで動けばいいよ。
Fedora Core 5のextrasリポジトリに
ghc-gtk2hs-0.9.10-1.fc5.i386.rpmってのがあって、
GTK+のHaskellバインディングみたいだけど、これって使いものになる?
関数型のプログラミングスタイルとずれるところはあるの?
943デフォルトの名無しさん:2006/05/28(日) 22:47:42
ん? とりあえず出来なさそうなことを色々挙げてみる煽りかな?
944デフォルトの名無しさん:2006/05/28(日) 23:00:28
んーん。このスレ見てたらなんだか面白そうな言語だから勉強したく
なったけど、単なる計算じゃなくて、もっと実践的な仕事まで視野に入れると
どれくらい使いものになる言語なんだろうって知りたい。
実践っていっても、今仕事で書いてるようなプログラムをHaskellでも
書けるかって観点で最低限を書き出したら>>941-942みたいになったよ。
945デフォルトの名無しさん:2006/05/28(日) 23:13:20
XMLで通信するMMOゲームでも作ってんのか>>944氏は。
946デフォルトの名無しさん:2006/05/28(日) 23:35:22
デイトレ用のプログラムと見た。
947デフォルトの名無しさん:2006/05/28(日) 23:42:13
誰も答えないので分かる範囲で。あまり信用しないでくれ。

>Haskell面白そうなんだけど、サーバプログラム書けるのかな?
書けると思われ。

>そういう処理って書けて効率良く実行できるのかな?
ちょっと探してみたけどselectはなさそうだった。
必要ならシステムコールを呼べばいい。効率はしらね。
どっちかというとfdの数だけ(ユーザレベルの)スレッドを用意するのが推奨されてるような気もする。

>あと、XMLも扱いたいけどライブラリはどれくらいあるの?
有名なのは2つかな。

>あるんだけど、そういった処理も書きやすいのかな?
書きやすいと思う。

>そうそう、Haskel用のGUIは何がお勧めかな?Linuxで動けばいいよ。
Gtk2HsとWxHaskellの二択だろう。ちゃんと使った訳じゃないので評価はパス。

>関数型のプログラミングスタイルとずれるところはあるの?
微妙。少なくとも宣言的なGUIプログラミングができる訳ではない。
948デフォルトの名無しさん:2006/05/28(日) 23:49:06
>>945>>946
どっちもちがうよ。詳しくは言えない。

>>947
おぉおぉ!ありがとうっす。そこそこ実践的にも使えるんだね。
ユーザレベルのスレッドってコルーチンみたいなやつかな?
wxHaskellなんてもんもあるんだ。そりゃいい!
wxWidgetsはwxPython通して使ったことあるけど、
LinuxでもWindowsでも多少の変更で対応できるのがいいよね。

949デフォルトの名無しさん:2006/05/29(月) 00:57:36
なんかどっかでConcurrent Haskellの並行機構を使えばselectとか要らんよ,
というのを英語で読んだ気がする 本家MLかなあ
950デフォルトの名無しさん:2006/05/29(月) 11:30:12
まだHaskellはできることが少ないっていう認識&広告でいいと思う。
あとスピードも保障できないってことで。その代わりにたくさんメリットがあるわけだし。
951デフォルトの名無しさん:2006/05/31(水) 15:17:05
ふつうのHaskell買った人いる?
952デフォルトの名無しさん:2006/05/31(水) 15:19:46
すっかり忘れてた
953デフォルトの名無しさん:2006/05/31(水) 17:12:41
ほほほ本ののちちょちょ調子ははどどどうだっ!??
954デフォルトの名無しさん:2006/05/31(水) 17:14:03
まさに本調子でした
955デフォルトの名無しさん:2006/05/31(水) 18:09:39
早速立ち読みしてくるか
956デフォルトの名無しさん:2006/05/31(水) 18:39:39
おい明日発売じゃないかよ!
騙したな!
957デフォルトの名無しさん:2006/05/31(水) 20:00:58
>>954
誰が上手い事を言えと
958デフォルトの名無しさん:2006/06/01(木) 00:04:31
>>956
同志!!

俺は、近所の本屋、2、3軒のぞきに行っちゃったぜ。
959956:2006/06/01(木) 03:41:24
>>958
ごめん…実はアマゾンで調べたら明日って事になってたから
実は本屋に行かなかったんだ…
960デフォルトの名無しさん:2006/06/01(木) 10:42:12
こがいだんでも、haskellができるのに。
961デフォルトの名無しさん:2006/06/01(木) 18:20:19
ほほほ本の調子はどどどどう!!?
962デフォルトの名無しさん:2006/06/01(木) 18:25:22
著者はこのスレ覗くの?
963デフォルトの名無しさん:2006/06/01(木) 18:31:47
当たり前。
964デフォルトの名無しさん:2006/06/01(木) 20:44:29
配本とかさ、混乱させるようなこと書かないで欲しい
わざと一般的な書き方しなかったのかな
965デフォルトの名無しさん:2006/06/02(金) 03:04:27
亀レスですまんが、

>>684
Haskellのリストで二分検索ってできるの?
二分検索というからにはO(logN)じゃないと意味がないと思うんだが、
lengthだの!!だの使っている時点でO(N)を越えている気がしてならない。
966デフォルトの名無しさん:2006/06/02(金) 03:14:12
二分探索は配列用のアルゴリズムだからなぁ。
Haskell なら最初から二分木作った方がいいと思われ。
967デフォルトの名無しさん:2006/06/02(金) 17:47:57
ビックカメラに置いてあったので買いました。
かなり分かりやすそうです。
968デフォルトの名無しさん:2006/06/02(金) 17:48:37
969デフォルトの名無しさん:2006/06/02(金) 17:56:33
山積みの「ふつうのHaskell」と3冊「入門Haskell」があったけど、、、、

「入門Haskell」売れまくりだな!!
970デフォルトの名無しさん:2006/06/02(金) 18:25:22
入門Haskellは名前からして初心者が買いそうだけど、名前に釣られたやつら乙って感じだな。
ふつうのHaskellプログラミングの方がまだまし。
971デフォルトの名無しさん:2006/06/02(金) 19:24:22
著者さん乙
972デフォルトの名無しさん:2006/06/02(金) 19:29:33
ふつうのHaskell amazonから発送乙
973デフォルトの名無しさん:2006/06/02(金) 21:14:24
読んでみた。この本すげーよ。特に第一部は神。
例に沿っていくうちに、極めて自然に構文や標準関数を導入している。
ただ、どっちかというと言語とライブラリの解説が主で、自分でコードを書くための
訓練には余り重点が置かれていないようだ。

しかし、IOモナドの説明がうんこ(世界を持ち出す)なのと、評価と実行を混同してるのは
わざとなんだろうか。特に後者は方便の域を越えると思う。最後まで訂正されないし。
974デフォルトの名無しさん:2006/06/02(金) 21:26:19
本当に、マジ分かりやすいね。
ふつうのLinuxまで読みたくなった。
(これだと某有機氏の本は不要かもって思った。)
975デフォルトの名無しさん:2006/06/02(金) 22:02:45
「神」とか「うんこ」とか、アホみたいな文体やめろ。
976デフォルトの名無しさん:2006/06/02(金) 22:04:40
2ch特有の言い回しだろ、と
977デフォルトの名無しさん:2006/06/02(金) 22:14:24
>>975
適切だと思ったから使ったんだよ。悪いかよ。
勝手に脳内変換して読んでろハゲ。
978デフォルトの名無しさん:2006/06/02(金) 22:21:31
入門書はいいから、もっと実のある本を書いてくれ。
979デフォルトの名無しさん:2006/06/02(金) 22:23:23
少なくとも、Haskellバリバリに使い込んでる人が書いてくれよ。
980デフォルトの名無しさん:2006/06/02(金) 22:25:10
そんな奴日本にいない
981デフォルトの名無しさん:2006/06/02(金) 22:30:52
女子高生は仲間同士のメールでHaskellしてるらしーぞ
982デフォルトの名無しさん:2006/06/02(金) 23:32:39
975はうんこ
983デフォルトの名無しさん:2006/06/02(金) 23:38:31
>>978
入門者以外なら論文読むと良いよ。
984デフォルトの名無しさん:2006/06/02(金) 23:39:06
>>980
日本どころか世界中でもほとんどいない。
985デフォルトの名無しさん:2006/06/02(金) 23:39:57
「論文など実用的でない」とレスするに一票
986デフォルトの名無しさん:2006/06/02(金) 23:42:58
>>984
ダブルSimonは例外
987デフォルトの名無しさん:2006/06/02(金) 23:44:38
どうせみんな見栄で買ってるんだろ。w
本当は理解できてないと正直に言いなさい。
988デフォルトの名無しさん:2006/06/02(金) 23:50:44
ミエで買うなら入門書の類は選ばないと思うが・・・
989デフォルトの名無しさん:2006/06/03(土) 00:15:08
あほみたいな文体は、隔離しておかないと、うつるからな。
知らないうちに、うんこ、うんこが口癖になるからな。
990デフォルトの名無しさん:2006/06/03(土) 00:20:56
うんこー
991デフォルトの名無しさん:2006/06/03(土) 00:36:22
>>987
そんな難しいか?
992デフォルトの名無しさん:2006/06/03(土) 00:45:30
うんこのまま1000まで突入
993デフォルトの名無しさん:2006/06/03(土) 00:49:53
うんこ
994デフォルトの名無しさん:2006/06/03(土) 00:55:08
うん、このまま1000まで突入
995デフォルトの名無しさん:2006/06/03(土) 00:58:06
関数型プログラミング言語Haskell Part5
http://pc8.2ch.net/test/read.cgi/tech/1149263630/
996デフォルトの名無しさん:2006/06/03(土) 01:00:58
>>995
乙うんこ
997デフォルトの名無しさん:2006/06/03(土) 01:11:01
日本でHaskellの本が一気に2冊出たことを本家haskell.orgに知らせたら喜ぶのではなかろうか
998デフォルトの名無しさん:2006/06/03(土) 01:13:18
Haskell Weekly Newsぐらいには出て然るべき
999デフォルトの名無しさん:2006/06/03(土) 01:13:52
999
1000デフォルトの名無しさん:2006/06/03(土) 01:15:08
1000 なら Haskell が天下を取る
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。