トップページtech
981コメント300KB

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん2008/05/17(土) 16:41:29
haskell.org
http://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の仕様により、行頭の半角スペースは表示されません。
 コードをインデントしたいときは、代わりに または全角スペースを使うことができます。
0893デフォルトの名無しさん2008/11/26(水) 21:24:32
>>884
下手糞な翻訳の恐れ大。最近多いね、いや昔からか
0894デフォルトの名無しさん2008/11/26(水) 22:52:49
Programming in Haskellはいいよ。ふつけるの前でもいいです。
0895デフォルトの名無しさん2008/11/27(木) 19:14:12
>>892
自分はふつけるの後にCraftでした。というか、その間にSICPが
あるので、あんまり参考にならないかな。ふつける読んでも
ちょっとピンとこなかったんですね、よくまとまってるとは思うのですが。

自分は普通の文系プログラマで、関数型プログラミングの世界とは
無縁だったので、SICPをくぐる必要があったと感じてます。
0896デフォルトの名無しさん2008/11/27(木) 19:30:50
Craftはいつ第3判が出るのですか?
0897デフォルトの名無しさん2008/11/27(木) 19:55:34
Craft第2版以降で目立ったHaskellの技法というと、Arrowぐらいでしょうか。

あとはReal Worldみたいな実用面を書いたものになりますかね。
0898デフォルトの名無しさん2008/11/27(木) 20:02:06
ガンズのニューアルバムが出るころに出版されるそうです。
0899デフォルトの名無しさん2008/11/28(金) 20:17:32
それは出版されないってのとどう違うのだ
0900デフォルトの名無しさん2008/11/28(金) 22:32:12
泳げる頃にh(ry
0901デフォルトの名無しさん2008/11/28(金) 23:59:30
1版ならともかく3版なら別に出なくてもいいんじゃね
0902デフォルトの名無しさん2008/11/29(土) 00:04:26
Implementing Functional Languages: a tutorial

ってのをやってますが、練習問題の回答とかどっかに転がってますでしょうか。
0903デフォルトの名無しさん2008/11/29(土) 11:25:49
>>902
著者本人が公開してる。あとは自分で探せクズ。
0904デフォルトの名無しさん2008/11/29(土) 11:27:36
>>903
おめーがクズだろ
この引きこもりw
0905デフォルトの名無しさん2008/11/29(土) 21:15:40
自演乙
0906デフォルトの名無しさん2008/11/29(土) 22:05:13
Haskellで書かれた数式処理ソフトがあると聞いたのですが
maximaと比べると
言語から直接利用するときの利用しやすさは、どんな感じなのでしょうか?
0907デフォルトの名無しさん2008/11/30(日) 09:20:37
PJの答を探しているクズ、どこのゼミ生かしらんが、これで次の輪講はアウトだなwww
09089022008/11/30(日) 09:56:28
>>907
自分では探してみましたが、部分的なコードだけしか見つけられませんでした。

ちなみに、自分は学生ではないんです。輪読の場があったりしたら入りたい
ですけど、ちょっと今は時間的に厳しいかな。ネットでやってたりするといいん
ですが。
0909デフォルトの名無しさん2008/11/30(日) 16:00:41
探すもなにも、入手方法ちゃんと書いてあるじゃんwww
0910デフォルトの名無しさん2008/11/30(日) 21:28:44
>>896
2021年4月19日に出るみたいです。
まだ相当先ですね。
0911デフォルトの名無しさん2008/12/01(月) 20:25:35
どんどん延期してると思ったら
今度はありえないくらいに延ばしたな・・・
0912デフォルトの名無しさん2008/12/07(日) 12:54:19
ghci の補完って windows じゃ効かないんですかね。
Linux 上だとちゃんと動いて便利だったのでショックです。

ネット探してみると rlwrap 使えとかあったけど
rlwrap って動的な補完(スコープ内の関数一覧等)
って可能なんでしょうか。
0913デフォルトの名無しさん2008/12/07(日) 13:54:21
そんな高度な補完はemacsのinferior-haskellとかeclipseの拡張でもできるかどうか怪しいな
0914デフォルトの名無しさん2008/12/07(日) 13:56:28
英語配列30g早く!
09159022008/12/07(日) 20:05:48
>>909
書いてありました。これって個人でも送ってくれるのでしょうかね。

ただ、まだ半分ぐらいなんですけど、問題簡単なので別に解答不要
になりそうです。ありがとうございました。
0916デフォルトの名無しさん2008/12/13(土) 18:52:49
do記法と(>>=)の対応についてですが、
do;putStr "a\n";putStr "b\n";putStr "c\n";

putStr "a\n" >>= (\_->putStr "b\n" >>= (\_-> putStr "c\n"))
なんですかね?

右結合的になったり匿名関数に変換されたりと難しいです
0917a36 ◆K0BqlCB3.k 2008/12/13(土) 19:06:24
>>916
一緒です。
でも
putStr "a\n">>putStr "b\n">>putStr "c\n"
と書いた方がきれいですよ。
0918a36 ◆K0BqlCB3.k 2008/12/13(土) 19:06:57
あと、括弧なくても良いですよ。
0919デフォルトの名無しさん2008/12/14(日) 10:36:09
なるほど、そう言えばlambda式ってかなり優先順位が高いんでしたね
ありがとうございました
0920デフォルトの名無しさん2008/12/14(日) 15:42:38
F#からポロロッカしてきました

fold/undold、flip とかを使った関数合成がすげえ苦手なんですが
このあたりに特化した書籍とかってないでしょうか

モナドとか継続とかはわりとどうでもいいんですが
0921デフォルトの名無しさん2008/12/14(日) 16:19:34
プログラムの変形やそこで使う公式を見るのがいいと思う。
birdがそういうの得意な人だから、
Introduction to Functional Programming using Haskell
http://www.amazon.com/Introduction-Functional-Programming-using-Haskell/dp/0134843460/
"Using Haskell"じゃない前の版の方がその辺は内容が濃かった。

The Algebra of Programming
http://www.amazon.com/Algebra-Programming-Prentice-Hall-International-Computer/dp/013507245X/
は関数合成、変形ドリルみたいな内容だった。
たしかparserを必要な機能を持つように変形する論文もあったはず。

0922デフォルトの名無しさん2008/12/14(日) 17:06:40
undoldって何かと思ったけど、unfoldの間違いだよね?
09239202008/12/14(日) 17:19:51
間違いですw

>>921
ありがとう
Introduction〜とRealWorldHaskellをぽちってみました
下は高杉…
0924デフォルトの名無しさん2008/12/15(月) 17:13:13
yet another haskell tutorialの4.6で

cfold' f z [] = z
cfold' f z (x:xs) = f x z (\y -> cfold' f y xs)

