関数型プログラミング言語Haskell Part4
1 :
デフォルトの名無しさん :
2006/02/24(金) 03:02:55
乙です
5 :
荒川静香 :2006/02/24(金) 07:55:49
6 :
デフォルトの名無しさん :2006/02/24(金) 10:03:35
,:'´//7,' ,' .,' ,:' ! } i !', ':, ':, ゙:,. ,' / ,' {l. ! {/ ,イ / }| !|', !. ', ', ゙, ハ〃 ! !| | | ∠/ ,:'-ノ} /リ l ,ム. ! } |! ハヽ、ゝ!| l | ,:',;='ィ'、'´ ,'.ノ ノ.,;lノ=、l .,' ,' ,' ノ { l l ', |'ヲi(_ノ.} ´ i(ノ.}゙!ノ,:',:''´ ', h. ', ',゙、 ':゙゙_.ノ. ':゙_ノ〃ン ':, { ',', ':,':, 丶 ,' l .} ヾ ':,':, ':ヾ、._ 「´/ ,' | .,' 新スレおめでとうございます!! `ヾ-、`ヽ_ `´ _,.ィリ.ノ ,' リ';',ヾ| ` ‐┬ ´ _ノノ,'/ ヾ,、-- 、 _ | ´ノ' f ヾ、..___ ヽ、 ー‐''
_____ / ̄ ̄ ̄ ̄\,, /−、 −、 \ /_____ ヽ / | ・|・ | 、 \ | ─ 、 ─ 、 ヽ | | / / `-●−′ \ ヽ | ・|・ |─ |___/ |/ ── | ── ヽ | |` - c`─ ′ 6 l |. ── | ── | | . ヽ (____ ,-′ | ── | ── | l ヽ ___ /ヽ ヽ (__|____ / / / |/\/ l ^ヽ \ / / | | | | l━━(t)━━━━┥
8 :
デフォルトの名無しさん :2006/02/24(金) 12:40:46
関数型ってどういう意味ですか? メンヘラのボクにも分かるように説明してください
prologはどうなったのさ? シグマ計画 第5世代コンピュータ!
>>9 ここってHaskell板じゃ...
Prologはまだ生きてるよ。
12 :
デフォルトの名無しさん :2006/02/25(土) 00:10:07
セキュアな大規模システム開発にHaskellは使われることだろう。
Pivotal使えてる人いますか? コンパイルはできるんですが,サンプル読み込もうとすると エラー吐いて死ます. Gtk2Hsかhs-pluginsのインストールに失敗してるのかなー?
エラーメッセージは? panic! てやつ? hs-plugins のインストールに失敗して、 ghci -package plugins なだけで panic になったことはあるけど、それならコンパイルにも失敗するし違うかな。
>>14 どうもです.エラーメッセージは以下のような感じです.
pivotal: /.../PIVOTAL025/Pic.o: unknown symbol `GraphicsziUIziGtkziGdkziPixbufData_zdfMArrayPixbufData_closure'
pivotal: user error (resolveObjs failed with <<False>>)
どうやら (System.Eval.Haskellの) evalのところでコケてるようなので
hs-plugin の問題かなとも思ったんですが
unknown symbol なんで、 gtk か hsGtk のライブラリがうまくリンクできて ないんではないでしょうか。 シンボルの名前的には hsGtk のインストールを疑った方が良いのでは。
Haskellで作ったプログラムがフロッピーに収まり切りません。 何とかしてください。
zipでくれ
ストリップ画像をうpすると何だって?
>>20 だから、精嚢の内容物がだいぶ減るんだって
22 :
デフォルトの名無しさん :2006/03/01(水) 11:53:45
簡単でセキュアに作れて、デブでとろいんですね ハスケルって
haskell 簡単< lisp. haskell セキュア> lisp. haskell 速い> lisp. haskell デブ> lisp.
>>23 >haskell 速い> lisp.
>haskell デブ> lisp.
マジレスすると、ここら辺は処理系/処理内容依存じゃないの。
25 :
デフォルトの名無しさん :2006/03/03(金) 07:00:26
ハスケルの参考書くれ 和書で
あと数ヶ月待て
27 :
デフォルトの名無しさん :2006/03/03(金) 10:05:48
ままま待てないぃぃっっ!!
やさしいHaskell入門 じゃ駄目なの? わざわざ金出して本買う必要も無いような…。
やさしいHaskell入門はちっともやさしくないのがなあ。わかってる人にはよ く書けているドキュメントに見えるんだけどねぇ。 まあ、これから出る本があれに比べてやさしい保証はどこにもないわけだが。
読者をPerlerに絞って書いてくれないかな・・・
perlなんてもう忘れちまったよ。PythonかRubyユーザ向けに書いとくれ。
おまえら期待しすぎ
>Haskellは、それをモノにした悟り体験のために勉強をしましょう。 >この体験は、その後のよりよいプログラマー人生での手助けとなるはずです。 ESR かよ。
トリさん風のλだと信じたい...
mycomか…
40 :
デフォルトの名無しさん :2006/03/04(土) 23:49:03
団子にハスケル馬鹿にされた! くやしい!!キーーッ!><。
アセンブラは大事だぞ。
42 :
デフォルトの名無しさん :2006/03/05(日) 01:10:49
最近HaskellでOpenGLの勉強をはじめたのですが、 CのglBegin()やglEnd()に相当する式がわかりません。 ハスケル階層ライブラリとにらめっこして色々試してみましたが、 さっぱりです。誰か偉い人、教えて下さい。 あとHOpenGLと(Cの)OpenGLの関数の対応表(?)みたいなのがあれば ぜひ教えて下さい。お願いします。
団子なあ。 フットワーク軽いのは凄いと思うが、1年後に期待なヤツだよなあ。
45 :
デフォルトの名無しさん :2006/03/05(日) 01:43:14
>>43 フヒヒヒヒ! すいません!
読んでから出直してきます。英語の奴ですよね?
やらしいHaskell入門キボン
47 :
デフォルトの名無しさん :2006/03/06(月) 03:37:30
また萌え絵満載本か!
>>47 レイジーたんがたらい回してる本なら買ってもいい
この表紙はありえない
俺は結構好きよ、こういうの。脱力系?
54 :
デフォルトの名無しさん :2006/03/08(水) 00:38:34
で、そのアオキとやらは期待できるのか?
55 :
デフォルトの名無しさん :2006/03/08(水) 11:45:01
Haskell Script
58 :
デフォルトの名無しさん :2006/03/10(金) 04:52:36
もっと議論したまえ
すません、 do i <- j (k i l) をdo無しで表現するにはどうすればいいのでしょうか?
j >>= flip k l
ありがとうございます。 [解決]
62 :
デフォルトの名無しさん :2006/03/11(土) 01:09:20
C++とアセンブリとHaskellをマスターすれば万能になれる… そんな気がする…
63 :
デフォルトの名無しさん :2006/03/11(土) 01:45:11
64 :
デフォルトの名無しさん :2006/03/11(土) 03:55:04
ハスケルこそJavaスクリプトととって替わるべきだ! ieは標準搭載しろ。
Haskell Script
66 :
デフォルトの名無しさん :2006/03/11(土) 08:28:23
はすけるとえむえるってどっちがつよいのよ、けっきょくのところはさ。
>>62 C++をマスターした時点でHaskellとSchemeとアセンブラとJavaをマスターしたも同然。
それだけC++のマスターは難しいってことだ。
>>68 お前、HaskellとScheme知らないだろ?
ムハッ C++のマスターが難しいだって(藁 ものを知らんというのは面白いな。
いや、そこは間違いないぞ。 問題は前半だ。
72 :
デフォルトの名無しさん :2006/03/11(土) 14:13:47
ああ、前半だな。 コンパイルエラーは。
リア中ばっかだなここ。 ゆとり教育の反動なのか義務教育でHaskellとはずいぶん難しいことやってるな。
普及のためにはリア厨の存在が欠かせません。
Haskellって所詮踏み台だろ? 理屈だけ覚えて実践は他の言語で。
76 :
デフォルトの名無しさん :2006/03/11(土) 15:43:12
リア厨的に言うと、普通に最強だろハスケル。 何かのグランプリだろ?
77 :
デフォルトの名無しさん :2006/03/11(土) 20:02:07
>>69 Boostだっけ? ライブラリ使って関数プログラミングやれるらしい。
そういう意味では
>>68 は正しいと思うぜ。
ライブラリ関係なく もともとC/C++は関数プログラミング言語なんだが。
C++は難しいし、まともに使うには関数プログラミングの知識は必須だけど、 C++をマスターしたらHaskellもマスターしたようなもの、ってのは言い過ぎだろ。
Boostのlambda見たときはもう笑うしかないとオモタ
>もともとC/C++は関数プログラミング言語なんだが。 >もともとC/C++は関数プログラミング言語なんだが。 >もともとC/C++は関数プログラミング言語なんだが。 こんな事が後何年続くのでしょう...
SchemeのS式の柔軟性とか動的性質はC++には難しいだろうな。
>>77 =78
お前、HaskellとScheme知らないだろ?
知らないなら黙ってろよ。
>>83 お前、C++知らないだろ?
知らないなら黙ってろよ。
> Boostのlambda見たときはもう笑うしかないとオモタ boostのlambdaをみたときは、こんな小細工してラムダを 使いたいなら素直に関数型言語使えよと、アホかと思った。
C++に代わるような低レベルの関数型言語がないんだからしょうがないだろ。
>>84 むしろ、知らないのは77=78のようだがw
そもそも「C++をマスター」にboostをマスターすることは入らないと思うぞ。 C++をマスターしてなおかつboostをマスターしないとダメってことだ。
そろそろHaskellの話でもしませんか。
それもlambdaがわかるだけw 到底Haskellはマスターしたことにならんだろw
>85 というかいい加減C++なんか捨てたらどうだとオモタヨ
C++オナニー野郎はどこへ行っても嫌われる。 本人にその自覚がないからさらにやっかいだよな。
93 :
77 :2006/03/11(土) 21:25:03
プログラミング言語の文法だけ解ればいいとしたら、凄く幸せなことだよな。
リファレンスひいたりしなくていいわけだ。
>>83 お前、日本語知らないだろ?
知らないなら黙ってろよ。
>>93 ライブラリの使い方だけを解ればいいとしたら、凄く幸せなことだよな。
リファレンスをひくだけでいいわけだ。
C++ユーザって言語仕様やライブラリの使い方を理解して悦にいっている
人覆いね。
(C++ユーザ)∧¬(関数型言語ユーザ)のうち、ラムダ計算を理解している
人って何%ぐらいなんだろう。
(主に政治的な理由によって)代替となる言語が無いから、 ああいう小細工をして頑張ってるわけです。
Javascriptの代わりにHaskell使えるようにしてくだされ
97 :
77 :2006/03/11(土) 21:40:57
>>94 いや……俺はC++知らないよ。というか煽ってわるかった。ごめん。
ただ「C++でもそういうことが出来るらしい」ということは知っているけれど。
最近 Haskell をやりだしたんだが、コード書く時間1に対して
リファレンスひいてる時間が10ぐらいあるからそう表現したんだ。
人間、向き不向きが在るからな。
C++をマスターするって、普通は標準ライブラリをマスターするところぐらいまでしか 含まないだろ。 さすがに他のライブラリまで含めだしたらきりかない。
>>99 Boost は次期標準なので、最近はここまで含めるのが普通。
また、Boost 自体の使い方はともかくBoost で使われてるような手法は
C++ の範囲だから、マスターというからにはそれらが使えることは要求したい。
次期標準たって、採用されるのは一握りだろ。 まあ、今までなら1つも採用されてないけどなw
ここで話題になったのはboost自体の使い方だし。それもlambdaだけw
Haskellユーザーは熱いですね
>>96 JavaScriptって聞いた話によると「Cの皮をかぶったLisp」らしいから、
Haskellユーザーは好きな人多いんじゃないかな。
Haskell好きはLispも好きな人が多いから。
boostっつーても使われてるメジャーの大部分は技法はすでにSTLに 組み込まれている(組み込まれてないのはETとか)いてそれの応用 なので、ライブラリの使い方の話ではなく、ジェネリックプログラミング の技法という意味ではboostを含めても含めなくてもそんなに この話題については差がない。 どちらにしても、C++ユーザが関数型言語の深い知識があるとは 思えないけど。関数型言語の一部の表層だけでしょ。 STLを設計したアレックス・ステファノブは解っているかもしれないけど。
まあ、lambdaがわかってるというだけじゃ、Haskellをマスターしたことにはならんわな。 モナドがわかってるというのならともかく。
>どちらにしても、C++ユーザが関数型言語の深い知識があるとは >思えないけど。関数型言語の一部の表層だけでしょ。 C++ユーザを一くくりにしてもしょうがないかと思われ。 俺がHaskellを勉強したきっかけもC++だし。
今は、C++をマスターしたらHaskellをマスターしたことになるのかという話題なのだから、 そこはC++以外の知識は全く皆無のユーザーのことだろう。
JavascriptはHaskellの対極にあるような気もする。 動的さとか、なんでも型変換できるとことか。
110 :
105 :2006/03/11(土) 23:18:34
訂正「C++ユーザ」→「C++しか知らないユーザ」
「C++しか知らないユーザは決してC++をマスターできない」とか。 スレちがいだな。スマソ
>>111 同じこと書こうとしてた。
C++ ってマルチパラダイムな言語だし、最近は Haskell の影響を強く受けてるから
きっちり理解するためには Haskell の知識は必須なんだよね。
C++の知識の中にHaskellの知識が含まれるのであったとしても、 それは、「C++以外の知識」ではなく、「C++の知識」に含まれる。
>>112 そのHaskellの知識って何のことか知らんけど、lambdaとかなら
Haskellをマスターしたことにはならんよ。
115 :
105 :2006/03/11(土) 23:34:07
113は日本語で書くとあいまいで意味が取れないんだけど、 「Haskellの知識はC++の知識の部分集合」 か 「Haskellの知識の一部はC++の知識の部分集合」 かどっち?前者なら賛同しかねるが。
>>109 その部分は型推論なんかと似たところがありそうだけどね。
それに、関数型と言われることもあるという点では共通してるように、
関数型みたいな考え方に関する部分は似てるんじゃないかな。
>>115 前者の意味で言ってる人は皆無だろう。
まあ、前者を主張すべきところで後者の主張をしてしまってる間違った人は
いるかも知れんが。
コンビネータライブラリとかかな。
結局、「C++をマスターしても、Haskellの一部の知識を知ってるに過ぎない」でFA
121 :
85 :2006/03/11(土) 23:42:08
>>117 spiritは簡単なパーサを書くときにつかったことがあるよ。
便利でいいね。
>>120 それも「ごく一部」。
C++をマスターしても、モナドや型クラスや再帰型なんかの知識はないだろうしなあ。 型推論とかも知らないだろうし。この辺はすぐわかるだろうけどね。
「ライブラリ」の使い方も知らないだろうしなw
>>122 最近の C++ の論文には、再帰型や型推論の話は出てきてます。
それはC++をマスターすることには含まれないでしょう。
またboostの話でスマンけど、再帰型みたいなのはrecursive_variant というので実現できるな。boostのvariantはunionに近い。
>>121 俺もspirit使ってパーサ書いたことある。
まぁ便利ではあるんだけど、Parsecと比べると面倒なことも多い。
記述量が多かったりするあたりや、ちょっと間違ったときのエラーメッセージの大洪水とか。
spirit なんて実用になりますか? 他の手堅い方法に比べてどうですか
>>127-128 C++プロパな話はboostスレでやろうぜ。ここは Haskell スレだ。
unionやvariantとHaskellのデータ型を同一視されてもねぇw
131 :
デフォルトの名無しさん :2006/03/12(日) 00:19:03
C++をマスターしたやつが、main = putStrLn "Hello World!"を見ても、 「なんでmainに代入してるんだ!」とか言い出すのがオチ。
>>131 unsigned char main[] = { 0x82,0x10,0x20,0x04, ...
なんてコードもあるので,普通のユーザですらそんなことは言わない.
意味わかってない
>>133 >>132 は 『 「なんでmainに代入してるんだ!」とか言い出すのがオチ 』 に対する
反論なので,
>>131 にどんな高尚な意味があろうとも関係ない.
131は間違いだな。 C++プログラマは131を見ても、131がHello worldプログラムの全体で、 mainがmain関数にあたるということすらわからないみたいw
boost::numeric::ublas::matrix とかって遅延評価してるね
--------------------------ここまで読み飛した--------------------------
wwww boost::numeric::ublas::matrixでようやく遅延評価が出てくるのかよw
139 :
68 :2006/03/13(月) 08:41:45
ごめんwwww俺が悪かったwwwww
C++の強力なテンプレート機能を念頭においての発言だったが、
>>79 の言う通り確かに言いすぎだったな。
>>99 boost/lokiに代表される変態ライブラリは、C++の言語仕様外のことをしているわけではない。
boostの変態さはすべてC++が持つ変態さである。
あと俺が言うマスターってのは「言語仕様を理解し使いこなせる」くらいの意味な。
C++においてそれがどれだけ難しいかと言ったら……
>oost/lokiに代表される変態ライブラリは、C++の言語仕様外のことをしているわけではない。 その論法で行けば機械語最強だな(w
ライブラリまで含めだしたらなんでもありじゃねぇか ライブラリを全部マスターするのはそりゃ難しいだろ それこそモナドや継続を実現するためのライブラリだって作れるだろうがw
142 :
デフォルトの名無しさん :2006/03/13(月) 16:01:54
HaskellでプログラミングするときとC++でプログラミングするときでは思考のレベルが違う。 いくらboostをマスターしたと言ってもHaskellで思考できるとは限らない。boostにHaskellと同じような機能があったとしても。 ここでboostの話を出すのはもう勘弁して欲しい。
143 :
デフォルトの名無しさん :2006/03/13(月) 18:04:58
ブーストってなに? 簡潔に二行で
145 :
デフォルトの名無しさん :2006/03/13(月) 18:25:29
ありがとうございました
Haskell初心者です. Haskellにevalみたいに動的に式を評価できるような仕組みってありますか?
TextSS のWindowsXP(Professional)64bit化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
.oO(haskellで書けということ??)
152 :
デフォルトの名無しさん :2006/03/22(水) 04:39:42
最近やたらと過疎化しているな。
むしろこれまでがおかしかったんだと思う
もうすぐ本がでるから犯人当てとかネタバレトークで盛り上がるかと
155 :
デフォルトの名無しさん :2006/03/22(水) 16:54:49
ハスケりたいけどネットに繋がってないから環境がダウンロードできない。
次々妙な言語が出てきては消えてゆくけど、 学ぶ価値はあるかい?時間の無駄?
157 :
デフォルトの名無しさん :2006/03/22(水) 18:33:02
厨的に言うと、まさに地球最強らしいよ。 現時点で
>>156 知的好奇心から学びたいならオススメ。
ある意味最強だ。
就職やキャリアアップとか仕事方面の足しにしたいなら
他にもやる事いっぱいあるだろう。
発想が広がるから時間の無駄とまでは言わないけれど。
Haskellを許容できるほどに人類は豊かになったと言うことだよ
Haskellを超える言語はHaskell'しか存在しない。
161 :
デフォルトの名無しさん :2006/03/23(木) 04:40:06
LispとHaskellってどっちがいいの?
162 :
デフォルトの名無しさん :2006/03/23(木) 04:55:09
Haskell
163 :
デフォルトの名無しさん :2006/03/23(木) 04:57:37
誰か起きてる?
164 :
デフォルトの名無しさん :2006/03/23(木) 13:27:53
ハスケルが業務標準になるまでに、どれくらい? 10年?
この本を街角で配ることから始めよう・・・
例外とかは無いの?
>>164 こなれた解説書(WEB含)が出てからかな・・
>>1 のサイトも学術的には立派だけど、ちょっと敷居が高い
なんで、今度出る新刊に期待
「萌えるHaskell!」で行くしかない
C++ より速くて、Perl より簡潔で、Python よりきちんとしていて、Ruby より柔軟で、C# より型が充実していて、Java より頑強で、PHP とは何の共通点もないものって?
175 :
デフォルトの名無しさん :2006/03/27(月) 03:01:49
>>174 LISP じゃねえ?
#スレ的にはHaskellって云いたいが、コンパイラの枯れ具合を考えた
177 :
デフォルトの名無しさん :2006/03/27(月) 06:00:27
>C++より速くて 速くねーだろ。 あ、実行速度じゃなくて開発速度の事か。
Cには負けるだろうけど、C++とはいい勝負なんじゃね?
rubyより柔軟か? どの辺が?
少なくとも動的な型と静的な型という点では、柔軟性は負けてるな。 そのかわり型が充実してて頑強なんだろうけれど。
Prologみたいな論理型言語も結構柔軟なんだけどな。 遅いけど。
Template Haskellを使うと結構柔軟性は増す……かも。
そもそもプログラミング言語の柔軟性って何?
>>184 プログラムからプログラムを操作できること
186 :
デフォルトの名無しさん :2006/03/27(月) 17:21:08
>>174 つうか、型が充実してるって奴以外全部怪しくね?
しかも、Rubyより柔軟とかC++より速いとか例えあってても
あんまり自慢にならないし。
189 :
デフォルトの名無しさん :2006/03/27(月) 19:29:56
ハスケルの本は出たかね?
C == 三沢さん
まあ、Haskellを褒めてることとPHPがバカにされてることだけはわかった。
192 :
デフォルトの名無しさん :2006/03/28(火) 17:26:38
いや……だってPHPだしなぁ。
193 :
デフォルトの名無しさん :2006/03/28(火) 19:02:30
HaskellとPHPに共通点が1つもない? へー。Haskellには変数や型がないのか。 関数も演算子もないんだな。 変わった言語なんだなHaskellって。
195 :
デフォルトの名無しさん :2006/03/28(火) 21:12:10
変数はないよ全部関数 演算子も関数
>>195 関数がある時点でPHPと共通点があるな。
Haskellは神が作りし言語 PHPは人が作りし言語 同じ土俵で語ること自体が不自然
200 :
デフォルトの名無しさん :2006/03/28(火) 23:57:39
201 :
デフォルトの名無しさん :2006/03/29(水) 00:25:56
phpのそれは関数の皮を被った変なものですから、
本来たぞ
「関数と呼ばれているもの」があるという共通点はある。
まあ、言語という時点で共通点なんだけどな。
205 :
デフォルトの名無しさん :2006/03/29(水) 01:31:52
で?本の出来は?
206 :
デフォルトの名無しさん :2006/03/29(水) 01:48:54
明日かってくるか……。
14000円もする…
FOPの方かよ
209 :
デフォルトの名無しさん :2006/03/29(水) 11:00:11
クフース先生のアルゴリズムバイブルより高いじゃないか!
210 :
デフォルトの名無しさん :2006/03/29(水) 12:53:29
クスース
ふっはっは、ワタシがクスクス先生だ!
212 :
デフォルトの名無しさん :2006/03/29(水) 18:30:37
で?本のできは?
Haskell は Perl より簡潔と言いつつ、 Audrey Tang が Perl を使う理由ってなんなんだ?
214 :
デフォルトの名無しさん :2006/03/30(木) 19:29:03
きっとコーディング時のブドウ糖消費量の違いによるものだろう。
入門Haskell買ってきて読んだ。 できは悪くないと思うんだが、 付録にGHCのPrelude.htmlの訳を載せるならサンプルコードも付けて欲しかった。 あと練習問題の答えも。
GUI版さめがめをHGL使って実装してあるけど、 Windows版のGHC 6.4.1ってHGLはまともに動かないよね。 標準添付でWindowsでも動かせるからHGLにしたって書いてるけど、 動作チェックはしてないんだろうな。
quicksort のコードのあまりの美しさに感動。 その感動を誰かに伝えたくて思わずカキコ
でもこれではメモリの消費云々のあとに 次のページにはC言語並のソースが 書いてあるんだけどな
219 :
デフォルトの名無しさん :2006/03/32(土) 09:45:15
結局チューンするならCでいいじゃん。
あと数十年したらメモリ消費云々いわれるコードを書いても 勝手に素敵ものにプログラム変換してくれる時代が来るんじゃねーの
融合変換やMathematics of Program Construction等の研究がうまくいけば来るだろう。
Shift_JISが使えない実装は糞杉。 俺はHugsと心中する。
>>222 俺もそう思ってGHC.Handleのパッチを書いてたんだが、なんとなく放置中。
>>219 おそらく50年後もそんな風に言われてそうなキガス
情報科学の人らは数学じゃなくて経済学を勉強するべきかもね。
Haskellとひまわり
入門Haskell読んだ。 基本的な要点は抑えられてると思う。 後半は説明が不親切なところもあったが。 それから、30頁7行目の >thenとelseは同格なので同じインデントにする必要があります は間違い。
Haskell本、全体的に読者を突き放してる感じ。 webで簡単に予習してから読むのがちょうどいいかもしれん。 まあそれでも日本語の本が出たことはめでたい。 布教もしやすくなるってもんだ。
本当に入門レベルで解説したら、Monadまで辿り着けないで終わると思われ
索引のページ番号がめちゃくちゃだなぁと思ったらサポートページに修正版の索引がPDFで置いてあった。
買う気無くした
232 :
デフォルトの名無しさん :2006/04/02(日) 08:17:12
ダウンして印刷して貼りつけろよ
ヒドス・・・ なんだそのド素人みたいなミスは
索引なんて見ないからどうでもいい
購入者全員にPDF版ダウンロード可能にしてくれないと買う気しないな。
238 :
デフォルトの名無しさん :2006/04/02(日) 12:52:30
Haskellこそ文系プログラマをクチクする鍵だと思う。
239 :
Rubyはどうよ :2006/04/02(日) 21:06:32
ハスケル ハッスル ちょとだけ似たもの同士 Perl6の開発でハスケルってのが使われてるんだよね? PHPの次はハスケルが来るんか?〜Webプログラミング …なわけねーか
240 :
デフォルトの名無しさん :2006/04/03(月) 03:35:51
ハスケルは偏差値60以上の理系じゃないと満足に扱えないから 主流にはならないかもね。 馬鹿文系の体力勝負に迎合するものじゃないと
241 :
デフォルトの名無しさん :2006/04/03(月) 03:41:24
Haskell信者になりに、門を叩きに来ました。 洗脳して下さい。
青木さんは文系プログラマらしいけど?
244 :
デフォルトの名無しさん :2006/04/03(月) 10:09:45
統計学もマスターしていない人がプログラミングなんてしないで下さい。 ヘドが出ます。
高卒ですが入門Haskellやってます^^ これはプログラミング入門者にはまったくもって薦められないですね
で、生産性の高さを実証できた奴っているの? 生産性低かったら何の意味もないし。
>>244 統計学をデータ処理の手法としてしか見ていないマスターには程遠い人
HaskellってTabが面倒ですね。
haskell-mode for emacsを使えって話ではなく?
いや、俺は秀丸エディタだよん。 Eclipse3.1でPlugin使おうと思ってインストールしたけど、うまくいかなかった。
252 :
デフォルトの名無しさん :2006/04/03(月) 13:01:40
vimは?
WindowsなんでvimはおろかviもEmacsもありません。 秀丸とcmdでがんばります。
調べずに聞くけど vim の haskell インデントのスタイルファイルで良いのある?
256 :
デフォルトの名無しさん :2006/04/03(月) 14:27:31
修士号
どうしても書きたくなるやつが出てくると思っていた。
この言語のユーザの9割は研究屋だと思う
俺は元数学屋
260 :
デフォルトの名無しさん :2006/04/03(月) 16:17:27
屋ってなんなの? 大学時代の研究室の講師も「僕は物理屋だから…」って言ってた。
プロっていうこと
プロっていうとそれで飯食ってなきゃ駄目なイメージがあるけど 俺はそれよりは弱く、得意分野がそれである、くらいで取ってる。
アカデミックな専門分野に限定したイメージはあるな。 俺パチンコ屋だからとかあんま聞かないしw それはそうと入門Haskell発売に対抗して やさしいHaskell入門印刷したらすごい量になりましたよ。
俺はケンカ屋だから・・・
俺は洗濯屋です
俺はあやや
俺は餅屋
俺はパン屋
オレは小室哲屋
バカばっか
バカと天才は髪一重
>バカと天才は髪一重 以外で自らのバカさ加減をフォローできないのか?
Haskell はラの何活用ですか?>文系へ
理系のギャグは面白くないという事のデモンストレーションですか?
はすけて!
278 :
デフォルトの名無しさん :2006/04/04(火) 02:00:41
じゃあシドは工学屋?
ベース
Ask Hell
入門本読んだけどモナド分かりませんですたorz
typeとnewtypeの違いがわかりません。 class定義する際には後者をつかうみたいなんだけど…
なんでモナドで定式化したんだろ。 ほかのアプローチは無かったんかな?
「モナドの全て」の付録にあるコンビナートの例を図入りで説明すればよかったのに。 それだけわかれば十分使えるでしょ。モナド。
>>282 typeは既存の型の別名を作る。単なる別名であって全く同じ型。だから、例えば、
type String = [Char]
と定義されているとき、
f :: String -> Int
という関数があったら、fを[Char]型の値に適用できる。
newtypeはdataと同じように、既存の型から別の型を作る。
newtype Nat = Nat Int
という定義は、
data Nat = Nat Int
という定義とほぼ同じ意味で、使いかたも同じ。
逆に言うと、newtypeはdataの制限されたバージョンといえる。
具体的には、データ構築子が一つしかなく、その唯一のデータ構築子が
引数を一つだけ取るような代数的データ型(つまり、フィールドが一つしかないレコード)を
実行効率を損なうことなく定義できるようにしたのがnewtype。
従って、オーバーヘッドを気にしないなら、newtypeを使う必要はない。
逆に、特殊な場合を除いて、フィールドが一つしかないレコードは、
全てdataの代わりにnewtypeを使って定義しても良い。
フィールドが一つしかないか静的には分からないの?
>>287 分かるけど、dataとnewtypeは微妙に意味がちがうから、最適化で変換するのは嫌なんだろう。
data D = D Int
newtype N = N Int
unD (D x) = True
unN (N x) = True
と定義すると、
unD undefined === undefined
unN undefined === True
289 :
288 :2006/04/05(水) 14:44:01
unD, unNって名前はうんこだった。ゆるしてくれ。
>>286 ありがとうございます。
dataがseparated sumなのに対してnewtypeはcoalesced sumのような
感じでliftされないのですね。
コンパイル時にのみ存在するタグみたいなものでしょうか。
質問です。 ワニさんマークの靴下をママが買ってくれたんですが、履いたときにマークは外側にあるのが正しいのか、内側にあるのが正しいのか分かりません。 教えてください。
>>291 ワニさんマークはワンポイントだよな.なら,普通は外側だと思う.
>>291 内側と外側の差異は、むしろ連続的な、程度の差なのではないでしょうか?
いいえ、正しく履いたとしたら離散的な値です。 (左足のマークの向き,右足のマークの向き)として、 (左向き,左向き),(左向き,右向き),(右向き,左向き),(右向き,右向き) の4つの状態が考えられます。
>>294 いいえ、「ねじれ」や「重なり」も考慮に入れると、連続性という概念は欠かせないものとなります。
同様に、正しさというのも、私にとって正しい、あなたにとって正しくない、その程度の差なのではないでしょうか?
このプログラムは私にとっては正しいが、あなたにとっては型エラーだ。
>>294 (左向き,左向き), (右向き,右向き)
はあるけど、
(左向き,右向き), (右向き,左向き)
はないですよね?
inside-out も含めるのでしょうか?
型クラスのインスタンスにしたいけどdata宣言による オーバーヘッドはやだ、ってときに使うもんなのかな>newtype
>>298 >型クラスのインスタンスにしたいけど
他にも使い道はある。
モジュールから抽象型としてエクスポートしたいときとか、
再帰的な型を使いたいときとか、
もっと単純に、新しい型の表現がたまたま既存の型と同じときとか。
>>288 >unN undefined === True
こうなっている理由はなんなの?
>>300 一言でいうと、liftされないので、undefined≡(N undefined)だから。
かみくだいて言うと、構築子Nはコンパイル時に解決? されるので、
実行時の unN (N x) のパターンマッチにおいて、引数を (N x) の形に
簡約するまでもなく評価結果をTrueとするから。
303 :
デフォルトの名無しさん :2006/04/06(木) 06:26:01
>>221 Mathematics of Program Constructionって何?
>>297 (左向き,右向き), (右向き,左向き)
はあるけど、
(左向き,左向き), (右向き,右向き)
はないですよね?
の間違いでは?
>>304 日本語のページはほとんど引っかからないすね
日本語がないなら英語を読んだらいいじゃない。
308 :
デフォルトの名無しさん :2006/04/06(木) 11:09:06
英語も読めない底偏差値にはもともと使いこなせない言語です。
自分で書く分には難しい言語じゃないと思うが。 ただ、Haskellで書かれたコードが難しくなる傾向があるのは事実かも知れん。
ワニさんマークの靴下の香具師はどうなった?
新しい職場で忙しいんです。
新しい職場で忙しいからってママに靴下買ってきてもらわんでも…
Haskellにおいて、圏論ってどんな位置づけなのでしょう? 1. 圏論も知らん奴が何でHaskellなんて使ってるの? 2. より良い(Haskellの)コードを書く上で役立つ 3. 背景にある理屈は理解できるが、プログラミング上は大して役に立たない 4. 全く役に立たない
>>313 プログラム理論の道具として使われる圏論は 4 に近い 3。
ただしプログラム理論で研究をするつもりなら 1 。
代数幾何とかの道具として使われる圏論は、4。
>>313 圏論とHaskellの距離は、圏論とAlgolやMLやLispやJavaやCとの距離と大差ないよ。
それらの個別的な言語の特徴を一般化する際に使うものだから。
最近Haskellはじめました。 リストの処理をするとき、同じことをするのに例えば (fは非モナド関数、xsはリスト) l1 = [ f x | x <- xs ] l2 = map f xs l3 = liftM f xs l4 = xs >>= return . f などと書けるようですが、効率などに違いはあるんでしょうか?
>>316 普通気にする程の違いはない。気になるなら計測してみるといいかと。以下与太話。
liftMの定義により、l3とl4は同等。
リストの>>=はconcatMapの事だから、l4は以下と同等。
l4' = concat $ map ((:[]) . f) xs
(ただし、多重定義の解決のオーバーヘッドがあるかも知れない)
従って、単なるmapに比べて余計な操作が入る。
l1は定義からするとl4と同等だけど、リストに特化した記法だから
最適化が入ってl2と同等になる可能性がある。
数学に効率などない
318 は無知
なぁに。高々有限時間だ。
(:[]) って顔みたい。
(:D)| ̄|_
Eclipseのプラグインfpですが、3.1.**2**じゃないと駄目みたいね。 3.1.2にしたらきっちり動きました。3.1は駄目です。
324 :
デフォルトの名無しさん :2006/04/14(金) 19:54:52
結局入門Haskellは買いなの?
著者って見本もらえるんじゃないのか。
相手にすんな
暫く見ていたが、このスレには何ひとつ役立つものがないな。
ただ見てるだけで役立つスレの方が珍しいと思うが。
ひさしぶりにレスがついたと思ったら…ツマンネ。
345 :
デフォルトの名無しさん :2006/04/15(土) 13:26:15
で、結局入門Haskellは買いなの?
金があまっているなら買えばいいよ。
Haskellは入出力が不便かつ貧弱すぎるので実用には使えない。 所詮研究者のおもちゃ。
実用ってのは、要するに金の為に書くコードってことだろ。 そんなもんはどうでも良い。
むしろ俺にとっては研究こそ実用
日本語対応
>>352 ファイルIOとかネットワークIOとか基本的な機能
わざわざ関数型言語でI/Oなんてやらなくていいじゃん。
>>356 I/O無しで何ができる?何もできないだろ。何もできなきゃ無いのと同じ。
>>355 何が不満なのかよく分からん。
確かに環境に依存する機能を使おうと思うと面倒だが。
>>356 Haskell並に使いやすい手続き型言語があればそれでもいいがな。
>>345 どんな人にとってもお勧めできない。
入門者にとっては説明が足りなさ過ぎるし、熟練者にとっては発展的内容が少なすぎる。
唯一の救いはAppendixにあるPreludeのドキュメントの日本語訳のみ。
361 :
360 :2006/04/15(土) 18:18:33
おそらく5月に出版されるであろう「ふつうのHaskellプログラミング」が本当のHaskell入門書になると思う。
ふつうのHaskellプログラミングは買いなの?
>>359 そのリンク先、3ヶ月程度の学習でHaskellで大規模アプリを作ろうとしたのが無謀だろ。
不勉強すぎて参考にならん。
たまたま愛用しているめっちゃ便利で高機能なアプリが実はHaskell製だったなんて事を体験できる日がいつか来るのだろうか。
銀行の勘定系がHaskellでした、とかもサプライズでね?
既に関数型言語を知ってる奴にとって三ヶ月は無謀とはいえぬと思う。
たまたま試してみたアプリが Erlang 製だった事はあったなぁ。 普通のデスクトップアプリだったけど。
369 :
360 :2006/04/15(土) 20:05:43
>>362 話を聞くところによると、王道的に順序立てた言語本のようだね。
少なくともハズレはないと思う。
実物を見ていないので良書かどうかは答えられない。
著 者 乙
愚 者 乙
372 :
デフォルトの名無しさん :2006/04/15(土) 20:40:42
>>361 じゃあ5月までにバイトしてお金つくっておきます^^
perl6 は、haskellで動く。 haskellがすぐれていたので選ばれた。
「Nightmare Haskell Programming」という本を書いたら買いますか?
プログラムがruntime library内で落ちた時のdebugの悪夢を赤裸々に つづってくれたら買う。stack dumpに何も情報もない恐怖とか。
それは恐ろしい・・・
習得に3ヶ月もかかるような言語が本当に優れてるといえるのか?
誰が3ヶ月って言ったの?
379 :
377 :2006/04/15(土) 21:38:11
>>377 修得にコストがかかるというだけでは何の根拠にもならんだろ。
それとも、自転車とかあまつさえ自動車学校に通わなきゃいけない
いけない自動車よりも三輪車を愛用する人ですか。
てめー三輪車なめんなよ?
すいません。関数型マスターのかたがたにお伺いしたいんですが・・・ 手続き型に比べて関数型が生産性高いといわれているのですが、それはどのようなところから着てるんでしょうか? またそれはC++のテンプレート、それを応用したSTL,Boostなどの総称プログラミング、C#のGenerics,delegate、Reflection,CodeDOM、属性などを使って代替することは出来ないものなのでしょうか?
>>382 ・Haskellは関数型言語です。
・関数型言語とは関数中心のプログラミング言語です。
・関数は入力に対して出力を返します。
・関数型言語には代入が存在しません。
Haskellのメリット
・プログラムが短く書ける
・型チェックが強力
・遅延評価
・代入がない(代入文はプログラムを煩雑にする。たとえば大域変数。オブジェクト指向でいうメンバ変数も規模をクラス内にとどめた大域変数のようなものである。)
・みんなが難しいと思っている言語なのでカッコイイ
>>384 この代入がないっていう部分が理解できてないんですね。手続き型と考え方が違うんだろうけどそれがわかってない。
オブジェクトという概念はもたないんですか?この場合オブジェクトとは状態をを持つ何かとします。
たとえば、押されている状態とそうでない状態のどちらかを持つチェックボックスとか。
逆にそういうものをHaskellで取り扱いする場合にはどうするんでしょう?
>>385 レコード型とか使ったらできるんじゃない?
>>384 「代入がない」といういい方は不正確だと思う。
必要ならいつでもIORef, STRefを使って代入を表現できる。
「不必要に代入を使うことを強制されない」と言った方がいいんじゃないか。
つーかそこらへん関数型の肝なんだから興味あるなら入門記事でも読めや。
>>387 それよりもむしろ 代入文がない の方が正しいかも?
>>388 いい記事見つけられなかったのかもしれんし、自分の理解足りないと思うんだが代入とかしないでどう処理を進めてくのかがまったく理解できんのよ。
>>390 まず、遅延評価は理解してる?
あと、プログラミングが「慣れ」であることは大体は共通の認識だろうけど、
とりあえずサンプルプログラムをたくさん見るべきだね。
>>390 まず、入出力の絡まない処理が代入無しでできるのは分かるか?
具体的なコードを例示して教えてくださいよ。 話のわからない人たちですね。
>>394 理解できていないかも。
自分の中でプログラムのイメージは複数ある生成・消滅するオブジェクトの状態が、複数の実行スレッドによって変わり行くさまというものなので。
代入なしでオブジェクトの状態を変えることができるのか?という疑問が。
その考え方と関数型のものの考え方はまったく異なるんですかね?
>>396 いつでも聞けば答えてもらえると思うなよ。
例が見たいなら自分で調べろ。
Haskellを広めたい人がHaskellで書いたプログラムをオープンソースとして公開しているはずだ。
ダメだ。ここの住民生産性低杉。
>>397 効率を考えない方法だと、状態の違うオブジェクトを毎回生成するような感じ。
### 手続き的なOOP
#oldobj = obj.copy
rtn_val = obj.do_something
#newobj = obj.copy
## newobj.state != oldobj.state
### 関数型
(newobj, rtn_val) = do_something obj
## newobj.state != obj.state
>>397 個々のデータを、「生成・消滅するオブジェクト」と見る代わりに、
「単なる無個性な値」とみなす。
例えば、住所録を扱うことを考えると、手続き型言語では
「空の住所録オブジェクトを生成し、そこにfoo氏の情報を追加し、bar氏の情報を追加し、…」
と操作するのに対し、関数型言語では、
「「空の住所録にfoo氏の情報を追加したもの」にbar氏の情報を追加したものを、…」
というイメージで操作する。
この方法では、「空の住所録」と「foo氏の情報を含む住所録」と
「foo氏及びbar氏の情報を含む住所録」は全て異なる「値」で、互いに無関係。
>>400 ・・・わからんです・・・
オブジェクトを毎回生成するのは元のオブジェクトを元に生成?
そうでないなら、どうやってそのオブジェクトの状態の整合性を保障する?
オブジェクトで考えないほうがいいのかな・・・
>>401 その場合手続き型の考え方のほうが自然に思えるんですが・・・
関数型で住所録にfoo氏及びbar氏の情報を登録したい場合、「foo氏及びbar氏の情報を含む住所録」を作るとして、
今度それにあとからdog氏を追加したい場合、「foo氏及びbar氏の情報を含む住所録」というのはどこかにとっといてるんですよね?それを元に「foo氏及びbar氏及びdog氏の情報を含む住所録」をつくると。
だとしたら形式的には毎回オブジェクトを生成してるのかもしれないけれど、実質的には住所録オブジェクトに住所オブジェクトを追加すると変わらない?
object is poormans closer!!!!!!!!!!!!
>>402 >オブジェクトを毎回生成するのは元のオブジェクトを元に生成?
当然。そのためにobjを引数に取っている。
>>403 >実質的には住所録オブジェクトに住所オブジェクトを追加すると変わらない?
常に最新の住所録オブジェクトだけを利用し続けるのであればそう。
関数の引数に住所録を持たせる。
>>405 住所録を複数の場所(入力処理、削除処理、検索処理、表示処理)から扱いたい場合、結局は最新の状態である住所録をどこかに保持しないといけないんですよね?
だとしたら、それがどのように関数型のメリットであるプログラムが煩雑にならない?とむすびつくのでしょう?
それとも考え方がおかしい?
>>407 確かに、「最新の住所録」という唯一の住所録があって、それを操作することにしか興味がない場合は、
「プログラムが煩雑にならない」は当てはまらないかもしれない。
>>407 >だとしたら、それがどのように関数型のメリットであるプログラムが煩雑にならない?とむすびつくのでしょう?
全部が全部煩雑にならないように出来るというわけではないよ。
状態変化とかは手続き型で書いた方が簡単だし。
OOPではデータの特徴を括りだして共通した操作をクラスにまとめ上げるけど、
関数型では処理の共通部分を括りだしてより抽象化した関数にまとめる感じ。
410 :
デフォルトの名無しさん :2006/04/16(日) 14:15:23
object is poormans closer!!!!!!!!!!!!
結局、明確な生産性の差を述べるレスはなしですか・・・
>>412 「聞けば答えが返ってくるような問題」なら、ググれといわれるだろう。
研究的価値があるのはそれ以上のことで、
たとえアイデアがあったとしても、研究も競争なのでこんなところでは書かないし、
すぐに思いつくようなことなら「聞けば答えが返ってくるような問題」になるから。
>>414 説明できないのはわかってないから。これまでの質問でそんな研究のことなんか誰も聞いてないことぐらいわかるだろうに・・・
なんて生意気な質問者なんだろう。 俺は放置するよ。
>>412 そんなに生産性が気になるなら自分で勉強して試してみてくれ。
それだけの調査にも値しないと思うなら世間の評価が固まるまで待てばいい。
Haskellを学んでいて分からないところがあるならここで聞いてくれれば喜んで手伝うが、
生産性の高さを自慢するような芸当は少なくとも俺にはできん。
418 :
382 :2006/04/16(日) 16:41:33
419 :
382 :2006/04/16(日) 16:42:22
誰だよ、関数型言語を使うと生産性があがる、なんて宣伝した奴は。 関数型言語は他にはない高度な抽象化機能を提供する、とでも言っておけば良かったのに。
誰も、手続き型との違いを言えません。本当にありがとうございました。
そもそも違いなど尋ねられていないわけだが。
生産性が高い→違いがあることから生じる。 読解力だかめとこうや。
>>424 論法がおかしい。
違いを挙げろというなら簡単だ。
それらの違いのうち、何が生産性の差をもたらすかという質問はまた別の話だ。
>>425 すまん。それらの違いのうち、何が生産性の差をもたらすかという質問にしてくれ。
「Productivity Haskell」という本を書いたら買いますか?
428 :
デフォルトの名無しさん :2006/04/16(日) 18:29:17
>>428 それは、CでC++みたいなクラスをまねるようなもので作りやすさでは段違いということなんでせう?
根拠のない生産性を強調しすぎると、 RubyやCurlみたいな立場になるぞ。 せいぜい面白い言語です、にとどめておけばアンチも出ない。 こんなこと今更言っても既にRubyの道を辿っているようにしか見えない。乙。
>>429 書きやすいということだけではなく、エラーチェックとかのデバッグ面でも段違いだと思う。
>>426 考えてみた。あまり当てにしないでくれ。括弧内はそれを可能にする言語要素。
1.抽象化の能力
分離できる概念はかなりの確率で分けて定義できる。(代数的データ型、遅延評価)
共通部分のある処理はかなりの確率で共通化できる。(高階関数)
2.コードの簡潔さ
不要なものを書く必要がない。(変数の値が不変であること)
3.良い設計をencourageする(代数的データ型、第一級の関数)
自信無し。気のせいかも知れない。
で、それぞれC++と比較してみると、
1.はほぼ同等。ただしC++のコードは2.を犠牲にしやすい。
2.は圧倒的にHaskellが有利。
3.(不明)
C++のテンプレートって展開が停止するかどうかっていう判定が不可能らしいね。
17回でちょんぎっていいことになってるんでコンパイラは困らない。 ユーザは困るが。
フィボナッチ書けるだろ
だからここでC++の話をするなと
>>432 ちょっと聞いてもらえます?
ヒドイんです…。今の彼とは、もぉ〜えっちしたくないんです。
なにがヒドイって、めっちゃくちゃイクの早いんです。
どんなに頑張っても3分間…3分間ファッキングですよ(>。<)
「絵里のアソコが物凄い喰いついてくるんだ」って言うから
私のせいなのかもしれないけど、このままじゃ困っちゃう!
ハマチだって刺身にされても3分間以上は生きているのにね。
私だってもぅハタチ、喰いつくなら美味しいモノが食べたいよ。
3分間でイッてもいいけど、せめて早く動いて欲しいのマイドリーム。
速くか長くか、2者選択のけなげな私にリスペクト。
あなただったら美味しい思いが出来るかな?
試してみたいな。。。
>>437 彼に遅延評価してもらえ。
実際に評価するまでは速く動くだろうよ。
ありがとう。 やってみたけど、正格性解析されて一気に評価されちゃいました。。。
>>440 そりゃ、あなたが解析しやすい、単純な女だからさ。
ネタはネタスレで
ネタはネタスレで
ネタはネタスレで
ネタはネタスレで?
このスレのPart1の過去ログは読んで役に立った。 今のスレは役に立たない。
>>432 2.は状態がないということに関連するの?
>>446 自分が役に立とうという気はないらしいな
>>447 新しいインスタンスを得るのにわざわざnewしたり、既存のものをcopyしたりするのは面倒。
それから、Haskellのコードが簡潔になる傾向がある原因の一つとして、
Haskellでは繰り返しを表現するのに明示的な再帰ではなくリスト操作を使うことが多いんだが、
そういうときリストをサクサク使い捨てることができないととても不便。
>>449 >なんで 1.はほぼ同等なんだ?C++で持ち運んで代入したりできるものといったらプリミティブぐらいだろ?
ユーザー定義型を持ち運んだり代入したりできる。
書き忘れてたけど、
>>432 で「C++」と言ってるのは
Boost(や、場合によってはFC++)などのライブラリを十分活用した場合の話。
Boostには、例えば次のものが含まれている。 function 第一級の関数 optional Maybeに相当 variant 代数的データ型に相当 lambda 無名関数を構築するためのコンビネータライブラリ 関数の部分適用もできる tuple タプル iterator 遅延リストのようなもの >比較するんならC++みたいなメモリリークが起こるバキーな言語じゃなくてJavaとかの方がまだましだと思うんだが。 俺はJavaは詳しくないんだが、上に挙げたようなライブラリは用意されているんだろうか。
なんか賑わってますね。 ようやくhaskellの真の実力が世間に認知され始めたのかな?
あんな本でも、日本語の本の影響は大きいんだな。 むしろ、あんな本だから影響が大きいのか。
>>453 ごめんなさい。
はじめの方で自演していました。
あまりに人が少なかったから。
457 :
449 :2006/04/16(日) 22:25:10
真面目なスレですね。通りすがりで後ろのほうだけ読んだせいで煽り気味の文章を書いてしまったのでフォローします。 C++でアルゴリズムや型を抽象化するには必ずクラスやテンプレートを定義しなければならない。 関数型言語の場合は、とりあえず書き始めてアルゴリズムができてきたらその部分をコピーしたり必要ならクロージャに入れて外で使うなり関数内で移動するなり割と簡単にできる。 関数の引数が増えた、とかローカル変数を共有したくなったりしたら、その時点で型を作るなり言語の抽象化機能を使う。(これ自体はC++でもできる) 型の実装を変更しても、ML以降の関数型ならアルゴリズムの実装の変更に対して型を推論させながら修正できるから、わりとスムーズに移行できる。インタプリタがあることが多いのでその場合はリターンも早い。 (つづく)
458 :
449 :2006/04/16(日) 22:26:14
(つづき) カリー化その他の抽象化能力の話もいろいろありますが、こういう感じで関数型言語は書きながら抽象化を進めていくのが容易だ、と言えると思います。 この話はC、C++(Boost含む)、Java、C#、Basic、その他手続き型言語とML以降の関数型言語との比較に於て言える内容でしょう。 >比較するんならC++みたいなメモリリークが起こるバキーな言語じゃなくて これがまずかったみたいですね。煽るつもりはありませんので。
459 :
449 :2006/04/16(日) 22:29:52
読み返したら口調が変わりすぎて気持悪いから自分でツッコミ入れとく
>>459 ( ゚д゚)
_(__つ/ ̄ ̄ ̄/_
\/ /
( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_
\/ /
こっちみんな
( ゚д゚ ) _(__つ/ ̄ ̄ ̄/_ \/ / (゚д゚ ) _(__つ/ ̄ ̄ ̄/_ \/ /
>>457 結論は分かったけど、例が全然理解できない。
特に、関数型言語でできてC++で出来ないことと、
型推論がコードの修正にどう影響するかがわからない。
良かったら解説してもらえないだろうか。あるいは参考文献でも。
使ってみりゃわかるよ。
5000行位は書いたんだが…
50000行ぐらい書いてみろ。
違いという話では、C++には パターンマッチは流石にねーだろ。
>>464 ちょっと興味はあるんだけど、使ってみていじくるまで今元気じゃない・・・orz
>>467 そういう話をすると、どうせBoostでどうのとか信者が言い出すんだろ。
>>467 boost::variantにapply_visitorってのがある。
すごく面倒だが。
HaskellはHaskellコンパイラーを書くための言語(ニヤリ
ム板でこれだけコードの出ないスレも珍しい。
コード要りません。理論だけで十分です。
474 :
449 :2006/04/17(月) 02:24:00
>>463 ライブラリで関数型言語をエミュレートできることと、関数型言語であるということには遥かにへだたりがあります。
Boostで関数型の振舞いができても、C++のコアに関する細かい知識が無いと結局使いこなすことはできないでしょう。
Boost氏の意見は自分でクラスやテンプレートを定義しないという前提でしか成り立たないのではないでしょうか。
>>464 を言わないために言葉で説明してみたけど、これ以上言葉だけの説明は無理に思えます。私も464に同意です。
449はMLの人間でC++ vs 関数型言語にレス付けただけなのでこれで消滅します。すんません。
参考書が示せないので、何かプログラムのテーマを考えておいてください。Haskell初心者で参加します。
名無しに戻りました。
>>474 木を使うアルゴリズムが分りやすいんでないだろうか。
そんでBoost氏がC++で書いてくれるのか?
プログラムの過程を示すってコードに文字数が要りそうだけど・・・
木を使うアルゴリズムなんてほとんど知らないんだが… いちおうこんなのを考えてみた。 data Bound a = Inclusive a | Exclusive a | Unbounded -- 範囲の境界 type Range a = (Bound a, Bound a) -- (下限、上限) data RangeMap k a =... -- kの範囲にaの値を対応させる写像。木で表現される。平衡木だとなおよい。 empty :: (Ord k) => RangeMap k a -- 空の写像 insert :: (Ord k) => Range k -> RangeMap k a -> RangeMap k a --既存の写像を部分的に上書き update :: (Ord k) => Range k -> (a -> Maybe a) -> RangeMap k a -> RangeMap k a --既存の写像を部分的に更新 lookup :: (Ord k) => k -> RangeMap k a -> Maybe a >そんでBoost氏がC++で書いてくれるのか? いつのまにかBoost氏にされている訳だが。 「書きながらの抽象化」を示してくれるというなら頑張って書きますぜ。
ネタ: DOM風の木を走査する ・ノードはテキストもしくはエレメント ・エレメントはタグ文字列と子ノードからなる とりあえず型を定義 data Node = Text String | Element(String,[Node]) deriving (Eq,Show) ・再帰型の中にリスト(子ノード)があると適度に複雑な気がした。 ・実はHaskellで相互再帰型の定義の仕方がわからなかった。 ・Element a b ではなくて Element(a,b)にしたのはサンプル木を書くときに Element("html", [Element("head", [Text "foo", Element("meta", [])])]) のように途中で改行してもエラーにならないというコーディングの都合だけの理由。 ステップ: 1 左・深さ優先前順序、いわゆる文書順序でノードを訪れるアルゴリズムを書く 2 左右の順序、深さ・幅の優先順位、前・中・後の順序を変えつつアルゴリズムを書換えていく 3 木の構造を定義しなおして書換える 2の途中である程度見えてくる気がするナァ
>>447 もう皆どうでもよくなったんじゃないかと思ってたら被ってしまった。
447を見てもすぐには理解できません。Haskell文法のAAの出現を予感。
BoundのInclusive/Exclusiveはどういう意味ですか?
Boost初めて覗いたけど面白そう。
Boostでも再帰型が定義できるんですか?かなり見てみたいです。
でも478でインデントされなかったのは何故だろう?
>>479 >BoundのInclusive/Exclusiveはどういう意味ですか?
半開区間(0, 4]を(Exclusive 0, Inclusive 4)と書けるといいな、と。
>でも478でインデントされなかったのは何故だろう?
HTMLの仕様と思われる。 を半角スペースの代わりに使うといいかと。
もしかして半角はインデントされないってこと? 全角インデント 半角インデント kita使ってるけど プレビューでもインデントされない。 kitaと板とどっちがおかしいんだろ
484 :
デフォルトの名無しさん :2006/04/17(月) 22:56:48
firefoxで試してみる。   半角インデント
残念でした。
>>484 プレビューと間違えた。しっかり 入ってます
487 :
デフォルトの名無しさん :2006/04/17(月) 22:59:27
パチンコ&スロット解析用ソケット
メイン基盤上のチップLE2080,2280,4280のプログラムが
市販品のロムライターで読み込みできます。
確率や連チャンの仕組みが一目瞭然!
攻略法はあなた自身で見つける時代です。
http://www.3-you.com/
>でも478でインデントされなかったのは何故だろう? タコな2chスクリプトがインデントを展開してくれないから &nbsp;と書くか全角スペースでインデント汁
489 :
デフォルトの名無しさん :2006/04/18(火) 00:29:38
>>477 ツォルンの補題まで行ってきました。
なんでそうなったかは自分でもよくわかりません。
明日のナゾナゾにしてもう寝ます。
Haskell書いてると疲れるのは何故?
慣れてないから
Schemeみたいな言語になれちゃって,Haskellではいつも型宣言を書かずにプログラムを書いてしまう。そしてインタプリタに読み込ませて型が何かをチェック。 俺ってHaskell向いてないかな?
よく自分の書いた型宣言よりもさらに抽象度の高い型宣言を型推論さんが教えてくれるのですが,Haskellerの皆さんはこのようなときはどうしているのでしょうか?それともこのようなギャップはあまり生じない?
495 :
デフォルトの名無しさん :2006/04/18(火) 17:07:15
>>477 a<b<c<d のとき(a,c)<(b,d)ということでしょうか?
でも(a,d)と(b,c)の比較がやっぱり分りません。(a,d)>(b,c)なんだろうか・・・
RangeMapはこういう解釈でいいんでしょうか?
・RangeMap型のオブジェクトは次の写像と同値である。
r(1),r(2)...r(n)のn個の整列された範囲が与えられているとき、
範囲rを自然数iに対応させる写像であって、rをr(i)とr(i+1)との間に挿入すると
また順序列となる。だだしr(1)の前に挿入するときはi=0。
・順序木を導入して効率アップ
>>495 説明不足だった。申し訳ない。
意図としては、RangeMapはk型の値からa型の値への写像。
例えば、
a0, a1 :: RangeMap Integer String
a0 = insert (Unbounded, Unbounded) "foo" empty
a1 = insert (Inclusive 0, Inclusive 10) "bar" a0
と定義すると、a0はあらゆる値に"foo"を対応させる定数関数で、
a1は、0以上10以下の値には"bar", それ以外の値には"foo"を対応させる関数。
どっちにしても、
>>478 がまともな例題を提示してくれたので、
>>477 は用済みな気がする。
本物のプログラマは型推論に頼らない
本物のプログラマはそもそも型に頼らないだろ
確かに本物のプログラマはHaskellで書かれているからな
本物のプログラマはuniversal domainを使う
一方ロシアはJavaを使った。
型がないと、ある種のパラドックスに陥る。 それは容易にバグに結びつく。 強い型付きの言語というのは、そういう意味で安全なんだよ。
型型うるせえな!!
506 :
デフォルトの名無しさん :2006/04/18(火) 22:12:10
>>497 reading A Gentle Introduction to Haskell Version 98 ... done
reading Twe Dozen Short Lessons in Haskell ... (Interrupt)
reading Yet Another Haskell Tutorial ... (Interrupt)
error: unresolved keywords: class instance deriving monad '...' '>>=' ...
やっと477が普通に見えてきたところです。
相互再帰は普通にできるんですね。
478のステップ2ではこういうかんじで使う関数を想像してました。
traverse Left2Right BreadthFirst InOrder node
ちなみにC++で nodeGenFoldr を書くとどうなるんですか?
速すぎてついていけませんが解析中
reading 2ch/code321.txt ...
型推論はなるべく使わないほうが良い。初心者なら特に。
508 :
デフォルトの名無しさん :2006/04/18(火) 22:23:04
>>497 そういえば以前MLでfoldを使わずに相互再帰で走査していくときに型推論が役に立ったことがあります。
509 :
デフォルトの名無しさん :2006/04/18(火) 22:53:37
511 :
デフォルトの名無しさん :2006/04/18(火) 23:24:16
>>492 関数を書いたあと推論を固定したいときはコピペして宣言、気にくわなければ型に手を加える、で十分だと思います。
関数型言語、特にHaskellのようなpureな言語では、型を見るだけでどういう関数なのかほぼ解る。 a -> a 型の関数はまず間違いなく id だし、a -> b -> b 型は、第二引数をそのまま返すものであろう。 a -> Int とかなら、何を適用してもIntの定数を返す関数と推測される。 (a -> b) -> [a] -> [b] なんていう型の関数があったら、返値の要素は、第一引数である関数で もって第二引数の要素から作ったものである。 自分で書いた関数が (a -> b) -> a -> a とか推論されたら、第一引数の関数またはその返値を どこかで捨ててしまっている。 型推論を活用しながらコーディングってつまりこういうことだと思っているが、違う?
513 :
デフォルトの名無しさん :2006/04/19(水) 00:30:38
>>512 >自分で書いた関数が (a -> b) -> a -> a とか推論されたら、第一引数の関数またはその返値を
>どこかで捨ててしまっている。
> 型推論を活用しながらコーディングってつまりこういうことだと思っているが、違う?
だいたいそう。
1) 予想した型と推論された型が一致しなければ、実装か、そもそもアルゴリズが間違っていた
2) 予定の型を書いておいて型エラーが無くなるようにコーディグする
2a) 関数の型を修正するときに先に型を書き、型エラーが無くなるまで中身を修正する
2a') 関数を分割するときに部分的な型を抜き出し、コピペした実装と一緒に宣言して2a)
2c) 最初に型を宣言して頑張ってコーディングする
2c)はあまり記憶が無いけどこんなかんじかなあ。
予想とはいっても型が長いときはびっくりするような推論が帰ってくるから、それをもとに正確な型はこうだ、と決めてる気がします。
始めのころは推論にびっくりしてストップしていましたが、何かを書きかけている途中でそれが起こるとしょうがなく解析して理解しました。慣れていくと実は逆の活用ができるんだ、と感じるようになりました。
ありきたりだけど、型推論に慣れる・慣れないというのはそういう「driving application」があるかどうかの話だと思います。
結局464という話になりますが。
515 :
デフォルトの名無しさん :2006/04/19(水) 01:07:25
>>510 参考になりました。ありがとう。
fptoolsでHaXmlをダウンロードしてあるのにghc6.4には何故かインストールされてませんでした。libraries/以下だけを再ビルドする方法も思い出せません。そもそもできたかどうか。トップからビルドし直すとまた信じられないような時間かかるし。
ghcはインストールがうっとうしいです。FFIもいっぱいあって、バージョン間の互換性も低いし。Makefileを書きかえてライブラリを追加したりとか。
インストールが成功したころには全然別の所に行ってしまってることが多いのでもうしばらくして試してみます。
reading 2ch/code321.txt(continued) Yet Another Haskell Tutorial(continued)...
>>514 わざわざありがとう。
これがHaskellと同じように読み書きできるんですね。恐れ入りました。
ちょっと頭のリソースが足りないので、今度Boostを試してみるときに参考にします。
ghcのコンパイルに 100時間以上かかってるんですがこんなもんですか? 前は半日くらいでできてたはずなのに。
いくらなんでも時間かかりすぎ どんなコンピュータだよ
GHC 6.4.2来たよ
いつもソースからビルドしてるんだけど、バイナリよりどれだけ速いか比べたことある人いませんか?
どう考えてもビルド時間を回収できるほどには速くなりません。
じゃあバイナリにします。ありがとう。
>>512 っ [ P. Wadler, Theorems for Free! ]
>>523 もちろん読んでる。Reynoldsも。
525 :
デフォルトの名無しさん :2006/04/20(木) 21:16:08
もっと議論したまえ。
ミ 二__, --、r'"___、 ヾ ト、::ヽ ミレ'"~,-,、 ! ! ' '" ̄ .ノ \ヾ:、 K/ー'~^~_/ ヽミ:ー‐‐'" ヽ i. !〉 ー―'"( o ⊂! ' ヽ Y_ i ,.:::二二ニ:::.、. l i .! :r'エ┴┴'ーダ !Kl .i、 . ヾ=、__./ ト= ヽ. :、 ゙ -―- ,; ,! \. :. .: ノ ヽ ヽ . . . . . .イ
過去ログ読まずに質問するですがHaskellで言語処理系実装するのってどんなメリットありますか? Microsoft Researchの人が書いてた埋め込み言語のコンパイラHaskellで書くとこんなにスゲェぜ! 風なペーパーを見掛けて気になってたんですが、どこで見掛けたのかすらわからなくなって もう気になって気になって・・・ +compiler +"in haskell" とかでググってもそれっぽいの出てこないし。あぁ気になる。
Haskellはあらゆる開発であらゆる言語を遥かに凌駕するのは周知の事実。 だから言語処理系の実装も例外ではないというだけの話。 特にI/Oが比較的単純でロジックの実装に集中できるから得意中の得意といっていい。
Haskellと比べれば他の言語は子供だまし。 あらゆる分野で断トツ。
学者もどきが礼賛してるただの 一風変わったオモチャだと思ってるけど違うの?
.NETに連携できればなぁ。グルーはC#でかくから。
Haskell にも格好良い渾名がいるんじゃないだろうか。
533 :
デフォルトの名無しさん :2006/04/21(金) 22:07:29
唯一Haskellに対抗できそうなのがC++
534 :
デフォルトの名無しさん :2006/04/22(土) 09:47:58
「ふつうのHaskellプログラミング」マダー(AAry Racc本の青木峰郎さんに期待age
俺も入門Haskellが糞だったのでふつうのHaskellプログラミングに期待
勝手にナイトメアHaskellにも期待
haskellの悪夢か… プログラム中で定数として色々な計算に使っていた値(重力定数とか)を、 「コマンドラインの引数で値を指定できるようにして」といわれた時とか。 main以下のほぼすべての関数に、その値を表す引数を追加する (もしくはmonadを使ってその受け渡しをラップする)羽目に… こういう時だけは破壊的なMLが羨ましくなる。
>>537 激しく同意。
パラメータつきモジュールみたいな言語要素が欲しい。
\(g :: Double) -> module Foo where ...
>>537 つ Implicit parameters
確かに他の言語ではあり得ないおぞましさがあるからな
実際 Haskell って「可変性」って観点からはどういう評価なん?
>>538 こういうのは?
data Foo = Foo {f1 :: ..., f2 :: ..., f3 :: ...}
ConstructFoo g = Foo f1 f2 f3
where
f1 = ...
f2 = ...
f3 = ...
まあ最初から可変になることがわかっていたら色々手もあるだろうが、 後から可変にするのはやっかいだね。
546 :
527 :2006/04/22(土) 21:49:47
>> 528, 529 マジですか。ちょっと勉強してみようかなとか思ってきた。 HaskellにLispのマクロみたいな機能ある?コレがないと暮らせないんだけども。
>>546 勉強したいというなら止めないが、
>>528-529 を真に受けるなよ。
>HaskellにLispのマクロみたいな機能ある?コレがないと暮らせないんだけども。
標準じゃないけど、template haskellってのがある。
>>543 538ではないが、もう少し詳しく教えてください
>>537 , 541, 545
Haskell への憧れが一気に冷めました
時代の最先端をいく言語だと思ってたんですが
550 :
デフォルトの名無しさん :2006/04/23(日) 08:44:35
Hugsって死滅しちゃうの???
ghciがあの遅さではhugsの代わりとしては使えない。
まあいろいろ考えると結局LISP最強なんだな
>537 cleanなら getEnvironmentVariable で環境変数を使う手があります。 worldが関係ないので。
HaskellのIOが使いづらい理由の一つは、世界の状態に影響をあたえる動作と そうでない動作を区別しないことじゃないだろうか、とふと思った。 getHomeDirectoryとかreadArrayなんかの読み出し動作は 相対的な実行順序を指定せずに使うことができるべきだよな。
>>554 読み出すだけの動作は、影響を与えないが、
「影響を受ける」から、やはり実行順序依存なのだが。
純関数的なものはモナドに入れずに、例えばdo構文の外で
let, where束縛すりゃいいし。
STとSTRefの使い方がやっと分かった。 こんな仕組み作るぐらいなら素直にimperative使えよ・・・。orz
>>555 いや、「世界に影響を与える」動作との相対的な実行順に依存するのは分かるんだが、
v[i] = v[i-1] + v[i+1];
みたいな操作でreadArray間の実行順を指定するのは馬鹿馬鹿しい。
厳密には違う話かも知れないけど、
home <- getHomeDirectory
h <- openFile (home++"/.foorc")
とか、
eof <- isEOF
if eof ...
とかも同様に馬鹿馬鹿しく感じる。
おっと、openFileの第二引数を付け忘れた。まあ察してくれ。
Audrey Tangが性転換してたとは知らなかった
入門Haskell結構売れてるみたいなのに、このスレが初心者質問で賑わわないのはなんでだろう。
読者が理解できてないから。
日経ソフトウェア読んだ人いる? あのDQN雑誌にHaskellの記事が載ったそうだけど。
生産性ねぇ.経験からいうと静的型付け?と変数への代入がないことが間接的に生産性をあげてるとは思う. 手続き型言語とかオブジェクト指向言語でプログラム書いてると,つねにプログラム全体を意識してないと きちんとしたプログラムを書けないわけですよ.「この変数 hoge はこのループに入る前にこの関数でこういう処理を されたから値は A か B か C のはず.だから今書きかけのこの行で foo という処理をしても問題ない.」てな感じ. 最近集中力が落ちてきてるうえに日常的にプログラムを書くわけではない僕にはこれが辛い. ちなみに先日 elisp でプログラム書いてて,型をあわせるのに随分気を使ったです. でも Haskell だと *関数の定義を積み上げてプログラムを書く *プログラム中に現れる値は恒に同じ値(参照透過性) *型の間違いをコンパイラがチェックしてくれる などから,考える範囲を局所化してもちゃんとしたプログラムを書くことができる. つまり,頭は使うかもしれないけど神経は使わなくてよい.頭を使うと後で生かせるけども神経を使っても疲れるだけ. 神経が消耗しないだけ生産性はあがってると思うよ.
ま,Haskell で書いたプログラムの行数は合計しても三桁行程度の素人の意見だから 参考にならんかしらんけど.
プログラムの正当性とか考え始めると、C みたいな言語は使いにくいよね。 一応 C で書くときはHoare論理を意識してるけど、かなりめんどい。
>>567 お前はHoare論理と書きたかっただけとちゃうんかと・・
得意げな顔して何が、Hoare論理を、だ。 お前は本当にHoare論理を意識してるのかと問いたい。問い詰めたい。小1時間問い詰めたい。 お前、Hoare論理って書きたいだけちゃうんかと。
ほ、ほーっ、ホアアーッ!! ホアーッ!!
声優オタは詩ね
>>565 >頭は使うかもしれないけど神経は使わなくてよい.
>頭を使うと後で生かせるけども神経を使っても疲れるだけ.
なるほどね。でも現状CやJavaがこれだけ使われてる時代において、
神経を使うことを嫌うっていうのは、もうプログラマとしての適性を
亡くしてしまったともいえるな。
もしかしてプログラマの適性を亡くしてしまった人、もしくは最初からない人が
関数型言語に興味を持ってたり。
とりあえず紳士的にHaskellお勉強中だけどこのスレ読んでてつまらん。 もっとコードベースのお話してよ。
くだすれHaskellなんてどうでしょう?
ここだと何か問題でもあるのか?
回答者のレベルが低い。口先だけ
それは新しくすれ建てて解決する問題じゃないと思うが。
では ナイトメア言語Haskell Part1 で
数理論理学勉強してない人が、このタイプの言語使ってみたところで、言語の目的とかが見えないんじゃないかな・・と思う。 言語仕様を覚えるだけなら誰でもできるけど、本質的なことは本当に理解している人しか見えてこないよね。
はいはい雑談雑談
雑談以外に何をしろと?
ここでHaskellプログラミング演習の講義でもしてほしいのか?
俺にとって役に立つなら言語の目的なんぞどうでもいい。
>>584 それを知らなければ有効に活用できないから言ってんじゃん。
はいはい雑談雑談
雑談以外に何をしろと?
>>585 「有効」って言葉をどういう意味で使ってるか分からんが、
他の言語と比べて(そいつにとって)役に立つならHaskellを使う動機として十分であって、
必ずしもHaskellの能力を最大限活用する必要はないだろ。
>>580 ほら、こういう口だけ理屈屋しかいないから、具体的なコードの質問ができないんだよ。
ラムダ計算の質問なら答えてやるよ。
このスレでは言語仕様は理解しているものとして話を進めてOKだよね。 Haskellを触ろうと思っているような人なら素人じゃないだろうし。
具体的なコードの質問は
>>580 以外の住人が答えるから大丈夫です。たぶん。
だいたい、これからプログラミングを始めよう、がいるんだとしたら、「どうしてHaskellを選んだの?」って聞きたくなるよ・・
>>591 議論はそれでいいんじゃね?
言語仕様を把握していない初心者は発言するな、って意味だったら賛成できんが。
Haskellはまだまだ素人には使いにくい言語だし、環境も十分に整備されているとは考えられない。 世の中でもっとも力のあるパラダイムであるオブジェクト指向やらアスペクト指向やら、また様々な開発手法との連携という点では はっきり言ってまだ何も確立されていない。 このような状況の言語を一般的なプログラマ・ど素人プログラマが理解できるわけがない。
>>595 は結局「俺は素人にあらず」と言いたいだけなんでしょ
>>596 そんなことは一言も言っていない。論理的思考が苦手なのか?
ただ自分の体験談を語っているだけだ。
これからHaskellに乗り換えてみようかなと考えている人は、今使っている言語を提示してみるといいよ。 そしてその言語ではこういうことができるんだけどHaskellではどれくらい簡単にできるのか聞けばいいんじゃないかな。 まったくプログラミングしたことがない人は比較対象がないからHaskellがいいのか悪いのか判断するのが難しいと思う。取り敢えず他の言語を使ってから話に参加するといいんじゃない?
>>595 >Haskellはまだまだ素人には使いにくい言語だし
>(...)
>このような状況の言語を一般的なプログラマ・ど素人プログラマが理解できるわけがない。
前提と結論が同じ訳だが。
使いにくいと理解しにくいは別ですよ?
HaskellでSQLサーバと通信するコードはどんな感じになるのか見てみたい。
>>600 確かに。しかし、
>Haskellはまだまだ素人には使いにくい言語だし
これには全く同意できんな。
少なくとも議論の前提にすることじゃない。
>>598 これからHaskellに乗り換えてみようかと考えています。
今使っている言語はCiCです。
CiCではimpredicativeな型を使って、sort済みlist型のような洗練型を
定義できるのですが、Haskellではどれくらい簡単にできますか?
haskellは凄いことができるのは保証できるが、 まだ、実用として使えるレベルにないのと 便利さ的にも発展段階な感じがする。
まず、どうやって周りの開発環境と並存していくか、というのが一つの問題だよね。
入門者です。 再帰処理を学ぶには最適な言語な気がしますが、 実用がまるで思い浮かびません。 皆さんは何に使ってるのですか? ぼくは普通のテキスト処理ならperl、guiならjavaを普段使ってます。 趣味でpythonも好きですが、 Haskellだと言語自体を学んだら 次に何をしたらよいやら… 道は険しいのでこのまま勉強だけでも 実は楽しいですが。
>>607 言語を覚えたいだけなら別に何も文句は言わないけど、何のための言語かというのはちゃんと理解しておいたほうがいいよ。
あと、Haskellはマイナー言語の一つなので、確かに知っていることは悪くないことなんだけど、誰もそれを評価してくれないよ。
面接で「Haskellを覚えています」と言ったところで、せいぜい「ふーん・・・」と返されるだけだからね。
再起処理がしたいならあなたが覚えている言語で十分できるから、別にHaskellでなくてもいいんじゃないかな?
CiCってなに
Combat Information Center
>変数への代入がない 変数がなくて、なんで動くの? 使う人がたとえば5番を選んだとき、それは、どこに入力されるの?
計算モデルとして代入がないというだけであって、計算機の中で代入が行われないという意味ではないよ。
>>613 代入はなくても初期化はある、という落ちだと思っとけばおk
再代入が存在しないというのが正しいのかな
ところで、CiCってなんだったの?
Common instance andCommunicationS 一言で言うと、 全ての可能な関数の挙動があらかじめ抽出されていて、 その組み合わせでプログラミングを行う オブジェクト志向と関数型言語の合いの子 だったらいいな
Calculus of Inductive Contructionsでいいのか? 定理証明器とかそっちの話か。
>Contructions Constructionsね、失礼。
一度代入されたら固定されて定数になるのか。 なんとなくわかった。
lambda cube上だとHaskell(System Fのsubset)が手前側左上、 CiC(CCのsuberset)が奥側右上だな。
よくわからんが、つよそうだということは分かった。
haskellerは細かい所を異常に気にするし、 そうあるべきだから、 代入がないと断言するのが正しいと思う。
GHC 6.4.2 のWindowsバイナリがようやっと出たので 喜び勇んでインストールしたんだが、lib/ が無くて、 HS*.o やら libHS*.a やら gcc.exe やら perl.exe やらが ベースディレクトリ直下にずらずらと並んでおる。 どういう構成変更があったんだ。
Unix版と同じになったんじゃない? linuxでビルドすると .../ghc-6.4.2 以下に hslibs-imports/ icons/ imports/ include/ ができるよ。
629 :
デフォルトの名無しさん :2006/04/27(木) 21:08:32
入門 Haskell を呼んでいるんですけど State モナドが判らなくて・・・ get ってどこから中身を持ってきているんですか? しかしこの本簡単なところばかり詳細に説明して難しいところは説明も例も無いって・・・
>>629 Stateモナドの動作は、外部から「状態」を受け取って、それに応じて変更された「状態」を返す。
getは、外部から受け取った「状態」を、そのまま結果にする動作。
get :: State s s
get = State (\s -> (s, s))
つまり、現在の状態がsの時、get後の状態もsで、getの結果もs。
>しかしこの本簡単なところばかり詳細に説明して難しいところは説明も例も無いって・・・
多岐にわたる高度な内容を掘り下げて説明するのは大変だと思う。
日経ソフトウェアのHaskellの記事で初めてHaskellの解説を (立ち)読みしましたが、かなり分かりやすかったです。 高階関数とか遅延評価とか無限列を扱えるとか凄かったです。
>>629 do構文を見たら>>=、returnに置き換えてみるべし
Stateモナドの場合は更にrunStateを適用してlet inに置き換えて考えると動作が解る。 runState (m0 >>= f1 >>= f2 >>= ... >>= fi) s0 let (v1, s1) = runState m0 s0 (v2, s2) = runState (f1 v1) s1 (v3, s3) = runState (f2 v2) s2 ... in runState (fi vi) si get >>= 〜の場合は runState get s0 == (s0, s0)で上のv1がs1と同じ値になる。
634 :
デフォルトの名無しさん :2006/04/28(金) 03:31:02
遅延評価って問題先送り機構でしょ? 日本の政治家が好みそう
,:::-、 __ ,,r 〈:::::::::) ィ::::::ヽ 〃 ,::::;r‐'´ ヽ::ノ ,'::;' /::/ __ l:::l l::::l /:::::) ,:::::、 ji |::::ヽ j::::l、ゝ‐′ ゙:;;:ノ ,j:l }:::::::ヽ!::::::::ゝ、 <:::.ァ __ノ::;! . {::::::::::::::::::::::::::::`='=‐'´:::::::::/ ';::::::::::::ト、::::::::::::::i^i::::::::::::/ `ー--' ヽ:::::::::::l l;;;;::::ノ `ー-" 【ラッキーコアラ】 このレスを見た人はコピペでもいいので 10分以内に3つのスレへ貼り付けてください。 そうすれば14日後好きな人から告白されるわ宝くじは当たるわ 出世しまくるわ体の悪い所全部治るわでえらい事です。
【ラッキーコアラ】にだまされてコピペしたやつは、みんな不幸になるらしいよ。
【ラッキーコアラ】にだまされてコピペした奴が、
>>638 みたいに言われて、
「あー、俺は、不幸になるんだ。」
と、思い込んだおかげで、
些細な事にも感謝するようになって、
幸せになったらしいよ。
これが由緒正しきhaskellerの会話か!
↑何言ってんの、こいつ
/ノ´: /: : : : : : : : : : : : : :i: : : ::i: ::ヽ: : : : : :\ \
/": : :/: : : : : : : : : : : : : : ::|: : :|: |: : : ヽ: : : : : : :ヽ /
/: : : ::/: : : : : : : : : : : : :/:/}: : i: :|: : : : :ヽ: : : : : : :V
/: : : : :|: : : : : : : /: ::/:: / /: :/: / ヽ: : : : }: : : : : : :l 、′ 、 ’、 ′ ’
`.{: : : : : :|: : : : : : : : ::/.// /://:/-―--:、; |: : : : : : :|
|: : : :{: : |: : : :,斗ァ''フ" /" // \ヽ|: : i : : ::| .
|:i: : :i: : :l r彡"´ " / }: :ノ : : ::| 、′・. ’ ; ’、 ’、′‘
l: i: : { : : l | __,.. / ''ェ;___,ェ; /: : : : /∧ ’、′・ ’、.・”; ”
. ',ヽ: : : : ヽl ,r==="  ̄ ̄ ./: : : :ノ/ l . ’、′ ’、 (;;ノ;; (′‘ ・.′”
\\: : : \ ! /, r '´ }: : :ヽl ’、′・” ;
|: : : { `ー > /{ * }: : ヽl . 、 ’、 ’・ 、´⌒,;y'⌒((´;;;;;ノ、"'人
|:/: : { __ i/ ヽ ./: { }:_:: : : : l 、(⌒、 ヽ
. //: : : :{ "iヽ { :ヽ、 ⌒ /:__ : { / ノ: : : : :.'., _( ´;`ヾ,;⌒)´ 从⌒ ;) `⌒ )⌒:`.・
l/: : : : : :} r−┘、: ::r`vr‐ - ´|: : : | _」_{./ ./: : : : : : : '., :::::. ::: >>
>>641 ::::)."::⌒) ;;:::)::ノ
/: : : : : : : { `ヽ、 ヽ.L._ヽ. レ'V__ ヽ/: : : : : : : : : :'., ノ ...;:;_) ...::ノ ソ ...::ノ
/: : : : : : : : r ト *|ヽ/ ノ ヽ.'、 / { (___ 〕r、_: : : : : : : '.,
: : : : : : : : :∧.l.} }〔 ´ / ヽG=ニ:|( ./r'/rく: : : : : : : : :',
【ラッキーコアラ】にだまされてコピペしたら、母親が死にました。最悪です。 みなさんだまされないでください。
HSPスレのがまだ高度な話題を扱ってるな
おまえら本当にHaskellが好きならもっとドキュメント書け! もっとライブラリ書け! もっとアプリ書け! …と自分を煽ってみるてすと
結城タソはもうやってないのだろうか・・・
>>647 結城タソってhyuki.comのひとのこと?
だったら青木さんの原稿チェックMLに参加してたみたいだから、まだ興味は持ってると思う。
今のHaskellは、GPL等に抵触せずにポータブルな(すなわち、 非標準的な外部ライブラリを別途インストールしなくても動く) バイナリを作れるのか? そうでなければ、オープンソース外の世界には到底広まらんだろう。
650 :
デフォルトの名無しさん :2006/04/29(土) 01:50:41
2chでスタンダードなんとかライブラリ作って、 日々あの実装はいただけないとか、この方が高速だとかジェダイ会議して ライブラリ広めれば?
それだ! おまいならできる!
オードリーとか言う人がhaskel学んで一年くらいでperlを動かせるようにしたそうだよ。 おまえらも、これから学んで一年後くらいにruby動かせるようにしたら?
653 :
デフォルトの名無しさん :2006/04/29(土) 05:54:35
動機が不純だといいものはできない
haskell で haskell 書くのって簡単?
HaskellからCへの変換はHaskellで書かれている。
>>654 John Meachamは5年くらいかけてほぼ一人でHaskellコンパイラ(jhc)を書いた。
今のjhcのソースは35000行ほど。
660 :
デフォルトの名無しさん :2006/04/29(土) 12:02:16
661 :
デフォルトの名無しさん :2006/04/29(土) 16:42:25
RTypeってどのくらいのレベルの人が参加できるの?
>>656 >>658 Haskell って最先端とか言っておきながら
自分自身を記述するのも大変なのか…?
ていうかそもそも GHC が Haskell で書かれている件についてはみんな無視ですか。
そもそもHaskellコンパイラを書くのが難しいような。
666 :
デフォルトの名無しさん :2006/04/30(日) 12:20:27
自己記述するってなんか論理的に利点でもあるの?
Perl6が本家より先にHaskellで作られたのって凄いよね。 Haskellってそんなに処理系を記述するのに向いてるの?
>>667 インタプリタを書いた場合のメモリ使用量・実行速度の問題を別にすれば、
処理系を書くのにものすごく適した言語だと思う。
あれ、そういえばghciって中間コードのインタプリタだっけ? 結構速いような。
>>669 > インタプリタを書いた場合のメモリ使用量・実行速度の問題を別にすれば、
> 処理系を書くのにものすごく適した言語だと思う。
>>179 みたいなチュートリアルがあるくらいだしね。
675 :
デフォルトの名無しさん :2006/04/30(日) 20:16:14
ちょっと、キョン!当然あたしたちのCD予約したわよね? ――えっ、まだしてないの?あんた、SOS団の一員としての自覚あるの? ――何、「曲のほうは?」って?それなら心配いらないわ! なんったって、団長のあたしが保証するんだから間違いないわ! 一度聴いたら、ぜ〜〜ったい踊りたくなるんだから! 涼宮ハルヒの憂鬱ED「ハレ晴レユカイ」5月10日発売! 絶対買いなさい!!
SOS団にはPlotkinとかKahnとかMilnerがいるのでしょうか? 私もぜひ入りたいです。
HGLを試してみたが、Windows+GHCでは固まってまともに動かん。 Hugsでは動いた。 以上、チラシの裏
六歳の誕生日から、何故か毎日20行ずつコンパイラを書き始めた僕の数奇な生涯。 『Haskell Boy』 映画化決定
以下のソースだとエラーになるのは何故ですか? main = putStrLn hoge hoge = 2
>>680 putStrLnは引数としてStringを取る。
一方hogeは数値なので、型が合わない。
>>680 main = putStrLn $ show hoge で。
あるいは単純に
main = print hoge
二分探索を書こうとしたのだが、どうも上手くできない。 --リストの中央インデックスを求める middle :: [a] -> Int middle [] = -1 middle x = (ceiling half) - 1 where half = fromIntegral (length x) / fromIntegral 2 --リストの中央値を返す median :: [a] -> a median x = x !! (middle x) bsearch k [] = -1 bsearch k x | median x > k = bsearch k (take (middle x) x) | median x == k = middle x | median x < k = middle x + 1 + bsearch k (drop ((middle x)+1) x) 「bsearch k [] = -1」が悪いのはわかってるんだが、 うまく動くよう記述する方法がわかんない。 どうすればいい?
>>684 bsearchの最後の等式で、再帰的に呼ばれたbsearchが-1を返したときにまずいことになる。
これを防ぐには、結果が-1かどうかを明示的にテストすればいい。
bsearch k [] = -1
bsearch k x
| median x > k = bsearch k (take (middle x) x)
| median x == k = middle x
| median x < k = case bsearch k (drop ((middle x)+1) x) of
-1 -> -1
r -> middle x + 1 + r
以下、本題とは関係ないけど、
・Haskellではbsearchのような「失敗する可能性のある」関数の結果はMaybeでラップするのが普通。
失敗時に-1を返すよりNothingを返した方が直感的だし、間違いも少ない。
・ceiling (fromIntegral (length x) / fromIntegral 2) は div (length x) 2と書ける。
よくわからんのだけど、Haskelの場合、数学の証明とかのように定義を延々と書いていってつじつまが合うと、そのとおりに動作すると考えればよろしいのでしょうか?
687 :
685 :2006/05/01(月) 11:18:02
>ceiling (fromIntegral (length x) / fromIntegral 2) は div (length x) 2と書ける。 嘘でした。 div (length x + 1) 2 が正解。
Haskellでパーサでも書こうかと思ってるんですけど どのくらい簡単に書けるものなんですかね? 四則演算程度の簡単なパーサのサンプルとかありませんか?
691 :
デフォルトの名無しさん :2006/05/01(月) 16:07:44
男には一生に一度、Haskellしないといけないときがある。
六歳の誕生日から、何故か毎日20行ずつコンパイラを書き始めた僕の数奇な生涯。 『Haskell Boy』 映画化決定
696 :
デフォルトの名無しさん :2006/05/02(火) 10:17:30
ネイティブアプリ作成できるよね?勿論
うん
こ
うする
つもりなのか?
Curry 喰うか?
Windowsで日本語が表示できるGUIライブラリってないですか? でないとまともなアプリなんて作れません。
>>702 WxHaskell。
でも、たぶん、Shift_JISをバイトごとに分けてCharに入れないとちゃんと動かない。
ほんの数時間前にHaskellかじり始めました。んでちょっと質問です。 quicksort [] = [] で空リストは空リストでマッチさせるのに対して quicksort (x:xs) = ... と空ではないリストについての表記が`('と`)'で囲まれてるのが ペアみたいでいまいち納得いかないんですが、これは何でですか? 書いててふと思ったけど結合強度の関係でx:xsをグルーピングしてるだけとかいう落ち?
>>704 そのとおり。
「宣言の左辺の時だけ結合度変えてよ」なんて無茶言ったらだめよ。
706 :
704 :2006/05/03(水) 01:00:16
やはりそうでしたか。 普段はLISP使ってるので()[]{}を使い分けたりインデントを意識する習慣が まったくないのですが、このあたりのつまらない約束事を乗り越えたら 新しい境地が広がっているといいなぁ。Haskell. OCamlとどっち勉強しようか 微妙に迷ったけど。
Lisp でインデントを意識しないって、マヂで言ってる?
Lispのインデントはただ単に見やすくするだけの意味しかないでしょ。
Python でもやっとけ
普通emacsまかせだからLispでインデントなんて意識しないよ シンプルそうに見えて割と変な記号多いのは嫌だな、いつか治るのかな?
他人のソースを読まない人?
lispを型付き言語に改造するラッパってありますか?
Common Lisp なら最初から型あるじゃん...
Monadクラス(>>=, return)のシグネチャには合うけど、Monad則を満たさないサンプルってどんなものがありますか?
>>711 変な記号を駆使してやたらと簡潔なコードを書けるのがHaskellの良いところの一つだと思うので、なくなると困る。
>>716 おお、ありがとうございます。リンク先の方、じっくり読んでみます。
ネタなのかマジなのか…
「数値リスト内の全ての要素が同じ数字」ってどう書きますか?
isSameNumber :: (Num a) => [a] -> Bool isSameNumber (x:xs) = all (==x) xs
リストが空の場合は?
724 :
721 :2006/05/05(金) 01:57:05
そう言えばリストが空の場合「同じ」で良いのだろうか… 何はともあれ参考にします。
>>715 に関連して
Monad則を絶対に満たしてるという証明はどうやってするの?
普通に式変形するんじゃだめなのか? 例えば、 return = Just Just x >>= f = f x Nothing >>= f = Nothing と定義されているとき、 x >>= return = xを証明する。 x >>= return = x >>= Just -- returnの定義から = case x of -- (>>=)の定義から Just r -> Just r Nothing -> Nothing = case x of -- パターンマッチの性質から Just r -> x Nothing -> x = x -- case式の性質から
727 :
デフォルトの名無しさん :2006/05/05(金) 20:54:57
今月にまたHaskellの書籍が出ると聞いて待ち望んでおります。 詳しく。
>>726 > = case x of -- パターンマッチの性質から
> Just r -> x
> Nothing -> x
これが思いつかなかった。
ちょっと質問いいでしょうか。 Haskellで作ったバイナリは、ライセンスはどうなるでしょうか。
>>730 それは処理系のライセンスによるでしょ。
>>730 Haskellに限らず、コンパイラ系が吐き出した実行ファイルに
コンパイラの製作者側のライセンスが及ぶ場合ってあるのか?
exeにリンクされるスタートアップルーチンやライブラリが LGPLではなくGPLに汚染していたらそのプログラムもGPLにしないとまずい。 例えばCygwinのgccは問答無用でGPLなdllに依存してしまう。
ライブラリはそうだろうけど、基本的なスタートアップで縛りの強い ライセンスってある? Cygwinのgccはdllに依存しないようなオプ ションがなかったっけ? 具体的な質問に直すと(おれは730じゃないけど)Helloworldレベルの EXEでGPLに感染しちゃうようなEXEしかはけない(他に選択肢の無い) コンパイラあったら教えて。
Cygwinのgcc
ランタイム必須な言語では helloworld だろうが web browser だろうが一緒。 GNAT が確かそうだったような気がする >> 強制 GPL
738 :
デフォルトの名無しさん :2006/05/06(土) 11:59:42
新刊はいつ発売
GPLが感染するコンパイラなんか使うか
えっ?GHCで作ったプログラムってexeにできるの?
ghcの出力したバイナリはlibgmp(LGPL)に依存してるはずだが これってWindowsで問題にならないのか?
Haskell での文字コード変換はどうするのが一般的でしょうか?
何故Haskellでは日本語が使えませんか?
>>744 GHCで使えないのはコンパイラの字句解析器とIOライブラリが日本語を解さないから。
字句解析器は6.6で改善されるはず。
HugsだとWindowsやLinuxでは日本語が普通に使えると思う。
>>745 HEAD branch snapshotの
ghc-6.5.20060328-i386-unknown-mingw32.tar.gz
だと、UTF-8なら読み込めるが、6.4でOKだったeucが駄目になってる。
Haskellかじり始めの者ですがいきなりWrite Yourself a Scheme in 48 Hoursから 取り掛かるのはやっぱり無謀ですか? 3. Parsingから途端について行けなくなったけど リファレンスとか調べながら読んで行ってどうにかなるものかしら。
自分のやりたいことをやれ 手強かったら、一時撤退すればよい。
50歳ですが、haskellを学ぶといいことがありますか?
極楽浄土へ行ける
人生が静的になる
型推論で人生が決まる! 強く型付けされた人生で幸福をあなたの元へ
人は中身ではなく型が重要です。
人生が停止することが保証されますか?
必要とされない人生は評価されません
757 :
デフォルトの名無しさん :2006/05/10(水) 21:33:19
停止するか否かはこの時重要ではありません 必要に応じてプロシージャを走らせます
Haskellを勉強すると金になりますか?
オペレータを自由に定義できます。
えっ!?俺オペレータなんだよ…困ったな
むしろVisual Haskell使ってる人いる?
日経を多値読みしたら向井氏の記事の脚注に nobsun も Haskell 本を執筆中らしい。 かなりの期待あげ。
nobsunって何者?
sampou.org の中の人
もしかして噂のNightmare Haskell?
入門 Haskell 酷いな 誤字、脱字は多いし説明は例を示さないで文章だけとかも結構あるし 読者の想定レベルもページめくるごとに変わってくる始末w 入門書でここまで酷いの久しぶりに見た っと思ったら学生か しゃーないな
>>769 >>770 青木さんが256本執筆したのは、まだ学生だった時のような希ガス。
クオリティ高杉で舌を巻いた。
>>772 そんなにクオリティの高い本だとは思わなかったけど・・
というか、emacsより敷居高いようなw
Cabal って楽チンー。cabal-get まだー。
>>779 入門Haskell買ったばかりなのに orz
『かんたんなHaskellプログラミング』 『むずかしいHaskellプログラミング』 『応用Haskell』 『演習Haskell』
『ふしぎなHaskellプログラミング』 『もっとふしぎなHaskellプログラミング』 『ふかしぎなHaskellプログラミング』
『Haskell Haskell』(通称ダブルエッチ) 『Haskell Haskell Haskell』(通称トリプルエッチ)
Haskell向けの問題ってどんなのある?
『独習Haskell』 『Haskellを256倍使うための本』 『The Haskell Super Text (上)(下)』
『なんとなくHaskell』
『Haskell以外はウンコ』
『3、2、1、Haskell Haskell』
今度つまらないコと書いたらマジ殺す↓
『噂のHaskell』
『空から降る一億のHaskell』
『No-pants Haskell』
『Perfect Haskell』
『くるくるHaskell』
『Morning Haskell』
『Deep Haskell』
『Taskell Haskell』
『はすけりんこ』
『Takeshi's Haskell』
『Haskellは死んだ』
801 :
デフォルトの名無しさん :2006/05/14(日) 01:37:28
["Haskell"..]
このくだらなさ速度なら言える! 『あらいぐま Haskell』
じゃ、俺も。 『世界の中心で Haskell と叫ぶ。』
『Effective Haskell』
805 :
デフォルトの名無しさん :2006/05/14(日) 02:28:22
『Haskellと共に去りぬ』
『Haskell Hacks』『やさしいHaskell』 『軽快なHaskell』『Haskell魂』『マスタリングHaskell』
『Haskellの動く城』
『陽気なHaskellが地球を回す』
809 :
デフォルトの名無しさん :2006/05/14(日) 10:11:08
『Haskellの錬金術師』
『Haskell Potter と秘密のエディタ』
811 :
デフォルトの名無しさん :2006/05/14(日) 12:37:27
『スーパーHaskellブラザーズ』
812 :
デフォルトの名無しさん :2006/05/14(日) 12:38:00
『Haskellの奇妙な冒険』
このまま1000まで行くのか
『へっぽこ実験言語Haskell』 ・・・実験失敗?
『空は透けるように青かった』
『ブラは透けるように濡れていた』
シャツじゃないの?
『ケットは透けるように濡れていた』
『超Haskell』
『нд∫κёll』
言語ねたの定番だな
824 :
デフォルトの名無しさん :2006/05/15(月) 00:50:23
Haskellって、どれをインストールしたらいいのか分かりません。 教えてください。 よろしくお願い致します。
>>824 GHCかHugsを入れればいいんじゃないか?
>>824 そんなことも分からないのに、Haskellをインストールしてもやることないんじゃないの?
何でインストールするの?
827 :
デフォルトの名無しさん :2006/05/15(月) 04:49:53
何で埋めてるの?
829 :
デフォルトの名無しさん :2006/05/15(月) 20:04:03
素直に埋めないでって言えよ
べ、別に埋められるのが怖いからなんて、言ってないんだからねッ!
832 :
デフォルトの名無しさん :2006/05/15(月) 20:18:50
コンパイル通すまでがとっつきにくい 通ったらかなりデレデレ
「Haskell」って「破透ける」って読むの?
835 :
デフォルトの名無しさん :2006/05/16(火) 16:23:13
「俺が女だったら」 「センターへのファウルフライ」 「高速なハスケル製アプリ」
836 :
デフォルトの名無しさん :2006/05/16(火) 18:21:13
質問です。 ghciで無限リストを表示したんですが、処理の中断の方法が分かりません。 どうすればいいですか?
>>837 すでに試しましたが、残念ながらとまりません。
ちなみに、ghciはwindows版です。
俺はghc-6.4.1をWindowsXPのcmd.exeから使ってるけど、Ctrl+Cは普通に効く。 UNIX系のシェルから使ってるならghcii.shをghci.exeの代わりに使うと良いらしいが。
Hugs May 2006きた。正式なWindows版がある。 WindowsのHugsって多バイト文字を扱えないんだな。知らなかった。
>>841 HGLが動かなくなりますた。(つД`)
WinHugs Beta3では動いてたのに。
844 :
デフォルトの名無しさん :2006/05/16(火) 22:53:58
誰か寂しい私をHugsして。
誰か私をGHQの様に占領して
hIDEのビルドってどうやんの? CabalとMakefileとbuild.shとSetup.lhsの関係がよくわからん。精進せねば。 darcsってのも始めて使った。Subversionみたいなもんかな。何かが違うんだろうけど。
>>849 社内に関数プログラマが多く O'Caml を使ったりしてましたが、
O'Caml から Haskell に転向しましたってことだから、別にふつー。
最近の Haskell 人気を見ると O'Caml からの転向組は多そう。
>>852 Linspire の話でした。
Linspire がO'Caml から Haskell に転向したって話。
すまん、よくレスよんでなかった・・・
ライブドア社員キター?
856 :
848 :2006/05/17(水) 23:14:44
>>850 ども。runhaskell Setup.lhs configureでConfigがないよと怒られるのは
「ちゃんとCabalされていれば、」の前提が満たされてないのだろうと理解。
Gentooのportageで突っ込んでるだけなので問題点を解決できるまでには遠そうです。
Config.hsを欲しがってるらしいけど、どこから持ってくればよいものやら。
857 :
デフォルトの名無しさん :2006/05/19(金) 01:46:10
hugsでChurch数の計算をやろうとしてみた。
two f x = f (f x)
three f x = f (f (f x))
dec n f x = n (g h->h (g f)) (_->x) (i->i)
sub a b = b dec a
と定義して、sub three twoを評価させると以下のエラー
Main> sub three two
ERROR - Type error in application
*** Expression : sub three two
*** Term : two
*** Type : ((a -> e -> g) -> a -> e -> g) -> (a -> e -> g) -> a -> e -> g
*** Does not match : ((((a -> b) -> (b -> c) -> c) -> (d -> e) -> (f -> f) -> g) -> a -> e -> g) -> (a -> e -> g) -> a -> e -> g
*** Because : unification would give infinite type
OCamlではこんな感じで対策してるけど、
http://ocaml.jp/archive/document/church.html Haskellではどうすればいいんだろ?
859 :
858 :2006/05/19(金) 03:23:04
↑に載ってるdecはタプルを使ってるので、857のdecで定義する場合は dec (Ch n) = Ch (\f x -> n (\ g h->h (g f)) (\ _->x) id) でOK Main> sh $ sub three two 1
>>860 配本が31日、発売が1日ということのようです。
もうすぐですね。
はじめてのC ふつうのH
自分のセックスに自信がない奴が買いそうなタイトルだな。ふつうのH
ふつうじゃないHが溢れる世の中にふつうって何だよって気になったりするのかね
WinHugs May 2006、アンインストールできない。エラーで落ちる。 新手の嫌がらせか?
Haskell教に感染したので状態の変更はできなくなりました。
hugsはもうつかわねー
868 :
デフォルトの名無しさん :2006/05/20(土) 13:21:46
ももももう待てない><
869 :
デフォルトの名無しさん :2006/05/20(土) 22:53:18
なんでHaskell微妙にブームなの?
裏で手を引いてる奴がいるんだよ
871 :
sage :2006/05/20(土) 23:24:27
>>869 私見レスだけど,
「純粋関数型」という小難しさがギークを自認する人々を惹き付けるのだと思う。
昔はC++がその役割を果たしていたのだけど(自分を含め踊らされた人の何と多い事か)。
# .NETやJavaがある今,わざわざMFCの為にC++を覚えようと言う人間も少ないし,
# C++の「正しい」コーディング法だとかも固まって来た感がある。
逆にOCaml本が出ないのは,call by valueなのである程度動きの予測がつくからかな?
実用性からいえばOCamlのほうが断然分があると思うのだけど。
872 :
871 :2006/05/20(土) 23:25:34
sage失敗…逝ってきます
>>872 これからはsageさんと呼ばせてもらうよ
賢者なんだね。
OCaml本もいいが、ページの半分近くがObjectの説明に費やされたら俺は切れる。
MFCてw
GHC 6.4.2のWindows版が消えてるけど何か問題あったの?
>>871 ># C++の「正しい」コーディング法だとかも固まって来た感がある。
個人的にはかなり異議あり.
>>878 、
>>295 によると、
正しさというのも、私にとって正しい、あなたにとって正しくない、その程度の差なのではないでしょうか?
880 :
さげ :2006/05/21(日) 20:37:44
>>878 正しい,というのは違ったかもしれない。
今更ながらC++のコーディング規約に関わる本が沢山出ているなあ,という実感から書きました。
あと
>>876 のレスに困惑。MFCはオブジェクト指向じゃないとかそういう話がしたいのだろか?
C++Builderの方がイイヨーとかWindows系以外にも目を向けろとかそういう話?まあいいか。
モナドの合成をマスターすれば、Haskell をマスターできる。
渋谷の女子高生の間でモナドを合成するのが流行ってるらしい
call by valueなλ計算のモデルがco-productとstrong monadで作れることが わかれば、Haskellをマスターできる。
λ....... λ...... λ.........
λと入の違いが分かればHaskellをマスターできる
890 :
デフォルトの名無しさん :2006/05/22(月) 06:37:27
OSの書けない言語なんて存在すらしてない
891 :
デフォルトの名無しさん :2006/05/22(月) 07:21:36
892 :
? :2006/05/22(月) 09:08:59
いや,喧嘩でしょー.しつこい
>>886 とか.煽りで怒りを買っているというか.別にいいけど
893 :
デフォルトの名無しさん :2006/05/22(月) 09:12:32
誤解招く書き方する奴もよくないけど 炊きつける奴もよくない
このスレで煽ろうが喧嘩しようが構わないと思うが、すれ違いな話題は止めてくれ。
Haskellやってる人の平均的プロフィールってどんな感じ?
大学院生が多いと思ってた(というか東大か京大ばかりだと思ってた.私は違うけど
でも
>>871 みたいに他言語使いの例があるなら分からないな
東大京大て…一体どんな根拠があってそんな考えに至ったんだよw 無駄にトップクラスの大学挙げてくる辺りが学歴厨くさいな。
自分は、Haskellやろうと思ったけど、HaskellをせずにLispをやり始めた。 ていうかチャイティンの本が面白いんでそうなった。 Haskellの勉強会に出てるのは、良く分からんけど、 学生とか変わった会社員とかと言う感じっぽいな。
>>898 >東大京大て…一体どんな根拠があって
う〜ん,根拠かあ.webページとかICFPとか見てて浮かんだ憶測だけど,全くの当て推量ではないです.
あと学歴厨って言葉は久しぶりに聞いた.よくそんな言葉を恥ずかしげもなく吐けると思うよ.
そんなに気分が悪いの?怒ってるの?
学歴コンプレックスって言ってやった方が良かったですか?(笑)
はぁー,自分が低脳・低学歴だからって他人を僻むのはみっともないよ. もっと大人になった方がいいんじゃないかな.
そこらへんでやめておけ
すまんな。俺がどうでも良い質問をしたばっかりに。
いや,むしろおれが悪かった. みんな,ごめん.
なんて、うそよねん
涼宮ハルヒって何か知らんが、最近興味が出てきたよ。 何とか見ないように我慢してるけど。
いや、ハルヒたらはどうでもいいんだけどね
もう片方のハルヒはいいぞ。
Haskell使いは高学歴アニヲタの傾向あり、と
Haskellの話題で盛り上がれよ。
最近、代入を多用した他の言語で書かれたプログラムと同じ動作をするものをHaskellで書きました。それでStateモナドの使い方が分からないので無限ストリームを使ってみたのですが、無限ストリームは分かりづらいからStateモナド使えと言われました。 無限ストリームを使うよりもStateモナドを使った方がHaskellらしいのでしょうか? 教えて下さい。
ストリームとStateモナドのどっちを使うか迷うという状況を想像できんのだが。 例えばどんなコード?
Haskellで他の言語のVM作っていて、命令が実行される毎にそのVMのレジスタの値を変更するようなコードです。 全てのVMの状態がならんだストリームを作って、ある状態のVMを返すってなコードを作ってました。
そのVMがレジスタの値以外に内部状態を持たないなら、 Stateモナドやストリームを使っても特に嬉しくないんじゃないか? そういう場合は、 nextState :: Code -> RegisterState -> RegisterState みたいな状態更新関数を作るのが自然なような気がする。 役に立たない回答ですまん。
> Stateモナド使えと言われました。 そう言ってくれる人がいることが羨ましい。
>>914 その辺は好みじゃないかなぁ。
具体的なものを見てみないとわからないけど。
あえて言うなら、将来他のモナドと組み合せて使うならモナドで書いておいた方が良いかもしれない。
> そのVMがレジスタの値以外に内部状態を持たないなら〜特に嬉しくない
なんで?「レジスタの値以外に内部状態を持たないなら」という前提がよくわからない。
どちらにせよStateモナドはかなり嬉しいと思う。
nextState :: Code -> RegisterState -> RegisterState
... let new = nextState code old in ...
と書くより,
nextState :: Code -> State RegisterState ()
として,
... do
nextState code
とやったほうが明示的に状態を持って回らなくて楽じゃん。
All About MonadsのState Monadの「動機」が分かりやすい:
ttp://www.sampou.org/haskell/a-a-monads/html/statemonad.html#motivation むしろ自分としては
> 全てのVMの状態がならんだストリームを作って、ある状態のVMを返すってなコード
こっちの書き方が気になる。コード貼って欲しいです。
> 将来他のモナドと組み合せて使うならモナドで書いておいた方が良い これ読んで思ったのだけど,例えばStateなら, nextState :: (MonadState RegisterState m) => Code -> m () みたいに,より一般的に定義するって手があるよね これなら nextState :: Code -> State RegisterState () nextState :: (Monad m) => Code -> StateT RegisterState m () この両方の型が付けられる (←表現あってる?)。 ただ,読みにくくなる(と僕は思う)し,ムキになって一般化するよりも, 使いどころは考えないとな,というのがプログラマの印象。
>>920 >「レジスタの値以外に内部状態を持たないなら」という前提がよくわからない。
ごめん。余り意味のない前提だったから忘れてくれ。
>どちらにせよStateモナドはかなり嬉しいと思う。
>(...)
>とやったほうが明示的に状態を持って回らなくて楽じゃん。
それが嬉しいのはRegisterStateを変化させるコードがnextStateの他にあって、そこから
nextStateを呼び出したい場合だけじゃないか?
nextStateはレジスタの状態を1クロック進めるVMの本体であって、
他にレジスタをいじるコードはほとんどないと仮定したんだがどうだろうか。
仮にnextStateをStateモナドから呼び出したいことがあったとしても、
monadicNextState :: Code -> State RegisterState ()
monadicNextState code = modify (nextState code)
みたいに定義しておけばいいので、nextState自体をStateモナドで書く理由にはならないと思う。
…しかし、nextStateの実装にStateモナドを使って嬉しいことは普通にあるような気がしてきた。
複数のレジスタ操作アクションを組み合わせてnextStateを書く場合とか。
要するに,nextStateにどんな型を持たせるか,というのは,
nextStateを使う側がどんな風に呼び出しているか,って事でそ?
Code -> State RegisterState () も Code -> RegisterState -> RegisterStateも同型な訳で,
どっちでも使いやすいほうでいい.
>>923 でも良いし,それはここでは別問題な気がする.
ここでは「VMを作るけど実装のうえで状態の扱いをどうするか?」という質問なので
「それならStateモナドがいいんじゃね?」という答えはストレートで合ってると思う.
処理の全体を表す関数がどんな型を持っているかは,わりとどうでもいいと思う.なんでもいいけど
s->(a,s)もState s aも同型だろうよ
>処理の全体を表す関数がどんな型を持っているかは,わりとどうでもいいと思う.
これには同意するけど、nextStateはいま問題になっている「処理の全体を表す関数」じゃない。
>>914 は「処理の全体を表す関数」をストリームで書くかStateモナドで書くかという問題を提起していて、
それに対して
>>917 で、nextStateを用意して、それを使って「処理の全体を表す関数」を書いたらいいんじゃないか、と提案した。
この方針が採用されたとして、nextStateの実装にStateモナドを使うかどうかは、また別の話だろ。
もういいよ
>nextStateの実装にStateモナドを使うかどうかは、また別の話だろ。 その「別の話」が聞きたかったんじゃないのか. だからStateモナドを使えば状態の管理が楽なんだよ,と答えたんじゃないの というか処理の全体って何だよ nextStateだか何だか知らないけど,おまいらどういう文脈を仮定しているのかと
自分(
>>914 )から話題をふっておきながら,返事が遅れてしまい申し訳ありません。
私が疑問に思ったのは以下のようなことです.
スタックやレジスタを持つVMがいくつかの関数から参照されているとき,
そのVMの中のレジスタだけを変化させて他の関数にその変化を反映させた
い時,Haskellではそれをどのように解決するのかが疑問に思いました。
これはStateモナドを使えば可能ということでしょうか?
Haskellで代入のような状態変化を表現するのに私は無限ストリームを使う方法しか知らなく,他にもっと良い方法があるのか疑問に思ったので質問しました.
無限ストリームを使って上記のようなことをできるのであればその方法も教えて頂きたいです.
それと私が書いたコードは以下のような感じです(若干略していますが)。 data VM = VM Stack RegisterTable runVM :: VM -> Codes -> VM runVM vm codes = selectUnChangedVM $ generateAllVM vm codes where selectUnChangedVM :: [VM] -> VM selectUnChangedVM (vm1:vm2:vms) | vm1 == vm2 = vm1 | otherwise = selectUnChangedVM (vm2:vms) generateAllVM :: VM -> Codes -> [VM] generateAllVM vm codes = iterate (execOne codes) vm execOne :: Codes -> VM -> VM execOne codes vm = newvm where code = selectCode vm codes newvm = execCode code vm やっていることは以下の通りです. (1) 1クロックごとのVMの状態を持つ無限ストリームを生成 (2) その中で次のクロックに移っても状態が変わっていないVMを見付けてそのVMを返す
>>930 止まる,というのを,「VMの状態が変化しないこと」としているのは,どうなんだろう。
普通はhalt命令とか入れるんでわ
というか後々副作用を導入する為にStateT IOで書くってのはどうよ
data RegisterTable = RegisterTable {r1::Int, r2::Int, pc::Int, sp::Int} updateR1 :: Int -> State RegisterTable () updateR1 v = do old <- get put (old {r1=v}) jump addr = do old <- get put (old {pc=addr}) めんどくさくなってきた…かなり反復気味のコードねコレ。良策求む。 ところでこのまま行って State VM a の a は () 以外に何かありえるのかな? 全部状態更新しかしない (State VM Bool などを使わない) ならState使う意味がない気がする
>>930 俺はそのままで問題ないと思う。execCodeの処理が複雑なら
そこだけ
>>934 みたいにStateモナドを使って実装してもいいかも知れないが。
それはごく普通のストリームの使いかただから、
これが分かり辛いと言う奴はHaskellに慣れてないだけなんじゃないだろうか。
まあでもVMを状態の無限ストリームで実装すると聞いたらびっくりするんじゃないだろうか。
実際
>>930 のコード読むまで私は質問者がどう実装したのか分からなかった。
あと,モナドなら
>>933 が言っているように(?)、
将来VMから環境に副作用を及ぼす(ファイル入出力やコンソール出力など)ように拡張したい場合、
StateTとIOと合成すれば一発、とかちょっとエレガントじゃなかろうか。やってないので分からんけど
>>932 アセンブラの演習とかで,終了を
halt:
jmp halt
みたいに書くのはよくある。
Stateモナドは状態の履歴を持たないから、この場合に無限ストリームを使うのは結構賢いかも
ネタだけど、あとあと入出力を扱うためにもなでぃっくなストリームをつかう、とか newtype MonadStream m a = MS (m (a, MonadStream m a)) type Stream = MonadSteram Identity type IOStream = MonadStream IO
MLとかMirandaの話になってしまうが、 モナドがない頃は、無限ストリーム専門だったよ…
λ,,,,,,λ ガオー! ∩`iWi´∩ λ,,,,λ グオー! ヽ |m| .ノ∩`iWi´∩ |  ̄| ヽ |m| .ノ | | | | U⌒U U⌒U
941 :
デフォルトの名無しさん :2006/05/28(日) 21:47:49
Haskell面白そうなんだけど、サーバプログラム書けるのかな? 50本から100本くらいのソケットを効率良く処理したいから、 UNIXのselectシステムコールみたいな操作使って、 多重化したI/Oを準備OKなやつを片っ端からてきぱきさばきたいんだけど、 そういう処理って書けて効率良く実行できるのかな? あと、XMLも扱いたいけどライブラリはどれくらいあるの? さらに、通信部分とは別のところで、ユーザといろいろインタラクション するためのスレッドをたくさん動かして、スレッド間で複雑に相互作用が あるんだけど、そういった処理も書きやすいのかな?
942 :
デフォルトの名無しさん :2006/05/28(日) 21:52:47
そうそう、Haskel用のGUIは何がお勧めかな?Linuxで動けばいいよ。 Fedora Core 5のextrasリポジトリに ghc-gtk2hs-0.9.10-1.fc5.i386.rpmってのがあって、 GTK+のHaskellバインディングみたいだけど、これって使いものになる? 関数型のプログラミングスタイルとずれるところはあるの?
ん? とりあえず出来なさそうなことを色々挙げてみる煽りかな?
944 :
デフォルトの名無しさん :2006/05/28(日) 23:00:28
んーん。このスレ見てたらなんだか面白そうな言語だから勉強したく
なったけど、単なる計算じゃなくて、もっと実践的な仕事まで視野に入れると
どれくらい使いものになる言語なんだろうって知りたい。
実践っていっても、今仕事で書いてるようなプログラムをHaskellでも
書けるかって観点で最低限を書き出したら
>>941-942 みたいになったよ。
XMLで通信するMMOゲームでも作ってんのか
>>944 氏は。
デイトレ用のプログラムと見た。
誰も答えないので分かる範囲で。あまり信用しないでくれ。 >Haskell面白そうなんだけど、サーバプログラム書けるのかな? 書けると思われ。 >そういう処理って書けて効率良く実行できるのかな? ちょっと探してみたけどselectはなさそうだった。 必要ならシステムコールを呼べばいい。効率はしらね。 どっちかというとfdの数だけ(ユーザレベルの)スレッドを用意するのが推奨されてるような気もする。 >あと、XMLも扱いたいけどライブラリはどれくらいあるの? 有名なのは2つかな。 >あるんだけど、そういった処理も書きやすいのかな? 書きやすいと思う。 >そうそう、Haskel用のGUIは何がお勧めかな?Linuxで動けばいいよ。 Gtk2HsとWxHaskellの二択だろう。ちゃんと使った訳じゃないので評価はパス。 >関数型のプログラミングスタイルとずれるところはあるの? 微妙。少なくとも宣言的なGUIプログラミングができる訳ではない。
948 :
デフォルトの名無しさん :2006/05/28(日) 23:49:06
>>945 >>946 どっちもちがうよ。詳しくは言えない。
>>947 おぉおぉ!ありがとうっす。そこそこ実践的にも使えるんだね。
ユーザレベルのスレッドってコルーチンみたいなやつかな?
wxHaskellなんてもんもあるんだ。そりゃいい!
wxWidgetsはwxPython通して使ったことあるけど、
LinuxでもWindowsでも多少の変更で対応できるのがいいよね。
なんかどっかでConcurrent Haskellの並行機構を使えばselectとか要らんよ, というのを英語で読んだ気がする 本家MLかなあ
まだHaskellはできることが少ないっていう認識&広告でいいと思う。 あとスピードも保障できないってことで。その代わりにたくさんメリットがあるわけだし。
ふつうのHaskell買った人いる?
すっかり忘れてた
953 :
デフォルトの名無しさん :2006/05/31(水) 17:12:41
ほほほ本ののちちょちょ調子ははどどどうだっ!??
まさに本調子でした
955 :
デフォルトの名無しさん :2006/05/31(水) 18:09:39
早速立ち読みしてくるか
956 :
デフォルトの名無しさん :2006/05/31(水) 18:39:39
おい明日発売じゃないかよ! 騙したな!
>>956 同志!!
俺は、近所の本屋、2、3軒のぞきに行っちゃったぜ。
959 :
956 :2006/06/01(木) 03:41:24
>>958 ごめん…実はアマゾンで調べたら明日って事になってたから
実は本屋に行かなかったんだ…
こがいだんでも、haskellができるのに。
961 :
デフォルトの名無しさん :2006/06/01(木) 18:20:19
ほほほ本の調子はどどどどう!!?
962 :
デフォルトの名無しさん :2006/06/01(木) 18:25:22
著者はこのスレ覗くの?
当たり前。
配本とかさ、混乱させるようなこと書かないで欲しい わざと一般的な書き方しなかったのかな
亀レスですまんが、
>>684 Haskellのリストで二分検索ってできるの?
二分検索というからにはO(logN)じゃないと意味がないと思うんだが、
lengthだの!!だの使っている時点でO(N)を越えている気がしてならない。
二分探索は配列用のアルゴリズムだからなぁ。 Haskell なら最初から二分木作った方がいいと思われ。
ビックカメラに置いてあったので買いました。 かなり分かりやすそうです。
山積みの「ふつうのHaskell」と3冊「入門Haskell」があったけど、、、、 「入門Haskell」売れまくりだな!!
入門Haskellは名前からして初心者が買いそうだけど、名前に釣られたやつら乙って感じだな。 ふつうのHaskellプログラミングの方がまだまし。
971 :
デフォルトの名無しさん :2006/06/02(金) 19:24:22
著者さん乙
ふつうのHaskell amazonから発送乙
読んでみた。この本すげーよ。特に第一部は神。 例に沿っていくうちに、極めて自然に構文や標準関数を導入している。 ただ、どっちかというと言語とライブラリの解説が主で、自分でコードを書くための 訓練には余り重点が置かれていないようだ。 しかし、IOモナドの説明がうんこ(世界を持ち出す)なのと、評価と実行を混同してるのは わざとなんだろうか。特に後者は方便の域を越えると思う。最後まで訂正されないし。
本当に、マジ分かりやすいね。 ふつうのLinuxまで読みたくなった。 (これだと某有機氏の本は不要かもって思った。)
「神」とか「うんこ」とか、アホみたいな文体やめろ。
2ch特有の言い回しだろ、と
>>975 適切だと思ったから使ったんだよ。悪いかよ。
勝手に脳内変換して読んでろハゲ。
入門書はいいから、もっと実のある本を書いてくれ。
少なくとも、Haskellバリバリに使い込んでる人が書いてくれよ。
そんな奴日本にいない
女子高生は仲間同士のメールでHaskellしてるらしーぞ
975はうんこ
>>980 日本どころか世界中でもほとんどいない。
「論文など実用的でない」とレスするに一票
どうせみんな見栄で買ってるんだろ。w 本当は理解できてないと正直に言いなさい。
ミエで買うなら入門書の類は選ばないと思うが・・・
あほみたいな文体は、隔離しておかないと、うつるからな。 知らないうちに、うんこ、うんこが口癖になるからな。
うんこー
うんこのまま1000まで突入
うんこ
うん、このまま1000まで突入
日本でHaskellの本が一気に2冊出たことを本家haskell.orgに知らせたら喜ぶのではなかろうか
Haskell Weekly Newsぐらいには出て然るべき
999
1000 なら Haskell が天下を取る
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。