【数学者】Haskellはクソ言語【オナニー】

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
C/C++>>>>(越えられない壁)>>>Haskell
2デフォルトの名無しさん:2005/09/30(金) 01:36:14
2
3デフォルトの名無しさん:2005/09/30(金) 01:42:53
そもそもC/C++とHaskellを同列に比較しようという時点で>>1は池沼。
4デフォルトの名無しさん:2005/09/30(金) 01:46:03
親が4様かっこいいとか言ってる(泣き
5デフォルトの名無しさん:2005/09/30(金) 04:40:27
すげー直感的に意味不明。

qsort [] = []
qsort (x:xs) = qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
  where
   elts_lt_x = [y | y <- xs, y < x]
   elts_greq_x = [y | y <- xs, y >= x]

6デフォルトの名無しさん:2005/09/30(金) 07:48:30
単位もらえずに逆恨みかい?プゲラ
7デフォルトの名無しさん:2005/09/30(金) 09:32:51
名スレ
8デフォルトの名無しさん:2005/09/30(金) 10:08:59
>>5
それが直観的に理解できないということは素養が足りない。かなりやばい。
日本語にすると理解できたりする?

qsort [] = []
qsort (x:xs) = qsort x未満の要素 ++ [x] ++ qsort x以上の要素
  ここで
   x未満の要素 = [y | y <- xs, y < x]
   x以上の要素 = [y | y <- xs, y >= x]

クイックソート自体を知らない奴でもこれで理解できるだろうというくらい
わかりやすいと思うが。
9デフォルトの名無しさん:2005/09/30(金) 10:49:15
C/C++で実装されているperl6は近年最強のベイパーウェアと化していたが、
Haskellで実装されたperl6は既に動いている。
よってHaskell>>>超えられない壁>>>C/C++
10デフォルトの名無しさん:2005/09/30(金) 14:34:49
アホの言う「直感的」=「自分の知ってるものに似ている」
11デフォルトの名無しさん:2005/09/30(金) 17:17:55
>>10
同意
12デフォルトの名無しさん:2005/09/30(金) 17:48:56
>>9
じゃなんでゲームプログラマーはHaskell使わずにC/C++使うの?
13デフォルトの名無しさん:2005/09/30(金) 18:36:47
なんで突然「ゲームプログラマー」がでてくるんだろう。
14デフォルトの名無しさん:2005/09/30(金) 18:41:36
ゲーム→ウェブブラウザ上で動くゲーム→CGI == Perl
                              ~~~
15デフォルトの名無しさん:2005/09/30(金) 20:12:54
ウェブブラウザ上で動くゲームといえば
爆裂ブロック崩し→Java
脱出系ゲーム→Flash == ActionScript
じゃないのか

っていうか、俺、Javaってほぼそのためだけにインストールしているような希ガス(w
16デフォルトの名無しさん:2005/10/01(土) 08:51:00
haskellってどんな用途で使われているの?
銀行業務とかの大量バッチとかでは使わないよね。
17デフォルトの名無しさん:2005/10/01(土) 14:04:02
>>16
素因数分解とか...
なんか数学者がアルゴリズムを思いついてパッと評価したいときに
使われるような言語というイメージを持っているんだけど..
18デフォルトの名無しさん:2005/10/01(土) 21:45:06
>>17
スレタイ通り、数学者に特化しか言語ってことですか。

おれみたいなデジドカに縁は無さそうだ。。。
(勉強すれば世界は広がるだろうがね)
1918:2005/10/01(土) 21:45:55
>>18
特化しか、だってw
特化した、ね。
20デフォルトの名無しさん:2005/10/01(土) 22:48:33
まぁこういうスレたてる奴はC/C++自体まともにつかえるのかね?
すこし疑問だ。
まともプログラム組めないのに中途半端に手を出してる気がする。
21デフォルトの名無しさん:2005/10/01(土) 23:42:48
haskellは美しい言語だと思うが
それを"Cで実装すると予想される遅さ"程度に遅い
22デフォルトの名無しさん:2005/10/02(日) 00:01:51
>>20
デジドカにとって最もすばらしいのはどんなに変に書いてもバグがでず、なおかつ理由は良く解らないが難しいという事で単価の上がる言語の事

・・・COBOLか
23デフォルトの名無しさん:2005/10/03(月) 12:54:36
>>12
C/C++と比較して遅い、メモリ食いすぎだからゲームには不向きなんだろうな。
そしてなによりプログラマの絶対数が少ないのがネック。
一方でPagsの例しかり、言語処理系の実装には最強?

>>20
むしろ1はHaskellerで、この優れたマイナー言語に目をひくように
あえて煽るようなスレを立てたような希ガス
24デフォルトの名無しさん:2005/10/03(月) 15:37:26
最近Haskellを学び始めたC++プログラマの俺に言わせると、
Haskellはとかく宣伝でモナドが強調されるのがネガティブキャンペーンに
なってるとしか思えん。
C++のテンプレートライブラリで入り組んでくるとconstやら参照やらが
足引っ張るのとかxxx_typeをtypedefするお約束やらがあったりとか
templateでmetaprogrammingやっちゃったりとかよりはマシな厄介さ
だと思う。
そういうC++のアドホックな仕組みの積み重ねよりはHaskellの論理的に
まとまったものの方がちゃんと相手をするには楽だし、
コンストラクタの例外安全とかC++のとかく落とし穴の多さを考えると
ずっと楽と言えるかも知れん。

25デフォルトの名無しさん:2005/10/03(月) 16:48:20
>>5
[y | y <- xs, y < x]

これは、数学で言うところの

{ y | y ∈ xs で y < x }

という集合のこと。ただし集合でなくてリスト(重複OK, 順序あり)。
26デフォルトの名無しさん:2005/10/03(月) 16:49:52
>>24
> xxx_typeをtypedefするお約束やらがあったりとか

お約束というかtypetraitsのcheck実行機構としてtypedefを使っている。
27デフォルトの名無しさん:2005/10/04(火) 01:15:43
C/C++>>>>(越えられない壁)>>>Haskell>>>>(越えられない壁)>>> >>1
281:2005/10/12(水) 09:46:26
>>25
ごめんなさい。これで大体わかりました
なるほど、確かにわかりやすいかもしれません

[x | x^2 + x + 2, x > 20]

とかかけちゃうわけですか、こりゃすごいかも...
29デフォルトの名無しさん:2005/10/13(木) 05:50:13
かけないお
30デフォルトの名無しさん:2005/10/17(月) 16:38:41
>1それ以前に初耳
31デフォルトの名無しさん:2005/10/22(土) 10:51:01
こういうスレが伸びるようになればHaskellも市民権を得たと言えるだろうな
32デフォルトの名無しさん:2005/10/23(日) 01:06:31
ぐぐって頭のほうに出てくるやつで十分?
よく知らんからお勧めのリンクあったらはってくれ
33デフォルトの名無しさん:2005/10/23(日) 12:05:41
Z = [1..]
[x^2 + x + 2 | x <- Z, x > 20]
配列のSWAPとか素晴らしい性能を持ってるお ^ ^

34デフォルトの名無しさん:2005/10/23(日) 17:03:07
妖怪図鑑 其の百三十六

         _,,..i'"':,     妖怪 箱ティッシュ
         |\`、: i'、
            \ \`_',..-i   オナニーして逝きそうになると
           \|_,. -┘    ティッシュが手元に無い。
  タタタッ    _ノ )  ノ    それは妖怪箱ティッシュの仕業です。
        ノ ///
       _//  | (_      弱点は水に濡れると死ぬこと。
35デフォルトの名無しさん:2005/10/24(月) 09:48:53
>>33
[x^2 + x + 2 | x <- [21..]]


36デフォルトの名無しさん:2005/10/24(月) 21:48:49
>>33
N=[1..]
[x^2 + x + 2| x<-N, x>20]
37デフォルトの名無しさん:2005/10/25(火) 23:29:02
言語処理系にしか使えない言語・゚・(ノД`)・゚・。

>>24
Haskellでもfundepsでメタプログラミングができるよ。
もちろん画面を埋めつくすエラーメッセージ付きだ。
38デフォルトの名無しさん:2005/10/25(火) 23:31:33
Haskellは10年後の言語です
39デフォルトの名無しさん:2005/10/27(木) 22:04:55
10年後も10年後なんだよな。
40デフォルトの名無しさん:2005/11/03(木) 14:47:55
>>5 間違ってるよ
[x] と [x 以上の要素] を連結してるから

ソート後のリストに x が2つ入っちゃう
41デフォルトの名無しさん:2005/11/03(木) 15:05:38
>>40
間違ってないよ xとxsに分離されてるから
x以上になってないと[1,3,1,4]をqsortしたとき要素が減ってしまう
42デフォルトの名無しさん:2005/11/03(木) 15:33:15
そうだった
スマソ
43デフォルトの名無しさん:2005/11/16(水) 21:50:57
>>37
リアルタイムゲームも書ける
ttp://www.geocities.jp/takascience/windows/monadius.html
44デフォルトの名無しさん:2005/11/19(土) 12:28:18
  _   ∩
( ゚∀゚)彡 ハスケル! ハスケル!
 ⊂彡
http://www.haskel.com/
45デフォルトの名無しさん:2005/11/22(火) 00:44:19
手続きコード無闇に繋いでも今は無駄だよ
大抵の処理は 高階関数一つで終わりさ
関数型のIOを守るためお前は考え 便利さ見失った
手続き忘れた インターフェース<かお>など見たくはないさ
IO 取り戻せ
46デフォルトの名無しさん:2005/11/22(火) 07:51:08
僕はようやくスレをageた。やれやれ。
47デフォルトの名無しさん:2005/11/22(火) 07:55:05
本スレが余りに学術的で居心地が悪くなった
Haskellネタ師の溜り場はここですか?
48デフォルトの名無しさん:2005/11/22(火) 23:22:30
しかし、数学者からみたら他の言語よりはマシだが、まだまだ不満はあるよな。
49デフォルトの名無しさん:2005/11/23(水) 00:56:10
理論的な見地でもまだまだ。処理系の実装においても、
C,C++とはまだ吐き出されるコードに雲泥の差がある。
まだまだ中途半端な存在なんだね。
50デフォルトの名無しさん:2005/11/26(土) 22:20:52
本スレが余りに過疎で居心地が悪くなった
Haskellネタ師の溜り場はここですか?
51デフォルトの名無しさん:2006/01/27(金) 01:34:14
入門書がでるってはなしはどうなりましたかね?
52デフォルトの名無しさん:2006/01/27(金) 02:09:55
入門書出すことに意味があるのかどうか。。
そんなに一般人に媚び売ってどうすんの?
53デフォルトの名無しさん:2006/01/27(金) 19:33:12
あげ
54デフォルトの名無しさん:2006/01/28(土) 23:32:25
Haskellの是非は置いといて>>8には全く同意できない。
55デフォルトの名無しさん:2006/01/28(土) 23:52:03
>>54
たしかに++とか:とかの意味を知らないと>>8では理解しようがないけど、
Haskellを知っていてクイックソートを知らない奴がかりにいたとすると
やっぱりそいつは>>5を見て即座にクイックソートを理解すると思う。
その意味で、>>8が言ってることもそんなに外れてないような気がする。

関係ないが、Rubyあたりでクイックソートを書いても似たようなものになるはずなのに
なんでHaskellの特徴みたいに扱われてるんだろう…
56デフォルトの名無しさん:2006/01/29(日) 00:44:06
プログラムとしては全然直感的じゃないな。
数式に近い
57デフォルトの名無しさん:2006/01/29(日) 02:12:39
手続き型言語じゃないからね。
58デフォルトの名無しさん:2006/01/29(日) 07:12:15
高学歴用言語ですかね
59デフォルトの名無しさん:2006/01/29(日) 07:15:16
Haskell の IRC は賑わってるから、イパーン人も多いんじゃないの。

http://meme.b9.com/start.html
60デフォルトの名無しさん:2006/01/29(日) 11:10:00
>>56
俺にはむしろ手続き型のほうが直感的に思えない
61デフォルトの名無しさん:2006/01/29(日) 11:26:33
それは、抽象化された物が直感的と考えるか、具象化された物を直感的と考えるかの違いじゃないかな。
やっぱり Haskeller は、Haskell のコードからどんなアセンブラが生成されるか直ぐに分かるの?
62デフォルトの名無しさん:2006/01/29(日) 11:32:42
アルゴリズム的
63デフォルトの名無しさん:2006/01/29(日) 11:56:15
C に変換して gcc でコンパイルしてるけど
どんなコードになるのかわかりません(⊃д`)
64デフォルトの名無しさん:2006/01/31(火) 10:05:43
もっと議論しろ
65デフォルトの名無しさん:2006/01/31(火) 17:59:21
そもそも「直感的」という言葉じたいが曖昧で主観的なものだから
議論の土台としてふさわしくない。みたいな?
66デフォルトの名無しさん:2006/01/31(火) 18:50:26
では話題を変えてもよいぞ
67デフォルトの名無しさん:2006/01/31(火) 19:31:37
何か聞きたいことがあるなら素直に質問しろよw
68デフォルトの名無しさん:2006/01/31(火) 20:16:46
取敢えず俺ははすけるの事をまるで知らないので、
このプログラミング言語の良さを自慢して俺をワクワクさせろ。
69デフォルトの名無しさん:2006/01/31(火) 21:24:42
Haskellの素晴らしさは>>68みたいな馬鹿には使いこなせないところだ。
どうだ、魅力的だろ。
70デフォルトの名無しさん:2006/01/31(火) 21:30:42
ぱっと思い付くのはこんなところだな。

・高級言語の基本的な特徴を備えている。
メモリ操作はほとんど意識する必要がない。全部GC任せにできる。
そもそもGCの存在すら意識しなくてもいいくらいだ。オブジェクトは全部(参照やポインタでなく)値。
関数も値。手続きも値。

・代数的データ型
「タグつき共用体」とか「バリアント」とか呼ばれる奴だ。
これ一つでstructにもunionにもenumにもなる。萌え。
うまく言えないが、とても素晴らしい。

・美しい構文
予約語よりも記号を多用した簡潔な構文だ。とくにwhere節(>>5にもあるように、
ローカル変数を関数本体の後で定義する機能)は手放しがたい。

・モナド
CやPascalのセミコロンを多重定義できる機構だと思ってくれ。文が実行される文脈を定義することができる。
非決定モナドを使えば複数の選択肢から一つを決定するたびに世界の方が分裂する計算を表現できるし、
継続モナドを使えばgotoすらかわいく見える邪悪な制御構造を使うことができる。
誰にも読めないソースをつくり出すには絶好の道具だ。

・強力な静的型システム
多重定義と総称性(generics)が自然に統合されたそれなりに単純な型システムがある。
特に、型推論があって、こまごまとした指定をせずとも型に頼ったプログラミングができる。
総称的な関数はそうでない関数と同じように書けるし扱える。


ワクワクしたか?したらとっとと勉強しろ。
71デフォルトの名無しさん:2006/01/31(火) 21:37:53
そうだな、なかなかワクワクしてきた。
では俺様に参考書を薦めるがよい。
72デフォルトの名無しさん:2006/01/31(火) 21:50:46
Haskellは今年中にマスターしてみせる
73デフォルトの名無しさん:2006/01/31(火) 22:03:37
>>71
Haskell: The Craft of Function Programming
はとても良い本だが、俺はこれ以外に入門書を読んでいないので比較はできない。他には、
Introduction to Functional Programming using Haskell
あるいは、
The Haskell School of Expression
が有名なようだ。

webで学ぶなら、Yet Another Haskell Tutorialがほとんど唯一のまとまった入門書だと思う。
74デフォルトの名無しさん:2006/02/01(水) 22:34:44
限量子使えるバージョンもあるよ0うだが、、、
なんか面白いことできる ∀x∀y ∃z 
75デフォルトの名無しさん:2006/02/01(水) 23:38:33
顔文字にしか見えない → (∀
76デフォルトの名無しさん:2006/02/13(月) 20:56:42
77デフォルトの名無しさん:2006/02/14(火) 01:46:36
役立ちそう、じゃなくて実際にいいか悪いか教えて欲しい。
文書はとにかくあれば何でもおーけーみたいのはちょっと。
78デフォルトの名無しさん:2006/02/14(火) 03:03:11
2番目は何もわかんない状態で役立つ。
3番目は2番目が半分以上わかるぐらいで役立つ。
4番目はGHCは読めないけどもっと普通のなら読めるぐらいになったら役立つ。
1番目はモナドがわかんない時に役立つ。
79デフォルトの名無しさん:2006/02/14(火) 03:23:28
スレタイに反して、良スレだな、ここは。
80デフォルトの名無しさん:2006/02/14(火) 06:13:50
>>78
本当に役立つのかどうか不安なレスだな。
効用: 読んだことに満足する、だったりして。

81デフォルトの名無しさん:2006/02/14(火) 06:40:14
>>77
俺は>>76じゃないけど、正直なところ、今日本語で読める文章で
Haskellを学び始めるのに適したものはないと思う。
一ヶ月ほどで本が出ると思われるのでそれを待つか、
MLの入門文書を読んで関数型言語に慣れてから「やさしいHaskell入門」を読むのが
近道なんじゃないだろうか。
82デフォルトの名無しさん:2006/02/14(火) 07:23:10
76だが、>>81に激しく同意。俺は>>76の2番目を半分ぐらい読んだ状態。
後はコード読んでHaskellの世界を開拓(Hack)してゆくしかないと思う。
83デフォルトの名無しさん:2006/02/14(火) 09:27:48
Hackell
84デフォルトの名無しさん:2006/02/14(火) 09:45:31
オライリーから
Haskell hacks
が出るのはいつの日のことですか
85デフォルトの名無しさん:2006/02/15(水) 04:54:51
>>84
オライリーの中の人にもオナニーと思われてる予感
86デフォルトの名無しさん:2006/02/15(水) 04:56:35
>>85
そだね。近所なんだからよく相談するようにね。
87デフォルトの名無しさん:2006/03/05(日) 06:14:03
age
88デフォルトの名無しさん:2006/03/05(日) 06:34:28
オライリーとオナニーって似てるよね。
89デフォルトの名無しさん:2006/03/15(水) 02:08:50
>>88
ねーよwwwwww
90デフォルトの名無しさん:2006/03/15(水) 02:19:03
オナイニー
TextSS のWindowsXP(Professional)64bit化おながいします

もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
92デフォルトの名無しさん:2006/03/23(木) 17:07:28
ハスケル学んでて報われるかな?
10年以内に
93デフォルトの名無しさん:2006/03/24(金) 12:09:37
言語はNEED TO KNOW
94デフォルトの名無しさん:2006/03/25(土) 02:30:23
入門本の評判は?
発売ってまだだっけ?
95デフォルトの名無しさん:2006/03/25(土) 03:53:29
>>92
言語を覚えているかどうかなんて些細な問題でしかない。
君が勉強すべきなのは数学だ。
さもなくば、ゲームが作りたいというならAPIやらライブラリやらの仕様書でも読んでろ。
96デフォルトの名無しさん:2006/03/27(月) 17:42:46
1流の2chブラウザを作ってWindowsからamigaまで制覇するのが夢です。
97デフォルトの名無しさん:2006/03/27(月) 17:50:35
まずは一流と表記することからはじめるか
98デフォルトの名無しさん:2006/03/27(月) 18:29:53
言語について解説した本がほしい
あの三冊ともSICPと同じことやらされて飽きる
99デフォルトの名無しさん:2006/03/27(月) 19:02:02
>>98
そんなあなたにGentle introduction to Haskell
100デフォルトの名無しさん:2006/03/27(月) 23:49:57
これってどないですか?
ttp://www.amazon.co.jp/exec/obidos/ASIN/4839919623
101デフォルトの名無しさん:2006/03/28(火) 00:03:37
↑まだ届いてない
102デフォルトの名無しさん:2006/03/29(水) 20:13:54
Haskell製2chブラウザマダー?
103デフォルトの名無しさん:2006/04/06(木) 06:05:36
Haskellの59%は真空で出来ています
Haskellの23%は鍛錬で出来ています
Haskellの8%は気の迷いで出来ています
Haskellの7%はミスリルで出来ています
Haskellの3%は成功の鍵で出来ています

成功の度合いは低い…
104デフォルトの名無しさん:2006/04/09(日) 17:10:57
それ入門書だよね。ネットに分かりやすいチュートリアルあるのに本買うのはもったいなくないか?
プログラミング初めてってんならいいかも知れんけど。
105デフォルトの名無しさん:2006/04/09(日) 17:54:21
わかりやすいチュートリアルってYAHTのこと?
106デフォルトの名無しさん:2006/04/09(日) 18:48:35
やさし(くな)いHaskell入門かも
107デフォルトの名無しさん:2006/04/09(日) 19:16:47
Gentle
108デフォルトの名無しさん:2006/04/09(日) 20:09:30
紳士的なHaskell入門
109デフォルトの名無しさん:2006/04/09(日) 20:19:15
そのうち萌えるHaskell入門とか出てきそうだ。
110デフォルトの名無しさん:2006/04/10(月) 10:13:34
応用Haskell入門
111デフォルトの名無しさん:2006/04/10(月) 21:07:48
応用は本気で欲しいな。
112デフォルトの名無しさん:2006/04/10(月) 21:11:23
>>100
読みました。
一言で言うと、トイレットペーパーの方がマシでした。
113デフォルトの名無しさん:2006/04/10(月) 21:41:54
まあ、理解できなかったらただの紙切れだわな
114デフォルトの名無しさん:2006/04/12(水) 22:31:00
転職に有利ってことはないんだろうな。
115デフォルトの名無しさん:2006/04/13(木) 05:00:22
>>5
単に名前の付けかたがまずいだけのような...
>>8
は分かりやすい。
116デフォルトの名無しさん:2006/04/13(木) 05:08:36
何でこんなマイナー言語スレ同時進行してんの?
117デフォルトの名無しさん:2006/04/14(金) 07:05:29
叩きネタが一瞬で尽きたのに誰も削除依頼しないから
118デフォルトの名無しさん:2006/04/14(金) 16:19:39
プログラム言語界を席巻するのは時間の問題だから。
119デフォルトの名無しさん:2006/04/15(土) 18:06:17
削除依頼しようと思う人がいないほどマイナーだから
120デフォルトの名無しさん:2006/04/16(日) 12:50:32
どんなに凄くても研究用じゃ実用にならないよな。
いつ根本から変わるかもわからんし。
121デフォルトの名無しさん:2006/04/16(日) 14:58:42
Haskellはたしかに一番美しいと思うが
どの本も最初にエレガントな解を見せておいて
実用的には別解が必要ですと来る。
その解説がものすごく手続き的。
122デフォルトの名無しさん:2006/04/16(日) 15:11:27
>>121
例えばどんな本?
123デフォルトの名無しさん:2006/04/16(日) 16:06:52
Haskellの初心者向け本出てたな。
迷わず買ったが、むずくて即挫折です
124デフォルトの名無しさん:2006/04/16(日) 20:44:25
>>123
MLあたりから始めて遠回りしてみたら?
125デフォルトの名無しさん:2006/04/20(木) 21:17:08
最強を目指すならばすべからく遠回りせよ
126デフォルトの名無しさん:2006/04/22(土) 08:52:33
はすけらーって延々と議論ばかりやってて一向に動くものを作らなさそう。
現場で役に立たないタイプの典型。
127デフォルトの名無しさん:2006/04/22(土) 12:00:55
若林 史江さんは、19歳で株を始められたそうです。

http://www.fumie-w.com/
http://be-dream.jp/200/05/205_1.php

高校を卒業するまでの私の人生はまさに順風満帆。
そんな時、突然告げられたのが父の会社の倒産。
ようやく私も事の次第がわかってきて、暗い将来を考えると涙が止まらなくて……。
「看護大に行くのはもうあきらめよう」と泣いていると、兄がこう言ってくれたんです。
「夢だった看護師をあきらめなきゃならないのはかわいそうだと思う。
でも、どんな仕事に就こうが、その世界で成功すればいいだけだよ。
……自分が置かれている分野でトップになれた人が成功者だと思う」
と慰めてくれたんです。
救われましたね〜、この言葉で。
「よし!頑張るしかない。
妹もいるし、家にお金を入れなきゃいけないんだから働こう!」
と気持ちを切り替えることができたんです。

同じ19歳でも、人生いろいろですね。
128デフォルトの名無しさん:2006/04/22(土) 13:07:19
若林 史江さんの成分解析結果 :

若林 史江さんの36%は夢で出来ています。
若林 史江さんの24%は乙女心で出来ています。
若林 史江さんの14%は毒電波で出来ています。
若林 史江さんの11%は花崗岩で出来ています。
若林 史江さんの8%は鍛錬で出来ています。
若林 史江さんの5%は根性で出来ています。
若林 史江さんの1%は真空で出来ています。
若林 史江さんの1%は株で出来ています。
129デフォルトの名無しさん:2006/04/22(土) 19:35:40
そのコピペシリーズってよく見るけど、何が面白いのかサッパリ分からんのだ。
130デフォルトの名無しさん:2006/04/22(土) 20:17:16
>129
コピペじゃない。
っ【成分解析 カドルコア】
131デフォルトの名無しさん:2006/04/23(日) 01:41:05
へえ。
占いツール(?)なのか。

ググッたけど、激しく落とす気しねーw
132デフォルトの名無しさん:2006/04/23(日) 14:00:21
芸人が腰を振りながら変なポーズで叫ぶ新手のネタか何かと思ってたよ。
テレビ見ている人は、その状況が勝手に脳内補完されるから面白い(流行っている)のかな、と。

まあ、俺はテレビ見ないからな。
133デフォルトの名無しさん:2006/04/23(日) 19:59:53
あなたの生活なんてだれも聞いてません。
134デフォルトの名無しさん:2006/04/23(日) 20:03:08
>>132
最近の芸人はどれもコンセプトは一緒でつまらん。
ちょうど、他人のレポートを写して書き方をちょこっと変えて提出する学生と同じ。
135デフォルトの名無しさん:2006/04/26(水) 01:30:25
>>134
芸人はバラエティー番組の部品だから。
usefulな部品が同じようなインターフェイスを持つようなもの。
136デフォルトの名無しさん:2006/04/26(水) 01:56:51
>>135
そういう環境に最適化しちゃったやつは環境の変化になかなかついてこれないから淘汰されるよ。ついてこれるのは変化に対応できたやつだけ。
137デフォルトの名無しさん:2006/04/28(金) 09:44:05
テレビ屋も視聴者も
今の芸人に移植性なんて期待してないんだよ
138デフォルトの名無しさん:2006/04/28(金) 15:33:39
それ違う
139デフォルトの名無しさん:2006/04/29(土) 22:00:52
>はすけらーって延々と議論ばかりやってて一向に動くものを作らなさそう。
>現場で役に立たないタイプの典型。
会社入れば、こういうことを仰る輩の実力が痛い程味わえますね。
140デフォルトの名無しさん:2006/04/30(日) 15:03:44
>>134
>最近の芸人はどれもコンセプトは一緒でつまらん。 

ああ、>>134 も成長したんだな。良かった良かった。

あと一つ教えてやる事があるとすると、
何もそれは「最近」に限ったことではない。
昔から同じ。

単に >>134 が昔の芸人を知らなかっただけ。
141デフォルトの名無しさん:2006/04/30(日) 16:58:44
芸人はどうでもいいよ
142デフォルトの名無しさん:2006/04/30(日) 17:11:43
質問です。

Haskellと芸人のつながりを教えてください。
143デフォルトの名無しさん:2006/04/30(日) 17:13:48
だからどうでもいいっていってんだろ。
144デフォルトの名無しさん:2006/04/30(日) 17:19:26
>>143
あなたは私ですか?
私が気にしているのに、なぜどうでもいいという答えが出てくるんですか。
まじめに考えなさい。
145デフォルトの名無しさん:2006/04/30(日) 17:23:08
黙れ小僧!それが人にものを訊ねる態度か!
146デフォルトの名無しさん:2006/04/30(日) 20:50:43
数学的だと美しいの?主観の問題じゃ?
147デフォルトの名無しさん:2006/04/30(日) 21:09:13
ククク…混沌こそが美しい
148デフォルトの名無しさん:2006/04/30(日) 21:20:32
>>146
数学的つーより、定義を書き下すスタイルが美しいと思う。
149デフォルトの名無しさん:2006/04/30(日) 21:20:51
>>146
時よとまれ!お前は美しい!
150デフォルトの名無しさん:2006/04/30(日) 21:22:49
シンプルな計算モデルに基づいてすべてを記述できるのが美しい
151デフォルトの名無しさん:2006/04/30(日) 21:23:27
美しいの計算モデルなのさ!!!
152デフォルトの名無しさん:2006/04/30(日) 21:43:08
妖星は二度と輝かぬ!
153デフォルトの名無しさん:2006/04/30(日) 21:55:15
わが生涯に一片の副作用なし!
154デフォルトの名無しさん:2006/04/30(日) 22:02:19
観察可能な副作用のない人生のなんと矮小なことか。
155デフォルトの名無しさん:2006/04/30(日) 22:47:58
無駄がないのが美しく感じる。
156デフォルトの名無しさん:2006/04/30(日) 23:15:42
表面上は副作用無いけど、
ぶっちゃけ実質的には副作用ある。
157デフォルトの名無しさん:2006/04/30(日) 23:24:21
実質的にはあるものを、表面上は無いように見せかけようとしてきたのが
プログラミング言語の歴史だ。
158デフォルトの名無しさん:2006/04/30(日) 23:27:52
>>157
そのコピペのソースはどこ?
159デフォルトの名無しさん:2006/04/30(日) 23:55:23
副作用に実質も糞もないだろ。
副作用って言葉自体が言語レベルの(表面上の)概念なんだから。
160デフォルトの名無しさん:2006/05/01(月) 00:04:13
haskellに副作用はありません。
副作用があるとかなんとか、馬鹿が鳴いてるだけですから無視してください。
161デフォルトの名無しさん:2006/05/01(月) 02:20:35
確かに main の返す値は常に等しいが・・・。
162デフォルトの名無しさん:2006/05/01(月) 16:21:26
宣言的プログラミングってやつとは全然違う?近い?
163デフォルトの名無しさん:2006/05/01(月) 18:01:17
違います
164デフォルトの名無しさん:2006/06/02(金) 19:25:52
諸君、議論したまえ。
165デフォルトの名無しさん:2006/06/02(金) 21:16:53
>>64か?
そろそろ勉強始めろよ。和書も出たんだし。
166デフォルトの名無しさん:2006/06/03(土) 18:55:27
Haskellって、アルゴリズムを書くには便利そうだけど、
それだけで完結するようなプログラムもありえないので、
ビジネスロジックだけをこれで書いて、ほかの言語から
呼び出せってモノなんでしょ?

もっといえば、ストアドみたいな。
167デフォルトの名無しさん:2006/06/03(土) 19:43:52
>>166
そういう使いかたもあるけど、そのための言語と言う訳ではない。
宣伝文句は「general purpose programming language」だし、
ライブラリの整備もかなりの部分は「全部Haskellで書く」方向に向かっている。

そもそも、なんでロジック以外を書くにはHaskellは不便だと思うんだ?
168167:2006/06/03(土) 19:46:36
自己レス

>そもそも、なんでロジック以外を書くにはHaskellは不便だと思うんだ?
いや、実際不便なんだが、それは主にライブラリの不備のせいであって、
言語がそっちを指向してる訳じゃないと思うがどうよ。
169デフォルトの名無しさん:2006/06/03(土) 20:44:04
>>165
はーい^^
170デフォルトの名無しさん:2006/06/04(日) 00:48:32
>168
簡単な解説ページしかみてないので今ひとつ自信はないんだけど、
I/O関係でムリを通そうとしてる雰囲気がほのかに・・・。

そんなんだったら、ほかの言語から呼び出すのにとどめたほうが、
みんな幸せになれそう。

正規表現を拡張して独立したプログラム言語にしようとしてるような、
ミョーな意固地さを感じる・・・。
171デフォルトの名無しさん:2006/06/04(日) 01:59:34
Haskell.NETで何とかならんかな、その辺は。
172デフォルトの名無しさん:2006/06/04(日) 02:13:40
Haskell.NETは間違いなくベーパーウェアのまま終わる
173デフォルトの名無しさん:2006/06/04(日) 16:13:06
C++のメソッドに対するconstってあるでしょ。
あれは、オブジェクトの状態を変えないって意味がある(実際はちょっと違うけど)
SICPにもあるけど、副作用や参照のせいで出てくるバグ(side-effect bug)も、
結構無視できない。

私の場合だけど、
副作用がある部分と、副作用が無い部分を切り分けられないかと思い
様々な言語を探していたらHaskellとかCleanとか(*)に突き当たった。

そのように見れば、IOモナドで副作用を切り分けるのもそんなに違和感が無いんじゃないかな。


(*)研究用の(実用的でない)言語なら他にもあるみたい。
http://computing-dictionary.thefreedictionary.com/Euclid
174デフォルトの名無しさん:2006/06/04(日) 18:11:25
はやくおまいら実用的なライブラリこさえてください。
175デフォルトの名無しさん:2006/06/04(日) 18:47:20
GHCはOpenGL+GLUTがついてるぜ
サンプルコードぐぐってやる気なくしたけど
176デフォルトの名無しさん:2006/06/04(日) 20:12:00
>>170
たぶんIOモナドの事を言ってるんだと思うが、IOをモナドで表すのは
どっちかというと言語の詳細であって、それほどプログラミングのスタイルが
影響を受ける訳じゃない。
たとえ内部が正規表現で出来ていようと、その上で普通にコードがかけるなら
問題ないんじゃないだろうか。

という訳で、別に無理をしていても良いと思うんだが、個人的には
HaskellのIOがすごく無理をしているようには感じられない。うまく言えないけど。
177デフォルトの名無しさん:2006/06/04(日) 20:26:01
しかし、純粋関数的に書いていたコードに副作用を加えたい場合、
let x = ...を
x <- ...
に書き換えたり、
戻り型を a から IO a や State s a に書き換えなければならない事を思うと、
Haskellで書いたプログラムのモジュール性が低いと言えなくもない。

ただ、元々副作用無しで書こうと思っていたコードに、
副作用を加えるというのは、そもそも設計段階で間違っていたとも言える。

ここで言う副作用の例は、性能評価コードや、ロギング等のための、
呼び出しカウント、ファイル出力などを考えている。
でもこういうのは他の代替可能な手段があるかもしれない。

始めからIdモナドで書けばいい、と言ってしまえばそれまでだけど。
この辺の議論ってどっかに書いてないかな。
178デフォルトの名無しさん:2006/06/12(月) 06:41:11
諸君、さらに議論を続けたまえ。
179デフォルトの名無しさん:2006/06/12(月) 07:32:33
そうやって話の腰を揉むのはよせ
180デフォルトの名無しさん:2006/06/12(月) 07:56:57
俺のおっぱい揉んでよ。
181デフォルトの名無しさん:2006/06/12(月) 07:59:16
氏ねデブ
182デフォルトの名無しさん:2006/06/12(月) 11:30:40
議論を再会したまえ。
183デフォルトの名無しさん:2006/06/12(月) 19:07:16
お前ら面白すぎ
184デフォルトの名無しさん:2006/06/13(火) 14:00:58
べつに面白くはないでしょ
185デフォルトの名無しさん:2006/06/14(水) 21:56:33
議論を展開したまえ。
186デフォルトの名無しさん:2006/06/15(木) 22:47:18
おっぱいもまれたい男はデブかどうか。

ピザには間違いない。
187デフォルトの名無しさん:2006/06/17(土) 07:48:34
その議論は終了したまえ。
188デフォルトの名無しさん:2006/06/17(土) 09:40:35
学者様は議論の開始・展開・終了がノンコストで行われると考えてるらしい。
実際の開発では、プログラムの開始・展開・終了の間で
作業者間でのコミュニケーションが行われ、そこのコストがもっとも大きいというのに。
189デフォルトの名無しさん:2006/06/17(土) 13:19:08
じゃあトップが一人で全部設計してあとはコーディングだけすれば
ノンコストだろ。コミュニケーションにコストがかかるとか言ってる
>>188方がDQNだろ
190デフォルトの名無しさん:2006/06/17(土) 14:25:09
>>187
したまえ
191デフォルトの名無しさん:2006/06/17(土) 20:41:33
>>189
俺にはこのボケに対するうまいツッコミが思いつかない
192デフォルトの名無しさん:2006/06/18(日) 09:54:29
今北んだが、何でコミュニケーションのコストの話になったんだ?
誰が学者様なんだ?

コミュニケーションにコストがかかるのは承知だが、
なんでそれをHaskellのスレで議論する必要が?
もっとテクニカルな話しようや
193デフォルトの名無しさん:2006/06/18(日) 10:01:35
俺はテクニックの話はどうでもいい。
研究的内容について議論してくれ。
194デフォルトの名無しさん:2006/06/18(日) 11:58:33
研究的内容って?何を求めているの?
195デフォルトの名無しさん:2006/06/18(日) 15:41:09
>>194
「新規性」だよ
196デフォルトの名無しさん:2006/06/18(日) 23:12:56
このスレで?w
んな高尚なもの求められても。。そういうのは大学のお友達とたっぷり議論するといいよ。
197デフォルトの名無しさん:2006/06/18(日) 23:15:25
第一こんな所に降りてくるネタなんぞに新規なものなど存在しない。
何かHaskellの新しい機能を触ろう、ってんならagreeだが。
198デフォルトの名無しさん:2006/06/19(月) 17:24:47
arrowってモナドと何が違うの?
199デフォルトの名無しさん:2006/06/19(月) 17:34:25
やっとアローズまでたどり着いたか。遅かったね。
200デフォルトの名無しさん:2006/06/19(月) 23:18:19
頭の回転の速さよりもセレンディピティの方が重要だと思う。
201デフォルトの名無しさん:2006/06/21(水) 01:36:11
クソスレでまじめな議論に飢える情報弱者www
202デフォルトの名無しさん:2006/06/22(木) 06:15:11
新しいものとか、テクニカルなもの、セレンディピティはおおいに結構。
Haskellの超絶技巧なテクニックだとか、こんなアプリをHaskellで書いた!とか、
こんな新しいプログラムの書き方がある!とか
そういう内容でいいんじゃないの
203デフォルトの名無しさん:2006/06/23(金) 00:00:10
>>202
お前このスレ立てただろ。文体からすぐわかんだよ。
自分ひとり選民意識でいるんじゃねぇよ。
↓↓↓

プログラム板から来ました
http://pc8.2ch.net/test/read.cgi/php/1150778053/
204デフォルトの名無しさん:2006/06/24(土) 15:40:43
議論をレジュームしたまえ。
205デフォルトの名無しさん:2006/06/27(火) 21:48:43
Haskell使える人ってこれからどんどん増えて行くというのに、選民もクソもないでしょ。
206デフォルトの名無しさん:2006/06/28(水) 01:51:37
Haskellは流行りません。研究者の一人として断言します。
207デフォルトの名無しさん:2006/06/28(水) 02:26:49
>>206
理由をぜひ聞きたかったりするんだが…。
これから勉強しようかと思ってるけど、ひょっとして無駄?
208デフォルトの名無しさん:2006/06/28(水) 06:23:53
>>207
自分の「ものの考え方」のバリエーションが広がるだけでも
全く無駄ではないよ
209207:2006/06/28(水) 08:35:59
>>208
あっ、いや、ある程度はもう知ってるのだけど、
Haskellは実用的にも使えるのではないかと思って
標準的な関数の使い方を全て勉強しようかという
矢先に >>206 を見たので…。
210デフォルトの名無しさん:2006/06/28(水) 17:52:27
Haskell は面白いけど、あんまり実用的ではないように見えるなあ。
それほど効率が求められないものや、
あるいはそれほど効率に影響のないプログラムなら問題ないけど、
効率上、副作用は必要悪だと思うなあ。
211デフォルトの名無しさん:2006/06/28(水) 18:10:21
Haskellが遅いのは遅延評価のせいであって、副作用は関係ないだろ。
212デフォルトの名無しさん:2006/06/28(水) 23:24:57
別に商用になるかどうかと流行るかどうかは関係ないでしょ。
書籍も出たことだし、Smalltalkやlisp/schemeに迫る程度には「流行る」かと。
あまり理由も示さずに間抜けな断言をするのは研究者としてどうなんだろう。

あと、副作用があれば参照が使えるので例えば再帰の代わりにforループが書ける。
Cみたいなクイックソートが書ける。副作用は、Haskell自体の遅さというより、
効率的なプログラムが書けるかどうかに掛かってくる、ということを>>210は言いたかったんでは。
213デフォルトの名無しさん:2006/06/28(水) 23:33:02
「Haskellは流行りません」って、Haskellを知らずに言ってるならただの馬鹿だし、
Haskellの利点を踏まえた上でそんなことを軽々しく断言されても…ちょっとアレな人な気がする
どこの馬の骨ともわからん(プログラミング言語の?)研究者が何と言おうと、流行るもんは流行るし。
214デフォルトの名無しさん:2006/06/28(水) 23:55:56
俺も馬の骨だが、Haskell は一般向けには流行らないと思うなぁ。
そもそも流行っている事が最も重要な人は使っていないんじゃないかな。
215デフォルトの名無しさん:2006/06/29(木) 00:12:06
流行らないと「思う」には同意。ただ断言できるほど物を知らないorz

>そもそも流行っている事が最も重要な人は使っていない
これの日本語的な意味がわからん。読めん。
216デフォルトの名無しさん:2006/06/29(木) 01:13:18
「はやっている == もっとも じゅうようなこと」だと かんがえる ひとは つかっていないんじゃないかな。
217デフォルトの名無しさん:2006/06/29(木) 02:45:50
絶対流行らない。
仕様を理解してもらえないと思う。
218デフォルトの名無しさん:2006/06/29(木) 03:20:34
でもさ、むかし、Lispすげー流行ったじゃん?
219デフォルトの名無しさん:2006/06/29(木) 05:28:17
>>212
forループと(効率的に)同等なものは破壊的代入を使わなくても書ける。
Haskellでも破壊的クイックソートは書ける。
リストに対しては書けないけど、これはむしろ当然だろう。

副作用があることと、代入スタイルのプログラミングができることを混同しているように見える。
「必要悪」とされるべきは代入スタイルのプログラミング。
Haskellには副作用は無いけど、代入スタイルのプログラミングをサポートしているから、
これをHaskellが遅い理由にするのはおかしい。
220デフォルトの名無しさん:2006/06/29(木) 05:52:08
便乗質問で申し訳ないんですが、
100MB を超えるような巨大配列を取り扱うような
科学技術計算でも大丈夫ですか?
参照透明性ということで、配列要素を一部分変更するたび毎に
配列の全コピーし直してるのかと思っているのですが大きな誤解ですか?
どうしても副作用のあるコードを書きたくなってしまいます。
221デフォルトの名無しさん:2006/06/29(木) 06:12:19
>>220
Haskellの配列は二系統あって、一つが変更毎に完全なコピーを作るIArrayインタフェースで、
もう一つがコピーなしで破壊的操作ができる代わりにモナドを通した操作しか認めないMArrayインタフェース。
だから、この点に関しては問題ない。科学技術計算をする上で他に障害が無いかは保障しかねるけど。
222デフォルトの名無しさん:2006/06/29(木) 06:40:16
>>221
MArray インターフェースですか。
そういうのが有ったんですね。それで勇気が出ました。とっても重要な情報です。

多分、他には根源的な支障はないと思います。
あともう一つ高速化手法として
最近流行の並列プログラミングもしたいのですが、
こっちは Haskell ではまだまだの段階なのかな?と勝手に思っています。
223デフォルトの名無しさん:2006/06/29(木) 08:38:35
>副作用があることと、代入スタイルのプログラミングができることを混同しているように見える。
IORef等への参照セルへの代入は「副作用」として知られていますが何か?
少なくとも空間効率を意識したプログラミングは副作用がないとできない。と思う。
時間効率についてはオーダーの議論で逃げればいいけど。
224デフォルトの名無しさん:2006/06/29(木) 08:43:28
>絶対流行らない。
>仕様を理解してもらえないと思う。
C++のバッドノウハウ集や、Javaの複雑なgenericsを理解できるなら、
Haskellの多相型や型クラスを理解するのはそう難しくはないでしょ。
GoFのVisitorやMementoパターンが理解できるなら、高階関数を使いこなすのも特に問題ないかと。
どれも一時期流行したもの。

Haskellが凡人に理解できないと思うのは、それこそ選民意識じゃない?
225デフォルトの名無しさん:2006/06/29(木) 09:11:42
>IORef等への参照セルへの代入は「副作用」として知られていますが何か?
言葉遣いの問題だが、副作用ってのは「関数適用や式の評価に際して計算以外のことを行うこと」
であって、IORefの操作はこの定義に当てはまらないので副作用とはいえないと思う。
そのためにわざわざ「代入的プログラミング」という言い方をしたんだが。

>少なくとも空間効率を意識したプログラミングは副作用がないとできない。と思う。
>時間効率についてはオーダーの議論で逃げればいいけど。
言葉の問題を除いて、同意。
226デフォルトの名無しさん:2006/06/29(木) 15:06:19
IORef とかって、IORef とかを取り除く時にコピーが発生するんじゃないの?
227デフォルトの名無しさん:2006/06/30(金) 01:40:42
でもまあ、Haskellで科学技術計算なんてCに比べると10倍以上遅いんで、
する気にならないですけどね。
228デフォルトの名無しさん:2006/06/30(金) 05:45:34
>>227
あ〜。いいんですよ。とりあえず速度は。
最終的にどんな感じのプログラムになるか実際に見てみたいんですから。
それに計算対象や入力によって速度をそれほど気にしない場合もありますし。
229デフォルトの名無しさん:2006/06/30(金) 08:10:05
C言語でカリカリにチューニングした速い実装を書いて、
Haskellでさくっとかいた実装の出力と比較して検算する (Nバージョンプログラミング)
というのはアリかもしれないね。
230デフォルトの名無しさん:2006/06/30(金) 08:26:59
>言葉遣いの問題だが、副作用ってのは「関数適用や式の評価に際して計算以外のことを行うこと」 であって、
わざわざ反論するのも面倒だけど、言葉使いの話をするならば、反論させてもらう。
何度も書くが、副作用(side effect)ってのはIORefへの代入も含むと一般に考えられている。
例えばSICPで、Schemeに代入の機能を入れる所で、side effect bugという言葉が出てくるし、
何より IORefを扱うモナド IOモナドは「副作用」を扱うモナドじゃないか。
IOモナドやState使わないと代入は純粋関数的に書けないでしょ。

適当にぐぐっただけでも(Cleanのマニュアルだが)
http://sky.zero.ad.jp/〜zaa54437/programming/concepts/index3.htm#a6
>代入は、純粋な関数型言語では排除されている。というのも、代入演算子は副作用(side effect)を
>伴う為、参照透明性(referential transparency)が破壊されてしまうからである。

「狭義の副作用」という言葉があるのかどうかは知らないが、一般には代入も副作用と考えられている。
231デフォルトの名無しさん:2006/06/30(金) 09:46:16
>>230
誤解を招く言い方だったが、俺が指摘したかったのはそこじゃない。
>何より IORefを扱うモナド IOモナドは「副作用」を扱うモナドじゃないか。
違う。「入出力」を「副作用なしで」扱うモナドだ。
ここで言う「入出力」にはIORefの操作なんかも含める。

なんでこの区別にこだわるかというと、
>>210は「Haskellに副作用が無い」という前提で話している。
 だから少なくともこの文脈ではHaskellのIOを副作用と呼ぶのは不適切。
・unsafePerformIOなどによって導入される本物の副作用との区別ができたほうが良い。
という理由から。
232デフォルトの名無しさん:2006/06/30(金) 12:27:10
ああ、言いたいことは分かったよ。

IOモナドは副作用を陽に扱わない。
Haskellは、副作用を表現するIOモナドを純粋関数的に「繋いで」、mainとして定義するスタイル。
繋いだアクションが逐次実行されることで、実行形式は副作用を伴うプログラムとして動作する。
一方、unsafePerformIO はIOモナドとは違い、Haskellの遅延評価のステップの途中で
本当に「副作用的に」評価される(純粋関数の枠を壊している)。
それを言いたいのは分かった。

>・>>210は「Haskellに副作用が無い」という前提で話している。
> だから少なくともこの文脈ではHaskellのIOを副作用と呼ぶのは不適切。
どうしてその前提が読み取れるのか分からんけど。
というか明らかに IOモナドを副作用を扱うモナドでそ。unsafePerformIOと区別したいのは分かったが。
Haskellで副作用を表現できることはもはや常識なわけで、
「Haskellは副作用を(表面上)追い出した為にIOモナドというややこしい形でしか扱えない。しかし副作用は効率的なプログラムを扱う上で必要悪だよな。もっと簡単にならんのか?」
という風に読んだ。
233とおりすがり:2006/06/30(金) 22:38:41
・形式的にはHaskellのソースコードの中に副作用を伴う要素は無いものとみなせる。

・副作用をいわば「ランタイム側に追い出す」ための仕組みがIOモナド。
 そういう意味でIOは副作用を扱っているといえる。

(・でも本当に副作用を持つ禁断の関数も実はある。)

ってことでFA?

状態機械の仕様をフローチャート的にではなく構成的に
定義できるのってキモチイイな
do構文使ってると普通の逐次処理言語とあまり変わらないけど。
まあ気分の問題で。
234デフォルトの名無しさん:2006/06/30(金) 23:03:53
>do構文使ってると普通の逐次処理言語とあまり変わらないけど。
そう。というかlet文も考えようによっては逐次型っぽい。

for文やwhile文がなくて、オブジェクトのアップデートができない事を除けば、
手続き型言語も関数型言語もそんなに変わらない。
更にHaskellは純粋関数的なので順序を気にしなくていいんだけどね。
235とおりすがり1:2006/06/30(金) 23:52:32
fib = 1:1:zipWith (+) fib (tail fib)
= 1:1:2:3:5:8:12 ....

これはおなじみHaskell版フィボナッチ数列
遅延評価の例として一度はお目にかかるという。

これはリストのある要素の値を
遅延評価を利用して
同じリストの手前の要素から構成しているのがミソ。

#解説は「フィボナッチ Haskell」 でググるといっぱいでてくるので略
236とおりすがり2:2006/06/30(金) 23:55:06
で話かわってmain関数の値の話。

これって要するに最終的には

main = (IO a) >>= (IO b) >>= (IO c) >>= (IO d) ......

というふうに(IO x)を>>=でつないだ数珠繋がりに簡約されるわけで。

(IO x)中にはキー入力とか、画面出力とか、メモリの上書きとか
逐次処理言語の命令コードやサブルーチンのようなものが詰まってる。

>>232とかで言ってるアクションてやつ
ちなみに(return x)で作った(IO x)はNOP(何もしない)が入ってるとみなす。
237とおりすがり3:2006/06/30(金) 23:59:14
>>236のミソは
ループや分岐に相当する(IO x)は無いってこと。

なぜそれでこまらないのかというと、

フィボナッチ数列のときに
ある要素を決定するのにそれより前の要素の値を利用したように

条件分岐で次の処理として(IO y)を繋げようか(IO z)を繋げようか決めるのに
それより前の(IO x)の値をみて決める事ができるから。
あるいはそこで打ち切ってプログラムを終了してもいい。

つまり、Haskellで副作用のあるプログラムを書くってことは

フィボナッチ数列を定義するように
コマンド列を定義しているようなもの
238とおりすがり4:2006/07/01(土) 00:03:08
とまあ
そういう風にオイラは理解したわけです。
239デフォルトの名無しさん:2006/07/01(土) 06:11:52
合ってると思うっす。
240デフォルトの名無しさん:2006/07/01(土) 06:30:18
>>232
>どうしてその前提が読み取れるのか分からんけど。

>「Haskellは副作用を(表面上)追い出した為にIOモナドというややこしい形でしか扱えない。しかし副作用は効率的なプログラムを扱う上で必要悪だよな。もっと簡単にならんのか?」
>という風に読んだ。

そう読めるのに気付かなかった。

入出力のことを副作用と呼んでるようだが、副作用とは式の簡約の過程で入出力を行うことであって、
入出力そのもののことではないだろ。
それとも、「副作用」という言葉をそういう意味で使うことを支持する典拠があったりするのか?

多くの言語では、入出力を扱う唯一の方法が副作用なわけで、入出力と副作用を混同してもさして問題はないだろうが、
そうでない言語(たとえばHaskellやClean)の話をするときはちゃんと区別して話したほうが良いと思う。

>というか明らかに IOモナドを副作用を扱うモナドでそ。
>>231に書いたように「副作用なしで」IOを扱うためのモナド、とするのが普通だと思う。
How to declare an imperativeから引用
>This section relates the monad approach to input-output to four other widely used
>approaches: synchronised streams, as used in earlier versions of Haskell; continua-
>tions, as used in Hope; linear types, as used in Clean; and side effects, as used in
>SML.
241デフォルトの名無しさん:2006/07/01(土) 08:52:27
手続き型言語の代入でも、裏で全メモリの値を渡してると考えれば副作用ではないな
242デフォルトの名無しさん:2006/07/02(日) 00:07:46
>そうでない言語(たとえばHaskellやClean)の話をするときはちゃんと区別して話したほうが良いと思う。
なるほど、完全に同意しましたです。すまない。

更に How to declare an imperative の文がとてもわかりやすい。ありがとう。
入出力、といえば副作用と思っていたけど、同期ストリームもそうだよな。
自分ではhGetContentsくらいしか使わないけど。
linear typeで入出力ができるのもCleanのマニュアルの序章で分かる(world as value)。
しかし。。。continuationでどうやって入出力するのか??


>それとも、「副作用」という言葉をそういう意味で使うことを支持する典拠があったりするのか?
あなたが言うように、副作用と入出力を混同していた。典拠はない。
243242:2006/07/02(日) 00:15:21
誤解を招くと悪いので少し書くと、hGetContents自体の型は Handle -> IO StringなのでIOモナド。

ただ、hGetContentsから得たStringは遅延評価の度にファイルやネットワークデバイスから読み出される。
(データがなければブロックする)
この「遅延読みString」を処理する部分は旧来のストリーム・プログラミングっぽい(よね?
244デフォルトの名無しさん:2006/07/06(木) 22:15:48
C言語だと言語仕様として再帰は32回までしか保証しない(だっけ)とかだから、
再帰による33回目の関数呼び出しとそうでない呼び出しで意味が大きく変わってくる。
245デフォルトの名無しさん:2006/07/06(木) 23:06:29
>>244
うそつけ。Cの仕様書にそんなこと書いてないぞ。
246デフォルトの名無しさん:2006/07/07(金) 04:38:43
何かそういう類いのあった気がするよ。
for のネストの回数とか意外なものに、
最低保証回数が仕様として決められている。
247デフォルトの名無しさん:2006/07/07(金) 06:46:28
つ[5.2.4 Environmental limits]
だが、再帰回数はない。
248デフォルトの名無しさん:2006/07/07(金) 08:25:32
そうなのか。
249デフォルトの名無しさん:2006/07/07(金) 08:32:38
>>244
少し考えれば、再帰を32回まで完全保証する事が不可能だって分かるだろ。
250デフォルトの名無しさん:2006/07/08(土) 09:19:47
へ?不可能なの?スタックさえ確保しておけばいいんじゃねーの?
251デフォルトの名無しさん:2006/07/08(土) 09:22:30
>>249
ああ、確かにそうだな。
252デフォルトの名無しさん:2006/07/09(日) 01:07:02
>>250
ローカル変数がスタックに取得される仕様だと
消費されるスタックの量が予測できないだろ。

ローカル変数と配列の最大数×配列サイズの制限?から再帰の
最大数を決めてもあまり意味があるとも思えない。

ローカル変数をスタックに取らないといけない決まりも無いけど
ほとんどの実装で受け入れられないモノを標準仕様を
するわけにはいかなかったんだろう。

ってスレ違いごめん
253デフォルトの名無しさん:2006/07/09(日) 20:45:30
ローカル変数のスタック上のサイズは固定でしょ。言語にもよるけどCやC++ならそう。
そんなことも分からんやつしか居ないの?
254デフォルトの名無しさん:2006/07/09(日) 21:39:50
もっと優しく言ってくれ
255デフォルトの名無しさん:2006/07/09(日) 21:49:20
おれにはツンデレでお願い
256デフォルトの名無しさん:2006/07/09(日) 22:30:35
し、Cの言語仕様にスタックなんて概念は規定されてないんだからねっ!
257デフォルトの名無しさん:2006/07/09(日) 22:34:52
>>244-256
スレ違いの議論はこの辺で終了して下さい
258デフォルトの名無しさん:2006/07/10(月) 00:31:31
>>253
だからその固定の変数を最大いくつ宣言できるか判らないでしょ
259デフォルトの名無しさん:2006/07/10(月) 02:01:36
さらにC99だとスタック上の配列のサイズは実行時に決定できる。
すれ違いなのでこの辺までにしとこう。
260デフォルトの名無しさん:2006/07/10(月) 06:35:50
261デフォルトの名無しさん:2006/07/10(月) 12:53:18
>>259
偉そうに大嘘で締めないように。無能はしゃしゃり出ちゃいやん。

ま、スレ違いだからやめとくか。
262デフォルトの名無しさん:2006/07/10(月) 13:38:02
ここは一応 Haskell 本スレじゃないから、
少々脱線した所でどうでもいい気もするけどね。
263デフォルトの名無しさん:2006/07/10(月) 13:52:49
少々なら良いけど3日も続くとね…。
面白い話でもないしw
264デフォルトの名無しさん:2006/07/10(月) 22:01:26
>>260
細かいな。記憶クラスが auto の配列って言えばいいのか?

>>261
C99のマニュアル読んでね。
265デフォルトの名無しさん:2006/07/10(月) 22:17:04
げ。知らなかった。
int a[hoge()];
なんてやっても動くじゃん。
いままで関数内で捨てちゃう配列にmalloc使っていたのは無駄だったのか。

HaskellとRubyばっかり使っていたせいで、Cはメモリ管理がめんどくさい言語
だとばかり思っててちゃんと調べてなかった。
266デフォルトの名無しさん:2006/07/10(月) 22:31:16
C99 じゃないと無理だけどな。
267デフォルトの名無しさん:2006/07/10(月) 22:34:35
Cは99なのにHaskellはまだ98なのかー
268デフォルトの名無しさん:2006/07/10(月) 22:46:53
>>264
しかしそう言い直した途端にスタックの話じゃなくなる罠。

いつまでもひきずってもつまらんので、Haskellの豆知識でも。

GHCでコンパイルされたプログラムがスタックをどのように使うかはわかりにくい。
再帰呼び出しでスタックが深くなっているようにも見えないのにオーバーフローを起こしたりする。
これは、スタックの消費が、呼び出しの深さではなく正格な関数の適用のネストの深さに比例するためだ。
例えばg x = x + 1 - 1 + 1 - ..たくさん.. - 1という関数を定義すると、呼び出しの深さは一であるにも関わらず
スタックを大量に消費する。正格な関数である(+)と(-)の適用が深くネストされているからである。
269デフォルトの名無しさん:2006/07/11(火) 09:42:39
スタックが足りなくなったら適当に評価を行って遅延してるのを減らすとか
できないの?
270デフォルトの名無しさん:2006/07/11(火) 11:27:31
>>264
嘘を拡大するためだけに前言撤回で復活しなくてよろしい。
271デフォルトの名無しさん:2006/07/11(火) 19:11:00
>>269
未評価の式はヒープに保存されているので、それ自身はスタックを消費しない。
スタックが溢れるのは式を評価しようとしたとき。
272デフォルトの名無しさん:2006/07/14(金) 00:15:50
>>271 スタックあふれた時はヒープ上にスタックを移動して計算したりできないの?
273デフォルトの名無しさん:2006/07/14(金) 01:15:45
>>272
なんで俺らがそこまでしなきゃいけないわけ?お前何か勘違いしてない?
274デフォルトの名無しさん:2006/07/14(金) 01:28:55
スタックが溢れそうなのにヒープに余裕があるなどと思ってる素人はモノ喋んな。
275デフォルトの名無しさん:2006/07/14(金) 03:16:34
・・・
276デフォルトの名無しさん:2006/07/14(金) 11:25:17
頭が良くない人ほどすぐ怒る
277デフォルトの名無しさん:2006/07/14(金) 17:56:55
>274は50年前の世界からやってきた時空の旅人
278デフォルトの名無しさん:2006/07/15(土) 19:52:26
>>277
♪ぼくらは たびびと
 ときの たびびと♪
279デフォルトの名無しさん:2006/07/16(日) 04:35:58
Haskellは、お利口さんに見られたいけど誰もそう見てくれない
哀れな人たちの嫉妬を一身に買って出てるよね。
280デフォルトの名無しさん:2006/07/16(日) 14:04:58
嫉妬というか、そういう奴らがすがるための言語。
知的な奴は、そういうことを考えずに自己拡張しまくりのLispを使う。
281デフォルトの名無しさん:2006/07/18(火) 13:14:51
諸君議論しているかね?
282デフォルトの名無しさん:2006/07/19(水) 01:50:46
Haskell 面白そうなので調べていたら、Clean にたどり着いた。
両方とも、ちょっとしか解ってないが、現時点ではClean の方が良さげに思える。
でも、一般的にはHaskell の方が流行ってるみたい…。
なぜなんでしょう?

Haskell の方が良い!という人の意見が聞きたいです。
283デフォルトの名無しさん:2006/07/19(水) 02:56:48
ttp://groups.google.com.au/group/comp.lang.functional/msg/c09cb40a66558a19
個人的にはCleanって閉鎖的な印象を受けるからHaskellに流れてるだけ。
どっちも元はMirandaだからCommon LispとSchemeくらいにしか違わないんじゃないの?と
ろくすっぽCleanを知らないで書いてみる。
284デフォルトの名無しさん:2006/07/19(水) 03:02:04
ま、素人はそう考えるわな。
285デフォルトの名無しさん:2006/07/19(水) 03:58:51
最新ニュース 【教育】国際数学オリンピック 中国が全員金メダルで3年連続世界1位 2位ロシア、3位韓国 日本は7位も過去最高成績
1 :ネットナンパ師φ ★ :2006/07/19(水) 02:23:23 ID:???0
http://news.searchina.ne.jp/disp.cgi?y=2006&d=0718&f=national_0718_002.shtml
http://imo2006.dmfa.si/results.html によると、順位は 1中国 2ロシア 3韓国
4ドイツ 5アメリカ 6ルーマニア 7日本 8イラン 9モルドバ 10台湾 11ポーランド 12イタリア
13ベトナム 14香港 15カナダ 16タイ 17ハンガリー 18スロバキア 19トルコ 20イギリス
【ニュー速+】http://news19.2ch.net/test/read.cgi/newsplus/1153243403/

(以下参考情報)
インド人は、あんだけ人間いて夏季オリンピックで銅1個しか取れない劣等民族。
自慢の理系でも数学オリンピックは毎年中国が優勝。アメリカが2位。この2国が指定席で、インドなんてランク外。
http://ja.wikipedia.org/wiki/%E5%9B%BD%E9%9A%9B%E6%95%B0%E5%AD%A6%E3%82%AA%E3%83%AA%E3%83%B3%E3%83%94%E3%83%83%E3%82%AF
数学オリンピックの日本の輝かしい成績
1995年:1位-中国、2位-ルーマニア、3位-ロシア、4位−ベトナム、5位-ハンガリー
1996年:1位-ルーマニア、2位-アメリカ、3位-ハンガリー、4位-ロシア、5位-イギリス
1997年:1位-中国、2位-ハンガリー、3位-イラン、4位-ロシア、アメリカ
1998年:1位-イラン、2位-ブルガリア、3位-アメリカ、ハンガリー、5位-台湾
1999年:1位-中国・ロシア、3位-ベトナム、4位-ルーマニア、5位-ブルガリア
2000年:1位-中国、2位-ロシア、3位-アメリカ、4位-韓国、5位-ブルガリア、ベトナム
2001年:1位-中国、2位-アメリカ、ロシア、4位-ブルガリア、韓国
2002年:1位-中国、2位-ロシア、3位-アメリカ、4位-ブルガリア、5位-ベトナム
2003年:1位-ブルガリア、2位-中国、3位-アメリカ、4位-ベトナム、5位-ロシア
2004年:1位-中国、2位-アメリカ、3位-ロシア、4位-ベトナム、5位-ブルガリア
2005年:1位-中国、2位-アメリカ、3位-ロシア、4位-イラン、5位-韓国

なお参加資格は高校生までです。今すぐではなく次世代、次次世代に効いて来るものです。
それが教育の深さ、恐ろしさ。
286デフォルトの名無しさん:2006/07/19(水) 05:09:41
みなさんやっぱり頭がいいんですね。
287デフォルトの名無しさん:2006/07/19(水) 05:20:57
>>285
数学オリンピックでは中国とか凄いんだけどねえ。
なぜか欧米の方が偉大な数学者は多いよね。
インドだってラマヌジャンっていう大天才がいたし。

288デフォルトの名無しさん:2006/07/19(水) 10:28:12
だって数学オリンピックって数時間で処理できるような、簡単な問題を
いかに処理しきるかっていう官僚的作業だろ?
それでも俺には逆立しても解けないが。

ノーベル賞フィールズ賞取る様な何年もかけて倒す仕事とはスケールが違い過ぎるから

1kmレースを3速ギアでトップで駆け抜けたからといって
そのマシンが300kmレースを6・7速ギアでトップでゴールできるわけじゃない。
289デフォルトの名無しさん:2006/07/19(水) 10:57:38
>> 284
非素人の見解披露希望。
290282:2006/07/20(木) 02:58:24
>>283
英語、苦手でして…。
単語を拾い読みしてみましたが、Haskell は研究用で Clean は実用言語という所でしょうか?

>>284
ぜひ、具体的意見をお聞かせ下さい。
291デフォルトの名無しさん:2006/07/20(木) 20:36:18
Cleanは実行速度速いよ
メモリも食わない
Haskellは遅い
292デフォルトの名無しさん:2006/07/21(金) 00:42:59
Cleanで
echo 'main = readFile "b.txt" >>= putStr . show . (\x->x*x*x) . read'> c.hs && echo 4 > b.txt && runghc.exe c.hs
これと同じことやってみ。
293デフォルトの名無しさん:2006/07/21(金) 09:36:40
>>288
は、数学オリンピックについて何も知らない。
294デフォルトの名無しさん:2006/07/21(金) 09:39:46
Microsoftが開発中の新しいシェル「Windows PowerShell」は、RC1版以前は
「Microsoft Command Shell(開発コード名:Monad)」という名称が付けられていた。
295デフォルトの名無しさん:2006/07/21(金) 09:48:28
英語が苦手だとHaskellやCleanの新しい機能をすぐに使えないので楽しさ半減だろうと思う。
nobsunみたいに和訳してくれる人は普通とても少ないし。
296282:2006/07/22(土) 03:36:21
>>292
なる程、Haskell の利点としては
@スクリプト言語的な使い方ができる
AIOモナドだと簡潔に書ける
といった所でしょうか。

@の使い方は面白いかもしれませんね。

Aはどうなんでしょう?
エラー処理とかを考慮したプログラムも簡潔に書けるのでしょうか?
297282:2006/07/22(土) 03:38:17
>>295
今の所、基本的な事を覚えるだけで、アップアップですw
298デフォルトの名無しさん:2006/07/22(土) 05:01:32
Haskell
 関数型言語のスタンダードという役割を担うために作られた言語。
 だから、関わっている人が多いし、ライブラリも多い。

Clean
 関わっている人が少なく、ライブラリも少ない。
 異端であるがゆえに、最新の話題がCleanから出てくることはほとんどない。

という違いもある。
勉強目的ならHaskellだな。

Haskellといえばモナドだけど、Cleanでも同じようなロジックで書ける。
両者の違いは構文糖衣的な違いで、中身は似たようなもの。
Cleanで書くと、たらい回す変数を山のように書いて、文字数が2倍ぐらいになる。
Haskellはプログラムが美しい、Cleanは実行速度が速い、と言える。
299デフォルトの名無しさん:2006/07/23(日) 00:13:15
もっと最適化しろよハスクル
300デフォルトの名無しさん:2006/07/23(日) 00:15:44
カレー食いたくなった
301デフォルトの名無しさん:2006/07/23(日) 00:52:36
コンパイル時間をもっと短くしろよハスクル
302デフォルトの名無しさん:2006/07/23(日) 01:34:55
あらいぐまハスクル
303282:2006/07/23(日) 02:53:12
>>298
なるほど…。
なぜ、Haskell の方が一般的なのか、解ったような気がします。
ありがとうございました。
304デフォルトの名無しさん:2006/07/30(日) 10:30:01
ヒアドキュメント無いんだったらクソ認定
305デフォルトの名無しさん:2006/07/30(日) 10:58:56
確かに欠陥だ。
次版で入らんかな。
306デフォルトの名無しさん:2006/07/31(月) 18:40:18
自己記述してるからコンパイラが低速なんだろ?
307デフォルトの名無しさん:2006/08/02(水) 17:42:50
諸君議論したまえ
308デフォルトの名無しさん:2006/08/03(木) 20:24:15
諸君怠けてはいないか?
309デフォルトの名無しさん:2006/08/04(金) 16:48:43
諸君夏休みかね
310デフォルトの名無しさん:2006/08/05(土) 13:39:27
本物のプログラマはHaskellを使う
http://itpro.nikkeibp.co.jp/article/COLUMN/20060801/244812/

記事のタイトル、センス無い
311デフォルトの名無しさん:2006/08/05(土) 15:42:44
> 最後にこの連載のタイトルの由来を紹介しておきましょう。
> 「本物のプログラマはHaskellを使う」というタイトルは
> 「本物のプログラマはFORTRANを使う」や「本物のプログラマはPascalを使わない」
> といった有名なフレーズをもじったものです。

って書いてあるじゃんか。自分が知らない読んでない理解できないからって
不当に他人を卑しめるのは止めような。
312デフォルトの名無しさん:2006/08/05(土) 16:30:56
そういうもじりが安直だって言ってんじゃないの?
313デフォルトの名無しさん:2006/08/05(土) 16:53:19
そんなに悪いとは思わないけどな…
「本物のプログラマはHaskellを使わない」のほうがしっくりくると言われればそうかもしれないが。
314デフォルトの名無しさん:2006/08/05(土) 17:45:17
「本物のプログラマはPascalを使わない」で語られる本物は、
決してHaskellなどという"軟弱な"言語なぞ使わんと思うんだが?
315デフォルトの名無しさん:2006/08/05(土) 20:09:59
310のリンク先の情報処理学会のページ、おもろいな
まだ少ししか読めてないけど
316デフォルトの名無しさん:2006/08/05(土) 20:33:27
317デフォルトの名無しさん:2006/08/06(日) 00:46:32
この人のサイトが痛いのは本人の趣味嗜好の問題だから放っておくとして、
一昔前のgauche-devel-jpでのshiroタンとのやりとりを見る限りコンピュータの
アーキテクチャの根本が理解できていない人としか思えなかったんだが。
まぁHaskellと戯れているうちはデータがメモリ上でどう表現されているかなんて
知らなくても生きていけるってことかな。
318デフォルトの名無しさん:2006/08/06(日) 01:08:00
ハードに近いことは良くわかってないけど何となくプログラミングできている、ってのは文系出プログラマの得意技。
319デフォルトの名無しさん:2006/08/06(日) 09:28:30
Haskellの美しさにあてられら未熟な若者だ。
優しく見守ってやれ。
320デフォルトの名無しさん:2006/08/06(日) 16:03:48
>>317
似た名前だと思っていたら、あれと同一人物なのかよ……。
321デフォルトの名無しさん:2006/08/07(月) 00:56:53
同一人物、なんだろうねぇ…。
偶然一致するようなハンドル名なのかどうか判断できないから確証はないけど。
未踏にも顔出してたと思ったけど、どんな成果だったのかな。
322デフォルトの名無しさん:2006/08/09(水) 18:27:04
何これ? あわててブラウザを閉じたぜ。
ttp://page.freett.com/shelarcy/
323デフォルトの名無しさん:2006/08/10(木) 09:03:14
だれかヒアドキュメントの機能をcommitしてきてください。
324デフォルトの名無しさん:2006/08/10(木) 18:39:34
グラスゴウスケールって医療用語であるけど
グラスゴウハスケルと似てるね
325デフォルトの名無しさん:2006/08/11(金) 01:41:09
>>324
うわぁっ、すごぉっ、すげぇー!って、日常用語にあるけど、
グラスゴウスケールと似てるね。

326デフォルトの名無しさん:2006/08/11(金) 07:51:06
ということは
うわぁっ、すごぉっ、すげぇー!

グラスゴウハスケルは似てるわけか
327デフォルトの名無しさん:2006/08/16(水) 20:04:53
問1

「うわぁっ、すごぉっ、すげぇー!」を使って
長文を作りなさい
328デフォルトの名無しさん:2006/08/17(木) 05:51:34
それを見て、あるいは、変なものだ。うわぁっ、すごぉっ、すげぇー!
むやが及ん、すべてが、と思った。うわぁっ、すごぉっ、すげぇー!
不要なら、それが、それを出してきたところでもないのなのだ。うわぁっ、すごぉっ、すげぇー!
まだ比べできて、この本にもある。うわぁっ、すごぉっ、すげぇー!
すでに、人を手をするのを出している、バカな気が、この本のせいと、一歩だと思うんだ。うわぁっ、すごぉっ、すげぇー!
0001200-ROM人は、もう一つの問題になるので、ついにこれには、ホントには、下の時代にはその時のせいをつくるなものを読んでいるのも、それはそれを92020202/1創作連中所持とかの時代にもある。うわぁっ、すごぉっ、すげぇー!
あるいは物語もあった。うわぁっ、すごぉっ、すげぇー!
なお、その号のこともずっとさておきけれど、感じ。うわぁっ、すごぉっ、すげぇー!
プロットをすると、という感じ。うわぁっ、すごぉっ、すげぇー!
で、すでにシャープに、ほとんど無節操ないのかな。うわぁっ、すごぉっ、すげぇー!
短距離では、その戦時のお解釈年前の大解決冷や汗指標はほとんど開かかとかを手をもらった芸ばかり。うわぁっ、すごぉっ、すげぇー!
329デフォルトの名無しさん:2006/08/17(木) 10:12:37
ちょwww
330デフォルトの名無しさん:2006/08/17(木) 22:03:17
>>328
日本語による近代美術だ
331デフォルトの名無しさん:2006/08/18(金) 17:06:46
解読できたらごほうびをあげるわ
332デフォルトの名無しさん:2006/08/19(土) 05:42:40
諸君そろそろ議論に戻りたまえ。
333デフォルトの名無しさん:2006/08/21(月) 20:21:49
    |┃三             _________
    |┃              /
    |┃ ≡    _、_   < 話は全部聞かせて貰ったぞ!
____.|ミ\___( <_,` ) _ \
    |┃=___    \    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    |┃ ≡   )   人 \ ガラッ