という継続fの与え方次第でfoldlにもfoldrにもなるものが出てきたんですが
普通のfoldlやfoldrの定義からこれを導きだす手順のようなものがあるなら知りたいです

また「なんでも再帰」流に一つ引数増やして、最後にそれを必ず呼び出すようにして
末尾再帰の形に直していく…ってやり方で書こうとしてますがさっぱりです
0925デフォルトの名無しさん2008/12/16(火) 12:48:15
面倒だからfactorialで書くと、
fac 0 = 1
fac n = n * fac (n-1) なのか
fac n = fac (n-1) * n なのかってことだから、

fac n = ((n *) . fac) (n-1)あるいは、
fac n = ((* n) . fac) (n-1)

fac n = (((\m ->(m *)) n) . fac) (n-1)あるいは、
fac n = (((\m ->(* m)) n) . fac) (n-1)

fac0 f n = ((f n) . (fac0 f)) (n-1)で
fac0 (\m ->(m *)) nあるいはfac0 (\m ->(* m)) n

\m ->(m *)と\m ->(* m)は、
fac(n-1)を計算した後にすべき計算、つまり継続になっています。

0926デフォルトの名無しさん2008/12/16(火) 12:51:01
要するにfoldってのは累積を計算しているのだから、
その累積演算を関数に独立させると、foldの性質上、継続的になるのです。
mapだとこうはなりません。
0927デフォルトの名無しさん2008/12/16(火) 22:40:24
>>926
ところがどっこい、この説明のすぐ後で、
「CPSを使ってmapとfilterを書け」なんて演習問題が出されてるわけですよ。

