関数型プログラミング言語Haskell Part9
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/05/17(土) 16:41:29http://www.haskell.org/
日本語サイト
http://www.sampou.org/cgi-bin/haskell.cgi
http://www.shido.info/hs/
過去ログ
関数型プログラミング言語Haskell
Part1 http://pc.2ch.net/tech/kako/996/996131288.html
Part2 http://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 http://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 http://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 http://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 http://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 http://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 http://pc11.2ch.net/test/read.cgi/tech/1193743693/
・2chの仕様により、行頭の半角スペースは表示されません。
コードをインデントしたいときは、代わりに または全角スペースを使うことができます。
0478デフォルトの名無しさん
2008/08/14(木) 00:04:58モナド無しでということなら無い。
そもそもcall/ccは副作用があるし。
0479デフォルトの名無しさん
2008/08/14(木) 13:47:210480デフォルトの名無しさん
2008/08/14(木) 17:35:340481デフォルトの名無しさん
2008/08/14(木) 18:53:400482デフォルトの名無しさん
2008/08/14(木) 18:54:490483デフォルトの名無しさん
2008/08/16(土) 19:35:13http://lethain.com/entry/2008/aug/14/global-popularity-of-programming-languages/
0484デフォルトの名無しさん
2008/08/16(土) 20:24:000485デフォルトの名無しさん
2008/08/16(土) 22:50:09こうゆう落ちもある。
0486デフォルトの名無しさん
2008/08/17(日) 12:30:17http://haskell.org/haskellwiki/Xmonad/Config_archive
の設定ファイル郡を理解できるぐらいまでHaskellについて知りたいんですが
どこから勉強すればいいんでしょう?
知識はXmonadやGhcをソースからインストールできる程度です
0487デフォルトの名無しさん
2008/08/17(日) 13:44:52テストは軽減する。haskellなどはそのことが数学的に証明されているので
プログラマはぬるぽやoutofboundsなどの基本的な間違いにであうことなく、
本質だけを考えることができる。
0488デフォルトの名無しさん
2008/08/17(日) 14:23:37たとえば「空でないリスト」型が欲しいとき、ぬるぽ的な実行時エラーを防げるの?
0489デフォルトの名無しさん
2008/08/17(日) 14:47:05依存型のある言語なら防げるかも知れんけど
0490デフォルトの名無しさん
2008/08/17(日) 15:31:08おまえ初心者スレにいたHaskell信者だろ。
0491デフォルトの名無しさん
2008/08/17(日) 18:08:120492デフォルトの名無しさん
2008/08/17(日) 18:14:59それヘボすぎ
0493デフォルトの名無しさん
2008/08/17(日) 18:26:58誰か教えて下さい
0494デフォルトの名無しさん
2008/08/17(日) 18:36:200495デフォルトの名無しさん
2008/08/17(日) 18:36:410496デフォルトの名無しさん
2008/08/17(日) 18:42:380497デフォルトの名無しさん
2008/08/17(日) 18:59:33ttp://www.sampou.org/haskell/a-a-monads/html/
の以下の部分を読むとわかるかも
Maybe というモナド
ひとつの例
リストもモナド
0498497
2008/08/17(日) 19:11:05の各モナドの利用場面や動機を見るのもいいかもしれない
0499デフォルトの名無しさん
2008/08/17(日) 19:15:59便利だからという理由以外にモナドをIO以外に使う理由はあったりしますか?
それだけの理由で使うには扱いが難しくて、プログラムを組む度に頭がオーバーヒートしそうになる
慣れの問題かそれとも理解不足か・・
0500デフォルトの名無しさん
2008/08/17(日) 19:25:15そこでmaybeもなどですよ。
0501デフォルトの名無しさん
2008/08/17(日) 20:06:22IO, Maybe, List, etcの計算の合成を統一的に扱えるってのが最大の利点なんではないかと。
単に使うだけなら主に慣れの問題だと思う。
いろんな例を見て慣れていけば少しずつ理解もできていくんではないかと。
0502デフォルトの名無しさん
2008/08/17(日) 20:09:490503デフォルトの名無しさん
2008/08/17(日) 20:33:06レス有難うです
慣れの他に密度の問題もあるかもしれないと思ったり。
他の言語より1行あたりの密度が濃いものになりやすい気がする。
というか濃縮されすぎてわけが分からなくなりやすい気がする。
0504デフォルトの名無しさん
2008/08/17(日) 20:38:12計算を統一的に扱うだけであれば、普通の型クラスでいいんですよね?
モナドは値ではなくて型コンストラクタに対するクラスなので、ちょっと違う
と思うんですが。
050536 ◆K0BqlCB3.k
2008/08/17(日) 20:39:51所詮はただの代数的データ型とそのデータ型に対して一貫性あるAPIのセットに過ぎないよ。
ところで、 データ型とAPIのセット のことをなんて呼べばいいの?
0506デフォルトの名無しさん
2008/08/17(日) 20:40:10型クラス(b,s) -> (a,s)に型bを部分適用したって考えれば意味は通るけど……
0507デフォルトの名無しさん
2008/08/17(日) 21:08:43それが「型クラス」、ではないのでしょうか?MonadやFunctorはちょっと
毛色が違うという認識は勘違いでしょうか?
0508デフォルトの名無しさん
2008/08/17(日) 21:17:01Ord、Eq、Show などの データ型とそのAPIのセット は「型クラス」
Functor、Monad、MonadPlus などの データ型の構築子とそのAPIのセット は「型構築子クラス」
0509デフォルトの名無しさん
2008/08/17(日) 21:31:22Functorの『類』は*->*みたいに引数をとる、って違いにしか見えない
分けて考えるのはおかしいと思う
0510デフォルトの名無しさん
2008/08/17(日) 21:37:45型クラスと型構成子クラスじゃ抽象度が違うよ。
0511デフォルトの名無しさん
2008/08/17(日) 21:49:13抽象度が違うのは理解できるが
0512507
2008/08/17(日) 21:58:16遷移を持つことが可能だ、という印象を持つんですけどどうなんでしょうか。
普通の計算を行う裏側で別の次元での計算が行われ、且つそれが
結合法則を満たしている、というのがモナドの定義と考えるのは
どうですか?自分は圏論などのこと全く無知なのでHaskellの構文
からの直感的な印象だけなんですけど。
0513デフォルトの名無しさん
2008/08/17(日) 21:59:06もっと抽象度が違うので別の名前が必要なのか?型構築子構築子クラスとか。
有名な人が書いてるから鵜呑みにしてるだけなんじゃないの?
0514デフォルトの名無しさん
2008/08/17(日) 22:31:24だいたいあってんじゃね?
見えてる部分で適当に処理を書いたら裏で適当に処理してくれる、
普通のプログラミング言語じゃfor文やif文みたいな処理構造、
あるいはマクロとして提供されるものと同等の処理ができるんだけど、
実態は単に型クラスでしかないので俺定義できるし、高階関数使えるし、表記もシンプルで、いろいろ小細工が利くのが利点。
たとえば、IOみたいにコンストラクタを隠したりすれば脱出不可な構造を作れるってわけ。
結合法則を満たしているってのは、まぁ別に特別なことじゃない。
EqやOrdにも反射律とか推移則とか守らないといけないルールがあるけど、
よっぽどのことがない限り変な実装はしないだろうから、一般のプログラミング言語ではそこまで突っ込まない
でもモナドって実態がよくわかんないから、ルールを明記してる。そんだけでしょう。
0515デフォルトの名無しさん
2008/08/17(日) 22:45:32>処理構造(略)同等の処理ができるんだけど
普通の言語では処理構造のものが、モナドが利用されてる例としてはErrorモナドとかContinuationモナドとかがあったね。
>よっぽどのことがない限り変な実装はしないだろうから、一般のプログラミング言語ではそこまで突っ込まない
浮動小数点の比較と等価性で違う実装がされてるとか、変な実装もあるけど。
個人的にはMonad則は、
値に関して順次実行できる何かで、値に対して何もしない処理もできる何かだ、というルールだと解釈してる。
0516デフォルトの名無しさん
2008/08/17(日) 22:50:03コンピュータのメモリ節約を考えれば生の浮動小数点型を使うのもまっとうな実装だわw
0517デフォルトの名無しさん
2008/08/17(日) 23:19:23>値に関して順次実行できる何か
これは実行順序じゃなくて値の計算する方向を言ってるだけだよ。
g.f x がxにfを適用してgを適用するってのと同じことだよ。
実行順序は普通のモナドもIOモナドも方向は決まってないよ。
0518初心者修業中
2008/08/17(日) 23:37:55実行順序を明確にするのがIOモナドの目的の一つ
と認識していますが。
そういう意味ではないのかな…
0519デフォルトの名無しさん
2008/08/17(日) 23:41:24他の言語に比べて内と外をわけすぎるようなそんな印象をもってる。
なんでだろ?
0520デフォルトの名無しさん
2008/08/17(日) 23:58:38たとえば、
1:2:3:[]は、
1:2:3:[] → 1:2:[3] → 1:[2, 3] → [1, 2, 3]と簡約されるかもしれないし、
1:2:3:[] → [1, 2:3:[]] → [1, 2, 3:[]] → [1, 2, 3]と簡約されるかもしれない。
でも結果は一緒でしょ?
同じように、
Hello, Worldって出力 >> 一文字入力 >>= 前の文字を出力
みたいなのは、まぁ言ってみれば(不正確だけど)
[Hello,Worldって出力, 一文字入力, 前の文字を出力]みたいな並びにされる(と思われる。実装はカプセル化されていて不明)。
この並びがプログラム終了後にコンパイラにわたって、コンパイラがこれを順番に処理していく。
実はこの並びをプログラム終了後以外に評価する方法があって、それがUnsafePerfomedIOって言う関数。
getContentとかは実はこれを使って実装されている。
Unsafeという名前が示すように、素人にはお勧めできない。(getContent自体は普通に使える。)
0521デフォルトの名無しさん
2008/08/18(月) 00:02:55052236 ◆K0BqlCB3.k
2008/08/18(月) 00:25:49世界的に全く元気がありません。
ちょこっと変なライブラリを書いたと思えばそれっきり離れていっている人も多数。
0523デフォルトの名無しさん
2008/08/18(月) 01:36:55後者の簡約は型がおかしいし、1:2:3:[]ではなく、
f x = (unsafePerformIO $ print x) `seq` xで
f 1:f 2:f 3:[]だった場合、前者と後者の簡約順序ではprintの順番が違ってくる。
前者は3,2,1で後者は1,2,3
一方で(>>=)は最左最外簡約でも最右最内簡約でも
左から順にしか値が定まらないようになってる。
putStr "Hello" >>= (\ _ -> getChar) >>= (\ c -> putChar c)
(>>=)の右辺が関数だから左辺の値が定まるまでa >>= bが最終的な値に簡約できないようになっている。
0524デフォルトの名無しさん
2008/08/18(月) 03:17:18元気無い理由って何でしょうか。他に元気ある言語ってあるのかな。
0525デフォルトの名無しさん
2008/08/18(月) 04:14:240526デフォルトの名無しさん
2008/08/18(月) 08:38:27> 1:2:3:[] → [1, 2:3:[]] → [1, 2, 3:[]] → [1, 2, 3]と簡約されるかもしれない。
型が滅茶苦茶だよ。
> この並びがプログラム終了後にコンパイラにわたって、コンパイラがこれを順番に処理していく。
意味不明。なぜプログラム終了後にコンパイラが出てくる。
ランタイムライブラリとごちゃまぜになているぞ。
0527デフォルトの名無しさん
2008/08/18(月) 10:05:000528デフォルトの名無しさん
2008/08/18(月) 10:21:37想像力の貧しい奴がこのスレに多いような気がする
0529デフォルトの名無しさん
2008/08/18(月) 13:36:03全部気のせいのような気がする
0530デフォルトの名無しさん
2008/08/18(月) 15:08:490531デフォルトの名無しさん
2008/08/18(月) 15:12:160532デフォルトの名無しさん
2008/08/18(月) 15:41:06つ座布団1枚
0533デフォルトの名無しさん
2008/08/18(月) 21:50:150534デフォルトの名無しさん
2008/08/18(月) 22:25:250535デフォルトの名無しさん
2008/08/19(火) 07:45:46/ つ つ つ
(_(_ ノ ノ ノ
し∪ ∪ ∪
0536デフォルトの名無しさん
2008/08/19(火) 10:10:53> ところで、 データ型とAPIのセット のことをなんて呼べばいいの?
プログラミング言語一般での話なら「抽象データ型」でしょうね。
0537デフォルトの名無しさん
2008/08/19(火) 11:50:46関数(->)とかタプル(,)とか
0538デフォルトの名無しさん
2008/08/20(水) 20:24:46それでなのです。 >ときどきの雑記帖の中の人
0539デフォルトの名無しさん
2008/08/21(木) 14:40:13MonadTrans は (* -> *) -> * -> * のクラス
0540デフォルトの名無しさん
2008/08/21(木) 21:20:37これの30章が消えてるんだけど・・・。
0541デフォルトの名無しさん
2008/08/21(木) 22:05:290542デフォルトの名無しさん
2008/08/21(木) 23:26:23ところで、HaskellでPetStoreってあるの?
054336 ◆K0BqlCB3.k
2008/08/21(木) 23:56:58横からすみませんが、
Pet Storeをよく知らないのでちょこっと検索したんですが、
これっていったい何が面白いんですか?
0544デフォルトの名無しさん
2008/08/22(金) 00:08:29面白くは無いんだけど、色んな言語やフレームワークで同じもの作る
ことで比較をするためのものでしょ。同じアプリがこんな感じで作れ
ちゃうぞ、という。
0545デフォルトの名無しさん
2008/08/22(金) 11:40:45054636 ◆K0BqlCB3.k
2008/08/22(金) 12:37:40ライトウェイト言語がブームみたいだね。
HaskellはライトウェイトではないからWEBアプリ向きとは全然思えないんだけど、
RubyでRubyOnRailsが考えられたみたいにHaskell独自のWEB向きキラーアプリが
出てこないとHaskellの人気はこれからもずっと平行線だと思うよ。
0547デフォルトの名無しさん
2008/08/22(金) 12:41:19WEBアプリが書きやすいっていうより、APIとかWEBコンテナが標準装備されてないとダメという感じがする。
Javaの功罪は大きい。
0548デフォルトの名無しさん
2008/08/22(金) 12:41:590549デフォルトの名無しさん
2008/08/22(金) 12:48:26ライトウェイトって何?動的に型を付ければライトウェイト?
それとwebとどういう関係があるの?
0550デフォルトの名無しさん
2008/08/22(金) 13:05:36ライトウェイトってことじゃないか?
web案件は短期だったりアジャイルだったりでライトウェイトに
開発できるのが求められてるってのはある
0551デフォルトの名無しさん
2008/08/22(金) 13:10:45だから、WEBアプリ開発者は、身体のどこかに、プログラミング言語のJavaかRubyに似てない部分に拒否反応を持ってる。
0552デフォルトの名無しさん
2008/08/22(金) 13:11:10考えが即座にコードにうつせるため開発期間が最短であると主張する人がどこからか登場
↓
0553デフォルトの名無しさん
2008/08/22(金) 13:23:23( ゚д゚ )↓
(⊃⌒*⌒⊂)
/__ノ''''ヽ__)
0554デフォルトの名無しさん
2008/08/22(金) 13:27:58それならHaskellもライトウェイトで良くね?
0555デフォルトの名無しさん
2008/08/22(金) 14:05:360556デフォルトの名無しさん
2008/08/22(金) 14:18:04だから普及しないとか、
どうでもよくねえ?
好きな事、楽しい事すればいい。
0557デフォルトの名無しさん
2008/08/22(金) 14:22:47runghcがあるじゃないか
もうちょっと速ければと思うことはあるけど
0558デフォルトの名無しさん
2008/08/22(金) 14:34:05そういう立場も理解できるけど、俺は普及してほしい
ライブラリのメンテとか人が足りてないじゃん
0559デフォルトの名無しさん
2008/08/22(金) 14:46:33Prologには負けるんじゃない。
056036 ◆K0BqlCB3.k
2008/08/22(金) 14:47:15$ cat hello.hs
main = putStrLn "hello"
$ time runghc6 hello.hs
hello
real 0m0.835s
user 0m0.780s
sys 0m0.052s
$ cat hello.rb
print "hello\n"
$ time ruby hello.rb
hello
real 0m0.015s
user 0m0.012s
sys 0m0.000s
056136 ◆K0BqlCB3.k
2008/08/22(金) 14:48:14print "hello\n"
$ time perl hello.pl
hello
real 0m0.007s
user 0m0.004s
sys 0m0.000s
$ cat hello.py
print "hello"
$ time python hello.py
hello
real 0m0.035s
user 0m0.020s
sys 0m0.016s
0562デフォルトの名無しさん
2008/08/22(金) 15:03:430563デフォルトの名無しさん
2008/08/22(金) 15:07:56Webアプリのかなり大部分は一般的にLLと呼ばれている言語で書かれているだろう。
そういう"LL"はテキスト処理がしやすいからってのがあるだろうな。
まあHaskellがそういう意味で人気にならなくても別にどうでもいいけど。
ここでmondic Parser Combinatorを持つHaskellが
最もテキスト処理に適した言語であると主張する人がどこからか登場。
↓
0564デフォルトの名無しさん
2008/08/22(金) 15:38:430565デフォルトの名無しさん
2008/08/22(金) 15:45:06ttp://happs.org/
0566デフォルトの名無しさん
2008/08/22(金) 16:09:31満足した?
0567デフォルトの名無しさん
2008/08/22(金) 17:42:48だがな、至高の存在で良いじゃないか。
haskellの性質上webプログラミングは不得意分野に思うんだが、mod haskellなんて生まれる
分けでもないし生まれたところで破壊的操作がほとんどできないし、ファイル操作は基本的に
苦手でしょ。webは動的言語の親玉が一番向いてるけどs式アレルギーな人が多いからLLに
なってるんでしょうね。
だから、無理にwebに擦り寄らずとも良いと思うんだけどね。むしろ、破壊的操作より安全性を
大切にされる金融などのところで目立つ存在になってくれたらいいんじゃないか?
056836 ◆K0BqlCB3.k
2008/08/22(金) 18:09:07もし金融などで使われることを想定するなら、
haskellの並列処理に関する部分も早く実装してほしいところですね。
(まだ未完成)
0569デフォルトの名無しさん
2008/08/22(金) 18:44:00>>567
> 破壊的操作がほとんどできない
なんで?
0570デフォルトの名無しさん
2008/08/22(金) 18:58:34>>567
コンパイルするならmod_haskellがあっても恩恵は小さいだろ
>破壊的操作がほとんどできないし
Haskellで入出力書いたことあるか?
>ファイル操作は基本的に苦手
これも良く分からん
flock使うのにわざわざライブラリを落としてこないといけないとか、そういうこと?
0571デフォルトの名無しさん
2008/08/22(金) 19:43:28既存のシステムを補強するのではなく全部作り直せというのは、ちょっとね
0572デフォルトの名無しさん
2008/08/22(金) 19:54:17Prologを事務処理に使うと、住所や氏名情報などで爆発的にアトムが
発生し、Heap領域を埋め尽くして、GCが頻発するという事態となる。
もちろん数百万レコードを越える処理単位の話だが。
Haskellの場合この問題は起きないの?
0573デフォルトの名無しさん
2008/08/22(金) 20:37:03まだ増殖するだろうから、そっちで使いやすいフレームワークやDSLが出ないと
使う人は頭打ちだと俺も思う。
研究者の論文レベルのものも面白いだろうけど、上から下までHaskellベースで
かかれたWebアプリとかで目立つものが出てほしいよ、個人的には。
0574デフォルトの名無しさん
2008/08/22(金) 20:53:32アトムの爆発ってのはPrologスレで言及されてる現象のことでいい?
そもそもPrologのアトムってのが良く分からんので何が問題なのか理解できん
Lispのシンボルみたいな物と思っていいのかな
それなら相当するものはHaskellにはないよ
0575デフォルトの名無しさん
2008/08/22(金) 21:35:41Lispのシンボルみたいな物、ですね。
記号をどう処理しているのですか。
0576デフォルトの名無しさん
2008/08/22(金) 21:53:0530章ってなんの章だったの?
0577デフォルトの名無しさん
2008/08/22(金) 22:12:26「記号」と言われてもいまいちピンと来ないんだが、何にせよ、
普通の手続き型言語が「記号」を処理するのと大差ない方法で処理してると思う
取り得る種類がコンパイル時に決まっているなら列挙型
そうでないなら整数とか文字列
文字列の比較のコストが問題になるなら自分でシンボルテーブルのようなものを用意する、とか
■ このスレッドは過去ログ倉庫に格納されています