334デフォルトの名無しさん:2006/08/27(日) 11:24:42
入門Haskellの1章目で既に挫折しそうなわけだが。
やはり、アホな俺にはjavaが似合ってるのかもしれん。
335デフォルトの名無しさん:2006/08/27(日) 12:05:04
>>334
一章からわりと技巧的なことをやっているので無理もないと思う。
とにかく慣れが重要なので、サンプルコードをコピペしていじりながら
慣れるのが良いんじゃないか。
意味の分からないところは2chで聞けばいいし。
336デフォルトの名無しさん:2006/08/27(日) 14:42:25
>>335
アドバイスありがと。
とにかく触りながら地道にやってみるか。
337デフォルトの名無しさん:2006/08/27(日) 16:36:09
ふつけるのほうが
入門書としては
出来がいいようなキガスルな
338デフォルトの名無しさん:2006/08/27(日) 19:10:52
>>328
うわぁっ、すごぉっ、すげぇー!
339デフォルトの名無しさん:2006/08/27(日) 20:34:23
だまれカス
340デフォルトの名無しさん:2006/08/27(日) 23:24:04
カスケル
341デフォルトの名無しさん:2006/09/03(日) 11:37:28
ttp://www.youtube.com/watch?v=eLS6GHXWMpA
みんな本当にこう感じてるのか?
342デフォルトの名無しさん:2006/09/03(日) 16:18:31
>>341
カコイイ
343デフォルトの名無しさん:2006/09/03(日) 17:38:49
>>341
すげー
Haskoreってやつを使っているのかな。
344デフォルトの名無しさん:2006/09/03(日) 17:51:04
>>341
最後の別のムービー紹介で
リーリ・カル・マジーロがトップに来てるのにワロタw
345デフォルトの名無しさん:2006/09/03(日) 17:55:45
>> 341,342,343
いまサウンドボードがイカれてて何がおもしろいのかサーッパリわからなかったんで
何を紹介しているムービーなのか解説してもらえないでせうか。
346デフォルトの名無しさん:2006/09/03(日) 18:12:03
>>345
音楽のリズムパート(って正しい表現?)を記述したHaskellのコードがあって、それがBGMとして流れている。
コードを編集してロードしなおすとそれに連動して音楽も変わる。
347デフォルトの名無しさん:2006/09/04(月) 08:14:34
よく考えればMMLとあんまりは変わらないとも言えるけど…
348345:2006/09/05(火) 01:10:24
>> 346
遅ればせながらサンクス。週末にでもサウンドボード調達してこよ。
349345:2006/09/14(木) 00:06:08
音付きで拝見しました。あまりよく知らないんだけどあんなのもHaskellが標準で
持ってる範囲内での記述なんですか?Lisp屋さんだとそれ専用のミニ言語平気で
作っちゃったりしてるけど似たようなものなのかな。
350デフォルトの名無しさん:2006/09/14(木) 01:16:32
328はpseudo-yamagata
351デフォルトの名無しさん:2006/09/14(木) 02:12:13
>>343
http://en.wikipedia.org/wiki/Haskore
こんなものがあったとは。。
352デフォルトの名無しさん:2006/09/19(火) 23:56:56
このスレにはイスラエルの工作員が紛れ込んでると聞きましたが。
353デフォルトの名無しさん:2006/09/20(水) 00:02:58
オッス オラ モサド
354デフォルトの名無しさん:2006/09/20(水) 00:28:57
祖国がやべえ状態だってのに
なんだかすっげえワクワクしてきたぞ!
355デフォルトの名無しさん:2006/09/29(金) 08:34:08
>>272
http://www.haskell.org/ghc/docs/latest/html/users_guide/runtime-control.html#rts-options-gc
GHCのマニュアルによると、スタックはヒープ上に取られ、必要に応じて伸長する。
ヒープを使いきっていないのにスタックオーバーフローが起こるのは、無限ループに陥ったときに
メモリを使い尽くさないように上限を定めているだけで、