それを考えると、foldlの定義からcfold'へ持っていってあげたほうが
親切かもしれません。
0928デフォルトの名無しさん2008/12/16(火) 22:53:36
あっと、「この説明」ってのは
「yet another haskell tutorial の cfold' の説明」のことね。
0929デフォルトの名無しさん2008/12/16(火) 23:38:03
>>927
cfold'は、元のfold*の引数に渡す演算自体が継続的になるのに対して、
mapでは引数に渡す演算ではなくて、:が継続的になるわけです。
だからYAHTでは微妙に表現を変えています。
map f = foldr (\x -> ((f x) :)) []
ですから当たり前ですけども。
0930デフォルトの名無しさん2008/12/19(金) 19:38:36
>>929
すまん、「継続的」という言葉の意味がさっぱり分からん。
CPSにしたときに最後に行われる計算、という意味なら、
foldlは「foldl」自体が継続的、
foldrは引数として渡す関数「f」が継続的ということになるので、
fold*で継続的となる関数が同じになるとは思えない。
0931デフォルトの名無しさん2008/12/21(日) 19:58:16
おそらく激しいFAQだとは思うのですが、日本語の扱いについて。
Charの仕様からして、 >>5の「i. CharをUnicodeとして扱う」が筋と思いますが、
リテラルはともかく、IOでの変換のスタンダードな方法はもう固まってきてるでしょうか。
http://blog.kfish.org/2007/10/survey-haskell-unicode-support.html によると、
メジャーな方法が3つあるらしいですが、どれか、もしくはどれかがdefactoになっているでしょうか。
Haskell'でも使えるのがいいですが…。
0932デフォルトの名無しさん2008/12/21(日) 22:14:48
utf8-stringっぽいかな‥‥
0933デフォルトの名無しさん2008/12/24(水) 03:05:00
>>930
本人ではないが、
fが継続的(serial):
 どのxに対してもあるyが存在してf x yという関係が成り立つ。
クリプキの様相論理で出てくる、でも多分、その意味で使っている
わけではないと思うけど。
0934デフォルトの名無しさん2008/12/24(水) 21:30:39
クリプキナツカシス

・空でない集合W(要素は可能世界)と、W中の二項関係(到達可能性関係)Rの組をフレームと呼び、F=<W,R>と表す
・そこから到達可能な世界が一つもない世界を dead end と呼ぶ
・Rがserialである⇔∀w∃w'(wRw') = そのフレームには dead end が存在しない

とすると

「必然的にAならAは可能である (□A->◇A)」がフレームFで妥当 ⇔ Rがserialである


…学生の頃のノート読み返してみたがわけわかんね('A`)
0935デフォルトの名無しさん2008/12/25(木) 02:07:28
専門外のうろ覚えながら

ある世界で□Aが成立するとは、そこから到達可能な世界全てでAが成立することで
ある世界で◇Aが成立するとは、そこから到達可能な世界のなかに、Aが成立する世界があること
という認識でいいのかな。

ある世界で、任意の論理式Aについて『□A→◇A』が成り立つなら、『(◇A)∨(◇¬A)』。
つまり、その世界から到達可能な世界のなかに、Aが成立するものかあるか、¬Aが成立するものがある。
結局、『□A→◇A』は「到達可能な世界が少なくとも1つあり、その世界でのAの成否には言及しない。」と言っているんだろう。

で、全ての世界で『□A→◇A』が成立するなら、全ての世界が「次の世界」を持ち、dead endが存在しない、と。
0936デフォルトの名無しさん2008/12/25(木) 15:44:56
自然言語に直すと余計にややこしく思える
0937デフォルトの名無しさん2008/12/26(金) 15:26:05
Haskellの話じゃないのに、Haskellスレっぽい。
0938デフォルトの名無しさん2008/12/26(金) 21:21:34
モナドは様相だしな
0939デフォルトの名無しさん2008/12/26(金) 21:46:54
stateのsemanticsをtemporal logicでってのはよくある。
0940デフォルトの名無しさん2008/12/26(金) 23:20:06
規制か?
0941デフォルトの名無しさん2008/12/27(土) 15:24:26
StringとIO Stringって何が違うの?
むしろHaskell的にどう解釈すればStringとIO Stringの区別がつくの?
0942デフォルトの名無しさん2008/12/27(土) 15:39:30
IOの結果得られる文字列がIO String。
例えば、ファイル全体を文字列にして返すreadFileは、
readFile :: FilePath -> IO String
0943デフォルトの名無しさん2008/12/27(土) 16:22:29
base/GHC/IOBase.lhsより
newtype IO a = IO (State# RealWorld -> (# State# RealWorld, a #))
IOの実体は現実世界の状態をとって、IO動作実行後の状態と型aをもつ値の組を返す関数
と読めるけどいまいち釈然としないなー
まともに理解するには圏論や時相論理とかの知識がいるのかな?
0944デフォルトの名無しさん2008/12/27(土) 16:48:09
いらないよ。

エラーが起きたかどうかとか、
readLineだと、どこまで読んだかとか、
writeFileだと、書き込んだファイルとか、
そんなのがIOの「状態」。
0945デフォルトの名無しさん2008/12/27(土) 17:36:07
俺は >>943 に書いてあるとおり、現実世界を状態としてもつ
Stateモナドの一種だけど runState を書かなくてもいい特別
扱いされたものだと理解している。
0946デフォルトの名無しさん2008/12/27(土) 22:26:09
gtk2hsもwin32パッケージもインスコできねぇ
0947デフォルトの名無しさん2008/12/28(日) 19:54:43
StringとIO Stringについてはなんとなく分かった
そういうものと認識していればいいのね
で、IO StringからStringってどうやって取り出せるの?
入門書嫁ですねわかりました
0948デフォルトの名無しさん2008/12/28(日) 20:23:31
パターンマッチで抜き出す。
0949デフォルトの名無しさん2008/12/29(月) 11:11:32
REPL的な環境で使ってると、何が違うのか気付きにくいよね……
0950デフォルトの名無しさん2008/12/29(月) 12:19:22
REPLがそもそもIOモナドだもんね。
トップレベルで扱っていると思っているのはStringじゃなくてIO String。
0951a36 ◆K0BqlCB3.k 2008/12/29(月) 12:23:10
>>950
モナドではないと思うよ
0952デフォルトの名無しさん2008/12/29(月) 12:27:41
REPLモナドとか作れそうだな
しかしそういうCUIインターフェースを作るフレームワークって既に誰か作ってそうな気もする
0953デフォルトの名無しさん2008/12/29(月) 12:38:02
つ $(GHC)/compiler/ghci/GhciMonad.hs
0954デフォルトの名無しさん2008/12/29(月) 12:38:38
>>952
つ $(GHC)/compiler/ghci/InteractiveUI.hs
0955デフォルトの名無しさん2008/12/29(月) 14:08:02
>>947
つ>>=
0956デフォルトの名無しさん2008/12/30(火) 00:58:13
template haskell使ったらユニットテスト等で
どんな式からexpectedやgotが算出されたかとか、
このテストケースが書かれたのはソースのn行目、m項目であるとかを表示できるんだねぇ
これ使えばHUnitもRspecとかみたいにテスト結果をもっとkwsk表示するようになるんだろうか
0957デフォルトの名無しさん2008/12/30(火) 11:12:18
と思ったけど今のsyntaxだと$()だらけで汚いことになるからありえんか
0958デフォルトの名無しさん2009/01/01(木) 13:00:08
HTFというのがまさしくそれ…のようなんだが
使い方が全然わからねぇ…
Q [Dec]を要求するtestsって何!?
0959デフォルトの名無しさん2009/01/01(木) 14:45:43
話ぶった切ってすまそ

GHC-6.10 + OpenGL + GLUT の環境で

renderPrimitive LineLoop $ mapM_ vertex [Vertex2 (-0.9) (-0.9), Vertex2 0.9 (-0.9), Vertex2 0.9 0.9, Vertex2 (-0.9) 0.9]

↑これをGHCiで入力すると IO () として正常に扱ってくれるんだが
GHCでソース中に書くと

「Ambiguous type variable `a' in the constraints: `VertexComponent a' arising from a use of `vertex'」
「Probable fix: add a type signature that fixes these type variable(s)」

とか怒られるんだが…
どこでどうダウンキャスト(?)すればいいのかわからない

エロいひとご教示おねがいします
0960デフォルトの名無しさん2009/01/01(木) 15:39:19
↓自己解決しました

renderPrimitive LineLoop $ mapM_ vertex [Vertex2 (-0.9 :: Float) (-0.9), Vertex2 0.9 (-0.9), Vertex2 0.9 0.9, Vertex2 (-0.9) 0.9]
                                   ~~~~~~~
しょぼくてごめん^^
0961デフォルトの名無しさん2009/01/09(金) 13:20:33
とりあえず、HaskellのMLで圏論の話とかやめてもらえねーかな。
正直、みんな引いてると思うんだよね。
新規参入者が減るからHaskellの話と圏論の話は別のMLに分けた方が良いと思うんだ。
0962デフォルトの名無しさん2009/01/09(金) 14:02:50
このスレでそんな事逝っても意味ないだろバカ
直接そのMLで家よバカ
0963デフォルトの名無しさん2009/01/09(金) 14:09:20
>>962
代わりに言ってよ
俺は他人の反感買いたくないんだ
0964デフォルトの名無しさん2009/01/09(金) 14:16:03
Meta Language の方の ML かと思ったから意味がわからなかった
0965デフォルトの名無しさん2009/01/09(金) 14:43:46
本物の初心者はhaskell cafeへ
0966デフォルトの名無しさん2009/01/09(金) 14:51:32
Haskellと圏論は不可分なものではない。
単にモナドが圏論チックなだけ。
圏論の議論は圏論のメーリングリストでやればいい。
0967デフォルトの名無しさん2009/01/09(金) 15:12:02
You Ain't Gonna Need Itですか?
0968デフォルトの名無しさん2009/01/09(金) 15:44:39
マイナー人間同士仲良くやりなさいよ。
そんなことで剣呑するより圏論する方がいいじゃないか。
0969デフォルトの名無しさん2009/01/09(金) 15:58:05
圏論厨UZEEE
0970デフォルトの名無しさん2009/01/09(金) 15:59:56
っていうか、圏論って別にマイナーでもないぞ。
数学じゃ普通に使う。
HaskellのMLに来てるやつは数学系のMLについて行けなかった奴らだろうな。
0971デフォルトの名無しさん2009/01/09(金) 16:03:33
haskellと一緒に勉強すると単品でやるよりわかりやすいらしい
0972デフォルトの名無しさん2009/01/09(金) 16:34:23
おしりまん
0973デフォルトの名無しさん2009/01/09(金) 19:32:17
Real World HaskellってAmazonのComputers & Internetカテゴリで
ベスト11に入ってる。配下のProgrammingでは5位。

すごいな。Haskellってこんなに流行ってるのか…
0974デフォルトの名無しさん2009/01/10(土) 08:49:40
SICP が売れて Scheme が流行ったか?
0975デフォルトの名無しさん2009/01/10(土) 09:28:00
学生が主に買ってるってこと?
0976デフォルトの名無しさん2009/01/10(土) 12:42:47
>>973
尼の情報操作
0977デフォルトの名無しさん2009/01/10(土) 12:45:49
現在8位 どんどんあがってる haskellの時代きた
0978デフォルトの名無しさん2009/01/11(日) 22:07:35
Amazonの順位は簡単に上下するぞ
0979デフォルトの名無しさん2009/01/12(月) 06:03:33
http://www.amazon.co.jp/Real-World-Haskell-Bryan-OSullivan/dp/0596514980/ref=pd_sim_fb_4

これはHaskell初心者向けかな?
schemeとocamlの基本は理解してる程度。
0980デフォルトの名無しさん2009/01/12(月) 06:15:48
まず日本語を理解しろ
0981デフォルトの名無しさん2009/01/12(月) 06:43:10
なんで自己啓発してんの?
レス数が950を超えています。1000を超えると書き込みができなくなります。