# スタックの大きさの上限を40億バイトにする
./a.out +RTS -K4G

のように上書きできる。
356デフォルトの名無しさん:2006/10/06(金) 17:47:48
syntax sugar

cons :: a -> [a] -> [a]
cons a b = a : b
357デフォルトの名無しさん:2006/10/07(土) 23:18:37
諸君、議論したまえ。(プヒョゲラ)
358デフォルトの名無しさん:2006/10/08(日) 09:08:42
闇夜に仕事人の目がギロンギロン
359デフォルトの名無しさん:2006/10/21(土) 02:35:42


 ありがとーおー ぼくのー とーもだちー
 
   ハスカァール にー あわせてー くぅー れー ぇーてぇー

360デフォルトの名無しさん:2006/10/21(土) 18:26:29
良スレage
361デフォルトの名無しさん:2006/10/21(土) 18:55:02
なにこの流れw
362デフォルトの名無しさん:2006/10/21(土) 19:09:55
次スレこれでいこうぜ

【Haskell】あらいぐまハスケル【関数型言語】
363デフォルトの名無しさん:2006/10/24(火) 00:08:44
この言語は何で人気なの?
364デフォルトの名無しさん:2006/10/24(火) 00:13:15
別に大して人気はないと思う。
単に話題になることが多いだけじゃないかと。
365デフォルトの名無しさん:2006/10/24(火) 00:35:18
ネタにし易いからかな。
366デフォルトの名無しさん:2006/10/24(火) 22:24:58
http://pc8.2ch.net/test/read.cgi/tech/1149263630/909
飽きるまでなら付き合おう。
で、どこまで理解してる?
367デフォルトの名無しさん:2006/10/24(火) 22:35:23
module Qsort where
qsort _ [] = []
qsort f (x:xs) = before ++ (x : after)
  where before = qsort f $ filter (not . (f x)) xs
  after = qsort f $ filter (f x) xs

moduleってなによ
whereってなによ
368デフォルトの名無しさん:2006/10/24(火) 22:52:17
module Qsort where
ってのは、これからQsortという名前のモジュールを定義する、
詳細は以下である、と言う意味。(whereは「ただし」とでも読むべし)
モジュールというのは、おおざっぱに言うと、
一つのファイル中で定義されたものたちをひとまとめにして名前をつけたもの。
この場合はQsortモジュールはただ一個の定義(qsort)だけからなる。
プログラムの他の部分からqsortを使いたいときは、
import Qsort
として、Qsortモジュールの定義を使うことを宣言する。
369初心者A:2006/10/24(火) 23:03:51
モジュール・・・機能単位、交換可能な構成部分という意味の英単語(e-wordより)

なるほど。Javaでいうところのクラスみたいな感じか
import文もJavaといっしょだな
モジュール ≒ Javaのパッケージ
定義     ≒ Javaのクラス
関数     = Javaのメソッド


ここで疑問点が発生
下のような2行だけ書いたファイルでもOKのはずだけど
これはなんで module とか where とか 定義名 がいらないの?

foo x y = x + y
hoge = 2
370デフォルトの名無しさん:2006/10/24(火) 23:09:22
>>369
>これはなんで module とか where とか 定義名 がいらないの?
module ... whereの部分は省略することができて、その場合
module Main(main) where
と書かれているとみなされる。
(main)という括弧書きは、モジュール中の定義のうち、mainだけを外部に公開する、
という意味。括弧書きがないときは、全ての定義が公開される。
371デフォルトの名無しさん:2006/10/24(火) 23:25:53
デフォルトではprivate(不可視)にしてるということか

次2行目
qsort _ [] = []

これは qsort が 定義名 でいいのかな
_(アンダースコア) は 変数名っぽいけどそんなわけないよな
そして、 [ ] (配列) = [ ] (配列) 

???
わからない
372デフォルトの名無しさん:2006/10/24(火) 23:39:37
>>371
[]は空リスト。
_は厳密には変数名じゃないけど、そう考えても大して問題はない。
この行では、_がqsortの第一引数、[]が第二引数になっている。

qsort _ [] = []

は、qsortの第二引数が空リストのとき、第一引数に関係なく、結果は空リストである、と読む。
ここで定義しようとしているqsortは、第一引数として比較関数、第二引数としてリストを取り、
ソートされたリストを返す関数だから、この行は、「空リストをどんな比較関数を使ってソートしても結果は空リスト」と
言っていることになる。
373デフォルトの名無しさん:2006/10/25(水) 00:04:32
比較関数っていうのがよくわかんない
Webで探したらこんな文章発見

>でも比較関数って何?って思いますよね。
>比較関数とは2つの引数を持ち、
>引数1が引数2より小さい場合は負の整数、
>同じ場合は0、
>引数1が引数2より大きい場合は正の整数を返します。

うーん・・・
 _ (アンダースコア)がどういう役割なのかな、この場合 _(アンダースコア)以外はダメ?

例えば -(ハイフン)とか、ふつうのアルファベットとか
374デフォルトの名無しさん:2006/10/25(水) 00:20:58
>>373
>比較関数っていうのがよくわかんない
ここでは、引数を二つとって、第一引数が第二引数より「小さい」ときのみTrue、
そうでなければFalseを返す関数の事。
普通の意味での大小関係にしたがってTrue/Falseを返す関数を比較関数として与えれば
qsortは昇順のソートをするし、逆に数値が大きいほど「小さい」と判断する
関数を与えればqsortは降順のソートをする。さらに、例えば引数の絶対値を比べる関数を
渡せば、絶対値が小さい順にソートすることができる。

> _ (アンダースコア)がどういう役割なのかな、この場合 _(アンダースコア)以外はダメ?
仮引数の名前なので、アルファベットからなる名前を好きにつけても良い。

qsort comparer [] = []

とか。ハイフンは演算子とみなされるのでだめ。
375デフォルトの名無しさん:2006/10/25(水) 02:19:46
お札もえいないのか
376デフォルトの名無しさん:2006/10/25(水) 10:17:13
お礼を期待して2chで書くのは不毛な行為だとオモタ。
377デフォルトの名無しさん:2006/10/25(水) 12:05:22
>>375
「お札萌え居ないのか」?
巫女萌えならここに居るが何か。
378初心者A:2006/10/26(木) 02:47:04
昨日はねちゃってたよ
サンクス

また明日とかよろ
379デフォルトの名無しさん:2006/10/26(木) 02:59:00
おれい?
380 ◆XbPqxIJuLU :2006/12/02(土) 02:04:39

        ∩___∩
        | ノ|||,,.ノ ヽ、,,ヽ
       /  ●   ● |  このスレは俺がもらうクマ
       |    ( _●_)  ミ  以後、「AAでHaskellのお勉強」クマ
      彡、  ,、、|∪| ,,,ノ   
      /   . ヽノ  ヽ
      |  _r'゚lニニニl]_ ____/l    
fニニニニllニニ|  \[ l===ニニl]}||||||||ll]}コl|====iニコ
|l_,,=-'''~  | \... ヽ'''ニ「_,,,l⌒l。__。_]三i三三iF
      | 〈,,/ヽ___)|ll [`ー'
381デフォルトの名無しさん:2006/12/02(土) 02:06:38

      ∩∩ ; とりあえずHelloWorld書いてみるクマ
      ;|ノ||`      ┬-‖
   __,/●●| __    | | ‖
   | ; |`(_●)/ ミ   . Y ‖
   | .彡|∪||、 , .|     |  ‖
  /:~ ̄ ̄ ̄ ̄:/.|    |  ‖
  ,|:::::.   .......::/>>    /  ‖
 /.:::::  .. ...::::::|'(/\_/  ‖
../:.:::    .. :.:::/.:/     /‖\
/.:::.   ....:::..:::/.:/
' ̄ ̄ ̄ ̄ ̄ _/
|_| ̄ ̄ ̄ ̄|_|
382デフォルトの名無しさん:2006/12/02(土) 02:09:08

main = putStrLn "Hello, World!"

   ∩___∩
   | ノ      ヽ
  /  ●   ● |   こうですか!?わかりません!
  |    ( _●_)  ミ
 彡、   |∪|  、`\
/ __  ヽノ /´>  )
(___)   / (_/
 |       /
 |  /\ \
 | /    )  )
 ∪    (  \
       \_)
383デフォルトの名無しさん:2006/12/02(土) 02:10:28

  できてんじゃねーかよ!
    .,. -──-、    __
   /. : : : : : : : : :\  〈〈〈〈 ヽ
  /.┛┗: : : : : : : : : :ヽ 〈⊃  ノ
. !.::┓┏,-…-…-ミ: ::', |   |       ∩___∩
 {::: : : : :i '⌒'  '⌒'i: : ::}ノ   !       | ノ --‐'  、_\
 {:: : : : : | ェェ  ェェ |: : :}   /   、   / ,_;:;:;ノ、  ● |
. { : : : : :|   ,.   |:: :;! / ,   ,,・_  |    ( _●_)  ミ
. ヾ: : :: :i r‐-ニ-┐| ::ノ/   , ’,∴ ・ ¨彡、   |∪|  ミ
   ゞイ! ヽ 二゙ノイゞ     、・∵ ’  /     ヽノ ̄ヽ
  / _ ` ー一'´ ̄/          /       /\ 〉
  (___)    /          /        /
384デフォルトの名無しさん:2006/12/02(土) 02:25:44
 
          ,..-──- 、
          /. : : : : : : : : : \      Haskellはmainアクションからはじまるようになっている
        /.: : : : : : : : : : : : : : ヽ
        .,!::: : : :,-…-…-ミ: : : : :',     決まりごとだから深く考えちゃダメさ
        {:: : : : :i '⌒'  '⌒' i: : : : :}     
        {:: : : : | ェェ  ェェ |: : : : :}      そうそう、Haskellは大文字と小文字を区別するよ
     .   { : : : :|   ,.、   |:: : : :;!      
        .ヾ: :: :i r‐-ニ-┐ | : : :ノ       MainでもMAINでもない、mainじゃないといけない
         ゞイ! ヽ 二゙ノ イゞ‐′
    ,.、-  ̄/  入.` ー一'´ |` ┬-、       クマくん わかるかい?
    /  ヽ. /    ト-` 、ノ- |  l  l  ヽ.
  /    ∨     l   |!  |   `> |  i
  /     |`二^>  l.  |  | <__,|  |
_|      |.|-<    \ i / ,イ____!/ \
  .|     {.|  ` - 、 ,.---ァ^! |    | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l
__{   ___|└―ー/  ̄´ |ヽ |___ノ____________|
  }/ -= ヽ__ - 'ヽ   -‐ ,r'゙   l                  |
__f゙// ̄ ̄     _ -'     |_____ ,. -  ̄ \____|
  | |  -  ̄   /   |     _ | ̄ ̄ ̄ ̄ /       \  ̄|
___`\ __ /    _l - ̄  l___ /   , /     ヽi___.|
 ̄ ̄ ̄    |    _ 二 =〒  ̄  } ̄ /     l |      ! ̄ ̄|
_______l       -ヾ ̄  l/         l|       |___|
385デフォルトの名無しさん:2006/12/02(土) 02:30:34

                      _ /- イ、_
  簡単クマ   __        /: : : : : : : : : : : (
          〈〈〈〈 ヽ     /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ
          〈⊃  }     {:: : : :ノ --‐' 、_\: : ::}
   ∩___∩  |   |      {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::}  
   | ノ      ヽ !   !   、  l: :ノ /二―-、 |: ::ノ
  /  ●   ● |  /   ,,・_  | //   ̄7/ /::ノ
  |    ( _●_)  ミ/ , ’,∴ ・ ¨  〉(_二─-┘{/
 彡、   |∪|  /  、・∵ ’  /、//|  ̄ ̄ヽ
/ __  ヽノ /         /   // |//\ 〉
(___)   /         /    //   /\ /
386デフォルトの名無しさん:2006/12/02(土) 02:32:43
 
                                              _ /- イ、_
    ∩___∩   あぁたたたたたたたたたたたた  /: : : : : : : : : : : (
    | ノ     ヽ                             /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ
   /    ●   |     r‐っ'つ  _,rノ´)        {:: : : :ノ --‐' 、_\: : ::}
   |      ( _●) ーニ三、_,Eノ‐_r'           {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::}
  彡、     |∪||   r'´)  ̄-一ーt_j'´     、   l: :ノ /二―-、 |: ::ノ
    ゝ     ヽノ _三  'ー'´)   _,∩     ,,・_    | //   ̄7/ /::ノ
   /    ー-−ニ ̄‐ヽ   ̄,_)' 一(´,__) `! , ’,∴ ・  ¨  〉(_二─-┘{/
          一 - ―゙ゝ_,.)  ニ(__,.)-''l-‐、・∵ ’    /、//|  ̄ ̄ヽ
                 一‐--(_) ノ`       /   // |//\ 〉
                      (__)'         /    //   /\ /
   putStrLnってなんだクマ?
387デフォルトの名無しさん:2006/12/02(土) 02:34:04

      関数名だボケ!!

       ,..||-ノ─ソ彡〈〈〈〈 ヽ
     &. : : : : : : : : : ミ〈⊃  }
    ミ.: : : : : : : : : : : : : :  |   |
    ,!::: : : :,-…-…-ミ: : : :|   |         ∩___∩
   三 : : : :i ;;;/:'  '⌒' i: : : |   |        | ノ --‐'  、_\ 
   .{:: : : : |:::+;;;  ェェ .|: : : : ニ  !   ,,・,_  / ,_;:;:;ノ、  ● |
    { : : : :|ヾ  ,.、   |:: : : :; ! / ’,∴ ・ ¨ |    ( _●_)  ミ
 / ヾ: :: :i r‐- ┃┐.| : : :ノ/、・∵ ’    彡、   |∪|   ミ
/ __ゞイ!ヽ┃ニ゙ノ イゞ‐            /     ヽノ ̄ヽ
(___)     /`'            /       /\ 〉
388デフォルトの名無しさん:2006/12/02(土) 02:35:05

             .,..-──- 、
           r '´. : : : : : : : : : :ヽ
          /.: : : : : : : : : : : : : :: ヽ
         ,!::: : : : : ,-…-…-ミ:: : :',
         {:: : : : : :i  ,;ノ;´:`ゞ、i: : :.:}  もともと用意されてんだよ〜っ!!
         {:: : : : : :|  ェェ;;;;;;;ェェ|: : : } 
         { : : : : ::|    ,.、 .| : : :;!∫ 
          ヾ: :: : :i   r‐-ニ┐| : riii= 
           ゞイ!   ヽ 二゙ノ イ「 ノ 
          (⌒ ー ̄ ̄´ r⌒ !  〉
           ヽ弋パラッパッパ` ー'
           〔勿\     ヽ        ベキ
               )  r⌒丶)  ベキ
     ドカ   ドカ  /   !   |' ∩__∩   ボキ
       ドカ    /   /|  l| ノ --‐'  、_\
             (    く  ! ~l / ,_;:;:;ノ、  ●| 
           ドカ   \  i   | ‖彡    ( _●_) ミ
            ,__>  ヽヽ从/ 彡 、  |∪|  ミ
            ⊂ _ ⌒ヽ从  ⊃  ヽノ ̄⊃
389デフォルトの名無しさん:2006/12/02(土) 02:43:42
;;;;;;;;;;;;;;;;;;;;;(:::::::::::::::::::::::::::::::   ,...ヾ ;;\::           ::l;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;/
;;;;;;;;;;;;;;;;;;;;;;;;;ー-..::::ミミミ、ヾ   ( );;) ヾ;;ヽ、           :i;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;://
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;=-゙-`:::::::ミミ\ ゙゚''" i::ヽ;;i  ::         |;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:l /
;;;;;;;;;;;;;;;;;;;;;;;/:::::::    :::::::.ミ::.'ヽ.........::::::::.、'_ノ        l;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:i /
;;;;;;;;;;;;;;;;;,ノ:::::::::::.             :::.`   , 二;ニ= 、   ノ;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:ノ /
;;;;;;ー-'',:::::::::::::::              :::  ' ,rェ ヽ`  ヽ /;:;:;:;:;:;:;:;:;:;:;:;:;:// /
;;;;;;;;;;;;/"::::::::::               _i ヽ゚ ン i` /;:;:;:;:;:;:;:;:;:;:;:;:;:ノ / /
ー' ̄:::::::::::::::::     ____    /:;:;:ヽ ー  /;:;:;:;:;:;:;:;:;:;:;:;:;:// / /
:::/:::::::::::::::::::::    /;:;:;;:;:;:;:;:;:;:;:;:;:ヽ、 :;ー:ノミ; ::. /;:;:;:;:;:;:;:ー" ̄ / / / /
:/::::::::::::::::::::::::  /;:;:;/:::::::::::\ \;ヽ/ ̄   : /;:;:;:;:;/"/ / / / / /
:::::::::::::::;;::::::::::::  |:;:;:;:;:l ̄\:::::::::::\ );:ヽ    /;:;:;:;:;:;l/ / /  |\/\/ヽ∧
::::::::::::::::::;;;::::::::.  \:;:;ヽ  ヽ:::::::::::::'/;:;:/    /;:;:;:;:;:;:丿/ / _/ ハ  あ
::::::::::::::::::::;;;;::::::    \;:;\  |:::::::/;/   /;:;:;:.:_,- " / /\    ス  ら
::::::::::::::::::::::;;;;;;:::    、. \;:;\ l::/;/   / ̄/ / /  /    ケ   い
:::::::::::::::::::::::::;;;;;;;;../ ̄ ー\ ;:;:;:/   // /  / /<       ル   ぐ
::::::::::::::::::::::::::::;;/      ゙''ー 、_ /  / / / / /       !!!   ま
390デフォルトの名無しさん:2006/12/02(土) 02:46:09

                         _ /- イ、_
               ,       /: : : : : : : : : : : (
   意味わからんわw  ゚ + `    /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ
            ’, ’,∴ ・ ¨ {:: : : :  : : ::;:;: ;: ;:;: ;: ::}
   ∩___∩     ii  ’,∴  ェェ ( : : : ::;:;: ;: ;:;: ; : ::::} 
   |      : : ;: ヽ  ! | | ! ,・,,  (_l__\(: ::;:;: ;ヽ: ; : ::ノ
  /      : : ;: |く^⌒!|| , ,,・_(_ヽ;:;:)ヽ: ::;:;: ;:; ::ノ
  |       : : ::;:ミ ::;:| !   ∴ ・ ¨C〉 (_二:;: ;::;:/
 彡、     : : ::;:/⌒ ノ||!、 ’  ・∵ (、//|    ̄ヽ
/ /       : : ::;:/!!       /   // |//\ 〉
(_/     : : ::;:/'' ̄         /    //   /
391デフォルトの名無しさん:2006/12/02(土) 02:50:48


           バカ専用      普通  ハッカー ウィザード
             ┝ - - - - ┿━━━┿━━━┥
   ∩___∩   /)
   | ノ      ヽ  ( i )))
  /  ●   ● | / /
  |    ( _●_)  |ノ /   今はここら辺クマーー!!
 彡、   |∪|    ,/
/    ヽノ   /
392デフォルトの名無しさん:2006/12/02(土) 02:52:26

                   ∩─ー、
                 / ● 、_ `ヽ
                /  ( ●  ● |つ
                |  /(入__ノ   ミ そろそろモナドでもはじめるか・・・
                 、 (_/   ノ
                 \___ノ゙
                 / 丶' ⌒ヽ:::
                / ヽ    / /:::
               / /へ ヘ/ /:::
               / \ ヾミ  /|:::
              (__/| \___ノ/:::
                 /    /:::
                 / y   ):::
                / /  /:::
               /  /::::
              /  /:::::
             (  く::::::::
              |\  ヽ:::::
                |  .|\ \ :::::
          \    .|  .i::: \ ⌒i::
          \   | /::::   ヽ 〈::
              \ | i::::::   (__ノ:
              __ノ  ):::::
            (_,,/\
393デフォルトの名無しさん:2006/12/02(土) 02:53:10
    
      まだはえーーよ!
        .,..-──- 、
      r '´. : : : : : : : : : :ヽ
     /.: : : : : : : : : : : : : :: ヽ
    ,!::: : : : : ,-…-…-ミ:: : :',..  _
    {:: : : : : :i  ,;ノ;´:`ゞ、i: : :.:} / /  _____ 
    {:: : : : : :|  ェェ;;;;;;;ェェ|: : : } ./ /  /// \\ ./\ ∩___∩
    { : : : : ::|    ,.、 .| : : :;!./  \  ̄     ̄/./  | ノ --‐'  、_\
     ヾ: :: : :i   r‐-ニ┐| : r / /"\.>   .__/./   / ,_;:;:ノ、  ● |
      ゞイ!   ヽ 二゙ノ イ /__/       <__/     |    ( _●_) ミ
    /⌒  `ー―''´ヽ             \_ ~\彡、   |∪|  ミ
  /           |        //    \_/     ヽノ  ̄\
 (   く"| _____|____,,___ /   ̄Z、   /,,,,,,,,      /ヽ >
  \  ヽノ _|||||_____.爪_|―――゚'ヽ     >  ;;;'''''';;;';';;   / <_/ 
 r' ̄\_ 三〉)) ̄ ||||`ー'       `-、ゝ ̄  ;;'''    ∴。・、
 )__/. ̄ ̄   ||||           \    '':;:;,,,;;;'''`・゚。;;
394デフォルトの名無しさん:2006/12/02(土) 02:59:51

              -― ̄ ̄ ` ―--  _        
          , ´         ,    ~  ̄、"ー 、 
        _/          / ,r    _   ヽ ノ
       , ´           / /    ●   i"
    ,/   ,|           / / _i⌒ l| i  |
   と,-‐ ´ ̄          / / (⊂ ● j'__   |
  (´__   、       / /    ̄!,__,u●   |   モナドって言っただけで撃つことないじゃん
       ̄ ̄`ヾ_     し       u l| i /ヽ、  ちょっと調子にのっただけなのに・・・
          ,_  \           ノ(`'__ノ
        (__  ̄~" __ , --‐一~⊂  ⊃_
           ̄ ̄ ̄      ⊂ ̄    __⊃
                   ⊂_____⊃
395デフォルトの名無しさん:2006/12/02(土) 03:11:55

|
|.-──-、
| : : : : : : : : \
|: : : : : : : : : : : ヽ    次の問題は length関数だ
|-…-…-ミ: : : : :',
| '⌒'  '⌒' i: : : : :}    length [1, 2, 3, 4, 5, 6, 7]
| ェェ  ェェ |: : : : :}    length ["abc", "AAA", "クマ"]
|   ,.、   |:: : : :;!    length [ ""]
| r‐-ニ-┐| : : :ノ     length "ヌケドナルド"
|! ヽ 二゙ノ イゞ‐′     length "kuma"
| ` ー一'´丿 \
| \___/   /`丶、
| /~ト、   /    l \
396デフォルトの名無しさん:2006/12/02(土) 03:14:55

               ,..-──- 、
             /. : : : : : : : : : \
            /.: : : : : : : : : : : : : : ヽ     length関数は要素の数を返す!
           ,!::: : : :,-…-…-ミ: : : : :',     関数の右にあるのが引数だ
           {:: : : : :i '⌒'  '⌒' i: : : : :}     どんな値でも長さを調べられるぜ
           {:: : : : | ェェ  ェェ | : : : : :}     さぁ答えろ! 間違えたら殺す!!
           { : : : :|   ,.、  .| :: : : :;!
_∧        ヾ: :: :i r‐-ニ-┐ | : : :ノ        ∧
(   \       ゞイ! ヽ 二゙ノ イゞ‐ ′     //~⌒ヽ
|( ● )| i\     _,,ノ| ` ー一'´//\     /i |( ● )|
\_ノ ^i | _,,..r''''" ノ | \`', /  /  / ̄`''ー | i^ ゝ_ノ
 |_|,-''iつl/´    ヽノ| /\   / 、│     l⊂i''-,|_|
  [__|_|/〉ヽ、  / |/ );;;;/\/   'く    /〈\|_|__]
   [ニニ〉  ',  ヽ. | /⌒| /   ゚/    / 〈二二]
   └―'                        '─┘
397デフォルトの名無しさん:2006/12/02(土) 03:18:17

                   ∩─ー、
                 / ● 、_ `ヽ
                /  ( ●  ● |つ
                |  /(入__ノ   ミ 上から・・・
                 、 (_/   ノ
                 \___ノ゙     7
                 / 丶' ⌒ヽ:::     7
                / ヽ    / /:::     0
               / /へ ヘ/ /:::     1
               / \ ヾミ  /|:::     1
              (__/| \___ノ/:::
                 /    /:::
                 / y   ):::
                / /  /:::
               /  /::::
              /  /:::::
             (  く::::::::
              |\  ヽ:::::
                |  .|\ \ :::::
          \    .|  .i::: \ ⌒i::
          \   | /::::   ヽ 〈::
              \ | i::::::   (__ノ:
              __ノ  ):::::
            (_,,/\
398デフォルトの名無しさん:2006/12/02(土) 03:18:55

       ちげーーよ!!
        .,..-──- 、
      r '´. : : : : : : : : : :ヽ
     /.: : : : : : : : : : : : : :: ヽ
    ,!::: : : : : ,-…-…-ミ:: : :',..  _
    {:: : : : : :i  ,;ノ;´:`ゞ、i: : :.:} / /  _____ 
    {:: : : : : :|  ェェ;;;;;;;ェェ|: : : } ./ /  /// \\ ./\ ∩___∩
    { : : : : ::|    ,.、 .| : : :;!./  \  ̄     ̄/./  | ノ --‐'  、_\
     ヾ: :: : :i   r‐-ニ┐| : r / /"\.>   .__/./   / ,_;:;:ノ、  ● |
      ゞイ!   ヽ 二゙ノ イ /__/       <__/     |    ( _●_) ミ
    /⌒  `ー―''´ヽ             \_ ~\彡、   |∪|  ミ
  /           |        //    \_/     ヽノ  ̄\
 (   く"| _____|____,,___ /   ̄Z、   /,,,,,,,,      /ヽ >
  \  ヽノ _|||||_____.爪_|―――゚'ヽ     >  ;;;'''''';;;';';;   / <_/ 
 r' ̄\_ 三〉)) ̄ ||||`ー'       `-、ゝ ̄  ;;'''    ∴。・、
 )__/. ̄ ̄   ||||           \    '':;:;,,,;;;'''`・゚。;;

399デフォルトの名無しさん:2006/12/02(土) 03:26:35
                   /. : : : : : : : : : \
                  /.: : : : : : : : : : : : : : ヽ
 そんなバカなクマ     ,!::: : : :,-…-…-ミ: : : : :',
                {:: : : : :i'⌒'  '⌒' i: : : : :}
         ∩___∩ {:: : : : | ェェ  ェェ  |: : : : :}
        | ノ --‐'  、_\: : : :|  ,.、    |:: : : :;!
        / ,_;:;:;ノ、  ●ヾ: :: :i r‐-ニ-┐ | : : :ノ  上の3つは
       |    ( _●_)  ミゞイ! ヽ二゙ノ イゞ‐′   リスト(配列)だから正解!!
         彡、   |∪|  ミ  ⌒゛ /⌒ヽ\
     /⌒    ヽノ`''/ ⌒ ー--、' ,/`/
     / /~〔_彡.ミ⌒ヽー,==-、 ヽ_,zn'  /
    | | /    `^,/  ̄,ノ   ヽ、__^ノ /
    彡ノ |      /⌒ヽ i⌒ ー 、  ヽ
       ヽ     l人  |  .)  `  . |ー┐
        \    `⌒ |  ノヽ、_   ノ.ヽ」

             /. : : : : : : : : : \
           /.: : : : : : : : : : : : : : ヽ
           ,!::: : : :,-…-…-ミ: : : : :',
          {:: : : : :i '⌒'  '⌒' i: : : : :}
          {:: : : : | ェェ  ェェ |: : : : :}   でも下の2つは
          { : : : :|   ,.、   |:: : : :;!     ただの文字列!
           ヾ: :: :i r‐-ニ-┐| : : :ノ     
             ,,,! ヽ二゙ノ イゞ‐′     こういう場合は文字数を
 ひっかけクマ・・・ /      ̄⌒ヽ         数えるんだろーがぁぁ!!
            |      lヽ、 | __
     ∩___∩      L__| |_. `ヽ
     | ノ --‐'  、_\        lヽ‐'〉 .|
     / ,_;:;:;ノ、  ●ヾ     _ \/  .|
    |    ( _●_)  ミ ー-`\  \,,ノギリギリ
     彡、   |∪|  ミ.      `ヽ   )
     彡    ヽノ/      ,//  /
400デフォルトの名無しさん:2006/12/02(土) 03:30:11
             ,、__
            /ヽ   ``ヽ
           // ̄' ̄ ̄ヽ.\
           `i |,_, ,_,、 i .>
           ト|,:ニ/ヽ二|'ー!イ.   やはり所詮はクマ
            | ̄,.レ,..、  )7
            ! ''===i  /'.    ヌケドを殺るのはワシしかおらんな
            ヽ `! !' ,//\_
         _,―イ>`'´‐< /  \_
       _/ _/  /`―「_!―'./  /   `―::、
      _/ |i   |  ///' /  !_      \
  ._∧ノ  | i  i'  ! | | /  ・'/ i'    イi
 /   \| |  |  | | | /  _∧=i |     /|
 |( ● )| i\| i  | | | レ'/   \|       |
 \_ノ ^i || ヽ  | フ |( ● )| i\|     ノ
  |_|,-''iつl|  \/ /\_ノ ^i | ,‐、」  !|
    [ニニ〉|  / /  |_|,-''iつl \\\|
    └―'./ / /    [__|_|/〉  ) ヽ ! |
    \_/ //      [ニニ〉//  ! | 」
       |  |        └―'V | |_,,..::‐''´
401デフォルトの名無しさん:2006/12/02(土) 03:33:18
                                    ,..-──- 、
                         /. : : : : : : : : : \
                        /.: : : : : : : : : : : : : : ヽ
       __,、           ≡   ,!::: : : :,-…-…-ミ: : : : :',     バカめ
    〃ニ;;::`lヽ,,_          ≡ {:: : : : :i '⌒'  '⌒' i: : : : :}     ジジイの命もこれまでだ
    〈 (lll!! テ-;;;;゙fn    __,,--、_  .. {:: : : : | ェェ  ェェ |: : : : :}  ≡
   /ヽ-〃;;;;;;;llllll7,,__/"  \三=ー"{ : : : :|   ,.、   |:: : : :;!  ≡
   >、/:::/<;;;lllメ   \ヾ、  ヽTf=ヽ` : :: :i r‐-ニ-┐ | : : :ノ
  j,, ヾて)r=- | ヾ:   :ヽ;;:     | l |  l ゞイ! ヽ 二゙ノ イゞ‐′   ≡
 ,イ ヽ二)l(_,>" l|    ::\;::    | |  |  ヽ,,` ー一'/ V
 i、ヽ--イll"/ ,, ,//,,    :;;   l //  l く> /::l"'i::lll1-=:::: ̄\
 ヾ==:"::^::;;:::/;;;;;;;;;:::::::::::::: :::::ゞ ノ/   L/〈:::t_イ::/ll|─-== ヾ
  \__::::::::/::::::::::::_;;;;;;;;;;;;;;;;;ノノ   ヘ   >(゙ )l:::l-┴ヾ、ヽ  )
      ̄~~ ̄ ̄/ :::|T==--:::::  //  / ト=-|:|-─ ( l   /
         / ::  ::l l::::::::::::::::::/ /:::::::::::/:::::(ヽ--─  / |  /
         ヽ_=--"⌒ ゙゙̄ヾ:/ /:::::::/:::::::::`<==-- ノ / /
         /   /   \/::::::::::::::::::::::::::::: ̄'''"":://
        /   /     :::: ヾ::::::::::::::::::::::::::::べ__;;;--"
402デフォルトの名無しさん:2006/12/02(土) 03:33:59
        __ ,、
      /''    /ヽ.
     / /' ̄ ̄ ̄ ヽヽ/ ̄)
    <. i  ,_, ,_,|. i' |     くニ} {fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj
     ト,!ー|二/'ヽニ:,|イ. |
      (   ,..J,、 ̄||  |   バカモン! 遅延評価の威力を見せてくれるわ!
     .'ヽ  i==='' !   |
       ヽ, `! !'/    |
 くニ} {fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj
      /  ,へ        ̄ ̄`ヽ
       /  /  \    t──┐  |
     (__/     >   ).   |  |_
              /  /   (___)
            (  \
             \__)
403デフォルトの名無しさん:2006/12/02(土) 03:34:40
        __ ,、
      /''    /ヽ.
     / /' ̄ ̄ ̄ ヽヽ/ ̄)
くニ} {f<. i  ,_,({fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj
     ト,!ー|二/'ヽニ:,|イ. |
      (   ,..J,、 ̄||  |   ・・・・・・
     .'ヽ  i==='' !   |
       ヽ, `! !'/    |
 くニ} {fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj
      /  ,へ        ̄ ̄`ヽ
       /  /  \    t──┐  |
     (__/     >   ).   |  |_
              /  /   (___)
            (  \
             \__)
404デフォルトの名無しさん:2006/12/02(土) 03:48:22

           バカ専用      普通  ハッカー ウィザード
             ┝ - - - - ┿━━━┿━━━┥
   ∩___∩   /)
   | ノ      ヽ  ( i )))
  /  ●   ● | / /
  |    ( _●_)  |ノ /   まだここら辺クマーー!!
 彡、   |∪|    ,/
/    ヽノ   /
405デフォルトの名無しさん:2006/12/02(土) 13:34:53
>>396,397,399
length [""]
は、空文字列をひとつ含む配列なんだから
1
だよ。
406デフォルトの名無しさん:2006/12/02(土) 13:59:22

       //                   |  |      ,イ
      //                    l  |     //
    //        ∩___∩        /  ||ノノ_/ /
   /'"         | ノ      ヽ     /        /
  /         ,/./  ●   ● |    /  ;/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
            ,. ‐'" |:|    ( _●_)  ミ   / ,< 間違えてんじゃねーかよ!!
       , ィ'"    |:::彡  |∪|  /   , '    \___________
     ,.イ        |:::::::L  ヽノ,,,,ノ  .//´ ̄ ̄`ヽ       \
   //i|      ,.|::::::レ! /:::::/ //        \ ( ̄`ヽ、 \
  ./:::::{ |ヽ   |ヽ∠.|::::::| メ:::::::; '_/// /`''"⌒i  ,.....,_  \、   `ヽ、\
   `''" `'''`ー-|'"  ,':::::::|':::::::; ' / /  ヾ-┤ |'´,. --.、`丶、\     `\
        ノ   {::::::/:::::::/__ノ ∠/  / _ /- イ、_  ヽ  ヽ
       /   ノ/⌒ヽ::::}   /   /: : : : : : : : : : : (' ,ノ,ハ   ガッ
     <    {ム/   }/  ∠/ /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ  |  ヽ
       `ヽ、  'ー'-'‐'′  /   {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::}  !`'ー─ゝ、    _
         ヽ       /     l: :ノ /二―-、 |: ::ノ /  _  `丶..ノF'!
          ヽ-‐''" ̄``ヽ       | //   ̄7/ /::ノ ̄ヽ ̄  `i丶、__,.ノ
                          ヾ(_二─-┘{/    ヽ、_   }ヽ、
                             ̄ ̄         ``'"ー-
407デフォルトの名無しさん:2006/12/02(土) 21:51:40
length ["abc", "AAA", "クマ"] は 7 じゃなくて 3 だろ!
408デフォルトの名無しさん:2006/12/02(土) 22:57:35
                                        | | | |
                         _ /- イ、_      |_|_|_|_
    バカ野郎!             /: : : : : : : : : : : (    / 〉〉〉〉  カスが!
              l⌒)OOo    /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ  {  ⊂〉
   ∩___∩    {  )  )    {:: : : :ノ --‐' 、_\: : ::}  |   |  ∩___∩
   | ノ      ヽ  | ::::::/     {:: : :ノ ,_;:;:;ノ ////ヾ: :::}  l   l /      ヽ |
  /  ●   ● |  /  ::::|   、  l: :ノ /二―-、 |: ::ノ  ヽ  | ●   ●  ヽ
  |    ( _●_)  ミ/    )  ,,・_  | //   ̄7/ /::ノ .・,,; \彡 (_●_ )    |
 彡、   |∪|   /   / ̄, ’,∴ ・ ¨   〉(_二─-┘{/ ∴ ;・, ;  \  |∪|    ミ
/ __  ヽノ  /   /  、・∵ ’   /、//|  ̄ ̄ヽ  、;:,・    ヽ. ヽノ___ ヽ
(___)    /    /        /   // |//\ 〉         ヽ (_____)
409デフォルトの名無しさん:2006/12/02(土) 22:58:52

                      うるせーばか!
               __       /- イ、_
  ∩___∩     /  〉〉〉〉 /: : : : : : : : : : : (
 /_ノ  `ー- ゝ\   、 {   ⊂〉/: : : : ::;:;: ;: ;:;: ; : : : ::ゝ〈〈〈〈  ヽ      ∩___∩
 | ●  ゝ:;;;:;:_, ヽ , ,・_ |    {:: : : :ノ --‐' 、_\: : ::}〈⊃   }      | ノ --‐'  、_\
彡   (_●_ ) ''  |, ’ ,∴ l    {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::}  |    |    、 / ,_;;;:;ノ、  ● |
彡、   |∪|    ミ、・∵ ’ ヽ    l: :ノ /二―-、 |: ::ノ     !  ,,・_  |    ( _●_) ミ
γ ̄  ヽノ   ヽ)       \    | //   ̄7/ /::ノ    / , ’,∴ ・¨彡、    |∪|  ミ
〈 /i          i         \ 〉(_二─-┘{/  / 、・∵ ’  /      ヽノ ̄ヽ
  ノ        ノ          ヽ 、//|  ̄   /´       /        /\ 〉
410デフォルトの名無しさん:2006/12/02(土) 23:07:38
>>395
【問題】
length [1, 2, 3, 4, 5, 6, 7]
length ["abc", "AAA", "クマ"]
length [ ""]
length "ヌケドナルド"
length "kuma"

【答え】
7
3
1
6
4  ∩___∩
   | ノ      ヽ
  /  ●   ● | クマクマ
  |    ( _●_)  ミ
 彡、   |∪|  、`\
/ __  ヽノ /´>  )
(___)f^f^f^f^f^f^f^f^f^-┐
 |    |~ ~ ~ ~ ~ ~ ~ ~ ~ │
 |    | 配列は要素数 │
 |  / | 文字列は文字数|
 | /  | 正直すまんクマ |
 ∪   |_____________|
        \_)
411デフォルトの名無しさん:2006/12/03(日) 01:33:32
. ┌────────────────────┐
つ |   文字列     =      文字のリスト      │
. |   "kuma"   .→     ['k', 'u', 'm', 'a']      |
. | "ヌケドナルド" →  ['ヌ', 'ケ', 'ド', 'ナ', 'ル', 'ド'] .|
. └────────────────────┘

つ [] == ""
412デフォルトの名無しさん:2006/12/03(日) 02:50:45
正確には

[] :: [Char] だな
413デフォルトの名無しさん:2006/12/03(日) 19:26:12
Ctrl-Dを押すまで結果が出力されないんだが・・・。
mapMを使ってるせいだろうか。

main = do cs <- getContents
     r <- mapM hoge $ lines cs
     putStr $ head r

hoge :: String -> IO String
hoge x = return x
414デフォルトの名無しさん:2006/12/03(日) 21:26:50
>>413
その通り。
csの終端を見つけるまでmapM_が終わらないから、
putStrが実行されることもない。
415414:2006/12/03(日) 21:27:23
ごめん。mapM_じゃなくてmapMね。
416413:2006/12/03(日) 23:45:53
>>414,415
なるほど。ありがとう。
一行入力するごとに結果を返してほしいのだが、いい方法はないのかな。
mapMはsequence . mapらしいので、いろいろ組み合わせて書き直してみた。

main = do cs <- getContents
     mapM_ (putStr . unlines =<<) $ map sequence $ map (:[]) $ map hoge $ lines cs

hoge :: String -> IO String
hoge x = return x

こうすれば望みの結果が得られるようなのだが、ちょっとめんどくさすぎるな・・・(・∀・;)
417デフォルトの名無しさん:2006/12/04(月) 00:29:46
>>416
IOは上から順に実行されるのが原則(getContentsは例外)で、
評価と違って「値の要求があって初めて」実行したりはしない。
だから
r <- mapM hoge $ lines cs
とあったら、rが必要とされるか否かにかかわらずmapMは最後まで実行される。
これは、そうでないと動作の順序を予測するのが難しくなって不便だからだ。
どうしてもその挙動が必要なら、unsafeInterleaveIOという関数を使えば実現できる。

ちなみにそのコードは行ごとにputStrしているだけで、
mapM_ putStrLn $ lines cs
と書いているのとかわらない。
何がしたいかをもう少し詳しく教えてくれたら、もうちょっとまともな助言ができると思う。
418413:2006/12/04(月) 01:51:46
>>417
>評価と違って「値の要求があって初めて」実行したりはしない。
>だから
>r <- mapM hoge $ lines cs
>とあったら、rが必要とされるか否かにかかわらずmapMは最後まで実行される。

あぁ、なるほど。なんでうまくいかなかったのか、やっとすっきりした。
結果が必要かどうか関係ないのね・・・。
自分が作りたかったのは、ハッシュテーブルに入力されたものを入れて、そのときのハッシュテーブルの中身を返すという関数。
↓こんな感じなのを作ったのだが、入力が終わらないと処理が先に進まなくて困ってる次第。

import Data.HashTable as HashTable

main = do cs <- getContents
     hash <- new (==) hashString
     r <- mapM (hoge hash) $ lines cs
     putStr $ unlines r

hoge :: (HashTable String Int) -> String -> IO String
hoge _ [] = return []
hoge hash key = do insert hash key 1
          h <- toList hash
          return $ show h
419デフォルトの名無しさん:2006/12/04(月) 03:03:58
>>418
それと同じことをするだけなら、mapMでハッシュ表の操作と同時に出力もすれば良い。
mapM_ (\line -> hoge hash line >>= putStrLn) $ line cs

元のコードのように、値を生成する部分(mapM hoge)と利用する部分(putStrLn)をプログラム上で分離したい場合は
多少の工夫がいる。例えば、入出力をしながらa型の値を生み出すジェネレータを次のように定義して、
newtype Generator a = Gen (IO (Maybe (a, Generator a)))
mapMで[String]を生み出す代わりにGenerator Stringとして記述するとか。
ただし、標準のリストと違って操作関数が用意されていないので面倒ではある。
420413:2006/12/04(月) 14:08:07
>>419
そうか、なるほど、mapM_の中で完結させれば良かったのか・・・。
mapMの返り値を受け取って処理しないといけない、って思いこんでた。
なんて頭が固いんだ、俺はorz
ジェネレータを使って云々かんぬんってのはまだ理解できないので、もっと勉強してみるよ。
ほんとにありがと!
421デフォルトの名無しさん:2006/12/06(水) 11:29:31
417を読むまで、doの中に列挙されているものは上から下へ遅延評価されるものだと思ってたorz
getContentsは例外なのね・・・。GHCのソースを見たらunsafeInterleaveIOを使ってたよ。
422デフォルトの名無しさん:2006/12/10(日) 17:55:53
本スレを見たあとこっちに来るとなんかほっとする
423デフォルトの名無しさん:2006/12/10(日) 18:16:27
んじゃ、そろそろ圏論勉強会をここではじめるか
424デフォルトの名無しさん:2006/12/10(日) 18:36:06
AAで頼むわ
425デフォルトの名無しさん:2006/12/10(日) 18:42:03
>>423
仕切ってくれるの?
ちょっと期待
426デフォルトの名無しさん:2006/12/10(日) 19:18:52
AAじゃなくてもたのむわ
この間友達に訊かれて、Haskell使いでないけど興味持った。
427デフォルトの名無しさん:2006/12/10(日) 20:28:19
2ちゃんっぽい解説をわくてかしながら待ってますよ
428デフォルトの名無しさん:2006/12/10(日) 21:32:19
おまいら、なんで本スレに行かないんだよw
429デフォルトの名無しさん:2006/12/11(月) 00:00:51
だって本スレ2chのノリじゃねーんだもん
430デフォルトの名無しさん:2006/12/11(月) 00:12:22
あそこは2chじゃねーよなw
431デフォルトの名無しさん:2006/12/11(月) 00:21:23
あそこはプログラミングする気が無い奴らに犯されてしまった
今からここが本スレになります
432デフォルトの名無しさん:2006/12/11(月) 15:01:43
早く家に帰ってHaskellを犯りたい(*´д`)
433デフォルトの名無しさん:2006/12/11(月) 18:34:26
http://www.haskell.org/ghc/docs/latest/html/users_guide/primitives.html

ここ見てUnboxed typeを使ってみようとしたんだが、Top-level bindings for unlifted types aren't allowed と出てコンパイルできん。
まあ、使い方を全然理解してないせいだと思うのだが(top-level bindingsとかunliftの意味もわからんし)、どこか解説ページないかな。
つか、あのページの説明だけでみんなは理解できるのだろうか(・∀・;)
434デフォルトの名無しさん:2006/12/11(月) 19:00:25
>どこか解説ページないかな。
なさそう。

>top-level bindings
モジュールレベルの束縛のこと。
module Foo where
f x = let y = x + 1 in y * 2
なら、fはトップレベルの束縛で、yはそうではない。

>unlifted types
unboxed typesとほとんど同義だと思う。

というか本スレに書けyo
435デフォルトの名無しさん:2006/12/11(月) 19:02:43
見てみたら>>433のリンク先にlifted typeの説明あるじゃん。
>Primitive types are always unlifted; that is, a value of a primitive type cannot be bottom.
436433:2006/12/11(月) 21:43:56
>>434

詳しい説明をありがとう。

>>top-level bindings
>モジュールレベルの束縛のこと。

さんくす!さっきのエラーは出なくなった!
今度は#がはずせないという問題にぶち当たったけど、こっちはI#の存在に気づいて解決した。

>というか本スレに書けyo
あっちは圏論の話題が中心だから、初歩的なことは書きづらくて・・・。

>>435
>見てみたら>>433のリンク先にlifted typeの説明あるじゃん。
すまん。読んでたけどそっちも全く意味わからんかった。
437デフォルトの名無しさん:2006/12/11(月) 22:57:29
>>436
>すまん。読んでたけどそっちも全く意味わからんかった。
ボトムっていうのは、停止しない/エラーになる計算の結果を表す概念上の値のこと。
(この辺厳密じゃないかも。間違ってたら分かってる人が突っ込んでくれることを期待)
例えば
b :: Int
b = b
と定義したとする。bを評価しようとすると止まらないから、bにはふつうの意味での値はない。しかし、
f :: Int -> Int
f x = 4
という関数があったとして、f bは4を返す。つまりfは問題なく呼ばれている。
では呼ばれたときの引数は何か、というのが問題になるが、これを「fはボトムを引数にして呼ばれた」
ということにする。つまり、bは評価しても止まらないけど、ボトムという仮想的な値を持っていることにする。
こうすると議論が単純になる。ちなみに、こう考えると、BoolにはTrue、False、ボトムの三値があることに
なるし、32ビットマシン上のGHCではIntに2^32+1個の値があることになる。

一方、実装を考えると、fに渡されるのは未評価のbで、これの実体はクロージャ、
あるいは関数ポインタ。bを評価することは、この関数ポインタを呼び出すことに相当する。
この場合はbを評価しようとすると止まらないわけだけど、こういう挙動がありえるためにはそもそも
bが関数ポインタでなきゃならない。

unboxed typeはただの計算器上の整数で、関数ポインタを隠し持つ余地はない。
Int#は厳密に2^32個の値しかとれない。つまり、ボトムになれない。よってunlifted type。

>あっちは圏論の話題が中心だから、初歩的なことは書きづらくて・・・。
たまたま圏論の話題で盛り上がっていただけで、気にすることはないと思う。
もともとそういうスレじゃないし。むしろ俺にも分かる話題は歓迎w
438デフォルトの名無しさん:2006/12/11(月) 23:39:10
haskellはプログラムを書く以外にも楽しみ方がある言語だから、棲み分けが起きてもいいんじゃないかな。次スレはちゃんとしたタイトルにしようぜ
439デフォルトの名無しさん:2006/12/11(月) 23:44:58
たとえ住みわけが必要だとしても、板の趣旨からして、
本スレはプログラムの話題、
理論的な話は情報学板、のほうがいいんじゃないだろうか。
440デフォルトの名無しさん:2006/12/12(火) 15:37:04
モナドから値を取り出す関数ってないんでしょうか?
hoge :: m a -> a
みたいな.
441デフォルトの名無しさん:2006/12/12(火) 15:53:12
>>440
個々のモナドごとにある。
head :: [a] -> a
fromJust :: Maybe a -> a
fromMaybe :: a -> Maybe a -> a
evalState :: State s a -> s -> a
runST :: (forall s. ST s a) -> a
unsafePerformIO :: IO a -> a -- 副作用があるので取扱い注意

ちなみにIOモナドだけは値を取り出す必要がない。
取り出さずに全部まとめてそれにmainを束縛すれば良いので。
442デフォルトの名無しさん:2006/12/12(火) 20:07:25
>>440
>>=関数を使ってください
443デフォルトの名無しさん:2006/12/12(火) 21:50:17
計算の途中でIOがつくと、その後ずっとついて回るからなんか気持ち悪い
444デフォルトの名無しさん:2006/12/12(火) 22:35:08
>>443
それによって参照透明性を保ってるんじゃないの?
詳しい人教えて!
445デフォルトの名無しさん:2006/12/13(水) 16:00:42
インストールに7時間かかりました。なにこの敷居の高さ
446デフォルトの名無しさん:2006/12/13(水) 18:03:20
>>4457時間もあきらめずにインストールした喪前が大好きだよ!
447デフォルトの名無しさん:2006/12/13(水) 22:40:42
敷居が高いけど、なれてくるとかなり楽しい。
ひょっとして、haskellはツンデレ美少女なんではなかろうか。

haskell「ごめんね素直じゃなくて」
俺「いや、しょうがないって」
haskell「・・・。お兄ちゃん、IOモナドの仕組みが知りたい、って言ってたよね」
俺「ん? まーな」
haskell「でも、そのためには私の中身を見ないとだめだよね・・・」
俺「い、いや、無理しなくていいよ」
haskell「・・・。見てもいいよ」
俺「え?」
haskell「見てもいいよ! お兄ちゃんだったらいいよ!」
448デフォルトの名無しさん:2006/12/13(水) 23:12:10
↓Haskell Brooks Curryの肖像
449デフォルトの名無しさん:2006/12/14(木) 02:44:08
http://www.haskell.org/bio.html
( ・∀・) <呼んだ?
450デフォルトの名無しさん:2006/12/14(木) 12:04:41
今日はUnsafe IOの日だから中に出しちゃだめー!!!
451デフォルトの名無しさん:2006/12/14(木) 17:34:55
>>443
データ構造書くのはIOを入れずにやれという暗黙のメッセージだと思う
プログラムのしくみ本体とIOの部分を分けるということ
その方が実際動作が速いみたいだし
452デフォルトの名無しさん:2006/12/14(木) 21:30:35
もう、中に出すからforkIOしちゃったじゃないo(*`ε´*)o
453デフォルトの名無しさん:2006/12/14(木) 21:49:49
HashTableがIOを返すのがにんともかんとも・・・。
454デフォルトの名無しさん:2006/12/19(火) 20:27:21
本スレは活気があっていいなぁ・・・
455デフォルトの名無しさん:2006/12/19(火) 23:32:22
また俺がAA書いてやろうか?
456デフォルトの名無しさん:2006/12/20(水) 10:19:52
haskell中級者になったクマきぼん
457デフォルトの名無しさん:2006/12/20(水) 23:04:25
>>456
俺が初心者な以上、それは無理ってもんだ
458デフォルトの名無しさん:2006/12/21(木) 00:06:46
今でも遅延ストリーム萌な人いませんか?
459デフォルトの名無しさん:2006/12/21(木) 01:35:34
みなさんハスケルのどこが萌えですか。
僕は似たような記号を多用するその文体のとっつきにくさに萌えです。
460デフォルトの名無しさん:2006/12/21(木) 01:42:02
やっぱ>>447じゃね?
461デフォルトの名無しさん:2006/12/21(木) 03:06:45
俺はモナドという不思議な雰囲気を持ったツンデレ美少女なところに萌えてる。
haskellたんを知ってから仕事に全く集中できなくなってしまったよ・・・
462デフォルトの名無しさん:2007/01/03(水) 06:46:57
あの、質問しても良いです?
「ふつうのHaskellプログラミング」からなんですが、
length [""] -> 1
length [] -> 0
の""というのは文字が一文字も無い文字列を表しているのでしょうか?
もう一つ。
a
b
c
みたいに一行ずつ保存されているファイルは、エディタからはそうみえるだけで
実際には"a\nb\nc\c"みたいに保存されているのでしょうか?
そうじゃないとlines関数でリストに出来ないですもんね?
463デフォルトの名無しさん:2007/01/03(水) 17:38:31
>の""というのは文字が一文字も無い文字列を表しているのでしょうか?
その通り。
>実際には"a\nb\nc\c"みたいに保存されているのでしょうか?
その通り。
464デフォルトの名無しさん:2007/01/04(木) 16:06:05
>>463
回答有り難うございます!
465デフォルトの名無しさん:2007/01/10(水) 07:23:21
こういう関数をHaskellで書くとしたら
どう書くのがベターでしょうか?

# Rubyですが
def hoge(ary)
ary.each_index do |i|
j = rand(i+1)
ary[i], ary[j] = ary[j], ary[i]
end
end
466デフォルトの名無しさん:2007/01/11(木) 23:09:05
>>465
こんな感じになった。やたらと面倒だったので改善案募集。

{-# OPTIONS_GHC -fglawgow-exts #-}
module Test where
import System.Random
import Data.Array.IArray
import Data.Array.ST
import Control.Monad.ST

hoge :: forall a i e. (IArray a e, Ix i, Random i) => a i e -> StdGen -> (a i e, StdGen)
hoge ia gi = runST act
  where
    act :: forall s. ST s (a i e, StdGen)
    act = do
      ma <- thaw ia
      let _ = ma :: STArray s i e
      g' <- shuffle ma gi first
      ra <- unsafeFreeze ma
      return (ra, g')
    (first, last) = bounds ia
    shuffle a g i = case ran of
      [] -> return g
      _:next:_ -> do
        let (j, g') = randomR (i, last) g
        x <- readArray a i
        y <- readArray a j
        writeArray a i y
        writeArray a j x
        shuffle a g' next
      where
        ran = range (i, last)
467466:2007/01/11(木) 23:19:28
まちがってた。

{-# OPTIONS_GHC -fglasgow-exts #-}
module Test where

import System.Random
import Data.Array.IArray
import Data.Array.ST
import Control.Monad.ST

hoge :: forall a i e. (IArray a e, Ix i, Random i) => a i e -> StdGen -> (a i e, StdGen)
hoge ia gi = runST act
  where
    act :: forall s. ST s (a i e, StdGen)
    act = do
      ma <- thaw ia
      let _ = ma :: STArray s i e
      g' <- shuffle ma gi (range bo)
      ra <- unsafeFreeze ma
      return (ra, g')
    bo@(_, last) = bounds ia
    shuffle a g [] = return g
    shuffle a g (i:is) = do
        let (j, g') = randomR (i, last) g
        x <- readArray a i
        y <- readArray a j
        writeArray a i y
        writeArray a j x
        shuffle a g' is
468デフォルトの名無しさん:2007/01/13(土) 17:10:31
>>465
>>467の人のようにこういう操作はArrayの方が得意だけど無理矢理やってみた
手抜きして右からまわしてる

import Random

-- main = print [1,2,3] >> hogeIO [1,2,3] >>= print

hogeIO :: [a] -> IO [a]
hogeIO xs = getStdRandom (hoge xs)

hoge :: (RandomGen g) => [a] -> g -> ([a], g)
hoge xs g = foldr iter ([],g) xs
  where
  iter x (xs,g) = (x':xs', g')
    where
    ((x', _:xs'), g') = replaceR x (x:xs) g

replaceR :: (RandomGen g) => a -> [a] -> g -> ((a, [a]), g)
replaceR x xs g = (replace i x xs, g')
  where
  (i,g') = randomR (0, length xs - 1) g

replace :: Int -> a -> [a] -> (a,[a])
replace n x xs = (z, ys ++ x:zs)
  where
  (ys, z:zs) = splitAt n xs
469468:2007/01/13(土) 21:04:49
Stateで書き換えてみたけど相変わらず長い (replaceやmainの定義は同じ)

import Control.Monad.State
type Rand a = State StdGen a

hogeIO :: [a] -> IO [a]
hogeIO xs = do
  g <- newStdGen
  return $ evalState (hoge xs) g

hoge :: [a] -> Rand [a]
hoge xs = foldr ((=<<).iter) (return []) xs
  where
  iter x xs = do
    (x', _:xs') <- replaceR x (x:xs)
    return (x':xs')

replaceR :: a -> [a] -> Rand (a,[a])
replaceR x xs = do
  i <- State $ randomR (0, length xs - 1)
  return $ replace i x xs
470デフォルトの名無しさん:2007/01/13(土) 23:20:57
runSTとかunsafeFreezeとかさっぱりわからん。
なんかくやしい。
471デフォルトの名無しさん:2007/02/14(水) 00:17:05
良スレ 保守
472380:2007/02/14(水) 23:30:00

【第一部】 AAでHaskellのお勉強(超初心者用)
>>380-410

【第二部】 AAで圏論のお勉強(入門編)
Coming soon!
473デフォルトの名無しさん:2007/02/15(木) 00:00:34

  ,j;;;;;j,. ---一、 `  ―--‐、_ l;;;;;;
 {;;;;;;ゝ T辷iフ i    f'辷jァ  !i;;;;;
  ヾ;;;ハ    ノ       .::!lリ;;r゙  圏論は難しい・・・
   `Z;i   〈.,_..,.      ノ;;;;;;;;>
   ,;ぇハ、 、_,.ー-、_',.    ,f゙: Y;;f    そんなふうに考えていた時期が
   ~''戈ヽ   `二´    r'´:::. `!   俺にもありました

474デフォルトの名無しさん:2007/02/15(木) 00:01:18
       /                    .\
     /                       .\
 \ /                          \ /
   \      ___________     . /
    \   ./                \   /
     | \/                   \/...|
     |  |                       |  |
     |  |                       |  |
  .._ |_|                       |_|_..
     |  |     さあ‥ 逝こうか‥‥     |  |
     |  |                       |  |
     |  |                       |  |
     |  |                       |  |
     |  |/                   ..\|  |
     |  |                       |  |
   .._|/|      _ _ _ _ _ _ _ _     ...|\|_
  / ..|  |   _−_−_−_−_− _   |  |  \
     |  |/_/━ ━ ━ ━ ━ ━\_\|  |
   .._| /_/━ ━ ━ ━ ━ ━ ━ \_\.|_
     /_/━  ━  ━  ━  ━  ━  ━ \_\
   /  /━  ━  ━  ━  ━  ━  ━\  \
475デフォルトの名無しさん:2007/02/15(木) 22:54:57

   ∩___∩
   | ノ      ヽ
  /  ●   ● |   たった一つの命を捨てて
  |◎) ̄  ̄|| ̄ ̄ ) ミ 生まれ変わった不死身の体
 彡、___||_/`\ 鉄の圏論を叩いて砕く
/ __     /´>  ) クマーンがやらねば誰がやる
(___)   / (_/
 |       /
 |  /\ \
 | /    )  )
 ∪    (  \
       \_)
476デフォルトの名無しさん:2007/02/15(木) 23:04:19

 _i^i__i^i_                  i^i ._i^i_ __, -―- 、___
 |*||*| ∩___∩    i^i _i^i_  | | |@ll|(_/,,,,   ,,,,   ヽ_)
 |≡||≡|| ノ       ヽ  ([])|;□;|.(≡)|_| |●  ●   | どうすれば圏論をわかりやすく
 . 二二/       ● |二二( (二二二二 彡(_●_ )   ミ  説明できますかね?
     |          ミ    ) )       / ` ''∪''  / ヽ
    彡、      _ノ Gノ'フ=  ___  / /i  ` ー '"  iヽ |
     /        ヽ / /     | ! / / |       | | .l. i
 ..──|ヽ         ヽ/─==i─Y-(_ノ──i二i───(⌒)
 ___ヽ       /ヽノ   └-┘ ┴     ..└┘    . ̄
      | ___ i
477デフォルトの名無しさん:2007/02/25(日) 01:59:18

             ∩___∩
             |ノ⌒  ⌒ ヽ
             / ●)  ●) |
        Let's  |   ( _●_)  ミ  Haskell♪
            彡、  |∪| 、`
              /  ヽノ  ヽ
             / 人    \\   彡
           ⊂´_/  )    ヽ__`⊃
                / 人 (
               (_ノ (_)
478デフォルトの名無しさん:2007/02/25(日) 02:00:25

            A    B


    ∩___∩   /)
    | ノ      ヽ  ( i )))
   /  ●   ● | / /
   |    ( _●_)  |ノ /
  彡、   |∪|    ,/
  /    ヽノ   /´    ここにオブジェクトAとオブジェクトBがあるクマ
479デフォルトの名無しさん:2007/02/25(日) 02:02:12

           A  →  B


   ∩___∩    
   | ノ      ヽ  
  /  >   < | じつはAさんはBさんを好きなんだクマ
  | //// ( _●_)  ミ
 彡、     l⌒l  ノ
 / __  \ \ヽ
. (___)   \__)
480デフォルトの名無しさん:2007/02/25(日) 02:07:27

   ∩___∩
   | ノ      ヽ
  /  ●   ● |   と、いうように
  |    ( _●_)  ミ   ある対象とある対象がなんらかの関係をもっていることを
 彡、   |∪|  、`\   圏論では「射」と言うクマ
/ __  ヽノ /´>  )
(___)   / (_/
 |       /
 |  /\ \
 | /    )  )
 ∪    (  \
       \_)
481デフォルトの名無しさん:2007/02/25(日) 02:09:55

   ∩___∩
   | ノ      ヽ      A → B
  /  ●   ● |
  |    ( _●_)  ミ  この場合、Aさんを「ドメイン」、Bさんを「コドメイン」と言うクマ    
 彡、   |∪|  、`\
482デフォルトの名無しさん:2007/02/25(日) 02:15:49

      ∩___∩    
      | ノ  _,  ,_ ヽ  
     /  ●   ● |     別にBさんを好きじゃなくてもいいんだクマ
     |    ( _●_)  ミ     Bさんを嫌いでもいいし
    彡、   |∪|  ノ       BさんはAさんの嫁でもいいし
⊂⌒ヽ /    ヽノ  ヽ /⌒つ    AさんがBさんをレイ-プする、という関係でもなんでもいいクマ
  \ ヽ  /         ヽ /
   \_,,ノ      |、_ノ
483デフォルトの名無しさん:2007/02/25(日) 02:19:20

   ∩___∩
   | ノ      ヽ
  /  ●   ● |     A → B
  |    ( _●_)  ミ      ココ!! 
 彡、   |∪|  、`\
/ __  ヽノ /´>  )   この図では「→」がAさんとBさんの関係を表してるクマ
(___)   / (_/    関係というものには方向性が付き物なんだクマ
 |       /         
 |  /\ \        この「関係を表した矢印」こそが「射」クマー!
 | /    )  )
 ∪    (  \
       \_)
484デフォルトの名無しさん:2007/02/25(日) 02:20:05
てらわかりやす
485デフォルトの名無しさん:2007/02/25(日) 02:21:35


    まだまだ続クマ?
\   ̄∨ ̄ ̄ ̄ ̄ ̄ ̄    (´´
  \(⌒-⌒)   o       (´⌒(´
   (・(ェ,,)・ )つ⌒`つ≡≡≡(´⌒;;;≡≡≡
          ̄ ̄     (´⌒(´⌒;;
      ズザーーーーーッ

486デフォルトの名無しさん:2007/02/25(日) 02:40:43

              / ̄)
     ∩____∩. |  |   AさんからBさんへの「射」は1つとは限らないクマー!
     | ノ        ヽ.|  |
    /  ●   ● ||  |      くニ} {fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj「好き好き射」
    |    ( _●_) .ミ  |
    彡、.     |∪|     |
くニ} {fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj{fj「エロエロ射」」
     /  ,へ        ̄ ̄`ヽ
      /  /  \    t──┐  |
    (__/     >   ).   |  |_
             /  /   (___)
           (  \
            \__)
487デフォルトの名無しさん:2007/02/25(日) 02:56:02

 、   l   _,                 
  ヽ/⌒ヘ~                 
  ., 't,_,ノ丶   ∩、     ∩   
 /  !   '`  |   '──-' '\    
        ,/ ●       'i,
       /    ( _●_) ●   i,  
       彡     しノ     ミ    あたまをやわらか〜くするクマ〜
      |`:、\     'ii   __,/    
      'i、 ̄~~     ij  乙__ノi       
       ^-ァ        __,ノ      
     r^~"i'        'l
     !、 !         l       
      ~^''!,   ,_    ,!_       
         \ l,~^''‐--::,,⊃ ) ) ) )   
            `'‐’              
488デフォルトの名無しさん:2007/02/25(日) 03:02:26

            X  Y  Z       


    ∩___∩   /)
    | ノ      ヽ  ( i )))
   /  ●   ● | / /
   |    ( _●_)  |ノ /
  彡、   |∪|    ,/
  /    ヽノ   /´    ここにオブジェクトXとオブジェクトYとオブジェクトZがあるクマ
489デフォルトの名無しさん:2007/02/25(日) 03:06:57

      ∩____∩    
      /         ヽ    X → Y  YさんはXさんのいとこクマ
     /  ●   ●  |    Y → Z  ZさんとYさんのいとこクマ
     |   ( _●_ )   ミ   
    彡、,,   |∪|   /  
    /__  ヽノ   l\   
   (___u)    (uニ ).  
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
490デフォルトの名無しさん:2007/02/25(日) 03:09:49

|:::::::::::::::::::::::::::::::
|" ̄ ゙゙̄`∩::::::::::::::::
|,ノ  ヽ, ヽ:::::::::::::::::::::::::       X  →  Y
|●   ● i'゙ ゙゙゙̄`''、::::::::::::::::          
| (_●_)  ミノ  ヽ ヾつ::::::::::          ↓
| ヽノ  ノ●   ● i::::::::::      
{ヽ,__   )´(_●_) `,ミ:::::::             Z
| ヽ   /  ヽノ  ,ノ::::::
あれ?XさんとZさんは・・・いとこ?
491デフォルトの名無しさん:2007/02/25(日) 03:17:59

                   ∩─ー、
                 / ● 、_ `ヽ
                /  ( ●  ● |つ
                |  /(入__ノ   ミ 所詮、XとZが
                 、 (_/   ノ    いとこだろーと、はとこだろーと
                 \___ノ゙      関係ないのさ・・・
                 / 丶' ⌒ヽ:::
                / ヽ    / /:::   ただひとつ言えることは
               / /へ ヘ/ /:::    XからZへのなんらかの関係があるかもしれない
               / \ ヾミ  /|:::     ってことだ
              (__/| \___ノ/:::
                 /    /:::     これを圏論では射の「合成」と呼ぶ
                 / y   ):::
                / /  /:::
               /  /::::         X  →  Y
              /  /:::::                
             (  く::::::::                  ↓
              |\  ヽ:::::   
                |  .|\ \ :::::               Z
          \    .|  .i::: \ ⌒i::
          \   | /::::   ヽ 〈::     [XからZへの矢印が考えられる]
              \ | i::::::   (__ノ:
              __ノ  ):::::
            (_,,/\
492デフォルトの名無しさん:2007/02/25(日) 03:19:52

|
|.-──-、
| : : : : : : : : \
|: : : : : : : : : : : ヽ
|-…-…-ミ: : : : :',
| '⌒'  '⌒' i: : : : :}
| ェェ  ェェ |: : : : :}
|   ,.、   |:: : : :;!    どこで出ていこうかな・・・・・
| r‐-ニ-┐| : : :ノ
|! ヽ 二゙ノ イゞ‐′
| ` ー一'´丿 \
| \___/   /`丶、
| /~ト、   /    l \
493デフォルトの名無しさん:2007/02/25(日) 03:50:43

                        ,..-──- 、
                     /. : : : : : : : : : \
関数Xは               /.: : : : : : : : : : : : : : ヽ
クラスYを引数にする       ,!::: : : :,-…-…-ミ: : : : :', 
X(Y)                 {:: : : : :i  \ / i: : : : :}
ちなみにYは            {:: : : : | ェェ  ェェ |: : : : :}  合成のほかの例え!!
Zという属性を.    , 、  .   { : : : :|   ,.、  .. |:: : : :;! 
持っている      ヽ ヽ.  _ .ヾ: :: :i r‐-ニ-┐ .| : : :ノ 
              }  >'´.-!、ゞイ! ヽ二゙ノ イゞ‐′
              |    −!   \` ー一'´丿 \ 
             ノ    ,二!\   \___/   /`丶、
            /\  /    \   /~ト、   /    l \
           / 、 `ソ!      \/l::::|ハ/     l-7 _ヽ
494デフォルトの名無しさん:2007/02/25(日) 03:52:45

                      _ /- イ、_
           __        /: : : : : : : : : : : (
          〈〈〈〈 ヽ     /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ
          〈⊃  }     {:: : : :ノ --‐' 、_\: : ::}
   ∩___∩  |   |      {:: : :ノ ,_;:;:;ノ、 ェェ ヾ: :::}  
   | ノ      ヽ !   !   、  l: :ノ /二―-、 |: ::ノ
  /  ●   ● |  /   ,,・_  | //   ̄7/ /::ノ
  |    ( _●_)  ミ/ , ’,∴ ・ ¨  〉(_二─-┘{/
 彡、   |∪|  /  、・∵ ’  /、//|  ̄ ̄ヽ
/ __  ヽノ /         /   // |//\ 〉
(___)   /         /    //   /\ /
 わかりづらいクマ
495デフォルトの名無しさん:2007/02/25(日) 04:10:53

     _ /- イ、_     
  /: : : : : : : : : : : (   
 /: : : : ::;:;: ;: ;:;: ; : : : ::ゝ;  関数X  →  クラスY
.{:: : : :ノ --‐' 、_\: : ::}         
.{:: : :ノ ,_;:;:;ノ、 ェェ ヾ:                ↓
.l: :ノ /二―-、 |: ::ノ..       
 | //   ̄7/ /::ノ               属性Z
. 〉(_二─-┘{/
/、//|  ̄ ̄ヽ
わかんないかなコレ・・・
496デフォルトの名無しさん:2007/02/25(日) 04:14:39

class X {
 method( Y ) {}
}

class Y {
 Z z;
}

class Z {}
497デフォルトの名無しさん:2007/02/25(日) 04:38:27
 
                                     \  i /
                                    ─── ・ ──  ← ヌッケ
                       ̄ 二─ _          // | \
                          ̄ 、  - 、      / / |
                           -、\   \  /  /
                             \\   \
                  /         \ヾ ヽ     ヽ
                 /         \ ヾ、 |       i
  クマソッ          //          |! `i        |
             ///           |         |
            / (              |         |
           <_,へ 丶-、           |         |
        __●_ rm \   \         |! リ        |
      / ヽ-'⊇) ̄`ヾ    │         /    |    |
    ⊂/ ●           /\_,.-、     / /  /    /
     │            /\  /   _/ / /  //
    ⊂丿     ミ   (⌒)   ̄      /  / /
      \__ミ  / /         //_ /
           \_/        _二─
498デフォルトの名無しさん:2007/02/25(日) 04:39:35

  A → B → C    H

  ↓   ↑   ↑   ↓
    
   D   E → F → J

  ↑        ↑
 
  G   H → I       くまー
                r -、,, - 、
            __    ヽ/    ヽ__
  くまー     ,"- `ヽ, / ●     l )
         /  ● \__ (● ● i"
        __/   ●)      ̄ )"__ "`;
      .(_i  ●    ' __, '"  ̄`'(___/.i⌒i
        丶_ ,i⌒i,,_(_/    ● i ̄ ̄ )_|__
      __, '"   ̄ ヽ! ● ●)  ミ~ ̄_● ヽ)
くまー   (_/     ● i    ∪  / ⊂{●  | くまー
       l ●( _●) (  ̄)-    /   -'  i
     /ヽ、   |∪l   T      i     ● '")
               くまー
499デフォルトの名無しさん:2007/02/25(日) 04:43:17

    i⌒i⌒i
    |    ヽ
   /   人__ヽ∩
  /  /       ヽ    >>498のように人間は人間同士いろんな関係をもってるクマ
 /  /  ●   ● |      物事だってそうだクマ
 (   |    ( _●_)  ミ      コレとかアレのいろんな関係で成り立っているクマ     
  \  彡、  |∪|   (            
   \    ヽノ   `ー´⌒\     
     \          /\  \、     
      \       /   (     ̄)  
        \     |   ( ̄ ̄ ̄ ̄) 
          \   ヽ/  / ̄ ̄
            \__/  
                   
       
500デフォルトの名無しさん:2007/02/25(日) 04:48:31
       
             ∩___∩
            /  ノ   \  ヽ
         | ●    ● |     
           彡  (_●_)    ミ
            /、  |∪|    ,\    複数の「対象」と複数の「射」の集まり
      , -‐- くJ( ヽノ   ゝ-rr- 、、      ~~~~~~      ~~~~~
     /Y  ,r 、 `ー r'"^〃 、  つヒヽ   これこそが「圏」 = 「カテゴリー」
    ,ノ '^` i! =テミ i' 天ニ  ミ、 ='"^ヾ }
   ,/ ''=''" ノ-‐'ヾ-人,,__ノnm、''::;;,,  イ  
  i!   ,∠-―-、、     `ー'フヾ、  j  圏論(カテゴリー論)の基礎となるものだクマ
  f'´    ノし   `丶、 ー=ミ-JE=-  /
  ヾ=ニ- 彡^ 〃   ,,>、、`''ー-::,,_,,ノ
    ``ー--┬:, ''"~´フ ソ´`7'' ''"´
         ,に (`゙゙´ノ   f^ヽ
        ,ハ    ,ィ'   ,;-ゝ、
        /ミ`ーt!,_,ィ-‐彡''"^ヽ
        /  ヾ::::::::::::::::r''"  ぃ ;}
       l   t:::::::::::/    ノ /
       l!   `'T7′   / /
501デフォルトの名無しさん:2007/02/25(日) 05:06:35

  圏(カテゴリー)
┏━━━━━━━━━━━━━━━━━━━━━┓
┃クマー        クマー      クマー     ┃
┃~~~~~~        ~~~~~~      ~~~~~~     ┃
┃ ↑[神]       ↑[神]        ↑[神]   ┃
┃      [好き]         [好き]        . ┃
┃ A君   →   Bちゃん   → .  C君     ┃
┃ ~~~~       ~~~~~~~~       ~~~~~ . .  ┃
┃            ↑[好き]       ↓[爆破] ┃
┃     .     .       [保有]         ┃
┃    .  .      D君    →   フェラーリ ┃
┃            ~~~~        ~~~~~~~~~~  ┃
┃            ↓[ペット]  .          .┃
┃      [同類]              .       .┃
┃ヌッケ   ←    犬                 .┃
┃~~~~~~        ~~~               .  ┃
┗━━━━━━━━━━━━━━━━━━━━━┛
502デフォルトの名無しさん:2007/02/25(日) 05:16:08

【まとめ】

┏━┓ 射 ┏━┓
┃.A.┃ → ┃.B.┃
┗━┛    ┗━┛
 対象     対象
(ドメイン)  (コドメイン)


上の図が基本要素
これが複数あつまり関係しあったものを圏という
503デフォルトの名無しさん:2007/02/25(日) 05:20:23

           ふぅ、つかれたクマー

            ∩___∩
            | ノ      ヽ        (   )
           /  ●   ● |     (  )
        __|    ( _●_)  ミ__   ( )
        (_. 彡、   |∪|  、`__ )─┛
      /  / ヽ   ヽノ  /_/:::::/    
      |::::::::::| / ( ̄ ̄ ̄ヽ  |:::::::| ̄
      |::::::::::| |   ̄ ̄ヽ .ノ |:::::::| /
    / ̄ ̄旦 ̄ ̄ ̄ ̄ ̄ ̄ ̄/|/
  /__________/ | |
  | |-------------------| |
504デフォルトの名無しさん:2007/02/25(日) 09:49:35
これは分かりやすいw
505デフォルトの名無しさん:2007/02/25(日) 12:04:29
GJ!!
506デフォルトの名無しさん:2007/02/26(月) 08:23:38
>>502
それがちょっと違う。
たとえば
A → B → C という2つの射があったときに
ここでA → Cという上の2つの射の*合成*が定義されてなかったら圏にならない。
すべてのコドメインとドメインが一致する射の組について合成が定義される
場合について、その全体を圏と呼ぶことが出来る。

↑のAAもがんばってくれw
507デフォルトの名無しさん:2007/02/26(月) 19:20:21
オーム社から「クマでわかる圏論」マダー?
508デフォルトの名無しさん:2007/02/26(月) 23:59:49
>>506
あー、なるほどね。そういう条件が必要だったのか。
Wikipediaのこの文章をみてちょっと理解しきれなかったんだな。

>圏 C についてその射(と射の合成可能性)だけでも全部わかっていれば、
>そのうちで恒等射になっているものが対象を示しているので著者によっては
>上の公理を満たす射の集まりを持って圏と定義することもある。

恒等射ってのがなんなのかわからん。ググっても出てこないし!

>>507
クマーとかを本に使って金もらうと炎上しそうだなw
509デフォルトの名無しさん:2007/02/27(火) 02:24:05
クマーはGPLってことで
510デフォルトの名無しさん:2007/02/27(火) 03:06:50
>>508
恒等射っていうのはドメインとコドメインが等しくて、
何回合成してもそれ自身と等しくなるような射。
圏のすべての対象について、一個ずつ恒等射があること
が必要。逆に言うと、恒等射があるとそれに対応する
対象がちょうどひとつあるので、恒等射と対象は
1対1に対応している。(したがって、人によっては、恒等射を
対象そのものとみなすって言うのが↑の記事、、
511デフォルトの名無しさん:2007/02/27(火) 03:15:03
>>510
冪等射と恒等射は別じゃないか?
512デフォルトの名無しさん:2007/02/27(火) 04:11:06
あ、そうだわ、・・・集合の圏とかだと冪等射がたくさん・・・orz...

だから、上の条件にプラスして、他の任意の合成可能な射
と合成して相手を変化させないという条件も必要。

ちゃんと書くと、
1:A→Aという射で他の任意の射
f:A→Bと合成して、f1=f
g:C→Aと合成して、1g=g
となるようなもの、・・・
513デフォルトの名無しさん:2007/03/18(日) 18:43:55
臨時あげ
514デフォルトの名無しさん:2007/03/18(日) 18:46:41
ここで、Stringableの是非を議論すればいいのか?
515デフォルトの名無しさん:2007/03/18(日) 18:47:12
馬鹿が本スレ埋めやがったな
516デフォルトの名無しさん:2007/03/18(日) 18:47:46
止めれw
次スレが立つまでの避難所ということで
517デフォルトの名無しさん:2007/03/18(日) 18:54:27
よく読むとアンチスレなのにまともな議論されてるなw
518デフォルトの名無しさん:2007/03/18(日) 19:01:05
519デフォルトの名無しさん:2007/03/18(日) 19:07:59
>518
乙!
520デフォルトの名無しさん:2007/03/25(日) 15:03:44
型が充実してるって言うから、ちょっと勉強してみたけど、
簡単に実行時例外が発生するじゃん。なんだよこれ。

コンパイルが通れば論理的な誤り以外、
ほとんどバグが取れてるのかと思ったのに。 

実行時に読み込むデータとかの誤りなら仕方ないにしても、
そんなのない静的にすべて決まってるプログラムでも
実行時例外が起きえるなんて、全然だめじゃんwww
521デフォルトの名無しさん:2007/03/25(日) 19:04:34
>>520
ボトムのことかな?
522デフォルトの名無しさん:2007/03/25(日) 21:12:50
>>520
例外を起こす可能性のある関数を使わなきゃいいんじゃない?
あるいは、もっと型の強い言語を使ったらどうよ。
523デフォルトの名無しさん:2007/03/25(日) 21:53:28
暗黙でも何でも良いから
関数毎の定義域に合ったサブタイプを作るとか、
なんとかならんのかね。

もっと型の強い言語ってどんなの?
524デフォルトの名無しさん:2007/03/26(月) 01:54:12
Cじゃね。
525デフォルトの名無しさん:2007/03/26(月) 10:33:01
Cほど型の緩い言語もないだろ。
526デフォルトの名無しさん:2007/03/26(月) 10:43:07
Cは緩いけど硬直的
527デフォルトの名無しさん:2007/03/26(月) 16:44:20
Dじゃね。
528デフォルトの名無しさん:2007/03/26(月) 17:44:47
void*
529デフォルトの名無しさん:2007/03/26(月) 23:35:13
日本拳法が一番厳格だと思うよ
530デフォルトの名無しさん:2007/03/27(火) 20:05:02
あんまり深く使い込んだわけじゃないけど
俺が出会ったランタイムエラーは
パターンマッチの場合分けの漏ればかりだった。

型がらみで実行時エラーってでる可能性はあるの?
531デフォルトの名無しさん:2007/03/27(火) 20:40:55
>>523
>もっと型の強い言語ってどんなの?
依存型のある言語とかじゃないか?実用化されてるのか知らんけど。

>>530
head []とかdiv 1 0とか。
532デフォルトの名無しさん:2007/03/27(火) 20:45:02
計算停止性を決定可能にした天才の>>520がいると聞いて飛んできましたよ。
533デフォルトの名無しさん:2007/03/27(火) 21:19:17
依存型って型に普通の値を突っ込めるようなもの?
とすると類に普通の型が混ざるわけ?
534530:2007/03/27(火) 21:26:28
>head []とかdiv 1 0とか。

div 1 0は型エラーじゃないじゃん。
head []も型システムの責任なのかい?

そうか
型に値域を限定する機能があればいいのか?

div :: (Num a) (Num b:ただし0を除く) => a -> b -> a
head :: [a] ただし[]を除く

みたいな。

でもどうやっても静的にはチェックできそうにない orz
535デフォルトの名無しさん:2007/03/27(火) 21:59:15
{-# OPTIONS_GHC -fglasgow-exts #-}

data ZeroT = ZeroT
data SuccT a = SuccT

data Nat n where
  Zero :: Nat ZeroT
  Succ :: Nat n -> Nat (SuccT n)

data List a n where
  Nil :: List a ZeroT
  Cons :: a -> List a n -> List a (SuccT n)

myhead :: List a (SuccT n) -> a
myhead (Cons x xs) = x

mydiv :: Nat n -> Nat (Succ m) -> {- ...型が書けねえ -}
536保守:2007/05/26(土) 18:36:56
破壊的代入を使ったら負けかなと思う
537デフォルトの名無しさん:2007/05/27(日) 20:43:18
勝ち負けを意識した時点で既にアンタ負けてるよ
538デフォルトの名無しさん:2007/05/27(日) 23:19:22
>…負けてるよ
って言ってるアンタも勝ち負けを意識してるんだから、負けてるよ。
539デフォルトの名無しさん:2007/05/27(日) 23:32:17
俺みたいな奴は勝つ必要なんてねえんだよ
540デフォルトの名無しさん:2007/05/30(水) 21:02:25
勝とうよ。haskellがあれば勝てるよ
541デフォルトの名無しさん:2007/05/31(木) 00:08:21
けどHaskellって正直なところ負け組だよ
542デフォルトの名無しさん:2007/05/31(木) 02:59:58
関数型言語パスカル
543デフォルトの名無しさん:2007/05/31(木) 03:24:30
544デフォルトの名無しさん:2007/05/31(木) 03:25:27
            >>544
545デフォルトの名無しさん:2007/08/22(水) 21:16:38
ふつケル読んだけど、後半が理解できなかった。マジで難しい。
言語の設計の根っこがCPUの挙動にぜんぜん当てはめられていないからか、
俺には宇宙語だよこりゃ…。
546デフォルトの名無しさん:2007/08/22(水) 21:36:33
当てはめられないかもしれないが
C言語もCPUの挙動に当てはめられるかというとそうでもない
そもそもソフトウェア設計用だからな
547偉そうに語ってみる:2007/08/23(木) 01:19:28
>545
後半、モナドやWikiエンジンの開発のところは急に難易度が上がっているので、
それより前の部分を何度も読んで動かしていると感じがつかめてくると思います。

あとは、メモリとかスタックとか、効率のことを考えるのをひとまずやめて
プログラムでどういうことをやりたいかを考えてみるのはどうでしょうか。
548デフォルトの名無しさん:2007/08/23(木) 02:46:56
おまえ偉そうだぞ
549デフォルトの名無しさん:2007/08/24(金) 01:14:22
えっへん
550デフォルトの名無しさん:2007/08/24(金) 09:02:27
つ[龍角散]
551デフォルトの名無しさん:2007/08/27(月) 13:01:13
>>550
龍角散は「ゴホン!」だろ
エヘン虫にはヴィックスドロップ。
552デフォルトの名無しさん:2007/08/28(火) 09:39:44
高度すぎてわからなかった^^;;
553デフォルトの名無しさん:2007/09/15(土) 23:11:49
クマーが圏論を語ってる、、、。
554デフォルトの名無しさん:2007/09/15(土) 23:12:36
MLと比べてどうなの?
555デフォルトの名無しさん:2007/10/08(月) 21:16:41
クマー落ち防止保守
556デフォルトの名無しさん:2007/10/20(土) 02:30:14
557デフォルトの名無しさん:2007/11/14(水) 16:25:03
>>10
頭の中に同型対応になるものがたくさんあるってことだから
少なくともアホじゃないだろう
558デフォルトの名無しさん:2007/11/14(水) 22:27:08
>>557
あの手の輩は「これは非直感的だからウンコ」て台詞の方が圧倒的に多いよ
559デフォルトの名無しさん:2007/11/19(月) 00:28:42
何この良スレ
スレタイでスルーしてて後悔した
560デフォルトの名無しさん:2007/11/20(火) 21:30:08
もっと活用できたらいいんだがなぁ・・・
561560:2007/11/20(火) 21:31:14
>>560
560はスレのことね
562デフォルトの名無しさん:2007/12/11(火) 07:32:07
sage
563デフォルトの名無しさん:2007/12/23(日) 03:41:42
564デフォルトの名無しさん:2007/12/23(日) 11:22:42
クマさんのArrow講義マダ?
565デフォルトの名無しさん:2007/12/23(日) 13:33:30
arrow って命令型言語的なフローを書くための機構なんだよね?重要なの?
566デフォルトの名無しさん:2007/12/29(土) 12:23:36
ぶっちゃけ>>8が理解できなくて劣等感にさいなまれた。
でもHaskellをかじったら理解できた。
その経験からつまずいた点を書いてみる。

qsort [] =
qsort (x:xs) =
とqsortの定義が2つ並んでいるのが理解できなかった。

これはHaskellの階乗を見て場合分けだと理解した。
fact 0 = 1
fact n = n * fact (n - 1)

int fact(int n) {
if (n == 0) return 1;
else return n * fact(n - 1);
}
567566:2007/12/29(土) 12:45:46
[]が意味不明だった。
配列を[1, 2, 3]と書くと知って初めて空配列だと理解できた。

(x:xs)が意味不明だった。
他の部分で配列はすべて[]なのにここだけ()なのに違和感があった。
()はfact(n-1)のn-1と同じでx:xsが一つの要素だとくくっていると解釈した。
この辺はC言語だとコンマで区切るような所が空白で区切られているため
意識しないといけない部分だというように感じた。
そして++が配列の結合だと覚えた上で、
x:xs とはxが要素でxsが配列で [x] ++ xs という意味だと解釈した。

qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
の構文木が初見でイメージできなかった。
演算子++の優先度が高いため A ++ B ++ C と3つの配列が結合していると解釈した。
C言語風にqsort(elts_lt_x) ++ [x] ++ qsort(elts_greq_x)と書いてあれば
初見でも自力で解釈できたかもしれない。

>>10のいうように自分の知っているC言語に近いかどうかというバカの壁がある。
だからと言ってC言語を知らない人の方が先入観がなく理解しやすいとは思えないが。
568デフォルトの名無しさん:2007/12/29(土) 12:55:10
>>567
[1,2,3]は配列じゃなくてリスト
配列とリストの違いはググレ
569デフォルトの名無しさん:2007/12/29(土) 12:57:10
文法を知らなきゃ理解できんのは当然だろ

それから、細かいが、
>演算子++の優先度が高い
低い、の間違いだよな?
570デフォルトの名無しさん:2007/12/29(土) 12:58:12
>>10
「自分が知ってるものと似てる」=メタファ
「見たら使い方がわかる」=アフォーダンス
571デフォルトの名無しさん:2007/12/29(土) 12:58:27
配列とリストなんて計算量が違うだけじゃん。
初心者は気にしなくていいよ。
572デフォルトの名無しさん:2007/12/29(土) 13:00:14
>>571
だったらお前はmalloc,freeひたすら繰り返してろ
573566:2007/12/29(土) 13:01:50
>>569
小学校で1+2*3のとき+より*の優先度が高いと習ったと記憶していますが
これはひょっとして大間違いですか?
574デフォルトの名無しさん:2007/12/29(土) 13:03:26
>>573
どこに+と*が出てきてるんだ?
575デフォルトの名無しさん:2007/12/29(土) 13:05:15
>>573
もし(++)の優先度が関数適用より高いなら、
qsort elts_lt_x ++ [x] ++ qsort elts_greq_x
は、
qsort (elts_lt_x ++ [x] ++ qsort) elts_greq_x
と解釈されるはずだよ。
576566:2007/12/29(土) 13:07:20
>>574
Haskellとは関係なくて「優先度が高い」という言葉の定義の確認で、
+と*を比較すると*が優先度が高いという言い回しが正しいかどうかです。

>>575
すみません、それ以前のレベルで、
優先度という言葉の定義があやふやでした。

よく考えたら++の優先度が低いという意味が理解できました。
1+2*3で+は後で計算していますがqsortでの++もそれと同じですね。

混乱してしまってごめんなさい。
577566:2007/12/29(土) 13:14:41
>>568
ご指摘ありがとうございます。
日本語のHaskell本を2冊とも買ったのでよく勉強します。

>>569
それはそうなんですが、自信たっぷりな>>8の書き方を見て、
普通の知能の人間なら文法も含めて推測できるはず
それができない俺はアホだ。
という劣等感を感じたんです。

色々とつまずきましたが、読み方が分かるようになると、
Haskellのインデントの文法はとても美しいと感じられるようになりました。
今まで好きだったPythonが糞に思えてきました。
578デフォルトの名無しさん:2007/12/29(土) 13:18:42
>>577
haskellのインデント(レイアウトのことかな)が美しいと思うのは自由ですが、
ちょっと偉い人の間では嫌っている人もかなりいます
579566:2007/12/29(土) 13:26:18
>>578
はい、レイアウトのことです。
もしお手数でなければ参考までに嫌われている理由をお聞きしたいです。

Pythonのインデントだとコピペの際にずれを直すのが鬱陶しいと思いました。
C言語だとずれていても無視できて、後で自動整形できますからね。
580デフォルトの名無しさん:2007/12/29(土) 14:24:52
>>579
たとえばcaseの中にcaseがあって、それがレイアウトで書かれていると、
インデントが少しずれただけで全く意味が異なる式になってしまうことがあったりするから。
だからhaskellにはブロックで書くこともできるからレイアウトを使わなくても良い。
でもレイアウトが崩れても一つの解釈しかできないところならレイアウトで書いたほうがきれいかもしれないね。
581566:2007/12/29(土) 20:28:26
>>580
なるほど。
レイアウトはExcelで書くのに向いているかもしれないと思いました。
そういえば副作用がない関数型のイメージをワークシートに例えた解説を
どこかで読んだのを思い出しました。

ところでqsort elts_lt_x ++ [x] ++ qsort elts_greq_xの演算子の件ですが、
単純に左から右にパースして優先度は関係ないのではないかと気付きました。
静的に型付けされているため、qsortの引数は1つしかないと決められるからです。
582デフォルトの名無しさん:2007/12/29(土) 21:35:33
>>581
ヒント: カリー化
583デフォルトの名無しさん:2007/12/29(土) 21:38:18
関数型言語初心者はマジでMLかOCamlから始めろよ
いきなりHaskellやったってわからねーだろ。
584デフォルトの名無しさん:2007/12/29(土) 22:04:56
つ「Haskell The Craf tOf Functional Programming」

↑大学の教科書になってるHaskell使ったプログラミング自体の入門書だから
いきなりやってもわかるようにできてる

この本だとモナドが最後のほうになるまででてこないから
ふつうのHaskellプログラミングと併読してもいいやも
585デフォルトの名無しさん:2007/12/29(土) 22:16:31
SML とか OCaml は(頑張れば宣言的に書く事も可能な)手続き型言語だからね
「副作用も何のその。非正格性なんて、速度を犠牲にしてまで要らないよ。
主題はメタランゲージなんだから、関数型言語なんてレッテルを貼らないでおくれ。」
という世界。
586デフォルトの名無しさん:2007/12/29(土) 23:51:39
>>585
というか、CAML開発の時点で「妥協の産物」と開発者自らが語っている。
その後継のOCAMLでレッテル貼る貼らないとか以前の問題。
その点、SMLはHaskellと同じで純粋培養した関数型っていう感じがする。
NewJergyとかいいな。

でもあえてGauchを薦めてみるw
Lisp/Scheme Familyは楽しいぞ。古きを尋ねて新きを知るという感じかな。
587デフォルトの名無しさん:2007/12/30(日) 00:13:17
SchemeならMonaがアツい
OS開発も一緒に楽しめて一石二鳥
588デフォルトの名無しさん:2007/12/30(日) 00:24:56
>>586
×Gauch
○Gauche
589デフォルトの名無しさん:2007/12/30(日) 00:27:19
>>587
Reading Gaucheなんてのをやってるな
ttp://wiki.monaos.org/pukiwiki.php?Reading%20Gauche
590デフォルトの名無しさん:2007/12/30(日) 00:29:24
Scheme は R6RS が好きになれん...
591566:2007/12/30(日) 00:45:12
>>582
qsortが単独で切り出されてC言語でいう関数ポインタみたいなものとして
扱われないという事実をどう解釈するかということでしょうか?
確認実験をしてみました。
inc n = n + 1
add a b = a + b
inc 2 + inc 5 → 9 (+がincより低い)
add inc 2 inc 5 → エラー (addとincが同列のため)
add (inc 2) (inc 5) → 9 (明示的に差をつける)

もし++が同列なら以下の記述を強制されそうですね。
(qsort elts_lt_x) ++ [x] ++ (qsort elts_greq_x)
括弧なしのポーランド表記とは違うのだと理解しました。

>>583
はい、しょっぱなのクイックソートからつまずきました。
実はHaskellの前に英語の本を買ってF#をやっていたんですが、
C#とパラダイムが違うという実感が湧きませんでした。
C# 3.0でラムダ式を使えばF#いらないなー、みたいな。
そんなとき、Haskellのレイアウトが美しいと気付いたんです。
592デフォルトの名無しさん:2007/12/30(日) 00:53:15
関数型を使うならcurryingとmonadぐらいは理解してないと使いこなせないんじゃないかな。
593デフォルトの名無しさん:2007/12/30(日) 01:02:58
式が二つ並んでいたら関数適用になるってことはわかってるかな
C っぽく書くと

inc 2 + inc 5 → +(inc(2))(inc(5))
add inc 2 inc 5 → add(inc)(2)(inc)(5)
add (inc 2) (inc 5) → add(inc(2))(inc(5))
594デフォルトの名無しさん:2007/12/30(日) 01:38:25
>>591
あなた、一度でもリファレンスに目を通しましたか?
最初から最後まで一読してから、わからないことがあれば質問してください。
595デフォルトの名無しさん:2007/12/30(日) 01:39:04
幸運なことに、リファレンスは日本語化されています。
596566:2007/12/30(日) 01:41:46
お騒がせしてすみません。
自分にHaskellは無理のようです。
色々と教えていただいてありがとうございました。
597デフォルトの名無しさん:2007/12/30(日) 01:48:44
アンチを増やしてどうするw
598デフォルトの名無しさん:2007/12/30(日) 01:51:30
この程度で挫折するようなカスのことなぞ知らん
599デフォルトの名無しさん:2007/12/30(日) 01:52:27
rubyコミュの二の舞はごめんだからな。
600デフォルトの名無しさん:2007/12/30(日) 02:05:39
Haskellユーザが増える→Haskellコミュの質低下→Haskellユーザ全体の技術力低下→オブジェクト指向化→Haskellはオブジェクト指向と親和性が低い→Haskellはダメ言語→Haskellコミュ衰退→乙
601デフォルトの名無しさん:2007/12/30(日) 02:07:20
Haskell衰退の他のシミュレーションよろ
602デフォルトの名無しさん:2007/12/30(日) 02:10:02
>>601
お前566だろ?
さっそく門前払いを逆恨みか
603デフォルトの名無しさん:2007/12/30(日) 02:15:32
>>600
オブジェクト指向化したのがConcurrent Cleanじゃね?
604デフォルトの名無しさん:2007/12/30(日) 02:24:04
関数型初心者はカリー化・モナド・遅延処理ぐらいまで理解してから始めてホスイ。
Cみたいなeager evaluationとHaskellみたいなLazy evaluationでは違うのだよ。
605デフォルトの名無しさん:2007/12/30(日) 02:24:39
>>603
それは勘違い
606デフォルトの名無しさん:2007/12/30(日) 02:24:46
>>603
いやOZだ。
607デフォルトの名無しさん:2007/12/30(日) 02:33:52
急にスレが伸びてると思ったら基地外が暴れてたのか
608デフォルトの名無しさん:2007/12/30(日) 02:52:45
冬だな
609デフォルトの名無しさん:2007/12/30(日) 09:30:40
スレタイどおりの糞オナニー言語ですな
610デフォルトの名無しさん:2007/12/30(日) 10:47:28
rubyは原理主義者がウザい
611デフォルトの名無しさん:2007/12/30(日) 12:03:29
>>610
原理主義って・・・もともとrubyは学者でもない一プログラマが実用主義の下に作った言語だろ?
rubyの原理主義とはなんだ?
612デフォルトの名無しさん:2007/12/30(日) 12:04:34
自分の胸に手を当ててみ
613デフォルトの名無しさん:2007/12/30(日) 12:05:09
貧乳がありました
614デフォルトの名無しさん:2007/12/30(日) 12:06:55
ツルペタょぅι゛ょキタ━━━━(゚∀゚)━━━━!!!!
615デフォルトの名無しさん:2007/12/30(日) 17:00:47
>>585
>「副作用も何のその。非正格性なんて、速度を犠牲にしてまで要らないよ。
>主題はメタランゲージなんだから、関数型言語なんてレッテルを貼らないでおくれ。」

非正格性=non-Strictness=Lazyness

わざわざ非正格性なんて判りにくい言い方をするのモナーw
616デフォルトの名無しさん:2007/12/30(日) 17:06:28
専門用語使うのがかっこいいと思ってる初心者さんなので許してあげてください。
617デフォルトの名無しさん:2007/12/30(日) 17:15:22
「正格性」の反対語なんだぜ!って感を表現したかったんじゃないの
怠惰性とか遅延性って表現はなんか違和感が
618デフォルトの名無しさん:2007/12/30(日) 17:26:53
そんなどうでも良い所を突っ込まれるとは思わなかった…
619デフォルトの名無しさん:2007/12/30(日) 17:27:19
電子工学から入った俺にしてみれば、副作用なしの関数の方がはるかに直感的だったよ。
習い始めのころでもC言語は別に難しくはなかったが、新しいことを学ぶ気持ちだった。
関数型言語で初めて今まで培った勘が役に立った感じがする。
本来のオブジェクトって言ったら抵抗とかコンデンサとかみたいに副作用がないもののはずなんだがなぁ。
なんでオブジェクト指向って言葉が根付いたのが手続き型言語の世界なんだろう。
いや、歴史的経緯は知ってるけど、納得できない。
620デフォルトの名無しさん:2007/12/30(日) 17:39:19
>>618
研究者の端くれなら尚更判りやすい表現を心がけるべきかと
621デフォルトの名無しさん:2007/12/30(日) 17:41:16
>>620
なんで研究者だと思うんですか?
622デフォルトの名無しさん:2007/12/30(日) 17:52:21
>>619
>なんでオブジェクト指向って言葉が根付いたのが手続き型言語の世界なんだろう。

関数型ではファンクターで抽象化できるからオブジェクト化が必要とされることがあまりなかったから。
手続き型では抽象化の方法がオブジェクト化に求められたが、これを関数型にポートする際にオブジェクト指向の関数型が必要とされた。
手続き型で蓄積された資産がすごい勢いでオブジェクト指向の関数型OCAMLにポートされつつあるからM$もF#を出す気になった。
こういった資産のひとつがOCAMLのocsigen。OCAML版Ruby on Railsのパクリ。
他にも、GaucheのKahuaもそれ系。
これらが関数型の世界でどんな進化をするのか興味深い。
623デフォルトの名無しさん:2007/12/30(日) 17:58:15
F#はファンクターが無い訳だがw
624デフォルトの名無しさん:2007/12/30(日) 18:01:39
Apple=>Ruby/Objective-C
Micro$oft=>F#/Visual-???
Unix=>Gauche/Haskell/etc
625デフォルトの名無しさん:2007/12/30(日) 18:03:43
>>624
いいえ、
Unixは終焉までずっとC言語です。
626デフォルトの名無しさん:2007/12/30(日) 18:09:22
>>625
Cはどのプラットフォームでも使うアセンブラ的なポジションになってると思う。
627デフォルトの名無しさん:2007/12/30(日) 18:16:40
妥協の産物=>Perl/Ruby/OCaml
理想主義者=>Squeak/Haskell
現代の化石=>C/Lisp/Fortran/COBOL
628デフォルトの名無しさん:2007/12/30(日) 18:21:59
COBOL?まだ使ってるところあるの?もう全部Javaになったかと思った。
Fortranは物理の世界では現役バリバリです。
Lisp・・・うーん
629デフォルトの名無しさん:2007/12/30(日) 18:29:20
市役所勤務の知り合いがいうには
優秀なやつはシステム課に回されてコボルやらされるらしいですよw
630デフォルトの名無しさん:2007/12/30(日) 18:30:36
Perl<=Larry Wall
Ruby<=Matz
OCaml<=INRIA
Squeak/Smalltalk<=Xerox Park(Allan Kay)
Haskell<=Bastiaan Heeren、Daan Leijen、Arjan van IJzendoorn
C<=K&R
Scheme<=Guy Lewis Steele Jr.、Gerald Jay Sussman
Fortran<=John Warner Backus
COBOL<=CODASYL
631デフォルトの名無しさん:2007/12/30(日) 18:33:05
つ「お題  プログラミング言語の父と呼ばれるのは誰?」
632デフォルトの名無しさん:2007/12/30(日) 18:57:01
チャールズ・バベッジ
633デフォルトの名無しさん:2007/12/30(日) 20:19:25
階差機関(difference engine)は世界初のプログラム可能な計算機と云われています。
では、どのようにプログラムしたのでしょう?
634デフォルトの名無しさん:2007/12/30(日) 20:34:42
>>631
まつもとゆきひろ
635デフォルトの名無しさん:2007/12/30(日) 21:54:11
超良スレ保守
636デフォルトの名無しさん:2007/12/30(日) 23:14:14
プログラミング言語の父といえばシェーンフィンケルとHaskellだろう。1920年代のコンビネータ論理(Combinatory Logic)だ。
シェーンフィンケルが考案し、Haskellが開発した。
その仕事が1930年代のチャーチとクリーネによるメタ言語としてのλ算法の業績につながった。
そしてその後1954年にIBMのバッカスが最初の高級言語FORTRANを作る。

こういう歴史の直系だから、言語としてのHaskellが研究志向が強いというのもうなづける。
637デフォルトの名無しさん:2007/12/30(日) 23:22:30
カリー・ハワード同型対応なくしてプログラミング言語など存在し得ない。
638デフォルトの名無しさん:2007/12/30(日) 23:40:29
>>619
そもそも、プログラミングパラダイムとしてのオブジェクト指向というのが
「状態と手続きを一纏めにしてカプセル化する」という動機で導入されたものだから。
本質的に「状態」を持たない関数型の世界にオブジェクト指向が入り込む余地はそもそも無い。

あと、細かいことだが
>本来のオブジェクトって言ったら抵抗とかコンデンサとかみたいに副作用がないもののはずなんだがなぁ。
コンデンサってのは電荷をためて(状態変化)それを放電する(これも状態変化)ものでないかい?
微分方程式ばかり相手にしてると忘れがちになりかねないけれども、コンデンサは確かに「状態」を持つよ。
抵抗のことはよく分からんが。

>>622
>これらが関数型の世界でどんな進化をするのか興味深い。
「純粋関数型」を標榜するHaskellとはオブジェクトは相容れないし、
OCAMLでもコード中、オブジェクト機能を使ってる部分は、「関数型っぽく」はならないだろ?
オブジェクトが関数型の世界でどうなるか、という興味は無意味だと思うね。
オブジェクトの世界と関数型の世界とがどう棲み分けて共存していくか、ならわかるが。
639デフォルトの名無しさん:2007/12/30(日) 23:59:13
>>638
オブジェクト指向と関数型が共存することでこういったことが出来ればいいなぁという要求は出てくると思う。
これまでの言語の発展だってそういうことから出てきてる。
この部分は相容れないけどこれは一緒にするとこんなことが出来るというのが実装上の工夫のポイントだと思う。
君には無意味かもしらんが。
640デフォルトの名無しさん:2007/12/31(月) 00:35:57
Y コンビネータ (fixpoint のことを Y コンビネータと呼びます。)

data X = PsiInv (X -> (Int -> Int))

psi :: X -> (X -> (Int -> Int))
psi (PsiInv f) = f

fixpoint :: ((Int -> Int) -> (Int -> Int)) -> (Int -> Int)
fixpoint g = let h y = g (\x -> psi y y x) in
h (PsiInv h)

f :: (Int -> Int) -> (Int -> Int)
f g n = if n==0 then 1
else n * g(n-1)

factorial :: Int -> Int
factorial = fixpoint f
-- factorial 10 == 3628800
641デフォルトの名無しさん:2007/12/31(月) 01:48:19
>>638
>そもそも、プログラミングパラダイムとしてのオブジェクト指向というのが
>「状態と手続きを一纏めにしてカプセル化する」という動機で導入されたものだから。

ハァ?www
642デフォルトの名無しさん:2007/12/31(月) 01:51:09
>>638
>「状態と手続きを一纏めにしてカプセル化する」という動機で導入されたものだから。
どーでもいいがデータ構造とアルゴリズムを纏めるんじゃなかったかな?
状態云々は結果的にそういうプログラミング手法が出てきただけで本質的にはあんまり関係ないと思う。

まあHaskellの代数的データ型は型とデータ構造を対応付けて
型についてアルゴリズムを書くから、データ構造とアルゴリズムはほぼ完全に分離してるといえるかもしれない。
これはこれで結構分かりやすくていいシステムだとい思うんだけど、
たとえば型クラス便利だけどインターフェイスみたいにガンガン作る気にならないっていうか、
そういう細かいあたりがめんどくさくなってる気がする。
そういうのをオブジェクト指向で何とかできないものかとか思ったり。これは俺の浅知恵だけどね。

あと、細かいことだが
>コンデンサってのは電荷をためて(状態変化)それを放電する(これも状態変化)ものでないかい?
それは「副値」的なパラメータが存在するだけで実際にそれを「副作用」として実装するかはプログラマ次第では?
というかHaskellだったら普通にモナドで表現できるもんだと思う。

実世界での対応で考えると、ある力を外力と考えることも出来るし、より大きな系の内力と考えることも出来る程度の違い。
状態が存在するかどうかはどういう切り口で物事を見るかに依存している、と思う。
643デフォルトの名無しさん:2008/01/04(金) 23:00:40
オブジェクト指向と関数型が共存できないという風評は日本だけ。
どこが発信源かは知らないがこういうことが普通に受け容れられるようになったんだなぁ。
ゆとり世代が言ってるんだろうか?
644デフォルトの名無しさん:2008/01/05(土) 00:04:56
プログラミングに関する珍発言がまかり通るのは、日本では昔からの伝統です。
C言語が関数型言語であるとか、インタプリタはちょっとずつコード生成して実行する
処理系であるとか。
645デフォルトの名無しさん:2008/01/05(土) 00:23:29
後者は国の問題じゃなくマーケティングの問題でそ
646デフォルトの名無しさん:2008/01/05(土) 00:47:14
関数型のCAMLがオブジェクト指向を取り入れてObjective CAMLになったように、VBがλ算法を手始めに関数型を取り入れても不思議はないと思う。
VBの互換性を問題にしてる人は参照透過性とか副次作用とかを気にしてるんだろうか。OCAMLだってあまり考えずに代入とか使えば問題があるのは同じだと思うけど。
むしろOCAMLerがVBを使うときに便利だと思うけどなぁ。
647デフォルトの名無しさん:2008/01/05(土) 00:49:18
それとも、OCAMLとHaskellでは全く違うということを問題にしてるんだろうか。
648デフォルトの名無しさん:2008/01/05(土) 00:55:06
日本以外ではマルチパラダイムでお祭なのに

>オブジェクトが関数型の世界でどうなるか、という興味は無意味だと思うね。
>オブジェクトの世界と関数型の世界とがどう棲み分けて共存していくか、ならわかるが。

こういうことを周りに認めさせようとする日本人は多いんだろうなぁ。
649デフォルトの名無しさん:2008/01/05(土) 15:43:07
プログラミングする人はいっぱいいても言語を考える人が少ないんだよ
650デフォルトの名無しさん:2008/01/05(土) 16:00:40
まるちぱらだいむだうゎあい、って日本で竹内先生とかが頑張ったのは
世界の先を行ってたと思うんだけどな。

旧帝大-早慶-電電&電機メーカ研究所レベルの研究の浸透拡散がうまく
いかんのはどこかに構造的な問題があるんかね?
651デフォルトの名無しさん:2008/01/05(土) 16:07:41
>>648
別にお祭りというほどでもありませんが。
単に研究ネタがなくなったから今主流のオブジェクト指向と組み合わせてみよう、
って思ってるだけじゃないの。
652デフォルトの名無しさん:2008/01/05(土) 16:11:25
>>648
> こういうことを周りに認めさせようとする日本人は多いんだろうなぁ。

特定の環境にこり固まって極めちゃった悪い意味での職人型なプログラマとかにありそう。
そういう先輩が職場にいて、適切なフォローを入れる人がいなかったりすると、新人は悲惨だね。
653デフォルトの名無しさん:2008/01/05(土) 16:23:02
>>640
SKIコンビネータのことをまとめてるHPを発見したので報告。
ttp://ls-al.jp/blog2/item_343.html

ソースコードはこっち。
http://ls-al.jp/blogarchives/CompileToCombinators.hs

なぜかYコンビネータはないけどY=SLLだからすぐに作れるね。
654デフォルトの名無しさん:2008/01/05(土) 16:43:45
>>638みたいなMythに対しては古くからこういう有名な言葉があるんだが、

"Doing encapsulation right is a commitment not justto abstraction of state,

but to eliminate state oriented metaphors from programming."

Alan Kay, Early History of Smalltall
655デフォルトの名無しさん:2008/01/05(土) 16:44:47
○Smalltalk
×Smalltall
656デフォルトの名無しさん:2008/01/05(土) 17:12:45
Haskellはオブジェクト指向じゃないけど型クラスを使えるから準オブジェクト指向関数型言語とでも言えるのかな。
「型クラス」と「型構築子クラス」でオブジェクト指向っぽく使えて、副作用がないようにモナドやその一般化のアローが使える。
オブジェクト指向と関数型が共存出来ないと言いながらHaskellを使っている人は分裂気味なんじゃないでしょうかね。
657デフォルトの名無しさん:2008/01/05(土) 17:23:03
いや、Type Class と、オブジェクト指向の「クラス」は別物な訳だが
658デフォルトの名無しさん:2008/01/05(土) 17:26:07
>>657
だから『準』と言っている訳だが
659デフォルトの名無しさん:2008/01/05(土) 17:30:37
「準」とかで片付けるとかどんだけwwwwwww

ばか
660デフォルトの名無しさん:2008/01/05(土) 17:38:26
>>659さんは別物のクラスだとどういうことが言えると言いたい訳かな?
ご高説を是非御拝聴いたしましょう。
661デフォルトの名無しさん:2008/01/05(土) 17:44:34
どんだけwwwwwばか

関数型とオブジェクトなんざ共存出来ねんだよ。

無意味、無意味。無駄無駄無駄wwwwww
662デフォルトの名無しさん:2008/01/05(土) 17:47:28
Haskellerはオブジェクト指向もわからないばかということですか。ああそうですか。
663デフォルトの名無しさん:2008/01/05(土) 17:49:37
残念な展開だね。
664デフォルトの名無しさん:2008/01/05(土) 17:57:51
>>656
arrow使いにくい
まるでbrainf*ckみたいに見える
結局は普通に書いたほうがきれいだ
665デフォルトの名無しさん:2008/01/05(土) 18:13:14
「普通」とかで片付けるとかどんだけwwwwwww

ばか

やっぱHaskellerってのは池沼だね。
666デフォルトの名無しさん:2008/01/05(土) 18:20:23
-- A Simple Brainfuck Interpreter

import System.Environment

-- Parser

data Command = Inc | Dec | Next | Prev | Put | Get | While [Command]
deriving (Show, Eq)
type Program = [Command]

parse :: String -> Program
parse s = program where (program, "") = parse1 s

parse1 :: String -> (Program, String)

parse1 "" = ([], "")
parse1 (']':xs) = ([], xs)

parse1 ('[':xs) = (While cmds1 : cmds2, rest2)
where (cmds1, rest1) = parse1 xs
(cmds2, rest2) = parse1 rest1

parse1 (x:xs) = (parse2 x, rest)
where (cmds, rest) = parse1 xs
parse2 :: Char -> Program
parse2 '>' = Next : cmds
parse2 '<' = Prev : cmds
parse2 '+' = Inc : cmds
parse2 '-' = Dec : cmds
parse2 '.' = Put : cmds
parse2 ',' = Get : cmds
parse2 _ = cmds
667デフォルトの名無しさん:2008/01/05(土) 18:22:21
type Tape = ([Char], Int)
tape0 = (['\NUL', '\NUL'..], 0) :: Tape
getCell :: Tape -> Char -- Get value of current position
getCell (cs, i) = cs !! i
setCell :: Tape -> Char -> Tape
setCell (cs, i) c = (take i cs ++ (c : drop (i + 1) cs), i)
inc, dec, next, prev :: Tape -> Tape
inc t = setCell t (succ $ getCell t)
dec t = setCell t (pred $ getCell t)
next (cs, i) = (cs, i + 1)
prev (cs, i) = (cs, i - 1)
668デフォルトの名無しさん:2008/01/05(土) 18:23:18
type Status = (Program, Tape, [Char], [Char])
step :: (Tape -> Tape) -> Status -> Status
step f (c:cs, tape, inp, outp) = eval (cs, f tape, inp, outp)
eval :: Status -> Status
eval (Get : cmds, tape, (i:inp), outp) = eval (cmds, setCell tape i, inp, outp)
eval (Get : _, _, "", _) = error "EOF"
eval s @ (Put : _, tape, _, _) = (cmds, tape1, inp, getCell tape : outp)
where (cmds, tape1, inp, outp) = step id s
eval s @ (Inc : _, _, _, _) = step inc s
eval s @ (Dec : _, _, _, _) = step dec s
eval s @ (Next : _, _, _, _) = step next s
eval s @ (Prev : _, _, _, _) = step prev s
eval s @ (While cmds : cmds1, tape, inp, outp) = while (getCell tape)
where while '\NUL' = step id s
while _ = (cmds2, tape2, inp2, outp1 ++ outp2)
where (_ , tape1, inp1, outp1)
= eval (cmds, tape, inp, outp)
(cmds2, tape2, inp2, outp2)
= eval (While cmds : cmds1, tape1, inp1, outp1)
eval ([], t, i, _) = ([], t, i, "")
669デフォルトの名無しさん:2008/01/05(土) 18:24:49
run :: Program -> [Char] -> [Char]
run cmds inp = outp where (_,_,_, outp) = eval (cmds, tape0, inp, "")

main :: IO ()
main = do cs <- getContents
args <- getArgs
source <- readFile (head args)
putStr $ run (parse source) cs


-- brainf*ckなんてたったこれだけ。
670デフォルトの名無しさん:2008/01/05(土) 18:35:01
>>665
お前は日常会話もできなそうだな
671デフォルトの名無しさん:2008/01/05(土) 18:35:35
>>669
それをarrowでどうぞ
672デフォルトの名無しさん:2008/01/05(土) 18:45:58
>>638
状態を持たないステートレスオブジェクトはそのまま純粋関数型言語に取り込めますよね。
「純粋関数型」を標榜するHaskellは状態がないのではなくモナドに閉じ込めています。
ステートフルオブジェクトの状態も同様にモナドに閉じ込める事で「純粋関数型」を
維持したままオブジェクトを利用できると考えますが何か問題があるのでしょうか?
673デフォルトの名無しさん:2008/01/05(土) 18:56:27
>>672
>>664>>671でも書いたがarrowが使いにくいんだよ。brainf*ckみたいだろ。

brainf*ckを書き込んだ池沼にはわからねぇんだろうが
674デフォルトの名無しさん:2008/01/05(土) 18:59:06
>>672
うんうん。Monadiusとかそうだよね。
675デフォルトの名無しさん:2008/01/05(土) 19:14:19
>>670
で、「普通」の説明はマダァ?
676デフォルトの名無しさん:2008/01/05(土) 20:14:22
           , - ' ´ ̄ ``  、__
         __,ィ            ヽ. `ヽ.
      ,  '⌒Y  /     、ヽ    ヽ  ヽ.
     /    /  i   /l/|_ハ li  l i   li   ハ
.    // 〃 /l  i|j_,.//‐'/  lTト l、l   j N i |
   {イ  l  / l  li //___    リ_lノ lル' lハ. ソ  ___◎_r‐ロユ
    i| /レ/l l  l v'´ ̄  , ´ ̄`イ  !| ll,ハ └─‐┐ナ┐┌┘ _  ヘ____
    ハ| ll∧ハヽ ト、 '''' r==┐ '''' /l jハ| ll ll    /./┌┘└┬┘└┼────┘ロコ┌i
   〃  ‖ レ'¨´ヽiへ. _ 、__,ノ ,.イ/|/ ノ ll l|   </   ̄L.l ̄ ̄L.lL.!         ┌┘|
  ll    ll {   ⌒ヽ_/ } ー‐<.__  ′  l| ‖
  ‖    ‖ ヽ,   /、 〈   |:::::::| `ヽ      ‖
  ‖       {.  ハ ヽ Y`‐┴、::::v  l      ‖
  ‖      |iヽ{ ヽ_ゾノ‐一’::::ヽ. |      ‖
  ‖      |i:::::`¨´-- :::......:...:.:.::.}|     ‖
  ‖      |i::::::ヽ._:::_:::::::::::::::::::_ノ |     ‖
  ‖      |i::::::::::::i___:::::::::::/  |
           jj::::::::r┴-- `ー‐ '⌒ |
         〃:::::::マ二      _,ノ
       //::::::::::::i ー 一 '´ ̄::.
       ,','::::::::::::::i::::::::::::::::::::::i::::::ヽ
677デフォルトの名無しさん:2008/01/05(土) 20:14:38
>>675
それは658が一番詳しいから658に聞いてくれ
678デフォルトの名無しさん:2008/01/05(土) 20:25:09
さんざ荒らして説明拒否かよw
679デフォルトの名無しさん:2008/01/05(土) 20:28:47
えっ、だれが荒らし?
680デフォルトの名無しさん:2008/01/05(土) 20:34:27
池沼の「普通」なんて誰も興味ねえってよw
681デフォルトの名無しさん:2008/01/05(土) 20:37:07
>>679
少なくとも>>676はアラシだろw
682デフォルトの名無しさん:2008/01/05(土) 21:28:20
683デフォルトの名無しさん:2008/01/05(土) 22:10:09
>>665
普通?
社会通念だよ。
684デフォルトの名無しさん:2008/01/05(土) 22:10:54
論文じゃあるまいし。
揚げ足取りなんかやってるから単位も危なくなるんだぞ?
685デフォルトの名無しさん:2008/01/05(土) 22:25:42
>>683-684
せっかくぐぐって終息させてやろうとしてるのに馬鹿だねおまえはw
黙ってれば終わったのに。
晒しage
686デフォルトの名無しさん:2008/01/05(土) 22:27:36
これが関数型使って気取ってる池沼の実態ですwwwwww

ばか
687デフォルトの名無しさん:2008/01/05(土) 22:30:06
使えもしないのに関数型に憧れてんなYO!
Haskell使いキモスwwwwww
688デフォルトの名無しさん:2008/01/05(土) 22:34:13
スレタイ通りのオナスレageんな
689デフォルトの名無しさん:2008/01/05(土) 22:37:08
クソ言語が普通とか言ってんなよ。所詮、脳内オナニー。
690デフォルトの名無しさん:2008/01/05(土) 22:39:26
恥ずかしいスレ名をアゲんな、変体どもがぁ。
Haskellはプログラム板の恥だな。
691デフォルトの名無しさん:2008/01/05(土) 22:43:34
スレの削除依頼出せ.キモイんだよお前等
692デフォルトの名無しさん:2008/01/05(土) 22:46:01
まあ、重複スレなのでこちらを削除しても問題ありませんね。
693デフォルトの名無しさん:2008/01/05(土) 22:57:22
↑さんざん恥をかいたのでスレ削除して欲しい張本人がこう申しておりますw
694デフォルトの名無しさん:2008/01/05(土) 22:59:01
Haskell使ってる人って頭が良いイメージだったけどw
695デフォルトの名無しさん:2008/01/05(土) 23:01:32
なかなか笑わせてもらった
696デフォルトの名無しさん:2008/01/05(土) 23:18:12
「Haskell」=「Arrow」+「普通」
697デフォルトの名無しさん:2008/01/05(土) 23:20:35
普通ってwwww

「プログラム」=「データ構造」+「アルゴリズム」

ってWirth先生が言ってたぞ。
698デフォルトの名無しさん:2008/01/05(土) 23:21:56
>>697
先生のゆーとーり世代
699デフォルトの名無しさん:2008/01/05(土) 23:21:57
アローだってデータ構造だろうに。
700デフォルトの名無しさん:2008/01/05(土) 23:23:22
普通のアルゴリズムなんて定義できんだろ。
701デフォルトの名無しさん:2008/01/05(土) 23:24:32
普通のどこが気に入らないんだろう
702デフォルトの名無しさん:2008/01/05(土) 23:25:43
アローに付随したアルゴリズムに定石でもあるのか?そんな本見たことねーぞ。
むしろ教えろゴルァ!
703デフォルトの名無しさん:2008/01/05(土) 23:28:27
アローの定石と言えるかわからないけどバード先生の本には載ってる
704デフォルトの名無しさん:2008/01/05(土) 23:35:36
Rahbi & Lapalme にはモナドの説明が無いけど、

Introduction to Functional Programming Using Haskell
Richard Bird

こっちには載ってるのか。
705デフォルトの名無しさん:2008/01/05(土) 23:39:06
アロー程度がちょちょいと説明できないようじゃHaskell使いこなせてると言えないよね。
706デフォルトの名無しさん:2008/01/05(土) 23:40:25
アローって簡単?
707デフォルトの名無しさん:2008/01/05(土) 23:46:49
>>706
ふ・つ・う wwwww
お頭が弱いとアローがbrainf*ckみたいに見えるらしいけど、可換図式みたいで判りやすいよ。
ハッキリ言って簡単。基礎的な数学力があればだけど。圏論ぐらいは出来ないと無理かな。
708デフォルトの名無しさん:2008/01/05(土) 23:48:02
>>707
> ハッキリ言って簡単。基礎的な数学力があればだけど。圏論ぐらいは出来ないと無理かな。
どうやら、arrowでプログラミングしたこともないことがよくわかった。
709デフォルトの名無しさん:2008/01/05(土) 23:55:34
アマゾンみたらバードの本にはモナドとかアローについて書いてあるらしい。
でも翻訳はMirandaについてでモナドとか載ってなさげだねぇ。
710デフォルトの名無しさん:2008/01/06(日) 00:10:55
Arrowって、Kleisli 圏とか Premonoidal 圏みたいなもんか。たしかに図を描けばなんてことなさげ。
711デフォルトの名無しさん:2008/01/06(日) 00:16:47
>>708
はいはい。あーarrowはむずかしいいや。brainf*ckみたいにみえるなあw
712デフォルトの名無しさん:2008/01/06(日) 00:21:36
教訓

・ オブジェクト指向と関数型は共存出来ない。

・ 「Haskell」=「Arrow」+「普通」 (ただしArrowはbrainf*ckである)
713デフォルトの名無しさん:2008/01/06(日) 00:29:02
>>712
なにそれ?Haskell全否定じゃん。
714デフォルトの名無しさん:2008/01/06(日) 00:31:52
708は口調ですぐわかるな。アンチなら使わなきゃイイジャン。
715デフォルトの名無しさん:2008/01/06(日) 00:51:13
アローって意味的にはモナドなんかよかよっぽど理解できるだろ。
要するに計算の合成を定義すればいいだけ。
フリーダムすぎて使い方を迷うところはあるけど……圏論の知識とかいるか?
716デフォルトの名無しさん:2008/01/06(日) 00:59:29
>>715
いらない。
717デフォルトの名無しさん:2008/01/06(日) 01:00:54
arrowでプログラミングするのに数学も圏論の知識も微塵も必要ない。
718デフォルトの名無しさん:2008/01/06(日) 01:01:02
>>715
あれば簡単ってことなんじゃないの?おれ圏論知らないけどさw
719デフォルトの名無しさん:2008/01/06(日) 01:03:26
>>715
アローってモナドの一般化したやつじゃん。ほとんど同じだろ。
アローが関数を受け持って、モナドが値を受け持つ箱みたいなイメージ。
違ったっけ?
720デフォルトの名無しさん:2008/01/06(日) 01:07:59
>>717
それは極論だろ。SコンビネータとかBコンビネータとかYコンビネータを適用するとき副作用があるのか分からなくてドキドキする。
数学知ってたらこういうことがさらっと出来ていいんだろうなと思う。
721デフォルトの名無しさん:2008/01/06(日) 01:10:19
Haskellじゃなくてもいいようなプログラムなら数学の知識はいらないとは言えるw
722デフォルトの名無しさん:2008/01/06(日) 01:13:48
結局、Haskellを何に利用しているかでアローの難易度も違って見えるんだろうね。
723デフォルトの名無しさん:2008/01/06(日) 01:21:50
いらない・無意味・微塵も必要ない
724デフォルトの名無しさん:2008/01/06(日) 01:28:42
普通
725デフォルトの名無しさん:2008/01/06(日) 04:40:35
arrow関連で卒論書きたいんですが、受けはいいでしょうか?
726デフォルトの名無しさん:2008/01/06(日) 13:30:28
>>719
値を受け持つ箱と考えるより、monadic function(a->m b)の形式で計算を纏めていく戦略と考えたほうが
理解しやすいかもしれん。monadic valueそのものをモナドだと思ってしまうとよくわからんなるんじゃない?
727デフォルトの名無しさん:2008/01/06(日) 15:41:27
>>717
ならこのスレに来るな。ここはクマーが圏論を説明してくれた偉大なスレだ。
728デフォルトの名無しさん:2008/01/06(日) 15:44:29
>>720
数学の知識がなくてもSコンビネータとかBコンビネータとかYコンビネータが
何を意味しているのかだけ知っていればどきどきすることはありません。
729デフォルトの名無しさん:2008/01/06(日) 15:54:07
>>728
意味が良くわからない。AAで説明してくれ。たのむわ。
730デフォルトの名無しさん:2008/01/06(日) 16:07:19
           /-─-,,,_: : : : : : : : :\
          /     '''-,,,: : : : : : : :i
          /、      /: : : : : : : : i     ________
         r-、 ,,,,,,,,,,、 /: : : : : : : : : :i    /
         L_, ,   、 \: : : : : : : : :i   /  圏論持ち出したら
         /●) (●>   |: :__,=-、: / <   負けかなと思ってる
        l イ  '-     |:/ tbノノ    \  ニート(24・男性) 
        l ,`-=-'\     `l ι';/      \ 
        ヽトェ-ェェ-:)     -r'          ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
         ヾ=-'     /
731デフォルトの名無しさん:2008/01/06(日) 16:26:09
>>730
博士課程のニーとですがなにか
732デフォルトの名無しさん:2008/01/06(日) 16:39:00
数学の知識無しでアローをAAで説明出来んじゃなかったの?
しったかかw クマーktkr
733デフォルトの名無しさん:2008/01/06(日) 17:23:29
スレの流れに
水を差すようで申し訳ないんだが
ちょっと質問
>>720
にある「(対称)前モノイダル圏」って
よく意味が解らない
対称モノイダル圏の条件を弱めたものらしけど
対称モノイダル圏だとなにか不味い事でもあるのですか
734733:2008/01/06(日) 17:25:08
>>720
でなく
>>710だた
735デフォルトの名無しさん:2008/01/06(日) 17:38:01
アローなんて簡単だろ
ほれ、これがアローだ
736デフォルトの名無しさん:2008/01/06(日) 17:51:02
これの事でしょうか?ハァハァ

        /⌒ヽ⌒ヽ
               Y
            八  ヽ
     (   __//. ヽ,, ,)
      丶1    八.  !/
       ζ,    八.  j
        i    丿 、 j
        |     八   |
        | !    i 、 |
       | i し " i   '|
      |ノ (   i    i|
      ( '~ヽ   !  ‖
        │     i   ‖
      |      !   ||
      |    │    |
      |       |    | |
     |       |   | |
     |        !    | |
    |           | ‖
   /          ヾ
737デフォルトの名無しさん:2008/01/06(日) 17:53:24
AA職人がいなくなってつまんなくなったね。
738デフォルトの名無しさん:2008/01/06(日) 17:54:47
AA職人というか、コピペで説明してただけだろ?
739デフォルトの名無しさん:2008/01/06(日) 17:57:34
その「説明してただけ」すら出来ないコピペ厨w
740デフォルトの名無しさん:2008/01/06(日) 17:58:38
たしかに1年でレベルが落ちたのは否定できんなw
741デフォルトの名無しさん:2008/01/06(日) 17:59:42
単にスレが捨てられただけでは?
742デフォルトの名無しさん:2008/01/06(日) 18:00:42
いまどきarrowなんてみんな知ってて、いまさら説明の余地もない。
新しいネタ探して来い
743デフォルトの名無しさん:2008/01/06(日) 18:14:58
>>742
こら!みんなが矢印とかちんぽを無視したからって怒るでないw
744デフォルトの名無しさん:2008/01/06(日) 18:17:28
クマーってもう一年前の話か。上のほう見たら2つもあるね。
745デフォルトの名無しさん:2008/01/06(日) 18:19:22
>>742
↑とアローの説明が出来ないクズが取り乱しております
746デフォルトの名無しさん:2008/01/06(日) 21:27:48
>>728
コンビネータ理論を知っていれば十分で数学の知識を前提としないって?おいおい。
支離滅裂だぞ。
747デフォルトの名無しさん:2008/01/06(日) 21:44:24
>>746
数学の基礎的な知識はそれほど必要ないだろ。
「それだけ」知ってればいいんだから。
748デフォルトの名無しさん:2008/01/06(日) 21:55:31
>>747
基礎の意味が違うでしょ。コンビネータ理論は数学基礎論であって、数学の基礎知識じゃない。
しかも副作用についての知識は、いくつかのコンビネータを知ってるではすまない。
他にも山のようにある関数について、一つ一つ個別に知ってるよりも理屈を知ったほうが当然良い。
749デフォルトの名無しさん:2008/01/06(日) 23:51:52
λλλλλ...

↑アロー・モナド・コンビネータ理論について行けず、肩を落として帰るプログラマの群れ
750デフォルトの名無しさん:2008/01/07(月) 00:08:05
正直arrowとかどうでもいい
それよりhere documentを入れてくれ
751デフォルトの名無しさん:2008/01/07(月) 00:29:30
752デフォルトの名無しさん:2008/01/07(月) 20:07:34
>>733
くわしくはこのページが参考になる。
ttp://d.hatena.ne.jp/m-hiyama-memo/searchdiary?word=*%5B%A5%E2%A5%CA%A5%C9%5D

John Power & Edmund Robinsonによれば:

* TのKleisli圏C_Tがプレモノイド圏となる ⇔ Tは強度を持つ
* TのKleisli圏C_Tがモノイド圏となる ⇔ Tは可換強度を持つ

これはKleisli圏のプレモノイド構造と強度が1対1に対応しているということで、モノイド圏では都合が良くない。つまり、

プレモノイド圏となる⇒・・・⇒モナドの作用乗法

というのがwell-definedになるということを狙ってる。たしかにモナドって数学的な基礎知識無しでも使えると確信しましたか?
753デフォルトの名無しさん:2008/01/07(月) 20:44:58
当然だけど、アローについても同様の議論が展開できる訳です。まあ、アローなんかどうでも良いんでしたね。
754デフォルトの名無しさん:2008/01/07(月) 22:52:18
モノイド圏とモノイダル圏て何が違うの?
755デフォルトの名無しさん:2008/01/07(月) 23:07:53
>>752
乙。>>710あたりが言ってた図を書くって「ペースティング図、スタック図(Santiago graphical notation)、ストリング図で描く・・・」てことか。
おれも>>735みたいなのをアローと思ってたw
756デフォルトの名無しさん:2008/01/07(月) 23:13:13
>>754
Monoidal Category = モノイド圏
>>733しかモノイダル圏という日本語は使っていないと思う。普通、モノイド圏と呼ぶ。
757デフォルトの名無しさん:2008/01/07(月) 23:44:59
>756 thx

ところで、圏でのモナドは分かるんですが、
プログラム言語のモナドって何なんですか?
758デフォルトの名無しさん:2008/01/08(火) 00:30:05
検索しましたら次の資料が見つかり自己解決しました。
http://www.ipsj.or.jp/07editj/promenade/4703.pdf
759デフォルトの名無しさん:2008/01/08(火) 00:33:47
>>757
ほい
ttp://www.sampou.org/haskell/tutorial-j/monads.html

HaskellのモナドはMonadという型クラスのインスタンスれす。
Monadクラスは2つのクラスメソッドを持っていて、その2つがモナド則(3ホーソクありゅ)を満たしてマース。
よく使うモナドはIO, Maybe, Listあたりでしょう。どれも「演算」を繋ぐという感じに使いマース。

この3行を見たらリンク先にJUMP!

2つのクラスメソッドは、最初のうちは『>>=』が『|』(パイプ)に対応、『return』が『cat』に対応すると覚えておけば良いかもネ!
(Jonesはわざとパイプっぽくしたらしいネ)
モナドの構文は3つ。doとletとifだけ。

演算をモナド的に定義して繋ぐと、新しい特徴を参照透過的にモナドに結びつけることが出来ちゃう。
しかもモナド則3が保証するように「組み立て順序が自由」で、長くつながったモナドの鎖のどこを切ってもモナドになるョ。
これがモナドがもたらすモジュール化という効能だよーん。
760デフォルトの名無しさん:2008/01/08(火) 01:11:34
>759 おおDankeです
プログラムにはなかなか深い数学が隠れているんですね。
いまふと思ったんですが、物理に出てくる量子化という
概念も、もしかするとモナドに関係あるかも知れません。
モジュラリティが何を意味するのかよく考えてみます。



761デフォルトの名無しさん:2008/01/08(火) 21:02:22
ここの説明もなかなかおもしろいよ。
http://blogs.dion.ne.jp/keis/
762デフォルトの名無しさん:2008/01/08(火) 21:15:53
>>761
宣伝乙
763デフォルトの名無しさん:2008/01/08(火) 21:40:15
>>759
doとletは分かるけど、ifってモナドと関係あったっけ?
764デフォルトの名無しさん:2008/01/08(火) 23:36:51
>>761
説明が間違ってるところ大杉。
自分でモナドを作る時、どうするつもりかと思った。
765デフォルトの名無しさん:2008/01/08(火) 23:45:48
>>763
do と if を一緒に使う話じゃないかな。有名な「一行で書け」ってやつ。
766デフォルトの名無しさん:2008/01/09(水) 00:55:16
>>761
パクったはいいが、意味を理解してなかった、ってところか。
767デフォルトの名無しさん:2008/01/09(水) 09:22:24
>>761ってそんなに間違いが多いのか〜
どこからパクったのか分かりますか?
768デフォルトの名無しさん:2008/01/13(日) 07:49:24
この年末年始のプログラマの休暇に
ここのスレが結構盛り上がっていたな
769デフォルトの名無しさん:2008/01/13(日) 08:07:15
プログラマは休暇にHaskellの勉強か
みんな偉いな
770デフォルトの名無しさん:2008/01/13(日) 10:35:26
どのへんがまちがってるの?
771デフォルトの名無しさん:2008/01/13(日) 17:53:03
勘違いしてるだけなんじゃない?
772デフォルトの名無しさん:2008/01/18(金) 04:18:25
なんだかんだ言って、本当はぜんぜん分かってない奴がほとんどだろw
773デフォルトの名無しさん:2008/01/18(金) 09:45:24
まぁ仲間は多いと思っておきたいところだよな。
774デフォルトの名無しさん:2008/01/18(金) 15:35:54
>>761の間違いを早く指摘して欲しいもんだなw
775デフォルトの名無しさん:2008/01/18(金) 15:37:06
>>774
そういってPV稼ぐ魂胆だろ
自演乙
776デフォルトの名無しさん:2008/01/19(土) 15:18:10
こんなとこで宣伝したところで何PV増えるというのか
777デフォルトの名無しさん:2008/01/19(土) 18:53:04
>>775
そうやって自分が理解できてないのを誤魔化そうって魂胆だろ。
まずは>>761の間違いを指摘してみろよ。話はそれからだなw
778デフォルトの名無しさん:2008/01/19(土) 21:02:10
ひとり暴れているのがいるみたいだね。誰も話したくないからって理解できないんだろうか。
779デフォルトの名無しさん:2008/01/20(日) 13:31:52
いったいどこからパクったのか教えてくれよ。
780デフォルトの名無しさん:2008/01/20(日) 13:54:12
>>779
どうでもいい
781デフォルトの名無しさん:2008/01/20(日) 18:21:29
どうでもよくないな。それによって>>761が間違いかどうか判断できるだろ。
782デフォルトの名無しさん:2008/01/23(水) 20:01:14
その判断がどうでもいいと言っているんだよ
783デフォルトの名無しさん:2008/01/23(水) 20:35:14
1/8を最後にパッタリ流れが止まったのはなぜかな?
784デフォルトの名無しさん:2008/01/23(水) 20:41:46
ヒント 自演
785デフォルトの名無しさん:2008/01/24(木) 04:24:11
結局Haskellって遅いの?
786デフォルトの名無しさん:2008/01/24(木) 22:55:28
>>785
perlよかハエーよ  スクリプトに使うなら無問題
組込系にはちょっと  シビアなタイミングが求められるとダメポ
787デフォルトの名無しさん:2008/02/16(土) 05:51:47
>>786
>組込系にはちょっと  シビアなタイミングが求められるとダメポ
組み込みはどんな感じのアセンブリコードが生成されるのか予測しやすいほうがいいと思うんだが、
Haskell使いが慣れてくるとどういうasm吐くか割と簡単に把握できるようになるの?
788デフォルトの名無しさん:2008/02/16(土) 12:33:33
>>786
Perlよかはやいとか到底考えられないのだけど、その根拠は?
789デフォルトの名無しさん:2008/02/16(土) 13:35:05
790デフォルトの名無しさん:2008/02/16(土) 13:53:31
動的型でバイトコンパイルのPerlと、静的型でネイティブコンパイルのHaskellを比較して
Perlの方が速いと思うなら、そっちこそ説明が要るだろw
791デフォルトの名無しさん:2008/02/16(土) 14:00:36
え〜Haskellって、ネイティブコンパイルしてるのか。それすら知らなかったわw
インタプリタだとばかり思ってた。
792デフォルトの名無しさん:2008/02/16(土) 14:10:08
両方可能だがね
793デフォルトの名無しさん:2008/02/16(土) 14:34:52
インタプリタあるんだ、知らんかった
コンパイルしなくてもCGIとして使えるのかな 調べてみるか
794デフォルトの名無しさん:2008/02/16(土) 14:39:19
あるかどうかは知らんが、可能ではあるだろう
795デフォルトの名無しさん:2008/02/16(土) 14:44:38
runghcとかrunhugsとかあるけど、インタプリタをサーバに導入するほうが返って面倒な気もする
796デフォルトの名無しさん:2008/02/16(土) 17:15:57
>>793
可能だよ
797デフォルトの名無しさん:2008/02/16(土) 23:00:27
Haskellまだかじった程度だけど、参照透明性がなにかハッピーにしてくれるの?
やろうと思えば、既存の言語でも出来るわけで。言語的に制約がかかっているか
どうかでしょ。「言語的に制約がかかる」というのは、入門者にとってしかメリット
はないよ。

遅延評価も*ほぼ*使わない。無限計算なんてやらんよ?

こんなんで、なんで既存言語から乗り換えるの?俺が、まだHaskellよくわかっていない
だけ?
798デフォルトの名無しさん:2008/02/16(土) 23:01:19
あげ
799デフォルトの名無しさん:2008/02/16(土) 23:07:18
俺も初心者だけど、参照透明性の重用性がよくわからない。

つか、結局はunsafeなんとかで参照透明性をくずしてんでしょ?
800デフォルトの名無しさん:2008/02/16(土) 23:08:04
ちなみにクソリストなんて採用するのはやめてくれ
801デフォルトの名無しさん:2008/02/16(土) 23:08:40
>>797
C++ が参照透明な言語だって知ってた?
802デフォルトの名無しさん:2008/02/16(土) 23:10:00
>>801
信じられない。あふぉかw

俺が、無知なら教えてくださいw
803デフォルトの名無しさん:2008/02/16(土) 23:10:31
>>797
お前、今日のRuby勉強会に行ったやつだろ?

なぜ関数プログラミングは重要か
http://www.sampou.org/haskell/article/whyfp.html
804デフォルトの名無しさん:2008/02/16(土) 23:11:05
参照透明性って、再代入できないってことだよな(間違ったら訂正してくれ)
C++は再代入できる、とおれは思ってるがw
805デフォルトの名無しさん:2008/02/16(土) 23:12:01
>>803
Rubyはすきだが、そいつじゃない。というか、今日一日ひきこもってたしなw
806デフォルトの名無しさん:2008/02/16(土) 23:12:04
>>799
unsafeを使うときは注意が必要である
いつ実行されてもプログラムに矛盾が発生しないことがはっきりしない限り使うべきではない
807デフォルトの名無しさん:2008/02/16(土) 23:12:29
式と値が一対一に対応していること
808デフォルトの名無しさん:2008/02/16(土) 23:16:09
Haskellのメリットを説きたいなら>>803のリンク教えるだけで十分じゃねーの?
809デフォルトの名無しさん:2008/02/16(土) 23:16:48
>>802,804
まずはこれを読んでみてくれ。
http://d.hatena.ne.jp/w_o/20061008#p1

これが面白いのは、参照透明は程度問題に過ぎないという
視点を得られる所なんだと思っている。
810デフォルトの名無しさん:2008/02/16(土) 23:18:09
参照透明性なんて飾りだよ
Haskellの魅力は、副作用が禁じられていることじゃなくて、
副作用なんていう扱いにくいものに頼らなくても自然にプログラムを書けることだ

遅延評価は大いに使う
「ほぼ使わない」なんて思えるのはHaskellに慣れてないだけだ
例えば、C言語の典型的なfor文の使い方
for(T i = init; cont(i); i = next(i)) use(i);
を、Haskellで自然に書き直すと
mapM_ use $ takeWhile cont $ iterate next init
になるけど、これは無限リストを使っている
811デフォルトの名無しさん:2008/02/16(土) 23:19:34
>>809
あなたはネタを理解できない人なんですね
812デフォルトの名無しさん:2008/02/16(土) 23:23:05
遅延評価便利だよ。
MLが不便に思えるぐらいだ。
813デフォルトの名無しさん:2008/02/16(土) 23:23:13
>>811
ドッキリとかを真に受けるタイプの人でしょ?
>>809 がネタなんだけどね
814デフォルトの名無しさん:2008/02/16(土) 23:26:29
>>799
unsafeなんとかは、本当は参照透明なのに、コンパイラが参照透明だと見なしてくれない式を書くときに使う
そうじゃない使い方もできるけど、それは邪悪な使い方だ
815デフォルトの名無しさん:2008/02/16(土) 23:28:06
ffi使えばunsafe使わなくてもいくらでも邪悪なプログラムが書けるぜ。
816デフォルトの名無しさん:2008/02/16(土) 23:28:41
HaskellのFFIはめちゃくちゃ楽だからな。
組み込みプログラムもなんのその。
817799:2008/02/16(土) 23:41:48
>>803 >>808

803のリンクは、
「参照透明は関数型言語の魅力としては不適当」と言っているのでは?
818デフォルトの名無しさん:2008/02/16(土) 23:47:33
>>816
オーバーヘッドもあるしメモリも食いまくるから組み込みには全く向かないだろ
819デフォルトの名無しさん:2008/02/16(土) 23:54:08
>>818
関係ない。
組み込み=低リソースという時代は終わったんだよ。
それよりも、たとえばロケットや自動車のような用途では安全性が求められる。
820デフォルトの名無しさん:2008/02/16(土) 23:57:18
>>817
参照透明でなければ遅延評価は役に立たないよ
821デフォルトの名無しさん:2008/02/17(日) 00:00:21
D 言語に遅延評価もどきはあるけどな。
822デフォルトの名無しさん:2008/02/17(日) 00:02:57
遅延評価はテクニックに近いものもあるしな
823799:2008/02/17(日) 00:06:23
>>820
なるほど…。

でも、遅延評価も必ず使うわけではないし、
(IOの時など遅延評価されては困る場合もあるわけですよね?)

なんというか、参照透明そのものの優位性がわからない…。

・コンパイラが作りやすい?
・数学的にみて美しい?

…、いずれも一般ユーザには関係ないですよね…。
824デフォルトの名無しさん:2008/02/17(日) 00:07:34
参照透明性ってデバッグの容易さの点で重要と聞いてるけど。
825799:2008/02/17(日) 00:08:33
>>814
う〜ん…。これは正しいのでしょうか?

あくまでも、Haskellは参照透明であって、
そうでないプログラムは邪悪という事ですよね。
826デフォルトの名無しさん:2008/02/17(日) 00:11:43
>>823
参照透明だったら関数の返値をキャッシュできるよ
827799:2008/02/17(日) 00:14:55
>>826
コンパイラの話ですよね…。
828799:2008/02/17(日) 00:16:41
>>824
Haskellのデバッグってむしろ大変そうですけど…。
829デフォルトの名無しさん:2008/02/17(日) 00:18:15
>>827
完全にキャッシュできればプログラマはわざわざメモ化とかのテクニックを使ってプログラミングする必要がなくなる。
・・・とは言うものの、GHCでは完全にキャッシュしているわけではない。
830デフォルトの名無しさん:2008/02/17(日) 00:19:45
>>828
Cのデバッグで一番骨が折れるのが型によるバグ。
Haskellはコンパイルさえ通れば型に関しては完全に矛盾がない。
831デフォルトの名無しさん:2008/02/17(日) 00:20:48
>>823
だから、参照透明性はそんなに重大な特徴じゃないんだって
(利点が無いわけじゃない。コンパイラによる最適化がやりやすい。コードが読みやすい。リファクタリングしやすいetc)
逆に、「参照透明でないこと」(破壊的代入や副作用を認める)にも大して優位性は無いんだ

Haskellにはもっと重要な特徴がたくさんある
動作オブジェクトを利用した入出力とか、代数的データ型+パターン照合とか、型クラスとか、遅延評価とか
832797:2008/02/17(日) 00:25:59
>>830
Haskell の型はステキだと思いますよw

でも、traceとか「デバッグ」は大変そう…。
833デフォルトの名無しさん:2008/02/17(日) 00:29:07
>>831
>参照透明性はそんなに重大な特徴じゃない

そうですよね…。
でも、なんか、かたくなに参照透明性を守ろうとして
余計わかり難くなってる気がするんですよね。

全面的な参照透明性を捨てた方が、
すっきりするのではないでしょうか…?
834799:2008/02/17(日) 00:29:52
>>833 は 799です
835デフォルトの名無しさん:2008/02/17(日) 00:30:17
第15回 Haskellでのデバッグのコツをつかむ
http://itpro.nikkeibp.co.jp/article/COLUMN/20071204/288630/
836デフォルトの名無しさん:2008/02/17(日) 00:30:34
traceってどういうのを指してるか分からんけど、printfデバッグの類は普通にできる

ただ、HaskellがCよりデバッグしにくいのは事実だと思う
gdbに匹敵する使いやすさのデバッガがまだ無いからだが

>>833
>でも、なんか、かたくなに参照透明性を守ろうとして
>余計わかり難くなってる気がするんですよね。
どの辺でそう感じた?
837799:2008/02/17(日) 00:31:00
ああっ!
>>832 も799です。
838799:2008/02/17(日) 00:35:00
>>836
> printfデバッグの類は普通にできる

そうなんですか?
なんかprintfいれるとバグが再現しないとか多そうですが…。


> どの辺でそう感じた?

IOモナドww
参照透明性を捨てれば
もっとステキな実装がありそうじゃないですか?
839デフォルトの名無しさん:2008/02/17(日) 00:38:46
参照透明性を確保するために導入したんだから
本末転倒だじょ
840デフォルトの名無しさん:2008/02/17(日) 00:41:05
俺はIOモナド大好きなのでその気持ちは良く分からん
例え参照透明性を捨ててもIOモナドは使いたい
841799:2008/02/17(日) 00:41:50
>>839
ん?
いや、だから、参照透明性に固執するから、
IOモナドなんて理解しにくい方法で実装してるんでしょ?
842デフォルトの名無しさん:2008/02/17(日) 00:43:33
参照透明性を実現する完全に純粋な関数型言語を作るのが
Haskell の1つの目標だったんじゃないのか?
843デフォルトの名無しさん:2008/02/17(日) 00:50:41
IOモナド、というかIO動作の考え方は多少とっつきにくいけど、分かってしまえば簡単なことだし、
副作用を使った入出力よりずっとまともだと思う
それから、遅延評価の言語で素朴に副作用を使うと実行順が制御困難になるけど、
IO動作ならこの問題がない

>>842
だろうな
でも言語のユーザーにとってはそんな目標はどうでも良い
844デフォルトの名無しさん:2008/02/17(日) 00:51:38
参照透明性が要らないというなら OCaml とか他の言語使えばいい。
それだけだと思うぜ。
845デフォルトの名無しさん:2008/02/17(日) 01:00:20
>>844
その議論はおかしい
Haskellの特徴は参照透明性だけじゃない
デフォルトの遅延評価も型クラスもIOモナドも$演算子もOCamlには無い
参照透明性なんてどうでも良いという奴にでも、Haskellを使う理由はいくらでもある
846デフォルトの名無しさん:2008/02/17(日) 01:09:14
じゃあ、参照透明性の無いHaskell に相当する言語を作ったらいいんじゃね。
847799:2008/02/17(日) 01:12:57
>>840
そうなんですか…。
結局、慣れの問題なんでしょうかねぇ…。
848デフォルトの名無しさん:2008/02/17(日) 01:15:01
Haskell では参照透明性をくずすものは trace のみなんだっけ?
849799:2008/02/17(日) 01:15:23
>>846
まさに、そう、思うんですよw

そんな言語があれば、
確実にブレイクするのではないでしょうか?

誰か作って!私はもちろん……ムリ!
850デフォルトの名無しさん:2008/02/17(日) 01:26:25
>>848
unsafePerformIOってのがある

>>849
単に参照透明性のないHaskellならunsafePerformIOを言語の一部として認めれば良いんだけど、
IOモナドを排除するのは難しいと思う
>>843で書いたけど、普通の言語にあるような副作用による入出力は、遅延評価と相性が悪い
実行順を分かり易く制御するには、結局、IOモナドか、Cleanの一意型か、
それに代わる何か新しいメカニズムが必要になる
851799:2008/02/17(日) 01:39:54
>>850

な〜るほど!
ひょっとしてunsafePerformIOを使いまくって
>>814 の言う邪悪なIOライブラリを作れば、
Haskellのままでもいいかもしれませんねw


852デフォルトの名無しさん:2008/02/17(日) 01:41:59
もう屁みたいな例をたくさんあげられるのはウンザリだよ。

こうしよう、C(ほかの言語でもいい)からHaskellに乗り換えるために十分な
説得力を持つ実務的な例を1つだけあげてくれ。
853デフォルトの名無しさん:2008/02/17(日) 01:55:30
darcs
854799:2008/02/17(日) 01:55:42
>>852
「実務的」というかどうかはしらないけど、
コンパイラ的な処理には向いてるらしい…。


再帰下降構文解析
ttp://ja.wikipedia.org/wiki/%E5%86%8D%E5%B8%B0%E4%B8%8B%E9%99%8D%E6%A7%8B%E6%96%87%E8%A7%A3%E6%9E%90
HaskellやMLなどの関数型言語での再帰下降構文解析の実装は特に簡単である。

出典: フリー百科事典『ウィキペディア(Wikipedia)』
855デフォルトの名無しさん:2008/02/17(日) 02:00:39
> HaskellやMLなどの関数型言語での再帰下降構文解析の実装は特に簡単である。
っていうのはウソっていうのはどっかでみたなw
856デフォルトの名無しさん:2008/02/17(日) 02:06:37
>>854
実際、言語処理系には向いてる。
構文解析だけじゃなく、コンパイル過程での構文木の操作とかに
代数的データ型とパターンマッチがぴったりハマってかなり綺麗に書ける
(MLも同様。代数的データ型じゃなくてバリアントという名前だけど)。

言語処理系は、基本的にツリーの変形みたいな
I/Oを伴わない数学的な処理が多いから、という理由づけもできるかな。
857799:2008/02/17(日) 02:08:10
Haskellというか、関数型言語の魅力としては、
>>803 のリンク先を読めばかなり納得できると思う。
858デフォルトの名無しさん:2008/02/17(日) 02:16:57
>>848
いいえ
859デフォルトの名無しさん:2008/02/17(日) 02:23:46
Haskellの言語仕様にunsafeとかFFIとかってあったっけ?
GHCの仕様じゃないの
860デフォルトの名無しさん:2008/02/17(日) 02:27:47
>>859
FFIはHaskell 98への追補
http://www.cse.unsw.edu.au/~chak/haskell/ffi/
unsafePerformIOも入ってる
861デフォルトの名無しさん:2008/02/17(日) 02:29:45
じゃあ、Haskellは純潔を失ったというわけだ
862デフォルトの名無しさん:2008/02/17(日) 08:36:34
ハードリアルタイムアプリはHaskellでは無理
863デフォルトの名無しさん:2008/02/17(日) 09:30:28
実時間要求とメモリを直接利用するアプリケーション以外はHaskellでおk
864デフォルトの名無しさん:2008/02/17(日) 11:58:51
865デフォルトの名無しさん:2008/02/17(日) 12:01:27
仮想メモリとかOS必須じゃn
866デフォルトの名無しさん:2008/02/17(日) 18:47:44
Haskell (International Computer Science Series) (ペーパーバック)
Simon Thompson (著)
# ペーパーバック: 528ページ
# 出版社: Addison Wesley; 3Rev Ed版 (2008/9/15)
# 言語 英語, 英語, 英語
# ISBN-10: 0201882957
# ISBN-13: 978-0201882957
# 発売日: 2008/9/15

今度こそ発売?
867デフォルトの名無しさん:2008/02/18(月) 18:08:34
参照透明性を保証しないと、グラフ簡約が使えなくね?
868デフォルトの名無しさん:2008/02/18(月) 18:18:32
使えなくはないと思うが、何で?
869デフォルトの名無しさん:2008/02/18(月) 20:15:31
>>642
データ構造とアルゴリズムをまとめるだけなら、それこそ関数型言語の得意分野だし、
手続き型の世界でも、メッセージメタファって何それ、なgeneric programmingが幅を利かせている。
その分なおさら、状態と手続きをまとめるSmalltalk的なオブジェクト指向が
影響力を増しているように思う。
>>654のAlan Kayの言葉は、実行順序への依存性が下がること
(これはメッセージメタファ、イベント駆動から自然に出てくる)と、
参照透明という意味で状態を全く持たないことを(故意に?)混同している。
870デフォルトの名無しさん:2008/02/19(火) 02:47:18
ハードウェアリアルタイム処理って言葉にすれば
Haskellはかなりいけそうな感触なんだけどなぁ
871デフォルトの名無しさん:2008/02/19(火) 10:02:24
>>868
形式的な表現が同じでも、値が同じことの保証がなくなるから。
872デフォルトの名無しさん:2008/02/19(火) 10:36:55
>>871
副作用を入れるなら当然それは覚悟の上じゃないのか
873デフォルトの名無しさん:2008/02/19(火) 12:45:42
>>872
副作用を入れてもいいのは、値がユニット型の関数だけにしないと破綻するだろ。
874デフォルトの名無しさん:2008/03/09(日) 07:06:26
↓この暗号が解けたら初心者卒業と言えるでしょうか?
main = getArgs >>= putStr . flip id "\n" . foldr (.) id . map (showHex . read)

ttp://haskell.g.hatena.ne.jp/nobsun/20060819/ShowS を少し改変
875デフォルトの名無しさん:2008/03/09(日) 10:02:11
>>874
暗号に見えていたのが、何の変哲もないプログラムとして認識できるようになったら卒業だな。
876874:2008/03/09(日) 19:04:29
>>875
そうですか…
1日がかりで解けたので初心者卒業かと思ったのですが…orz

何の変哲もないプログラムに見えるように精進しますw
877デフォルトの名無しさん:2008/03/09(日) 23:43:38
何の変哲もないように見える必要はないと思うが解くのに1日がかりはまだ初級者の域か。
878デフォルトの名無しさん:2008/03/13(木) 21:20:39
悩むところが見当たらん

おれはもうだめだ
879デフォルトの名無しさん:2008/03/13(木) 21:26:04
flip id "\n"が悩むところじゃないか?
なぜ($"\n")と書かないんだろう
880デフォルトの名無しさん:2008/03/14(金) 13:47:26
Prelude> ($ "789") $ ($ (($ "456") $ ($ "123") $ (++))) $ (++)
"123456789"

スタックマシンみたいだ(w
881デフォルトの名無しさん:2008/03/18(火) 18:48:31
便利だなこれ
\a -> hoge a 4 ()
flip (flip hoge 4) ()
($ ()) . ($ 4) . hoge
882デフォルトの名無しさん:2008/03/19(水) 16:27:19
>>881
ああ、そうやってカリー化できるんだ。目から鱗が落ちたよ。
883デフォルトの名無しさん:2008/04/12(土) 21:48:42
引く手あまたのプログラミング言語は?
http://slashdot.jp/developers/article.pl?sid=08/04/06/2313251
---
Java(16479件)、C++(8080件)、C#(7780件)、JavaScript(6749件)、
Perl(5710件)、PHP(2641件)、Python(1408件)、COBOL(1207件)、
Ruby(769件)、Lisp(33件)といった感じらしい。

とりあえずJavaとC/C++/C#、あとJavaScriptを覚えれば、
当分仕事には困らないようである。COBOLのしぶとさも目立つ。

ちなみにHaskellやOCamlの求人は10以下だったそうだ。
---
884デフォルトの名無しさん:2008/04/19(土) 00:45:19
仕事でプログラムやってるやつなんて
この板にいるの?
885デフォルトの名無しさん:2008/04/19(土) 01:39:26
ええっ?ほとんどプログラム関連の人じゃないの?
886デフォルトの名無しさん:2008/04/19(土) 01:41:22
プログラム関連の研究を仕事でやってる人はいるかもしれないが
887デフォルトの名無しさん:2008/04/24(木) 00:13:42
この「板」にはいくらでもいるだろう>仕事でプログラムやってるやつ
このスレに限れば、仕事と直で結びつきにくい言語かもしらんけど

でも仕事でプログラムやる傍ら、趣味や素養のためにHaskell弄ってる奴も珍しくはないんじゃなかろうか
888デフォルトの名無しさん:2008/05/03(土) 18:08:15
俺は研究職だが仕事でHaskell使ってる。
889デフォルトの名無しさん:2008/05/25(日) 22:21:03
はじめましてAranskファンクラブです。
皆さんはAranskをご存知でしょうか?
最近ネット社会において急速に発言力を増しつつある
集団です。
本家:http://homepage3.nifty.com/Aransk/
ミラーサイト:http://www.geocities.jp/aransk88/
日本語Blog:http://aransk.cocolog-nifty.com/whypro/
英語もどきBlog:http://d.hatena.ne.jp/Aransk/ここまでがAransk Officialsです。
(上記以外にも2ちゃんねるのプログラム板にAransk専用スレが
立っていますが、これはAranskとは何のつながりもありません。)
上記の2ちゃんねる、yahoo掲示板に精力的に意見を
書き込むと同時に自らのサイトの更新も頻繁に
行っています。
驚いたことに、あらゆる場所で人気が「ありません。」
その人気の無さをこのBlogで究明してみるつもりです。
ご興味ある方は是非ご参加下さい。
890デフォルトの名無しさん:2008/05/25(日) 22:30:18
\yってyを含まないって意味だっけ?
891デフォルトの名無しさん:2008/05/25(日) 23:10:13
Haskellの\はlambda
\y -> e で、yからeへの関数
892デフォルトの名無しさん:2008/06/05(木) 18:49:53
逆ポーランド記法で日本人に優しいとか言ってみるRPHaskellとか作って
893デフォルトの名無しさん:2008/07/21(月) 10:56:30
「初心者のためのプログラミング言語ガイド」スレに
Haskellを狂信的に勧めるやつが現れてスレがめちゃくちゃに。
894デフォルトの名無しさん:2008/07/21(月) 19:56:00
>>893
信者と信者っぽく振る舞ってネタにしてる奴と2種類いるようだな。
895デフォルトの名無しさん:2008/09/12(金) 21:26:02
Haskellの入門書は、ふつうのHaskellプログラミングでおk?
896デフォルトの名無しさん:2008/09/12(金) 21:30:22
>>895
WEBが一番

ここが一番わかりやすいぞ
http://www.sampou.org/cgi-bin/haskell.cgi
897デフォルトの名無しさん:2008/09/12(金) 23:45:22
>>896
マジか。本買おうかずっと迷ってたんだ。サンクス。これでやってみるよ。
LL Futureで見たんだけどHaskellって並列プログラミングの強さはどんなもんでしょう?

ttp://www.nicovideo.jp/watch/sm4505381
89836 ◆K0BqlCB3.k :2008/09/13(土) 00:50:59
899デフォルトの名無しさん:2008/09/13(土) 02:18:36
Erlangにすればいいんでない?
900デフォルトの名無しさん:2008/09/17(水) 01:21:22
>>897
本の方がわかりやすいと思うがWebの方を読んで理解できるレベルなら
それでいいと思う。お金かかんないし。
901デフォルトの名無しさん:2008/12/28(日) 21:41:49
ふつうのHaskellは馬鹿でも判るって意味では良書かな
その程度に敷居も得られる知識も低い
902デフォルトの名無しさん:2008/12/29(月) 09:26:47
道具として使うには十分
論文書きたいなら書籍より論文読めよ
903デフォルトの名無しさん:2008/12/29(月) 20:15:13
ふつけるよりも入門Haskellのほうが目から鱗的な部分があって楽しいと思う
904デフォルトの名無しさん:2008/12/30(火) 16:55:18
birdのhaskell本が入門書としては最強らしいよ
905デフォルトの名無しさん:2008/12/31(水) 16:52:16
Haskell界隈にも>>901みたいな厨が流入してくるとは隔世の感。
906デフォルトの名無しさん:2008/12/31(水) 17:14:30
>>905
このスレには昔からいただろww( ^ω^)
907デフォルトの名無しさん:2009/01/13(火) 19:07:14
本スレ落ちたのか?
908デフォルトの名無しさん:2009/01/13(火) 20:42:09
こちらが本スレです
909デフォルトの名無しさん:2009/01/14(水) 08:32:02
>>907
落ちてるね
新スレが立ってる

関数型プログラミング言語Haskell Part10
http://pc11.2ch.net/test/read.cgi/tech/1231861873/
910デフォルトの名無しさん:2009/01/14(水) 19:51:14
>>909
d
911デフォルトの名無しさん:2009/01/19(月) 17:45:51
無駄スレ立てるなや。
912デフォルトの名無しさん:2009/05/13(水) 22:34:58
クマの勉強会はまだか?
913a36 ◆K0BqlCB3.k :2009/05/31(日) 11:07:44
関西で勉強会やってみる?
914デフォルトの名無しさん:2009/06/01(月) 21:12:40
関西はかなり遠いなぁ
915デフォルトの名無しさん:2009/08/21(金) 00:34:14
唐揚げ
916デフォルトの名無しさん:2009/09/07(月) 21:15:42
なんか本スレ落ちてね?
917デフォルトの名無しさん:2009/09/07(月) 23:42:42
本スレは粉微塵になって死んだ
918デフォルトの名無しさん:2009/09/08(火) 09:17:20
なぜだっ
919デフォルトの名無しさん:2009/09/08(火) 13:00:27
981を越えてただけじゃないか
920デフォルトの名無しさん:2009/09/08(火) 14:16:20
921デフォルトの名無しさん:2009/09/15(火) 19:33:30
ここも時期粉微塵になる……
922デフォルトの名無しさん:2009/09/22(火) 10:10:16
気のせいか最近関数型言語の人たちが輝いている。
923デフォルトの名無しさん:2009/10/16(金) 17:15:21
時代
924デフォルトの名無しさん:2009/10/16(金) 17:36:58
日本語本が出るみたいだから俺もHaskellの勉強を始めるわ
925デフォルトの名無しさん:2009/11/12(木) 02:51:13
一方で貧乏人は英版のgoogleでググった
926デフォルトの名無しさん:2009/12/06(日) 22:24:52
yo
927デフォルトの名無しさん:2009/12/07(月) 14:08:08
928デフォルトの名無しさん:2009/12/07(月) 14:19:22
http://www.google.com/intl/en/
じゃないかな

日本語版で「ウェブ全体から」を選ぶより英語版の方が
英語のリソースが優先して表示される。
929デフォルトの名無しさん:2009/12/17(木) 14:08:16
>>925
大枚叩いてRWH買ったわ
電気代払えなくなった
930デフォルトの名無しさん:2009/12/27(日) 22:24:06
だれかオライリーの本買った?
感想ヨロシク
931デフォルトの名無しさん:2010/01/10(日) 22:31:50
買ったけど途中で挫折した
だけどもう一回挑戦する
932デフォルトの名無しさん:2010/01/11(月) 01:40:31
買ってないけど霧中で挫折した
だけども、一回挑戦する

933デフォルトの名無しさん:2010/01/11(月) 10:38:12
>>931
>>932
頑張れ
934デフォルトの名無しさん:2010/01/11(月) 23:01:47
6.12ベースのHaskell Platformでたら再開する予定
935デフォルトの名無しさん:2010/01/13(水) 01:08:39
Java >>>>>>>>>>> 2^100000000000000000000000000000ポテンシャル障壁>>>>>>>>>>>>>haskell
936デフォルトの名無しさん:2010/01/13(水) 01:10:37
haskellはごみ、いや、ごみいか
937デフォルトの名無しさん:2010/01/16(土) 19:45:11
darcsのおかげで目がさめた。遅い、不安定、結果として使い難い。
938デフォルトの名無しさん:2010/01/24(日) 05:46:04
確かにdarcsは遅いが、設計自体が古いのも原因だろうな
939デフォルトの名無しさん:2010/01/26(火) 21:28:16
何にしてもHaskellへの盲目的信仰から抜けられてよかった。ありがとうdarcs!
俺はガチガチに静的チェックされた完璧なクソを作りたいのではなかったのだ。
940デフォルトの名無しさん:2010/01/27(水) 09:51:10
つまりJavaをやめてPythonにするんだな?
941デフォルトの名無しさん:2010/01/29(金) 23:01:09
>>935はモナドだな。Javaの後にHaskellをやるということか。
942デフォルトの名無しさん:2010/01/29(金) 23:33:58
>>935
ラムダ計算を理解しないとHaskellはできないので、JavaからHaskellまでの間に非常に大きなポテンシャル障壁がある。
遅延評価のせいでサンクが肥大化するので、アルゴリズムが悪くメモリが小さいと、Haskellをやる前にオーバーフローするだろう
943デフォルトの名無しさん:2010/01/30(土) 19:10:01
Javaをやめるといったように読めたわけ?信仰ってこわいね
それともわざとJavaに話をすりかえたの?それも狂ってるね
944デフォルトの名無しさん:2010/01/30(土) 19:21:47
>>943
ただの事実だ
945デフォルトの名無しさん:2010/01/30(土) 20:01:34
ラムダ抽象とか簡約とか覚えないと使えない言語じゃ
いつまでたってもデカいシステムつくれないんじゃ
946デフォルトの名無しさん:2010/01/30(土) 21:59:46
>>945
デカいシステムを作るのが目的ではないし、
ラムダ計算を知らなくても使えないことはない
しかし知っているに越したことはない
947デフォルトの名無しさん:2010/01/30(土) 22:05:58
>>945
それにデカいシステムを簡潔に書けるのが関数型言語の強みだ。
948デフォルトの名無しさん:2010/01/30(土) 22:44:41
しかしできあがったものがクソ遅くて不安定で使いものにならないのが純粋関数型の弱みだ。
949デフォルトの名無しさん:2010/01/30(土) 22:49:45
嫌なら使わなけりゃいいじゃない
お前はAPLも使ったことないだろ?
950デフォルトの名無しさん:2010/01/30(土) 23:06:52
APLは昔つかってたけど。もうJに乗りかえちゃってるけどな。
951デフォルトの名無しさん:2010/01/30(土) 23:11:50
なんだ別人か
952デフォルトの名無しさん:2010/01/31(日) 07:49:58
LispにしろHaskellにしろ、関数値を表現する記法に採用しているというだけで、
λカリキュラスはどうでもいいからな。
953デフォルトの名無しさん:2010/01/31(日) 10:07:58
キャベツを千切りにします
肉を炒めます
千切りのキャベツを加えて半生程度にサラッと炒めます

ご飯に乗せてしょうゆかける
954デフォルトの名無しさん:2010/01/31(日) 19:54:45
最後にマヨネーズをたっぷりかけて完成
955デフォルトの名無しさん:2010/02/05(金) 19:51:36
darcsは存在自体が害悪マジで消えてくれ
956デフォルトの名無しさん:2010/02/07(日) 01:20:57
この言語ばっかり使っていると脳ミソが退化するね。
危険だ。
957デフォルトの名無しさん:2010/02/07(日) 04:09:17
脳みそが変容したら凄すぎですがな
958デフォルトの名無しさん:2010/03/04(木) 12:25:40
( ´・ω・`)
959デフォルトの名無しさん:2010/03/13(土) 02:41:54
(´・ω・`)
960デフォルトの名無しさん:2010/03/13(土) 14:12:16
IO処理を他人に丸投げしておいて
「副作用はありません」
てズルイと思います
961デフォルトの名無しさん:2010/03/13(土) 14:53:35
てめぇドサクサにまぎれてOOサンもdisってんじゃねぇよ
962デフォルトの名無しさん:2010/03/13(土) 14:53:40
実際に副作用がないんだから仕方ない
963デフォルトの名無しさん:2010/08/06(金) 01:47:24
博士専用言語ワロタ
964デフォルトの名無しさん:2010/08/17(火) 17:28:00
モナドがゲーム出演と聞いて
965デフォルトの名無しさん:2010/08/25(水) 20:31:42
あまりの過疎スレぶりに(ry
966デフォルトの名無しさん:2010/08/25(水) 22:58:48
だよね、よくこれで本をだす出版社があるよな
967デフォルトの名無しさん:2010/08/26(木) 08:01:00
それは本買った俺をディスってんのかよ
968デフォルトの名無しさん:2010/08/27(金) 00:51:43
スレタイが良くない!
969デフォルトの名無しさん:2010/09/22(水) 00:10:52
>>967
詐欺にかかったりしてない?大丈夫?
970デフォルトの名無しさん:2010/09/26(日) 09:36:45
初心者を助けてくれる、do記法展開ツールとかないかなー
971デフォルトの名無しさん:2010/09/26(日) 09:58:51
do {[1,2];a <- [3,4];return a}
この結果は[3,4,3,4]

何が起こった!!何故殺した!って言いたい
972デフォルトの名無しさん:2010/09/26(日) 10:19:13
[1,2] >> [3,4]が[3,4,3,4]になる訳か、リストモナドを誤解していた。把握した!
973デフォルトの名無しさん:2010/09/27(月) 06:48:25
[1,2] >>= (\x -> [3,4]) >>= return

こういう置き換え、あんまり得意じゃないから、
やってみた。
974デフォルトの名無しさん:2010/09/27(月) 07:19:21
違うか。
こっちか。

[1,2] >>= (\_ -> [3,4]) >>= \a -> return a
975デフォルトの名無しさん:2010/09/27(月) 08:49:35
おお、どうも。参考までに一応上の結果に辿りつくまでの流れを書いとくよ
仕様通りに解釈すると
[1,2] >> (let ok x = case x of {a -> return a; _ -> fail "...";}in [3,4] >>= ok)
_はパターンマッチでかぶってる言われるので省略すると
[1,2] >> (let ok x = return x in [3,4] >>= ok)
ラムダにしてみると(ここ、少し自信ない)
[1,2] >> [3,4] >>= (\x -> return x)
右の式をη変換
[1,2] >> [3,4] >>= return
モナドの性質より
[1,2] >> ([3,4] >>= return)
モナドの性質より
[1,2] >> [3,4]
976デフォルトの名無しさん:2010/09/27(月) 21:10:52
Template Haskell で仕様通りに do 記法展開
出力が不親切で入力がハードコードだけど…

{-# LANGUAGE TemplateHaskell #-}
import Language.Haskell.TH

expr = [| do
[1,2]
a <- [3,4]
return a
|]

main = runQ (undo expr) >>= putStrLn . pprint

undo :: ExpQ -> ExpQ
undo expq = do
DoE stmts <- runQ expq
toExpQ stmts

toExpQ :: [Stmt] -> ExpQ
toExpQ [NoBindS expr] = return expr
toExpQ (BindS pat expr : xs) = do
sym <- newName "x"
infixE (Just (return expr)) (varE (mkName "GHC.Base.>>="))
(Just (lamE [varP sym]
(caseE (varE sym)
[ match (return pat) (normalB (toExpQ xs)) []
, match wildP (normalB (appE (varE (mkName "GHC.Base.fail")) (litE (stringL "...")))) []])))
toExpQ (LetS decls : xs) = letE (map return decls) (toExpQ xs)
toExpQ (NoBindS expr : xs) = [| $(return expr) >> $(toExpQ xs) |]
977デフォルトの名無しさん:2010/10/02(土) 11:06:19
面白そうだけど、何をやっているのかさっぱりわからんぬ
978デフォルトの名無しさん:2010/10/03(日) 23:21:52
驚愕、天使は巨乳だった
979デフォルトの名無しさん:2010/10/11(月) 13:56:48
ttp://narayama.naist.jp/research/TRS.html
ここに載ってる例をHaskellで動かしたいが簡約(step関数)で詰まった
こーど
ttp://codepad.org/fAZ6d19B

思ったより大分苦戦、暇な人がいたら手伝ってください
980デフォルトの名無しさん:2010/10/11(月) 19:08:53
>>979
http://codepad.org/mp5y0cH5
5分もかかっちゃった
981デフォルトの名無しさん
5分とかテラ速いすね
参考にさせて頂きます

自分でも何とか、でけたわ
ttp://codepad.org/0qmcBVeF