トップページtech
768コメント261KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001潜伏していた1NGNG
何とか生き残れました。
前スレ
http://pc.2ch.net/test/read.cgi/tech/996131288/l50

関連 >>2 以降
0002潜伏していた1NGNG
パート2付け忘れちゃった...
ここがパート2です。鬱。

Haskellの公式HP
http://www.haskell.org
インタプリタHugs
http://www.haskell.org/hugs
日本語サイト
http://www.sampou.org/haskell
http://www.teu.ac.jp/kougi/koshida/Prog6/index.html
0003潜伏していた1NGNG
関連ありそうなスレ

関数型言語Part2
http://pc.2ch.net/test/read.cgi/tech/1007387924/l50
関数型プログラミング言語ML
http://pc.2ch.net/test/read.cgi/tech/1012445015/l50
LISP Scheme Part3
http://pc.2ch.net/test/read.cgi/tech/1008220265/l50
0004潜伏していた1@このスレはパート2ですNGNG
やる気を起こさせる読み物

なぜ関数プログラミングは重要か
http://www.sampou.org/haskell/article/whyfp.html
普通のやつらの上を行け ---Beating the Averages---
http://www.shiro.dreamhost.com/scheme/trans/beating-the-averages-j.html
Why People Aren't Using Haskell
http://www.jelovic.com/articles/why_people_arent_using_haskell.htm
0005このスレはパート2ですNGNG
というわけで、いきなりbottomってしまいましたが頑張りましょうage
0006デフォルトの名無しさんNGNG
>>4
一番下のやつってやる気起きるのか?
英語苦手なんでちゃんと読めてないのですが
とりあえず Haskell を勧めてはいないような…。
0007このスレはパート2ですNGNG
なんで使ってくれないんだ? という原因を検証しているようですね。
なんで使ってくれないんだ? と訴えられると、
「よっしゃ一肌脱いだる」とか思うのは、俺だけですかねぇ。
#その割に未だ偉そうなプログラムは書けていませんが。
0008デフォルトの名無しさんNGNG
> なんで使ってくれないんだ?

そんなに Haskell 側に立ってる感じでもないような。
0009ageNGNG
module A where
data A a = A a
f = id
g :: a -> a
g = A.f
h :: a -> A a
h = A .f
0010デフォルトの名無しさんNGNG
age
0011デフォルトの名無しさんNGNG
>>8
胴囲
どっちかというと、Haskell擁護者よ。
Haskellを普及させたいなら、もっと頑張れみたいな。

たしかにHaskellには、一般向けアプリを作りるには足りないものが多いなー。
TCP/IP鯖作るにしても、ライブラリ作るところから始めなきゃいけないし。(多分)
鯖にTimeOut処理付けるにしても、Timer関数ないし、競争書き込みもしないから
各関数にTimeOut処理付けるしかないのかな?

と言うわけでParalell Haskell燃えー。(といっても何かは知らんがね)
0012デフォルトの名無しさんNGNG
> と言うわけでParalell Haskell燃えー。(といっても何かは知らんがね)

どうしてそういう結論につながるんだよ!
と思ったが、前スレに出てた Paralell Haskell で書かれた web server のことで…か。
とりあえずあれは Paralell Haskell だからライブラリがあるわけでなく
ただ単に GHC に付いてる ライブラリ使ってるだけっぽいですよ。
001311NGNG
いやー。
こんな関数がほしいのよ。(Haskell消防なので笑わないでね)

readWithTimeOut :: Socket -> Int -> Maybe String
readWithTimeOut s ms = timer ms Nothing || read s

関数timer::Int->a->aは指定された時間簡約が停止する。
その後2番目の引数を返す
関数read::Socket->StringはTCP/IPにデータが来るまで簡約が停止する。
ソケットからByte列をStringとして返す。
演算子||は、競争書き込み。全ての最初に帰ってきた値を値として返す。
他の簡約は、もちろん正常に停止、消去(GC?)される。
もちろん a = b || c || dと複数書ける。
(競争に負けた簡約は、どうしたらいいんだろう?うーん、キャッシュしておく?)

ってParallell G-mahineを実装しているHaskellでも可かな?
このようなことのできる処理系あったら誰か教えて。お願いします。
0014デフォルトの名無しさんNGNG
Parallel と Concurrent ってどう違うんですか?
0015デフォルトの名無しさんNGNG
お前はどう違うと思うんだよ
0016デフォルトの名無しさんNGNG
Hugs98にはWin32グラフィックライブラリがついているが、
コンパイラ(GHC)の方にはグラフィック関係のライブラリない
みたい。Hugsでライフゲーム作ってみたけど、遅いので
コンパイルしたいが、GHC使ったことないので教えてくれ。

アニメーションもストリームにしちゃうから、グラフィックIO
も遅延評価じゃなきゃいけないが、このあたりがライブラリー
の作成を難しくしているのかな。
0017デフォルトの名無しさんNGNG
なんと、同じ名前で新スレとは!
なんたる!
0018デフォルトの名無しさんNGNG
>>17
参照の透明性が…(泣
0019デフォルトの名無しさんNGNG
>>1 は Haskellにお詫びしろ。
貴様は代入を行った(笑
0020デフォルトの名無しさんNGNG
実はMonadを使って回避されています……ってワケにも行かないか。>>19
0021デフォルトの名無しさんNGNG
>>17-20
ワラタ
0022デフォルトの名無しさんNGNG
17=18=19 の自作自演じゃない。
参照透明性くずすな。
002317NGNG
私は17しか書きこんでないっ!
002422NGNG
失礼。
17−20うまくオチが決まってたので、チャチをいれたくなった(笑)
002517NGNG
もしかしたら、再帰呼び出しなのかもしれないな(笑

#だとしたら次スレも同じ名前?(笑
0026デフォルトの名無しさんNGNG
「おっ、Haskell スレにいっぱいレスが付いてる」と思ったら…
002720NGNG
代入と配列(あるいは大きなオブジェクトの部分更新)とMonadの関係について
丁度悩ましい思いをしてるトコなもんで(w。

>>25
その場合、このスレに関する型推論はどうなるのでありますか?(w
0028面白そうだけど、調べた事ないーNGNG
>>27 やってたやってた、蓬莱軒行った奴がそういうテーマ。

なんか、プログラムの停止性と関連付けて、
停止する関数と停止しない関数に分けるのかな?

多相型と関連付けると、ちいと面倒な結果になりそう...
#真面目に調べたことないけど
002920NGNG
>>28
蓬莱研?もしかすると物理的に近所かもしれない……(w。

ちなみに特に関心があるのはその実装と効率なんでスヨ。
今、メインで悩んでる課題ではないんだけどね。
0030デフォルトの名無しさんNGNG
ghcを使ってちょこちょこ簡単なプログラムを
作って遊んでます。が、しかし!
コンパイルが異常に遅いです。
ghcってHaskellで書いてあるんですよね?
だとしたらHaskellで書かれたプログラムは
遅いということになったりして・・・鬱

実際にghcでアプリケーション作ってる人の
感想を聞かせてください。
0031デフォルトの名無しさんNGNG
hoshu age
0032デフォルトの名無しさんNGNG
http://www.mondrian-script.org/
これはなんでしょうか?
0033デフォルトの名無しさんNGNG
乱数を生成関数では、素直に考えると
参照透明性が確保できませんよね?
(実行するたび帰り値が違うんですから。)

なんとか参照透明性を確保する方法ってないのでしょうか?
誰か教えてください。
0034デフォルトの名無しさんNGNG
>>32

おおHaskell.NETのBetaすか?
いいですねー。
今度Downしてみよう。
0035デフォルトの名無しさんNGNG
>>33
「入力」の仲間だと思えば継続(continuation)かMonadかなぁ。
無限リストで乱数列を表し遅延評価というのも、
形式的には面白いが実際に書くと重いだろうなぁ。
まー、擬似乱数を線形合同法とかでつくるなら、
お手軽には直前に出力された数を呼出し毎に渡すとか……。
0036デフォルトの名無しさんNGNG
>>33
http://www.sampou.org/haskell/library-j/random.html
ほとんど>>35の言う通りのやり方。

>>35
> 無限リストで乱数列を表し遅延評価というのも、
> 形式的には面白いが実際に書くと重いだろうなぁ。

そこまで重くなるとは思えないけど?
というか、他の部分も遅いだろうから、
特別その部分が遅い気はしないだろうっていうほうが正しいか(w
003733NGNG
>>35 >>36
お答えいただき有難うございます。
>ttp://www.sampou.org/haskell/library-j/random.html

この方法ですか。なるほど。
質問してから解決策を考えていたのですが
乱数表を使うか、この方法かどちらかかなとしかないかなと
思っていたので納得出来ました。

それにしてもHaskellのIO型って変ですね。(名前が)
非決定なものは、すべてIO型なんですね。
うーん、もっと良いネーミングしてほしい。
0038デフォルトの名無しさんNGNG
Linux の /dev/random みたいなものかと
0039デフォルトの名無しさんNGNG
>>36
重くなるっていうか、乱数って最新の一個だけが必要なことが多いから
過去の値が全部リストになって残ると、沢山利用した時にメモリを無駄に圧迫するかなと。
GCで回収されるならまだいいんだけど。
0040デフォルトの名無しさんNGNG
>>39
参照されていないオブジェクトは回収されないんですか?
0041デフォルトの名無しさんNGNG
>>40
クライアントは再帰中なので、
生成された乱数は、参照可能だからかな?

そりゃ、回収されんわな。
0042デフォルトの名無しさんNGNG
>>37
IO monadは、最初は本当に入出力用だったのに、
後からいろいろと付け足したのだと思われ。
別々のmonadにすればいいじゃん、と思うかもしれないが
一緒に使いたくなったときに困る。
monadの合成は、理論的に自明じゃない問題があるので。
0043デフォルトの名無しさんNGNG
乱数乱数って普通言うけど、実際は乱数系列のことでしょ
だから>>36のやり方は別に特殊じゃないよ。
0044デフォルトの名無しさんNGNG
>>41
末尾再起なら回収できないかな?
0045デフォルトの名無しさんNGNG
つーか、素直にIO monadな>>36使え。

末尾再起じゃなくて乱数リスト回収できない事気にするくらいなら、
リストよりでかいスタックを解放するようにプログラム書き換えろ。
sagesage
0046デフォルトの名無しさんNGNG
たまには age ておこう。
0047言語障害なんですNGNG
Haskell は OOPL 疑惑
http://www.geocities.co.jp/SiliconValley-Cupertino/6957/HaskellIsOOpl.ja.html

>>13はゆーあいさん疑惑
http://www.geocities.co.jp/SiliconValley-Cupertino/6957/diary200202.ja.html

思っているだけで作る気はない疑惑
http://www.geocities.co.jp/SiliconValley-Cupertino/6957/mylang.ja.html

typo がやたら多いという罠
0048デフォルトの名無しさんNGNG
Haskellのモナドは正直言ってかったるい
0049デフォルトの名無しさんNGNG
age
0050デフォルトの名無しさんNGNG
あーそうだ haskell もやらなきゃ..
0051デフォルトの名無しさんNGNG
質問ですいません。
「lambda lifter」って、どういう処理なんでしょうか?
局所関数(関数内の関数)を展開して外側の関数と一体化する処理らしいですけど
実行速度改善のための最適化処理の一種だと考えてよいのでしょうか?
http://citeseer.nj.nec.com/lester91modular.html

それと関数型言語にある代表的な最適化処理があれば教えてください。

0052デフォルトの名無しさんNGNG
>>51
Cのインラインと違うの?
0053デフォルトの名無しさんNGNG
>>52
実行時までどんな関数が来るのか分からない
らむちゃんなんだから全然違うだろ。
0054無名λ式NGNG
>>51
lambda liftingというのは、
一言で言えば、自由変数を除去する変換の事です。
・funarg問題がなくなる
・環境の扱いが簡単になる
・lazinessの境界がはっきりする
などなどの利点があります。
lifterはその変換器の名前です。

Super combinatorというのありました。(これは変換後のλ式の名前)

Prentice-Hallから処理系実装の本が出ていましたが、
> それと関数型言語にある代表的な最適化処理があれば教えてください。
こういう観点で非常にいい読物だと思います。
# 今やMicrosoft Research(CLI!)のSimon P. Jonesのが一冊、
# もう一冊はHughesじゃなかったかな? 教科書になって答えがWebで配布された奴。

驚きなのはcombinatorが非常に古い概念であるにも関わらず、
λ計算において非常に本質的な役割を担うことです。




0055無名λ式NGNG
>>53
> 実行時までどんな関数が来るのか分からない
> らむちゃんなんだから全然違うだろ。

λ式ちゃんは、Lisp野郎ほど酷くないですけどね。
奴の場合、cons, eval, macroと何でもありなので。
0056デフォルトの名無しさんNGNG
> # 今やMicrosoft Research(CLI!)のSimon P. Jonesのが一冊、

http://research.microsoft.com/~simonpj/Papers/papers.html
ここ (の一番上のとこ) から落とせるやつですな。
0057無名λ式NGNG
http://research.microsoft.com/~simonpj/win32-cheat.html
これ面白いよね。この作業苦痛じゃないのかな...
0058デフォルトの名無しさん NGNG
>>57
なんだか大変そうですね。これホントに自分でやってるのかな?(藁
0059デフォルトの名無しさんNGNG
仕事でcygwinを強いられるSimon萌え!
0060デフォルトの名無しさんNGNG
論文発表打ちage
0061デフォルトの名無しさんNGNG
>>54
コンビネータ、結合子ですか?
圏論?λ理論の話でしたか?
うーん難しい。
0062デフォルトの名無しさんNGNG
>>61
理論的には難しいとおもうけど、
"Implementing Functional Languages: tutorial"
には実装についてわかりやすく書いてありますです。
0063デフォルトの名無しさんNGNG
>>62
サイモン パイソン ジョーンズさんがM$用に書いたやつだよね?
どのチャプターに書いてあります?

(ファイルは持ってるんだけどねー。軟弱ものなので読んでません。)
0064デフォルトの名無しさんNGNG
> Peyton
ペイトン
0065デフォルトの名無しさんNGNG
>>63
Lambda lifting については 6章
コンビネータ実装のはなしは
"Implementation of Functional Programming Language"
というよく似た名前の本の方でした。これも、どこかのWEBサイトで公開
されてたとおもうですだす。
0066デフォルトの名無しさんNGNG
>>65
"Implementation of Functional Programming Language"
本の方は簡単に見つかったけどなー。
判らない。くそー。
0067Super CombinatorNGNG
>>66
何がわからないのか、話してみれば?
0068デフォルトの名無しさんNGNG
Peyton Jonesは前に学会で会ったとき、冬のロンドンを裸足で歩いてた…。
別に変人じゃなくてナイスガイなんだけど。発表は楽しいし。
006966NGNG
>>67
コンビネータといえばCL式
どんなCL式でもIKSを組み合わせたものまで分解できるらしいけど
どうやって?

あとSの意味が判らない。どう使うんだろう?

I = \ x -> x
K = \ x y -> x
S = \ x y z -> x z ( y z )

でも相手にしないでください。
頭正規形(hnf)って何?といぐらいのレベルですから。
ラムダ理論も知らないんですから。
0070Super CombinatorNGNG
>>69
> あとSの意味が判らない。どう使うんだろう?
> S = \ x y z -> x z ( y z )

Distributor.

Combinator式は、グラフとして素直に表すことができるから、
部分グラフは、元のプログラムを分割したものと考えられる。
部分プログラムxと部分プログラムyの両方に引数zを渡し適用するのが役割。

x側では引数zは必要なければ、

(K x' z) (y z)

てな感じになる。(x ≡ K x')
(x z)を(y z)に適用するのは、部分プログラム同士を結合する方法が、
「適用」以外にはないから。Combinator logicやlambda calculusでは。

RAM(Random Access Machine)ではメモリ参照で、データを扱うわけだけど、
Combinator logicやlambda calculusでは、どんどん受け渡していくことになる。
# lambda calculusのβ簡約をメモリ参照で直感的に理解している人も多いと思うが。
0071デフォルトの名無しさんNGNG
>>69
I=SKK
Raymond Smullyan の "To Mock A Mockingbird" という本が楽しめます。
翻訳も出ていたと思う。
0072デフォルトの名無しさんNGNG
>>71
『ものまね鳥をまねる』森北出版 isbn 4-627-01901-7
007369NGNG
みなさん、親切な解説有難うございます。
「プログラミング意味論」 横内寛文著
「計算論 計算可能性とラムダ理論」 高橋正子著
と読み理解しようと奮闘中なのですが、計算機屋の私にはさっぱりです。
しかし理論はむずかしーな。
一度ものにしてしまうと効果絶大なんですけどね。
もうちょっと、がんばってみます。

>>71
>I=SKK
む。なるほど。
上の本で書かれていましたが、改めてみると こういう意味だったんですね。
Sの機能が、ちょっとわかった気がしました。

>>70
>Distributor.
>
>Combinator式は、グラフとして素直に表すことができるから、
>部分グラフは、元のプログラムを分割したものと考えられる。
>部分プログラムxと部分プログラムyの両方に引数zを渡し適用するのが役割。
中略
>(x z)を(y z)に適用するのは、部分プログラム同士を結合する方法が、
>「適用」以外にはないから。Combinator logicやlambda calculusでは。

なるほど。
Sで式同士を組み合わせる。
もしくはSで式を分解できるということなんでしょうか?

>>71
>『ものまね鳥をまねる』森北出版 isbn 4-627-01901-7
ttp://www.morikita.co.jp/bunya/kensaku-bunya.cgi?id=67
よさそうな本ですね。購入したいと思います。
0074Super CombinatorNGNG
>>73
> 両方に引数zを渡し

だから'分配器(distributor)'です。
Sはドイツ語だったかの頭文字だったはず。
K=cancel
0075石敢當NGNG
GHC 5.02.3 がリリースされました。

ただいま amortization の勉強中。
分かったような、分からんような・・・
ということは分かってないんだなぁ。
0076Super CombinatorNGNG
>>75
amortizationは、時間のかかる処理を、複数の操作に対してひとまとめにして、
平均の計算量オーダーを下げる手法のこと。
木、ソートされたテーブル、pure functional arrayなどの
再構成、構造調節などで利用される事が多い。

0077デフォルトの名無しさんNGNG
amortizationって何ですか?
どういう物なのか興味あるなー。
教えてSuper Combinatorさん。
0078石敢當NGNG
> amortizationは、時間のかかる処理を、複数の操作に対してひとまとめにして、
> 平均の計算量オーダーを下げる手法のこと。

そのような雰囲気は分かるのですが、「分かったぞ!」という実感が
まだ伴っていません。もう少し勉強します。

.NETというのも名前はよく目にするものの中身はさっぱり分からない
のですが、Hugs98 for .NET というものがリリースされたようです。

http://galois.com/~sof/hugs98.net/
0079デフォルトの名無しさんNGNG
Cormen, Leiserson, RivestのIntro. Algorithmsに
amortized analysisの章がありますよ.
0080デフォルトの名無しさんNGNG
たとえば固定長配列に1ずつ要素を追加していくことを考えます。
満杯になったら新しく大きい配列を用意して全部コピーして追加。
このとき、初期サイズ1で1ずつ大きくして行くとN要素追加するの
に合計コピー回数は1+2+3+…+NだからO(N*N)。定数Cずつ大きく
していくとしても、コピー回数がC分の1になるだけだからO(N*N)
は変わらない。ところが2倍ずつに大きくして行くことにすると、
1+2+4+…+NだからO(N)になるのね。しかし「1個追加するときの
最大計算量」はどの方法でも(その1個であふれた場合はどのみち
コピーするんで)変わらない。逆に言えば、最大計算量を考える
変わりにN個の操作全体の計算量を考えてその平均を取ると
1個追加する際の平均的な計算量はO(1)だよね、っていうのが
amortized analysis。
0081デフォルトの名無しさんNGNG
ttp://www.cs.columbia.edu/~cdo/papers.html
ここに書いてあることかな?
英語が読めない。
0082デフォルトの名無しさんNGNG
なんか今はnot foundになっちゃうけど、それってChris Okasakiのページだよね。>>81
だったら、そうだと思う。

でもこのスレの人でも、英語は壁になるんだ…。自動翻訳希望?
008381NGNG
そうです。
他力本願全開。
0084石敢當NGNG
> 逆に言えば、最大計算量を考える
> 変わりにN個の操作全体の計算量を考えてその平均を取ると
> 1個追加する際の平均的な計算量はO(1)だよね、っていうのが
> amortized analysis。

これは良く分かります。ただ、これだけだと amortization などという
言葉を持ち出すまでもなく、単に「平均」ですよね。(違うのかな?)
もし単に平均コストのことを言っているだけだとすると、
banker's method だの physicist's method (>>79の本では
accounting method と potential method)だのの技法を使い、
多くのページを割いて解説するほどのことじゃないように
思うんです。

>>80の例の場合、配列の確保がサイズに関係なくO(1)で行えると
仮定すると、あふれたときに1度に全部コピーするのではなく、
新しい要素が追加されるたびに要素を2個ずつコピーすることに
すれば1個追加する際の「最大の」計算量がO(1)となります。

結局、amortizationの何が良く分からないのかということを
改めて考えてみますと、amortized analysisで得られた平均
計算量が、平均ではなくて最大の計算量となるような実装が
いつも得られるのだろうか、ということであるような気が
してきました。

まだ良く分かっていません。変なことを書いていたらごめんなさい。
0085デフォルトの名無しさんNGNG
>>84
> これは良く分かります。ただ、これだけだと amortization などという
> 言葉を持ち出すまでもなく、単に「平均」ですよね。

「最悪」の場合の1ステップあたりの「平均」ではないでしょうか。
0086デフォルトの名無しさんNGNG
http://www.teu.ac.jp/kougi/koshida/Prog6/index.html



ない・・・
0087デフォルトの名無しさんNGNG
http://www.brl.ntt.co.jp/people/mizuhito/CS/

 ↑

ここも講義録だったような気がするんだけど、つながらない・・・
0088デフォルトの名無しさんNGNG
>>87
http://www.ipl.t.u-tokyo.ac.jp/~mizuhito/CS/
0089デフォルトの名無しさんNGNG
このスレを見て面白そうだと思いHugsを入れてみた関数型の素人です。
最初はやはり名前を入力させてXXXさんこんにちは、だと思い試したのですが
putStr "123" とか getLine とか単体では動くのに、次のように組み合わせるとエラーになります。

Prelude> putStr getLine
ERROR - Type error in application
*** Expression : putStr getLine
*** Term : getLine
*** Type : IO String
*** Does not match : [Char]

一行入力をそのままエコーすることを意図しているつもりなのですが、何故でしょうか?
0090デフォルトの名無しさんNGNG
>>89
getLine の型は IO String だが putStr は String 型を貰うので
型エラーになります。(IO が付いているかいないかの違いだけど)
getLine >>= putStr とすれば意図してるように動きます。
「>>= って何?」などと思うのでしょうが、説明するのは大変なので
http://www.sampou.org/haskell/tutorial-j/ などを読んでください。
0091デフォルトの名無しさんNGNG
色々試しているのですが、次のコードで
ERROR "ファイル名":3 - Type error in function binding
*** Term : sel
*** Type : a -> IO a
*** Does not match : a -> a
*** Because : unification would give infinite type
というのが消えてくれません。

module Main (main) where

sel x = do putStr "(y/n) ? "; c <- getChar
       return (
        case c of
         'y' -> sel (x + 1)
         'n' -> x
         _ -> sel x)

main = do putStr (show (sel 0))

selの型は Int -> IO Intのつもりなのですが、型を明示しても駄目です。
いじっていると、IO (IO Int)みたいな型がエラー報告で出るときもあります。

このコードはどうすれば通るのでしょうか?
それと、IOを重ねる意味は無いように思えるのですが、IO (IO Int) というのはどういう状態なのでしょうか?

質問ばかりで申し訳ありません。
0092デフォルトの名無しさんNGNG
>>91
case c of
{'y' -> sel (x + 1)
;'n' -> x
;_ -> sel x}

この式の型は何でしょう?
009391NGNG
IO Int …のつもり…です。
それをreturnで返していますから、selの返値もIO Intで、
selの型は Int -> IO Int …

エラーになるということは、間違った理解なのでしょうけれど…
009491NGNG
sel (x + 1) と sel x が IO Intなのに、'n' の時の x がただの Int だからいけない…?
とすれば、ただの Int を IO Int に揃える必要があるということですか?
0095デフォルトの名無しさんNGNG
> IO Int …のつもり…です。
> それをreturnで返していますから、selの返値もIO Intで、

return の型は Monad m => a -> m a です。
>>91 のケースだと m は IO。

> とすれば、ただの Int を IO Int に揃える必要があるということですか?

うん。で、そういう場合に return を使う。

sel x = do
putStr "(y/n) ? "
c <- getChar
case c of
'y' -> sel (x + 1)
'n' -> return x
_ -> sel x
009691NGNG
以下のコードで動作しました。ありがとうございます。

module Main (main) where

sel x = do putStr "(y/n) ? "; c <- getChar
       case c of
        'y' -> sel (x + 1)
        'n' -> return x
        _ -> sel x

main = sel 0 >>= putStr . show

(r <- case …にしてその後にputStr "/"とreturn rを続けて書いたら、'n'を打った時も表示されたので)
この場合returnはcaseから抜けているだけですよね?

doを使っている場合も、returnを書かなくても、最後の式が返値になるのですね。
0097デフォルトの名無しさんNGNG
return は関数であって、命令ではない。
009891NGNG
IO型にするだけで、脱出はしないということですか?
0099デフォルトの名無しさんNGNG
返り値という表現に違和感を感じので。

深い意味はないです。return は、返り値を
もって呼び出し元へ帰る命令ではなく、単に
a 型の値を m a 型の値に写像する関数だと
いってみただけです。
0100デフォルトの名無しさんNGNG
試してみたら、returnの後に文を続けた場合、途中returnに渡した値は無視されて、最後の値が採用されているようです。
成程…Haskellのreturnはreturnしないのですね。
0101デフォルトの名無しさんNGNG
のぶさんのHaskell-MLに登録してみましょう
0102デフォルトの名無しさんNGNG
return とか戻り値をCチックに理解しようとしてる時点でもうダメでしょうって
感じかも。関数型言語の発想が根本からわかってない。
IOモナドって一見して普通の手続き型にも見えますからねえ・・

関数型が全くわからない人は、HaskellのまえにMLを経由した方が良い
というのは正しいのかも。
0103デフォルトの名無しさんNGNG
モナドは手続き型プログラミングの車輪の再発明だって、どっかに書いてあったね
0104デフォルトの名無しさんNGNG
俺、いつもはMLしか使ってなくてHaskellは詳しくないんだけど、
Haskell(特にGHC)って例外処理とか、入出力じゃない副作用も
どんどんIOモナドに入ってるじゃん。

モナドの合成が理論的に難しいかららしいけど、そのうちに現実的な
プログラムだと何でも一つのモナドの中で書くことになって、ほとんど
MLみたくなったりはしないの?(手続き型言語とまではいわないけど、
「どこでも副作用」って感じで)
0105デフォルトの名無しさんNGNG
>>104
モナドは副作用じゃないのでOK OK。
逆に言うとMLの利点がなくなってくる。
0106デフォルトの名無しさんNGNG
ML、Haskellってお互い仲悪いんですか?
0107デフォルトの名無しさんNGNG
ゆーざーがね
0108デフォルトの名無しさんNGNG
仲悪いなんて聞いたこともないぞ。
なかはわるくないです。

MLとHaskelは
ちょっと雰囲気は違うような気はしますけどね。
でもまあそれは両方使ってみれば解ることで。
0109デフォルトの名無しさんNGNG
>106
Haskell-MLというのが有るらしいですYO!
0110デフォルトの名無しさんNGNG
Haskellは、純粋関数型言語だから
MLの不純さが嫌なのかも?
どうなの?>ALL
0111デフォルトの名無しさんNGNG
確かにHaskellの処理系の効率が良くなればMLは不要になる。
0112デフォルトの名無しさんNGNG
MLとHaskellは設計思想自体が全然違う気がします。

ML(Ocaml)は現実的にある程度の副作用を認めている代わりに
使っているとコンパクトな感じがします。
副作用も使えると言うだけで、副作用のある構文を使わずに書く事は
全然出来ますし、遅延評価もコードによって簡単に実現できます。
未だ出来あがっていないものの、ML2000の仕様書では言語自体に
遅延評価など新しい機能がかなり含まれています。

Haskellは純粋を歌ってはいますが、
結局の所モナドというものに問題を押しこんだだけのようにも思え
美しくないようにも思われます。
仕様もわりとごちゃごちゃしている気がします。
言語の性質上ML並みに速くなる事も難しいのではないかと思います。
0113デフォルトの名無しさんNGNG
MLで副作用使わずにどうやってI/Oするの?
0114104NGNG
あーなんか煽りっぽくなっちゃってスマソ。俺はHaskellも大好きだよ。(笑)
WadlerとかPeyton Jonesとか面白い人が多いし。(そういう問題か?)

>>113
一応、MLでもHaskellと同様のmonadicなプログラミングスタイルは可能。
MLだと文法的に面倒で、Haskellを使ったほうが楽だから誰もやらないけど…
0115デフォルトの名無しさんNGNG
副作用のある関数型言語は
中途半端な感じが払拭できないということでいいのか?
0116デフォルトの名無しさんNGNG
Ruby >>>>>>>>>>>>>>>>>>> Haskell
0117デフォルトの名無しさんNGNG
モナドがあまりに手続き型っぽすぎるので、
Haskllを関数型を知らない人に触らせると、
モナドでC言語かよ!ということをやろうとする。
しかして正しく正面玄関から入ろうとすると、難解過ぎる。
MLの方がそういう意味でも適度に関数型な気がする。

純粋関数型を言うならば、遅延ストリームでゴリゴリ書くのが基本に
なってるような言語であるべきかなと思ってみたりする。
0118デフォルトの名無しさんNGNG
いいんじゃねえの?
多目的言語なんだから。
0119Super CombinatorNGNG
>>104
> Haskell(特にGHC)って例外処理とか、入出力じゃない副作用も
> どんどんIOモナドに入ってるじゃん。

最近Haskellの動向は探ってないんだけどこれ本当?

IOErrorがIOモナドmoduleにあって、
HaskellがIOError以外ろくに例外をsupportしないだけなんだと思ってたよ。
0120デフォルトの名無しさんNGNG
勉強中だからよく分かんないけど、state モナドの事?
0121デフォルトの名無しさんNGNG
MLと(Haskellとも)離れますが、
モナドを使うと、手続き型言語を
関数的に解釈することができますか?
0122デフォルトの名無しさんNGNG
>>121
「関数的に解釈」の意味がよくわからない。
Haskellでインタープリタが書けるか?
という意味じゃないよね。

0123デフォルトの名無しさんNGNG
http://sato-www.cs.titech.ac.jp/prism/index.html
0124デフォルトの名無しさんNGNG
>>122
モナドを使うと、どうみても副作用な操作でもfunctionalな
操作と解釈できるわけですが、それと同じように手続き型言
語のプログラムに純関数的な意味を与えることができますか?
という意味です。
0125デフォルトの名無しさんNGNG
>>124
Idealized Algolとかいうのがなかったっけ。
0126デフォルトの名無しさんNGNG
グローバル変数が見当たらないんですが・・・
0127デフォルトの名無しさんNGNG
>>121 >>124
できません。
強引に無理矢理こじつけることならできるかもしれないけど意味無し。
0128デフォルトの名無しさんNGNG
>>124
モナドを使えば、代入、逐次的実行、手続き型ライクなI/O、例外などを
純関数型の枠組みで扱える。gotoくらいならもともとモナドに関係なく
等価な純関数型言語に変換することができる。

Cは無謀だがMINIMAL BASICくらいなら、純関数型とみなすことは可能だろ
う。
0129Super CombinatorNGNG
>>124
Denotational semanticsじゃ駄目?
domainの性質がやっかいになるから、いいことないけど。

そもそも「簡単に」できるくらいなら、関数型言語の存在意義が…
0130デフォルトの名無しさんNGNG
Haskellで書いたプログラムに、関数的意味を与えうるなら、
手続き型の言語のインタープリタを Haskell で書いたら、
その言語の意味を与えたことになる?
ならない?
0131デフォルトの名無しさんNGNG
>>130
なるんじゃない?
きちんとやれば操作的意味論だろ。
0132デフォルトの名無しさんNGNG
結局、Haskellは非正格言語なのが問題じゃない?
実際に各項が何時評価されるか?どういう順番で評価されるか?
ということが予測しづらい(できない)からねー。

その点、正格言語や手続き型言語は評価の順序が一目瞭然だからねー。

Prologにカットオペレータがあるように、Haskellも競争書き込みで
評価の順序を、ある程度コントロールできる様にしたらよいのかな?
0133デフォルトの名無しさんNGNG
>>132
?? 問題なのは結果であって、
順番なんてどうでも良いだろう。

順番じたいが望む結果に含まれる
(例えば入出力とかGUIとか)なら、
そこだけモナド使えば良いしさ。
0134デフォルトの名無しさんNGNG
>>133
133も書いていますがコンピュータの入出力は
ストリームを基本としているものが多いですよね。
しかし、ストリームにとって並び方も結果の内ではないでしょうか?
プログラムは外部と入出力して、なんぼのものだと私は思っています。
ゆえにストリームのようなモノに対して実行順序がコントロールできることは
プログラミング言語にとって重要であると思います。
そうじゃなきゃPrologもカットオペレータなんて付けなかった
と思います。

あと私のような消防には、実行される順序が予測できないと
デバッグしづらいです。(もしかして、こっちが本題か?)
0135デフォルトの名無しさんNGNG
>>134
ほんとに消防だな。Haskellだって
ストリームの順番が狂うわけはないだろう。

ストリームは「いくらでも長くなりうる列」
というデータだ。関数型の基本はデータの値を
求めることなんだから、モナドなんか用いなくたって
ちゃんと求まる。
0136チュウボウNGNG
なんで副作用って困るの? よく聞くはなしでは
 副作用あり=>参照透過性がない=>数理論理的でない
数学って、まったく副作用のない構成になっているの?
0137デフォルトの名無しさんNGNG
> 数学って、まったく副作用のない構成になっているの?

副作用がなんなのかわかってる?
0138デフォルトの名無しさんNGNG
副作用が無ければ、デバッグ簡単
0139チュウボウNGNG
>副作用がなんなのかわかってる?
オレの理解
 状態という一種の記憶域のようなものがあってその値が
 変わること。

数学ではオートマトンとか除けば、状態のような概念は
知らない。
0140デフォルトの名無しさんNGNG
>>136
評価順序に依存してるから
0141チュウボウNGNG
順序なしで考えるより、順序を指定されて考える方が楽じゃない?
0142デフォルトの名無しさんNGNG
>>141
そう思えるのはモノが単純な場合だけ
0143チュウボウNGNG
状態(もの)と動作(働き)があった方が考えやすい気もする。
主語+述語が人間の頭にあってるような気がする。
(状態があるならば副作用があると思ってる)

ペトリネットなんかかじってみてると、そんな気がしてきた。
ttp://www.aichi-pu.ac.jp/ist/~qua/intropn/intropn.html
0144デフォルトの名無しさんNGNG
副作用って、関数が値を返す以外の何かの作用を起してしまうことでしょ。
「なぜ関数プログラミングは重要か」に副作用が無い事のよさが力説されてた。
実感湧かなかったが。
0145デフォルトの名無しさんNGNG
>>143
日本語は主語なんかなくても良い言語だよ。英語カブレめ(w
実際この書き込み(145かな?)のなかに主語のある文は一つもないが、
意味はちゃんと通じるだろ?
01465月病NGNG
オレも人並みにSOE本ながめたりして、haskellの理解に
努めたわけよ。モナドの意味もつかもうとしてがんばった
んだけど、あるときふと、こんなに無理して副作用さけよう
という努力はなんなんだろうと感傷的になるわけよ。
0147デフォルトの名無しさんNGNG
Cでグローバル変数はやめよう、と似たようなもんじゃないの?
0148チュウボウNGNG
>>145
>日本語は主語なんかなくても良い言語だよ
おお、そうであった。日本語は述語だけでつうじるのだ。
日本語こそ真の関数型言語であった。なんてわけないか。
0149デフォルトの名無しさんNGNG
>>146-147
つーか…
プログラムって要するに「入力と出力の関係を記述する」
ってだけで良いはずなのに、状態を持ち出すとよけい面倒に
なることも多いでしょ。
01505月病NGNG
モナドを使い、高階関数を使い、入力と出力の関係だけで
ストイックに記述する。そうすると見えるすばらしい世界
を教えてください。
0151デフォルトの名無しさんNGNG
>>149
> 入力と出力の関係を記述する

時系列的な入力と出力の表現には内部状態があった方が記述が楽。
あと、入力の長さが不定なときも。
だから入力に対して反応するタイプのプログラムでは状態記述がないと不便。

>>145
主語がなくていいのは主語が明らか(容易に推測可能)な時だけだよ。
フォーマルな文章では日本語だって主語が必要。ここはかなりインフォーマルだからね。
ちなみに英語でも命令形などでは明らかな主語が省略されている。
0152デフォルトの名無しさんNGNG
>>151
なんで、ストリームやモナドなどではプログラムの動作が完了した時点では
入力が決定して、出力も決定する筈ということに注目して、
実行時に対応関係を組み立てるわけだ。
0153デフォルトの名無しさんNGNG
無限列から無限列への対応関係を陽に書くことはできないが、
無限列の有限部分列から有限部分列への対応関係なら書ける。
そしてその対応関係が再帰的に定義できているなら、
限りなく計算を続けられる。

ただ、有限部分列の入力から続きを計算する際に何度も同じ計算が
繰り返される場合がある。そういう場合は内部状態としてメモしておけば
計算効率が改善される。
0154デフォルトの名無しさんNGNG
>>153
現実的にはどんなケースがありますか?
0155デフォルトの名無しさんNGNG
無限ストリームはメッソドの呼び出しを遅延評価するように
しておけばJavaなんかでも再帰的に記述できるよ。
0156デフォルトの名無しさんNGNG
>>154
httpプロクシサーバとか。
リクエストは無限列とみなせる。
以前にあったリクエストなら、内部状態としてキャッシュしとけば
速くなる。この場合でも副作用は別に必須じゃないけどね。
0157デフォルトの名無しさんNGNG
多分もっと技術レベルが高かったら萌えるんだろうなぁ。
今はC、C++、C#、Javaで手一杯だよ・・・
0158デフォルトの名無しさんNGNG
>>156
副作用が絡むのは配列やオブジェクトの部分更新とかが絡むときが典型。
もちろん更新する値以外も全部複製してしまえば副作用は消せるが、
効率は・・・・・・(ガクガクブルブル)

----

>>155
遅延評価は評価の仕方を「メモ」って行くわけだが、
結構、後でそのメモ・ツリーを辿るのに時間がかかったりする。
0159153NGNG
>>157
てひひひー。C#は全然把握してないッスー。
0160デフォルトの名無しさんNGNG
C#っていってももともとは.net frameworkのために作られた言語だからね。
シンタックスだけはJavaに似てるけど。逆に言語から仮想環境を想定するとしたら
どんなものになるんだろね。Hakell、というより関数型言語全般のために
作られたようなもの。あるとしたらどんなもんでしょ?
0161153NGNG
仮想環境ッスかー?何ッスかー?
0162デフォルトの名無しさんNGNG
Parallel Graph reduction Virtual Machine (PGVM) ?
0163134NGNG
>>135
>ストリームは「いくらでも長くなりうる列」というデータだ。
確かに漏れも、そう思います。ストリーム()
しかし、haskellのモデルではIO入出力はストリーム(ぎリスト)ではないですよね。
ということは結局、評価の順序が入出力に影響するはずですよね。
評価の順序を強制するためにモナドというものを利用しているんじゃないですかねー?
どうなんでしょ。
0164デフォルトの名無しさんNGNG
http://www.yfcbookshelf.com/ml_lisp_scheme.htm
ここの下の所に「Programming Languages:Concepts and Constructs 2/E」
の「日本語訳版を期待」という文字が見えるんですが、今翻訳中なのでしょうか?
もしそうなら超期待!!

>>158
どうも効率面を問題にされているようですが、
私自身たいして関数型言語の経験はありませんが、
仕事の関係上感じている事です。
コンパイラ作ってると、この副作用がないというのが
結構オプティマイズに有効だったりするので、
結構これからの言語の核にすえるのは悪くないと最近思ってます。
計算の依存関係が明白でないと最近のスーパスカラーみたいに
命令スケジュールが必要だと面倒です。
全体的とはいわなくても部分的には関数型言語が高速化への寄与大きいと考えています。
計算機の並列度が上がってくると、少し考え方を変えてみるのも悪くはないと思っています。
ちなみにモナドはあんまり良くわかっていません。(TT)
だれか教えてくれー
0165デフォルトの名無しさんNGNG
>>163
昔のバージョンではストリームでI/OやってたんだよHaskellは。
I/Oエラーが扱いにくくってなあ…

モナドの方が楽だよ。
0166134NGNG
>>165
本当ですか?
何時の頃のモノなんでしょう?
処理系の名前とバージョンを教えてもらえませんか?

>I/Oエラーが扱いにくくってなあ…
>モナドの方が楽だよ。
たしかに、そうですね。
うーん、モナドから逃げてるのかなー?俺は
0167デフォルトの名無しさんNGNG
モナドを意味づける(動作を定義する)のにストリーム使えるしね。
0168デフォルトの名無しさんNGNG
副作用推進派のかた、もっと高階関数を活用してみては
どうでしょう?
関数も各引数を繋ぐための糊だと考えると
副作用が無いほうが嬉しいのでは?
0169158NGNG
>>164
効率は計算機上での実行の際のことです。
・・・・・・というか効率を考えた動作をガチガチにプログラマが記述する際に
場合によってはあるほうが便利ということですね。

一方、最適化のためのプログラムの解析においては
一般に副作用がないほうがやりやすいのは確かだと思います。
だからこそ代入を消してSSAなんて形式に落としたりもするんでしょうし。
0170158NGNG
>>168
行列を配列並みの高効率で実装できる方法があるなら是非そう致したいと。
0171158NGNG
引数で指されるオブジェクトがコピーのコストが気にならないほど小さいうちは
それほど悩ましくないんですが・・・・・・。
0172デフォルトの名無しさんNGNG
>>166
Haskell 1.1まではそういう仕様だった。全ての準拠処理系がそうなって
たはず。stream I/Oとcontinuation-based I/Oの両方が使えた。

http://www.haskell.org/definition/haskell-report-1.1.tar.gz

Monadic I/Oがあんまり便利なんで今は全部そっち。
0173デフォルトの名無しさんNGNG
>>170
配列使えばいいじゃん。副作用なしの。
SISALっていう関数型言語がそうやって、スーパーコンでも
Fortranに負けない性能出してたよ。

Fortran厨は他の言語が書けなかったので普及しなかったが。
0174デフォルトの名無しさんNGNG
なんかこのスレ人増えたな。
0175158NGNG
>>173

 http://www.sys.uea.ac.uk/~jrwg/Sisal/index.html

を読んで見てるけど、やたら配列に特化した言語だなぁ。APLを思い出したよ。
サワリの部分を読んでの感想としては、
配列に特化した構文が多すぎるし、拡張性にも疑問が残る。
この言語を実装する上で研究された内容(解析や最適化の技術)は有益そうだが、
それをつかって書けと言われると結構苦痛かも。
CやFortranのソースに混ぜられると言われてもねぇ。
0176158NGNG
でついでに、「スーパーコンでも」というよりは
むしろ「スーパーコンのために」開発されたようだ。
スパコン以外にも移植はされているようだが、
どうもメインの技術ははデータ並列っぽい気配が。
もっと詳しく読んでみないと判らない部分もあるが、
そうなると今時のマシンの記憶階層と
マッチするかどうかは些か怪しげ。
0177Super CombinatorNGNG
MonadとInfinite listの関係について知りたければ、
"Comprehending Monads", Philip Wadler読め。面白い。
0178デフォルトの名無しさんNGNG
>>176
文句の多いヤツだな。
0179デフォルトの名無しさんNGNG
>>158>>173 を「Sisal 使えば?」と読んでそうな感じだが
>>173 は「Haskell の副作用無しの配列使え」と言ってるのだろう。たぶん。
0180デフォルトの名無しさんNGNG
>>179
どんな実装してるんでソ。>「Haskell の副作用無しの配列使え」
私が読んだ何件かの「副作用なし配列」の論文は皆頑張っていたけどヤパ−リ
オーバーヘッドが大きくて生の配列ほどには早くない・・・・・・。
0181デフォルトの名無しさんNGNG
>>132
>Prologにカットオペレータ
カットオペレータ思い出した。これでProlog嫌いになった。
ところで、Prologも関数型かな? 副作用ないみたいだし。
真偽の2値のみを返すと考えられるかな。もっとも偽の値が
返ればストップするので真のみ返るが。
0182デフォルトの名無しさんNGNG
>>181
関数型じゃないね。論理型。
項の「値」を求めてるわけじゃない。
定理を満足する変数の値の組(代入)を求めている。

両方を組み合わせた関数論理型ってのもあるけど。
0183第5世代はどうなったNGNG
>>182
論理式の値を求めるのでなく、妥当な推論をするんだった。
unificationできなきゃ終わりという形式だったね。

Hugsのライブラリーに簡単なPrologあるね。
unificationなんかはもともとhaskellにあるから、
簡単に実装できるようだ。
そういえば、カットオペレーターもhaskellで実装
してたかな。
0184デフォルトの名無しさんNGNG
haskellは非正格言語だからデバッグし辛いのでは?
副作用がありまくる手続き型言語や正格言語ではデバッグで
苦労しない。というかデバッグしやすい。

非正格言語の優秀なデバッガって無いからね。
一つでもモデル(非正格言語のデバッガのね)が出来ればね。
0185デフォルトの名無しさんNGNG
Mondrianって言語がHaskellをコンパクトにして
OO対応にしたような言語で、.NETにも対応してるらしい
んだけど、この言語ってどうですか?
http://www.mondrian-script.org/
0186デフォルトの名無しさんNGNG
>>184
ていうか、副作用が無いってのはようするに
思わぬバグが混入しないようにする効果があるわけだから、
デバッグ以前にバグが混入しにくいのでは?
0187デフォルトの名無しさんNGNG
代わりに呼び出し関係が入り組んでくるからねぇ。>>186
やっぱ銀の弾丸はないもんだよねぇ。
0188デフォルトの名無しさんNGNG
>>186
でもバグが無くなる訳ではないでしょ?
仕様のバグという根絶不可能なバグがあるんだから。
やっぱデバッガ必要でしょ。
0189デフォルトの名無しさんNGNG
>>188
既存のデバッガ的な考えは合わないよね。
0190デフォルトの名無しさんNGNG
>>184
副作用がないので
Unit Test あたりが向いてるかも。
0191デフォルトの名無しさんNGNG
http://www.haskell.org/libraries/#testing
のあたりだろうか。
0192デフォルトの名無しさんNGNG
>>188
仕様のバグとデバッガが関係あるんですか?
0193デフォルトの名無しさんNGNG
副作用が無いんだから、
コードの打ち間違いと理論にだけ気をつければ
やっていけます。
0194Super CombinatorNGNG
>>192
帰納推論系の人たちで、
間違った具体例の指摘から仕様を直したり、
なんて事が流行ったよね?

そのengineのUI programはdebuggerと呼ばれることが多かった。
0195デフォルトの名無しさんNGNG
なんじゃそら
屁理屈か
0196デフォルトの名無しさんNGNG
つまり、従来のデバッガの役割は
非常に少なくなると言うことでいいのか?
0197デフォルトの名無しさんNGNG
デバッガの使い道ってバグを取るためだけの物かなー?
0198え?NGNG
デバッガをバグ取りに使わないの?
0199デフォルトの名無しさんNGNG
>>198
プログラミング言語の前に日本語を勉強尻。
0200え?NGNG
>>199
君こそ根。
0201デフォルトの名無しさんNGNG
Stream IOを勉強した頃は、同期関係の bugがあったら取り難そうだなあ、
とおもた。
Monadになったら改善できるのかしらん?
0202デフォルトの名無しさんNGNG
>>198 はすさまじいアフォ
0203デフォルトの名無しさんNGNG
>>201
並列処理の話?
0204え?NGNG
>>199 は、すさまじいエロ
0205デフォルトの名無しさんNGNG
>デバッガの使い道ってバグを取るためだけの物かなー?
他に使い道は?
0206デフォルトの名無しさんNGNG
>>204 ウザイ
「バグ取りの他に使う」と「バグ取りに使わない」の
区別もつかない糞は小1からやりなおせヴォケ
0207デフォルトの名無しさんNGNG
>>206
その前にお前は>>205の質問に答えろよ。
0208デフォルトの名無しさんNGNG
静的なプログラム検証ツールはデバッガの範疇に入るの?
こういうものが作りやすいのが関数型言語の特徴って言われてるから
そっちに期待しちゃうな。あくまで素人の考えだけど。
0209C厨房NGNG
lintはデバッガって言うか?
0210デフォルトの名無しさんNGNG
なんでHaskellスレは厨房がワラワラと寄ってくるんだろ。
無視できない何かがあるんですかねー。
0211206ではないがNGNG
関数型言語にあてはまるかどうかは知らんが、
他人が書いたプログラム(またはライブラリ)を理解するために
デバッガを使って動作を見るのは、けっこうよく使う手だと思う。

>>208
普通は静的な検証ツールはデバッガには含めないと思うけど、
参照透明性の高い関数型言語では、静的/動的の境界はどう定義するんだろう?
例えば多相型の型エラーをデバッグするのって、静的なのか動的なのか…
0212デフォルトの名無しさんNGNG
言語理論に比べて処理系のセオリーが
弱い気がするのは気のせいでしょうか?>>211
0213デフォルトの名無しさんNGNG
>>210
お前のような厨房がな。
0214201NGNG
>>203 並列って言うか、そもそも関数型言語は逐次処理でもないじゃん。
木の好き勝手なところを簡約していくっていうか。
そでで再帰的に定義された無限リストの簡約とかまちがうとこわいな。と。
P.Wadlerの入門書にもそれがらみの話あったよねえ?
0215デフォルトの名無しさんNGNG
関数プログラミングでは、動作手順を記述するわけではないので、命令プログラミングの
動作をステップ実行する従来のデバッグ手法のイメージとはあいいれないかも。

でも、計算順序を無理矢理いれこむ、モナドIO使いまくりのプログラミングなら
命令プログラミングとおんなじだから、print デバッグができるよ。
0216デフォルトの名無しさんNGNG
Windowの表示とかやる場合はモナド使うんですか?
関数型でイベント駆動処理を書くのって、
ちょっと想像できないんですが。
0217デフォルトの名無しさんNGNG
Fudgetあげ
ようとしたけど古いから sage
0218デフォルトの名無しさんNGNG
>>216
GTK+HS のサンプルコードとかみてみれば?
0219デフォルトの名無しさんNGNG
>>216
モナドによるI/Oのコードをじっとみつめると
入力列内の文字種に応じて呼ばれるハンドラの集まりとも見えてくる。
それがメッセージ列に変わったと思えば書けそうな気がしてくる。
0220デフォルトの名無しさんNGNG
>>205
処理系の実行過程の確認
最適化の結果、プログラマーの予想もしないプログラムに変化したりしないとか
その確認をする。勉強にもなるね。
某本にもデバッガでは、シングルステップを使えと載っていた。目から鱗。
0221デフォルトの名無しさんNGNG
>>215
GHCか何かだと、unsafeとか何とかいうモジュールに、
どこでもprintできる関数がなかったっけ。
まさにprintfデバッグのための抜け道として。
0222デフォルトの名無しさんNGNG
>>220
それは要するにデバッガがアナライザだって言ってるだけでは?
そういうのとは微妙に話が違うような気がするなー。
つまり、デバッガにはそういうブラウジング機能とは別に
何かあるって言ってるんだろ?
0223デフォルトの名無しさんNGNG
>>222
いや、デバッグ以外に使い道があるかどうかって話だろ?
だからアナライザとして使ったり、ってのも答えとしてアリだろ。
0224デフォルトの名無しさんNGNG
ナスです。
0225デフォルトの名無しさんNGNG
ウリです。
0226デフォルトの名無しさんNGNG
デバッガっでようするにアナライザだろ。
デバッガがバグを指摘するわけじゃなし。
0227デフォルトの名無しさんNGNG
>>226
書くのが遅い
0228デフォルトの名無しさんNGNG
>>221
遅延評価だと、どのprintが先に実行されるかわかんなくねえ?
そんなんでデバッグできるのか?
0229デフォルトの名無しさんNGNG
>>228
何をデバッグしたいかによるけど。

(文字列やファイルの最終的な内容も含めた)計算結果が
正しければ良いなら、別に求まる順序は重要じゃないよね。

まあprintを使うってことは順序も気にするんだろうから、
もともと$!やseqを使いまくってるんじゃないの?
0230haskellNGNG
age
0231デフォルトの名無しさんNGNG
高階関数に詳しくなりたいので教えて。
0232Super CombinatorNGNG
Bird「関数プログラミング」
http://www.amazon.co.jp/exec/obidos/ASIN/4764901811/qid=1022390348/sr=1-17/ref=sr_1_2_17/250-5692221-3686632
萩谷昌己「関数プログラミング」
http://www.amazon.co.jp/exec/obidos/ASIN/4535608172/250-5692221-3686632
あたりで。
0233デフォルトの名無しさんNGNG
まさみさまがそんな本書いているとはしらなんだ..
竹内先生の Lisp本もじつは読んでないんだよなあ。
0234デフォルトの名無しさんNGNG
日本語で書かれたHaskell本はいつ頃出ますか?
SMLだって出てるのに……。
0235デフォルトの名無しさんNGNG
>>234
日本のHaskellユーザの数が、初回印刷部数(200)を越えたら。
0236デフォルトの名無しさんNGNG
ユーザの数はどうやって数えるんですか?
0237デフォルトの名無しさんNGNG
うちの研究室だけで10人はいるんだから簡単に超えそうなもんだけど(藁
0238デフォルトの名無しさんNGNG
>>237
そこが特別なんじゃないの?
0239デフォルトの名無しさんNGNG
じゃ、漏れが布教用に3冊買ってやるから、早く出してくれよ。
訳本でいいからさ。
0240デフォルトの名無しさんNGNG
つーかさ、200位だったら、
いろんな図書館に要望しまくれば、
なんとかなるんじゃないの?
0241デフォルトの名無しさんNGNG
200じゃだめみたい。
http://www.onweb.to/ken9/log/039.htm
0242デフォルトの名無しさんNGNG
>>237
ここのところ素人も増えてるぞ>オレオレ
0243デフォルトの名無しさんNGNG
有明で売れよ! ってことですか?
0244デフォルトの名無しさんNGNG
>>243
東京ビッグサイトの巨大同人誌即売会サークル抽選当選しますた。
でもジャンルはプログラミング言語とはホド遠いけど(w。
0245デフォルトの名無しさんNGNG
>>244
適当でいいからHaskell本もきぼんぬ
買いに行くから(藁
0246244NGNG
ウチはなんと女装本だぞ。それでも買いに来られるか?(w

って、実際問題としてHaskell本を作る余力はなし。
0247デフォルトの名無しさんNGNG
Haskell本かどうかは分からんが、
R. Birdの「関数プログラミング」第2版を翻訳して出版して欲しい。
流れで近代科学社に。
0248デフォルトの名無しさんNGNG
今売ってる「関数プログラミング」も、
みなしHaskell本では。
0249デフォルトの名無しさんNGNG
ぶっちゃけた話、古いわけよ。
0250デフォルトの名無しさんNGNG
で。
結局、日本語のHaskellの本て有るんですか?
無いんですか?
(というのか無いのか?)
0251デフォルトの名無しさんNGNG
>>237
おどろき。
どんな研究なんだ!?
0252デフォルトの名無しさんNGNG
>>237
ならむしろおまえの研究室で発行しる!
0253デフォルトの名無しさんNGNG
F#のサイトより転載。

Purely functional languages like Haskell
are excellent within certain niches,
but many simple programming exercises
can quickly turn into problems that require a PhD. to solve.

大げさだな・・・
0254デフォルトの名無しさんNGNG
うまいこというな〜
0255デフォルトの名無しさんNGNG
女装+Haskell本期待age
0256デフォルトの名無しさんNGNG
「女装しながら覚えるHASKELL」
0257デフォルトの名無しさんNGNG
「HASKELLによる女装プログラミングの理論と実践」
0258Super CombinatorNGNG
Mocking Bird, "Introduction to Female Attire using Haskell", Price Sale, 2002.
0259デフォルトの名無しさんNGNG
Purely functional languages like Haskell
are excellent within certain niches,
but many simple programming exercises
can quickly turn into problems that require a Female Attire. to solve.
0260デフォルトの名無しさんNGNG
ネタスレ化か?
0261デフォルトの名無しさんNGNG
女装した場合には、その人の参照の透明性はどう確保されるのでしょうか?
0262デフォルトの名無しさんNGNG
アブノーマルな野郎は消えろ。
0263デフォルトの名無しさんNGNG
>>216
FranTk
0264デフォルトの名無しさんNGNG
HTk
0265デフォルトの名無しさんNGNG
>>261
女装は代入ではありません。ラップするだけです。
本人への参照はそのままにしてください。

女装人格←女装関連の知り合い

本人人格←普通の知り合い

私個人は女装人格をそのまま丸投げの委譲によって実装しているので、
実質どっちを見てても服装と化粧以外はさほどかわりません。

>>262
頑健なソフトウェアを構築するには
例外の存在をなかったことにして無視してはいけません。
0266244NGNG
>>265もね。
0267デフォルトの名無しさんNGNG
下らんこと書くな。
つまらんし。
0268◆A2MadQ16 NGNG
つまらんと不満をいうよりも進んでネタを振りましょう。>>267
0269デフォルトの名無しさんNGNG
おい>>1よ 聞いてくれ。
昨日、母の葬式に出たんです。享年54歳。
そしたらなんか自分、涙が一滴もこぼれないんです。
で、よく見たら会ったこともないような親戚のおばさんですら泣いているんです。
もうね、アホかと。馬鹿かと。
俺な、親の死を目の前にして放心してんじゃねーよ、ボケが。
目の前に人が死んでるんだよ、母親が。
なんか親子連れとかもいるし。一家4人で葬式か。ほんとありがとう。
パパは息子さんに挨拶してくるから車で待ってなさい、とか言ってるの。いい親父だな。
俺な、親が死んでんだからもっと泣けと。
葬式ってのはな、もっと殺伐としてるべきなんだよ。
死に化粧をみた瞬間いつ涙があふれてきてもおかしくない、
泣くか叫ぶか、そんな雰囲気が普通なんじゃねーか。オレ、なんなんだよ。
で、やっと葬式が終わったかと思ったら、なんか次々と母のことが思い出されるんです。
そこでまたぶち切れですよ。
あのな、今さら思い出したところで意味ねーんだよ。ボケが。
得意げな顔して何が、今度の休みには帰るよ、だ。
俺は本当に休みに帰るつもりだったのかと問いたい。問い詰めたい。小1時間問い詰めたい。
俺、適当に親との距離をとりたかっただけちゃうんかと。
親不孝者の俺から言わせてもらえば今、若者の間での最新流行はやっぱり、反抗期、これだね。
親ってのはいつまでも生きているもんだと思っている。これがガキの考え方。
親の期待をかなえたつもりで一人暮らし。そん代わりコミュニケーション少なくなる。これ。
で、「少しだけ仕送りいれといたから」 「ああ、無理すんなよ」。これ最期の会話。
今になって後悔ばかりが思い出される、諸刃の剣。
まあお前ら若いもんは、ほんの少しでもいいから親孝行しなさいってこった。
0270デフォルトの名無しさんNGNG
>>256 それは激しく同意。
 つうか、がっこで関数言語やってた奴が、
 仕事でオブジェクト指向の世界に戻されると、
 「このオブジェクト指向言語の型システムは...」とか、
 「RDBの動的型が云々...」って事を無意識に考えてしまって、結構ハマるんだよね。
 そーゆー意味で、関数言語関係者を招聘したMS Researchの今後に期待
0271デフォルトの名無しさんNGNG
>>270
すまん、>>256でいいのか?
0272デフォルトの名無しさんNGNG
>>270

というわけでこのスレでは Simon P.J. 先生を「サイモン博士」と
呼ぶことを漏れは提案したいっすけど駄目っすか?
0273デフォルトの名無しさんNGNG
Haskellは東大工学部の一部でデフォルトの授業用言語になってて、
そのせいで全国の工学部(の一部)の授業に拡散・伝染してるから、
1000部ぐらいすぐに出ると思ってたんだが、どうよ?
女装じゃ無理かもしれんが…(それとも女装のほうががいけるか!?)
0274デフォルトの名無しさんNGNG
女装って何のこと?
0275デフォルトの名無しさんNGNG
「 Haskell を 1.25 倍使うコピー本」でどうだ。
売り子が女装でなくてじょせーだと嬉しい、ってオイ>漏れ
0276KNGNG
>>273
うちのことだな>東大工学部の一部
講義で教えてもらうまで名前も知らなかった。
日本語の解説書さえあれば使いたい言語なのだが>Haskell
0277デフォルトの名無しさんNGNG
>>276
みんなそんなもんか。
私は大堀先生に感化されてML使ってる。
0278デフォルトの名無しさんNGNG
>>275
女婿だと嬉しいの?
0279!275NGNG
うん、嬉しい。
出来ればレイヤーさんきぼ。
0280デフォルトの名無しさんNGNG
最近のCPUは、条件分岐がたくさんあると頻繁に
分岐予測ミスが発生してストールであぼーんな訳ですが、
関数型言語って手続き型に比べてその辺どうなの?
ガードの存在って影響ある?
CMOVccとかSETccとか使ってくれるのかな。


0281275NGNG
>>280
予測が当たりまくるタイプの条件分岐なら、
問題無いという話を,漏れは聞いたことがある.

で,外れまくってイヤソなタイプのコードもあって,
例えばブレゼンハムのアルゴリズムは,結構イヤソだ,
という報告も聞いたことがある.

漏れの直感ではイヤソなタイプという気がする.
GHC はバージョンupが烈しいんで,最近の奴は
自分にはようわからん.ココは Haskell 板なんで
Haskell の話と思ったが,もしかして strict な
奴の話も必要 ?
0282デフォルトの名無しさんNGNG
>>280
SETccって何?

判定と分岐を分離して、間に命令をはさむDeleySlotの一種のような
ものと勝手に想像したがどう?
0283Super CombinatorNGNG
SETcc: 条件付き定義命令。
CMOVcc: 条件付き移動命令。

if (条件)
var = X;
} else {
var = Y;
}

var = Y;
if (条件) var = X; // SETcc or CMOVcc
に。

もちろんvarはregister割り当てされてるのな。
0284デフォルトの名無しさんNGNG
ARMとかに最初っからついてるやつですな。
x86にも最近のはついてるときいて感心した私。

っていうか、関数型言語って naiveな実装だと closure作りまくりで
予測分岐も糞もない、って気がするんだけどだめ?
ちゃんとかりかり tuning する、GHCみたいのだといいかんじになるのかも
しれないけど。よくわからん。

結論: 関数型言語は dataflow machineに実装しよう(ネタ)

0285デフォルトの名無しさんNGNG
>>284
ネタとは言い切れん。
いい加減に今のアーキテクチャでのクロック向上ってのも物理的限界が
見えてきたしね。
0286デフォルトの名無しさんNGNG
>>285
そうだそうだ。(煽)
ついでに非同期って正義 ?

Crusoe の内部論理では活かされてるとか
聞いたことがあるけど > 非同期
0287デフォルトの名無しさんNGNG
http://univ.ygu.ac.jp/e-itoh/2001/9805126-shimizu.pdf
http://www.microsoft.com/japan/msdn/academic/ark/Webfiles/languages.htm#mondrian
0288デフォルトの名無しさんNGNG
http://www.mail-archive.com/[email protected]/

盛り上げれ
0289石敢當NGNG
GHC 5.04 がリリースされました。
0290デフォルトの名無しさんNGNG
さっそくビルド、あげ!
0291デフォルトの名無しさんNGNG
質問くんで、すいません。
どなたかLinar Typeというものが、どんなモノか教えてもらえませんか?

「論文紹介:How to Declare an Imperative」
ttp://www.is.titech.ac.jp/~kando9/work/Progress/Monad/Monad.html
で見た限り純粋関数型言語でIOや状態を扱うのに
将来有望そうな理論(技術?)に見えました。
ttp://citeseer.nj.nec.com/ のどこかとかが参考になりそうですが
どれが良いのやら。さっぱり。
だれか基礎と応用の両方を教えていただけないでしょうか?
お願いします。
0292デフォルトの名無しさんNGNG
っていうか、まずその紹介されてる論文の、その章を見れば良いじゃん。(^^;
そしたら、そこからreferされてる論文を次に読むとか…
(citeseerがOKなら英語でOKだよね。)

とりあえず、すでにHaskellを知ってるなら、Cleanって言語の
uniqueness typingって仕組みを使ってみるのが吉かと。
http://www.cs.kun.nl/~clean/で合ってる?>もっと詳しい人
0293デフォルトの名無しさんNGNG
linear logic (線形論理) ね。
論理にヨワい自分は岩波の 2 冊本
「コンピュータサイエンス入門」
で、やっとこ様相論理に辿り付いたトコなんで
有意義な助言はできんが...

とりあえずロジックに関してどれくらいわかってます ?
>>291
0294デフォルトの名無しさんNGNG
分からないんだったらまずはぐぐりなさい。
http://www.google.co.jp/search?q=%E7%B7%9A%E5%BD%A2%E8%AB%96%E7%90%86&ie=UTF-8&oe=UTF-8&hl=ja&lr=
0295デフォルトの名無しさんNGNG
又は、
http://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=linear+type&lr=
0296デフォルトの名無しさんNGNG
どうして、そんなに遅いの?
0297デフォルトの名無しさんNGNG
>>296
それは言える…
CleanとかMLとかは速いらしいのに!
0298名無しさん@EmacsNGNG
Haskellは生成されたバイナリよりも、
コンパイラ自体がhaskellで書かれてる
ことによる遅さがちょっとイラつかせる。

また勉強中の身だから偉そうなことは
いえないですね。失礼しました。
0299デフォルトの名無しさんNGNG
Cleanもそうです。
0300291NGNG
沢山のレスありがとうございます。

>>292
英語は、辞書が在れば何とか読めるという程度です。
「uniqueness typing」ですか。Cleanの特徴の一つらしいですね。
評価するたびに違う(多様?)型を生成するというぐらいしか知りません。
参照透明性は確保されそうですが、使いやすいの?
というぐらいの認識しかありません。もう少し調べてみます。

>>293
私も論理に弱いです。
Linear Ligicと言われても、使った公理は無くなる。
つまり公理の有る無しで状態を表すようにするという位しか
わかっていません。
この認識も間違っているかもしれませんし・・・
つたない英語力と乏しい知識を総動員して何か判りやすい文章、本、論文
は無いかとあさっているという状態です。
>岩波の 2 冊本「コンピュータサイエンス入門」
ですか今度、大きい本屋に行ったときでも見てみます。

>>294
日本でも沢山の所が研究しているんですねー。
みてみます。
0301デフォルトの名無しさんNGNG
>>298
それはグラスゴ大-MSRのサイモン教授のコンパイラの話 ?

手軽に遊ぶには、HUGS とかシャルメル大のコンパイラが
おすすめ。

>>300
キーワードは「非古典論理」「数理論理学」といったとこだ。
まとまった解説がウェブには無い(記号が、紙媒体だと圧倒的に
見やすい)のと、ちょい高価だったりなので、そのテの本が
揃った図書館を確保できないと辛いかも。

岩波のそれは時相論理という論理の解説がメイン。
(線形論理も時相論理も様相論理といわれる論理の
一種)線形論理の解説書は一冊だけらしい。

IPSJ の学会誌とか研究報告が見れるんなら↓あたりが手頃そうだ。
ttp://www.ipsj.or.jp/members/Magazine/Jpn/3006/
ttp://www.ipsj.or.jp/members/SIGNotes/Jpn/22/1993/015/article012.html
0302デフォルトの名無しさんNGNG
>>297
>CleanとかMLとかは速いらしいのに!
non-strict な ML と、strict な Haskell を
比較すんなよ (;_;) せめて LazyML とか
0303291NGNG
>>294
国立奈良工業高等専門学校の先生のページに
論理型言語ですが時相と線形理論に関する論文載っていました。
ttp://kaminari.scitec.kobe-u.ac.jp/papers/index.html
少し判った気がします。
でも、これを如何いうふうに関数型言語に輸入すればいいのやら。

あと、下の本知っている人いますか?
線型論理入門 竹内 外史
ttp://www.amazon.co.jp/exec/obidos/ASIN/4535782148/
0304291NGNG
>>301
>岩波のそれは時相論理という論理の解説がメイン。
そうなんですか。買おうかな。

>IPSJ の学会誌とか研究報告が見れるんなら↓あたりが手頃そうだ。
学術誌は・・・。大学生のころは読めたのにね。
地元の大学言ってみような?如何しようかな?
0305デフォルトの名無しさんNGNG
> non-strict な ML と、strict な Haskell を

0306名無しさん@EmacsNGNG
なんでいつもMLとHaskellはいがみあるばかりなんですか?
CとC++
JavaとC#
PerlとRuby
他にもそういうの多いですがね。
0307デフォルトの名無しさんNGNG
>>306
そういう低次元な話にもっていくな。
0308302NGNG
>>305 トチった。シクシク

>>306
別に、いがみあう必要ないじゃん。Standard ML では、
引数は適用される前に評価される、Haskell では、
普通はそうじゃない、ってダケの話。

他のヤツだって。.NET 使いたいなら C# 、
ケータイ用アプレットが作りたいなら Java とか、
現実、選択肢は広く持っていたほうが楽しいん
だからさ。
0309デフォルトの名無しさんNGNG
Haskellってnamespace無いの?
0310デフォルトの名無しさんNGNG
>>309
たぶん module 機構がソレ。
Haskell98 仕様書の 5 節、
じぇんとるいんとろの 11 節。
ttp://www.haskell.org/onlinereport/modules.html
ttp://www.haskell.org/tutorial/modules.html
0311デフォルトの名無しさんNGNG
>310
あ、ほんとだ。サンクスコ
0312デフォルトの名無しさんNGNG
>>308
SMLでも遅延評価でますよね。
Hsakellほど積極的では無いですが。
0313デフォルトの名無しさんNGNG
>JavaとC#
>PerlとRuby

この変は似たもの同士だからだろ?
0314哲板過去ログからNGNG
哲学板「論理なぜなにスレッド」の最後のレス
http://mentai.2ch.net/philo/kako/996/996975732.html

114 名前: 考える名無しさん 投稿日: 02/03/08 02:04
「論理学」スレの過去ログから。

229 名前: 考える名無しさん 投稿日: 01/12/10 18:21
論理学の基本的教科書とは何ですか?
様相論理とか線形論理を一通り学びたいのですが。
英語のものでいいものを教えてください。

230 名前: ↑ 投稿日: 01/12/10 18:39
A.S. Troelstra, Lectures Linear Logic, CSLI Lecture Notes 29 (1991)

線形論理の入門書で、線形論理のゼロからを勉強できる本です。線形論理導入のモチベーシ
ョンから始まって、様々なヴァリエーションの線形論理とそれらの性質、代数的、圏論的モデル、
proofnetと、基本的な部分はかなり幅広くおさえてあり、そしてとても解りやすいです。しかも周辺
のトピックも広く紹介されているので、その辺を調べながら読めば、線形論理に限らず、証明論
の勉強になるのではないか、と思います。ただし、大きな問題は、GirardによるLinear Logicのオ
リジナル論文(その他、その後のLinear Logic関係のあらゆる論文)と記法が紛らわしい、というこ
と。嫌でも混同しやすいLinear Logicの記号なのに、同じ記号を別の意味で読み替えたりしなけ
ればならず、かなり厄介ですので、それは覚悟の上でどうぞ。

231 名前: ↑訂正 投稿日: 01/12/10 18:43
A.S. Troelstra, Lectures on Linear Logic, CSLI Lecture Notes 29 (1991)
http://www.amazon.co.jp/exec/obidos/ASIN/0937073784/
0315314続きNGNG
>>314-315続き
235 名前: 考える名無しさん 投稿日: 01/12/12 17:18
http://www.amazon.co.jp/exec/obidos/ASIN/0415126002/
をかいなさい。

242 名前: 考える名無しさん 投稿日: 02/01/06 15:37
>>229
いまどきならTroelstraとかHughes-Cresswell(古臭いっ)よりこっちがいい。
非古典論理を統一的に学べます.
http://www.amazon.co.jp/exec/obidos/ASIN/041521534X/

日本語なら小野寛晰先生の本がおすすめ。

244 名前: 考える名無しさん 投稿日: 02/01/10 02:32
>>242
おいおい、Hughes-Cresswell の第二版は 1996年に出たばかりだぞ。
なんかがらりとかわって別の本みたいになってると思ったけど、違うっけ?

今どきで、お手軽で様相論理絡みの非古典論理というなら、俺は、
http://www.amazon.co.jp/exec/obidos/ASIN/052179434X/

これをすすめたい。安いし、哲学の話もそれなりに多く書いてあるから、
この板の人向きと思うが。
0316291NGNG
おひさしぶりの291です。
私にとって言語(英語)の壁は厚いので
そんな立派な本は、ちょっと・・・
という感じです。

とりあえず「コンピュータサイエンス入門」と「線型論理入門」は買いました。
ゆっくり勉強したいと思います。
0317デフォルトの名無しさんNGNG
あーまてまて。^^; 最終目的にもよるが、linear typeの勉強をするのに、
linear logicの教科書まで読破する必要はないべ。(してもいいけど)
俺もlogicのほうは耳学問程度だが、linear typeのほうは
関連する研究で論文を発表できたぐらいには理解してる…つもり。

それよりもプログラム理論のお勉強のほうが重要かも。大堀先生の
「プログラミング言語の基礎理論」って教科書なんかどうだ。
線形型までいってないけど、それ以前に線形でない普通の型の理論を
理解しないと。

本を読むにしても、何も予備知識がないときついだろうから、以下で概説。
もし説明が下手で余計に混乱させちゃったらスマソ
0318317NGNG
HaskellとかMLとか使ってれば、普通の型は知ってることにしていいよな。
言語によっていろいろと書き方は違うが、たとえばintだったら整数だし、
floatやrealだったら浮動小数だし、int -> floatだったら
整数から浮動小数への関数だし、int * floatとか(int, float)とかは
整数と浮動小数の組だし、要するに値を分類してるわけだ。

で、線形型ってのは普通の値の分類をもっと細かくして、
その値を使う「回数」の情報まで付け加えた型なんだ。
テキストだと書きづらいが、int ->1 floatとか
int ->0 floatとかint ->ω floatとか。
それぞれ、「1回だけ呼び出される関数」「決して呼び出されない関数」
「何回でも呼び出させる関数」の型。
0319317NGNG
で、そんなのが何の役に立つかというと、いろいろとあって

・もう「決して使わない」ことがわかった値はゴミなので、ガベコレできる
・式の遅延評価をするときに、「1回しか使わない」とわかっている値は
 後のために覚えなくても良いので、オーバーヘッドを減らせる
・逆に「必ず1回は評価される」ことがわかってる式は、そもそも
 遅延評価しなくて良いので、やっぱりオーバーヘッドを減らせる
・同じように、「必ず1回は実行される」ことがわかってる副作用は、
 (Haskellのモナドみたく)遅延しなくても良いので、MLみたく
 その場で直ちに実行できる(?)

って感じ。最後のは俺がよく知らないので、Cleanとかに詳しい人がいたら
フォローをきぼんぬ。
0320Super CombinatorNGNG
>>316
竹内外史の本はかなり手ごわい。
0321317NGNG
最後にlogicとの関係だが、linear logicっていう「命題を使える回数」も
考慮した論理があって、linear typeも元々はそこから派生したそうな。

どんな論理かというと、よくある説明なんだが、
 命題P = 「あなたは120円を持っている」
 命題Q = 「コーラを買える」
 命題R = 「お茶を買える」
とおいて、Pと「PならばQ」と「PならばR」の3つが成り立っているとする。
すると、普通の論理ならPを2回ほど使って「QかつR」を結論できてしまうわけだが、
120円でコーラとお茶の両方が買えるってのはおかしいよな。

だから、そういう「使ったらなくなる」ものを考えに入れて、
「命題Pは一回しか使えない」みたいな性質も考慮できるようにした論理が
linear logicというわけだ。上の例だと、Qを結論することはできるし、
それとは別個にRを結論することもできるが、「QかつR」を同時に
結論することはできない。
0322317NGNG
と、これぐらい知っていれば、後はCleanを使ってみるなり、
上のほうのWadlerのチュートリアルを読んでみるのが
(linear logicの教科書を読破するよりは)手っ取り早いと
思うんだが、どう? もちろん、特定の目的じゃなくて
一般教養としてなら、linear logicの勉強もいいかもしれないけど。

もし英語が苦手だと最初は大変かもしれんが、この手の
(わりと)新しい話を少しでも突っ込んで調べようと思ったら、
何でも英語は避けて通れないと思われ。っていうか、下手な
日本語の解説よりも、上手な英語の説明のほうがわかりやすいかと。
0323Super CombinatorNGNG
andとorに分配法則が成り立つのと成り立たないのと二種類ある、
それがlinear logic。>>321みたいなのを特にresource logicと呼ぶことがある。
0324317NGNG
ええと、323さんはなんでそんな風に思った?^^;
嘘を教わっているか、思い違いをしてそうなので、
例のInformation & Computationをのっとった、Girardの
オリジナルの論文を読むと吉かと思われ。

Girardの「しゃべる」英語は激しいフランス訛りで、
発表を聞いてても個人的に話をしても言ってることが
すげーわかりにくいが(笑)、上の論文はわりとわかりやすい。
0325覚え違いスマソNGNG
誤: Information and Computation
正: Theoretical Computer Science
0326291NGNG
どうも291です。
みなさんの親切なレスが貰えてうれしいです。

>>319
論文読んでもlinear typeの構造が判ったような気がするというレベル
で止まっていました。なるほど。

linear type関連の論文て意外と少ないような気がしたので、そのバックにある
linear logicを勉強すればlinear typeのことが判るかな?という安易な動機しか
なんですけどね。
でも記号の操作のしかた忘れたなー。完璧に。

あとCleanですか?Downはしてますけど、使ったとき無いです。
うーんCleanも勉強すべきなのかな?
0327291NGNG
>大堀先生の「プログラミング言語の基礎理論」
この本は持っています。
読んでいますし、3割ぐらいは理解しているつもりです。
型推論も基礎となるアイデアも理解しているつもりです。

>上のほうのWadlerのチュートリアルを読んでみるのが
「Linear types can change the World!」は読んでいます
(20ページ程度の文書なら、英語でも読む気がするんですがね。)
でも、この論文は、317さんの解説のやつとは少し違うかな?
0328293,301NGNG
あ、論理カゼを吹かせてしまったのは自分だ。スマソ m(_ _)m

Wadler の解説に目を通してみました。World 型の
ような、捨てたり複製しちゃいけないとかいう値を
導入するための仕掛けが線形型ってことですね。

monad の解説 "Imperative functional programming"
の 4 節にある、評価順序を保証するためだけにある、
受け渡されるだけで値は運ばない変数 w を表面に
引っ張り出して活用する、という感じなのでしょうか。

↑これは激しく勘違いかも。

上の >>319 で説明されてるところは、Haskellコンパイラ
方面で研究されてる必須性解析やら更新回避解析やらを
プログラマが明示できる/しないといけない、と感じたん
ですが、どうでしょうか。
0329デフォルトの名無しさんNGNG
Cleanに関するページのようです。
Cleanってすごいですね。
ttp://sky.zero.ad.jp/~zaa54437/
0330デフォルトの名無しさんNGNG
ttp://www.sysj.co.jp/sichp/msg0104_2.htm
0331デフォルトの名無しさんNGNG
藁藁
0332デフォルトの名無しさんNGNG
>>329のサイト、ブラウザで画像もJavaScriptもOFFにしてたら、トップページから中に入れない。
しかたないからHTMLソース見てみたら…

><!--
>こういっちゃなんだけど、人のページのソースを見るのはどうかと思いますよ。
>そういう人は今後このサイトには来ないようにして下さい。ええ。
>-->

コワイヨー
0333332NGNG
あ、上の書き込みだけだと中傷にしか見えませんね。スマソ。
初心者の僕にはとても勉強になりました。つーか、大堀先生の本が読めなくて
ちょっとへこんでたんですけど、書評読んだらすこし元気が出てきました。
がんばるぞー。
0334デフォルトの名無しさんNGNG
>>333
わかんなければソース見てもいいと思うぞ。勉強になる。
あっちが見られる様な媒体で見られたくないものを置いている方が悪いんだから。
0335デフォルトの名無しさんNGNG
(゜д゜)<あらやだ!
http://www.amazon.co.jp/exec/obidos/ASIN/0201882957/

未だ全部読んでないのに、
Haskell:the Craft of Functional Programming
の第三版が出ちゃった!

……と思ったら日付が、
0336デフォルトの名無しさんNGNG
スゲ〜

二度と見に行くかよ、と思わせるためにやってるとすれば、
とっても効果的だ。
0337デフォルトの名無しさんNGNG
>>335
俺も一瞬そう思った
0338デフォルトの名無しさんNGNG
age toku yo
0339デフォルトの名無しさんNGNG
<!--
すぐに出せるようにと思ったんで、
今後の更新予定とかをコメントでつけてましたが、
それらは全部削除しました。
まあ確かにそんなものをつけるべきではないのかもしれませんね。
-->

コメント変わった?
ここ読んでる?
0340デフォルトの名無しさんNGNG
>>329
の書き込みは要するに自作自演書き込みって事でしょ。
0341デフォルトの名無しさんNGNG
世間が狭いだけでは
0342デフォルトの名無しさんNGNG
>>339
削除した理由が、


「まあ確かにそんなものをつけるべきではないのかもしれませんね。」

誰かに注意を受けたと取るのが一番か。
0343デフォルトの名無しさんNGNG
書評も的を射ていないっぽ
0344デフォルトの名無しさんNGNG
スレ違い。
0345デフォルトの名無しさんNGNG
CLEANを紹介したのはエライが、
自作自演とか、偉そうにWeb作ってるのはイクナイ。
0346デフォルトの名無しさんNGNG
なぜ自作自演?
とか書くと、これも自作自演と勘違いされるのだろうか?

>偉そうにWeb作ってるのはイクナイ
作っている分だけ偉いです。
ヒガミはイケナイネ。
0347デフォルトの名無しさんNGNG
Cleanのページ作ってる奴はここを読んでるやうだな。
Cleanってば名前しか知らなかったので、ページ作ってくれたのは非常に
よろしいと思う。イイ。

だけど、自分の理解が怪しいこととかまで、無理して書いてないかの?
斜めにしか読んでないが、なんか外してるところがある気がちょっとする。
>>339とかもどうかと思われ。
0348デフォルトの名無しさんNGNG
Haskellの話をしよ〜ぜ。
0349デフォルトの名無しさんNGNG
Haskell がメインの開発言語になってる会社ってありますか?
0350デフォルトの名無しさんNGNG
>>349
Galois Connections
http://www.galconn.com/
0351デフォルトの名無しさんNGNG
もし、今後 Haskell 本とか書くヒトが居たら、是非

「本書の内容の正否・当否についての質問・意見は、明確で
具体的な理由をつけて、匿名ではなく、[email protected] まで
お願いします。また、これら以外のことに関する本書への
批判・評論は刑法230条又は231条等に触れる恐れがあり
ますのであくまでも自己責任でお願い致します。」

とでも、表 2 カバー裏あたりに書いとけば良いかも :-)
0352デフォルトの名無しさんNGNG
>>351
なんだそれは。
Cleanのページ作った人ですか?
突っ込まれたから、ぼやいている?

Haskellのページとかschemeのページは前からあるけど、
だれも苦情は言わないし、ありがとうしか言わない・・ですが?
0353デフォルトの名無しさんNGNG
「本書の内容の正否・当否についての質問・意見は、明確で
具体的な理由をつけて、匿名ではなく、[email protected] まで
お願いします。また、これら以外のことに関する著作者への
批判・評論は刑法230条又は231条等に触れる恐れがあり
ますのであくまでも自己責任でお願い致します。」

こうだな、正確には。
0354デフォルトの名無しさんNGNG
>>351
バイアスかけるのは止めてね
Haskellのスレだし。
0355デフォルトの名無しさんNGNG
>>351
おまえ私怨か?
0356デフォルトの名無しさんNGNG
>>351マンセー(ww
0357デフォルトの名無しさんNGNG
Haskeルン
0358デフォルトの名無しさんNGNG
ああ、DUAL!ってやつ?
0359デフォルトの名無しさんNGNG
?
0360デフォルトの名無しさんNGNG
>>352
ぼやきか・・・
それはもしかしたらイタイ発言ではなかろうか
0361332NGNG
なんか俺のカキコのせいで荒らされちゃってますね、スレの皆さんごめんなさい。
もう夏休みに入ってるって事をすっかり忘れてました。
0362デフォルトの名無しさんNGNG
>>361
お前のような万年厨も問題だがな
0363デフォルトの名無しさんNGNG
>>362
ハー。
人の振り見て・・・ということで。
0364デフォルトの名無しさんNGNG
>>363
0365石敢當NGNG
Haskell 98 Report が本になるみたいですね。
0366デフォルトの名無しさんNGNG
>>365
母さんソース
0367デフォルトの名無しさんNGNG
じゃ、誰かものすごい勢いで日本語版も
出版してくれよな。
0368デフォルトの名無しさんNGNG
気づいたら最初のスレが立ってから一年過ぎてる。
最初のころはHaskellスレ限定コテハンも何人かいて妙にまたーりとしていた
気がするのだが、最近廃れっぷりが激しいな。最初のころのような勢いも無いし。


懐 古 う ざ い











          よね。

すまん。逝ってくる。
0369デフォルトの名無しさんNGNG
ネタがないんじゃよー

誰かお遊びで作ったプログラムとか貼ってくれませんか?
0370デフォルトの名無しさんNGNG
関数型言語初心者です。

Haskellでクイックソートのコードを以前見かけて、こんなにシンプルになるのかと感動しました。

では、バブルソート(二重for文で大小比較の単純なやつ)はどうなるのでしょうか。
iとjを引数にして二重に再帰を繰り返し、takeやdropで切り貼りするしか無いのでしょうか?
もっと効率のいいやり方があるのでは、と思うのですが…
0371デフォルトの名無しさんNGNG
>>370
それらしいものを書いてみようとしたら
選択ソートとバブルソートが混ざったような中途半端なものになった。

bubbleSort :: Ord a => [a] -> [a]
bubbleSort xs = bs xs []

bs [] _ = []
bs [x] rest = x : bs rest []
bs (x1:x2:xs) rest = bs (min x1 x2 : xs) (max x1 x2 : rest)

つか効率を気にすればするほど選択ソートっぽくなると思う。
0372デフォルトの名無しさんNGNG
このスレってほとんどコード出てきてないのな。
0373デフォルトの名無しさんNGNG
Haskellは犬ですか?
0374デフォルトの名無しさんNGNG
Haskellerと言ってもその程度。
0375370NGNG
何故>>371でソートになるのか悩んで、紙に書いてようやく理解しました。
最小値を取り出して、それを x : bs rest [] で先頭に結合しているわけですか。

bs xs i j なんて関数を作って手続き型そのままにやろうとした俺とはえらい違いです。敬服。
0376370NGNG
数日間が空いてはっと気付く…

>>371のコードですと、要素数に比例してスタックを消費してしまいませんか?
(半端な知識ですが、末尾再帰になってなく見えます。書き直せないところが厨ですが…)

関数型言語の場合、スタック消費は気にしない方がいいのでしょうか。
0377デフォルトの名無しさんNGNG
>>376
関数型言語では基本データ構造のリストが再帰的(末尾再帰ではない)に
定義されているわけで、そもそもスタックを消費しまくることを前提に
作られているでしょうから、スタックの消費をあまり気にしなくていい言語と
して使えるはず。

Haskell のような遅延評価が基本の言語では、自然な再帰のアルゴリズムの
プログラムを、末尾再帰のアルゴリズムのプログラムに書き換えることも、
計算のオーダーが変わるようなもの以外は、あまり、気にすることはない
気がします。
0378デフォルトの名無しさんNGNG
よく関数型言語で Xs, とかYsってvariableなんだけど、なんでXsなの?
この最後のSはどっからでてきたの?X,Y,Z,W,Vとかでいいじゃん。
Sなんてつけなくても
0379デフォルトの名無しさんNGNG
x:xs
複数形のsです。
0380日曜HaskellerオヤジNGNG
ものすごい久々です、
現在はプログラミング基礎論の勉強がてら一緒に Haskell もお勉強モードな土日です。

>>368
特に初心者がやるときには、英語を勉強しつつ Haskell の勉強もしようとすると
忙しくなりすぎて、とりわけ社会人だと極度のんびり勉強モードになってしまいます。
そうすると、どうしてもネタが尽き気味になりますよね、
和書の入門書がぜひとも欲しいところです。
大学院の学生さんたちの誰かが執筆してくれればいいんですが、だれか書きませんかね?
Haskell は離散数学とか圏論とかとセットにすると非常に面白い本ができると思うのですがどうでしょう?

あと、圏論の専門本も是非とも欲しいところですね、これも本当にない、
まったくと言って良いほど本がない、あっても絶版ばかりで手に入りません。
シュプリンガーフェアラーク出版の「代数学とは何か」に書かれてあるのが、
手に入りかつ、知っている範囲なのですが、
これは数学の専門書でプログラマには少々というかかなりの難解ぶりです。

自分がなんとか読めそうと感じられる範囲では、
ここ http://www.etl.go.jp/etl/divisions/~yoshiki/ut97/
にあるんですが、これも内容を充実して製本された本が欲しいところです。

初心者向きといえば、以前工科大のページがあったんですが
消滅してしまっているようです、越田センセまた何かページつくってくれないかな・・
0381デフォルトの名無しさんNGNG
プログラムはじめてやるのにラムダカルキュラスは難しすぎる
0382デフォルトの名無しさんNGNG
http://nicosia.is.s.u-tokyo.ac.jp/members/hagiya.html
はぎゃー先生のページ面白い
0383yukiNGNG
====================================================================

すみません。初心者なのですがこんな質問に誰か答えていただけるのでしょうか?

function type は
[Key] -> [Token] -> [(Field, Value)]

type Token = String
type Field = String
type Value = String
type Key = String

Key で Token を検索して、結果があればFieldとValueでOutput すると言う
ファンクションです。例えば、
[key] = ["Name","Title","Address"]

[Token]="Name",":","Yamada","Taroh",";","Title",":","Mr",";","Address",":","Tokyo","Shinjuku",";"]


output
[("Name","Yamada Taroh"),("Title","Mr"),("Address","Tokyo Shinjuku")]

になります。
TokenのArrayの中で、Fieldのあとは必ず ':', Valueのあとは ';'
になってます。それと、outputのfieldは単語ごとにスペースでくぎられた1つのstringになります。

誰か、アイデアでもいいので下さい。
すみません何分初心者なもので。 レスお待ちしてます。

=======================================================================
0384デフォルトの名無しさんNGNG
>>383
その区切り線には宗教的意味か何かでもあるのか?
0385デフォルトの名無しさんNGNG
>>383
宿題は自分でやりましょうね。
0386デフォルトの名無しさんNGNG
Haskellって、
学校の授業でどのくらい使われてるの?
0387日曜HaskellerオヤジNGNG
宿題だとすると・・・そのまま答えを書いたらまずいかな(笑
私だったらこんな感じで作りますかね。

見ているとスペースのところで文字列が切断されていて非常に感じが悪いのでそれをまず結合します。
つづいてこの文字列リストから ":" , ";" を取り除いて出来上がり
0388日曜HaskellerオヤジNGNG
おまけ
結合すべき文字列は直後が ";" ":" でないことに着目すると簡単に作れるでしょう。
0389383NGNG
「Haskell言語プログラミングレッスン <上> Haskell言語を始めよう」
「Haskell言語プログラミングレッスン <下> 関数型言語を始めよう」

出版準備です。
0390デフォルトの名無しさんNGNG
出版準備?大丈夫かよオイ
0391デフォルトの名無しさんNGNG
ネタだろ…
0392日曜Haskellerオヤジ NGNG
よく見てみると、単に複数文字列があるだけじゃなくて、
レコードみたいになっていますね ';' ':' ブラウザはの見分けがつかない
間違っているので上記2レスは無しということでお願いします

';' でいったん文字列リストのそのまたリストに分解して
先頭を順序対の左
上記を取り除いた上での、先頭と末尾を取り除いた文字列の結合を右の順序対として
リストを作ればよいみたいですね。
0393日曜HaskellerオヤジNGNG
>>389
本当ならうれしいですね、ちょっと作ってみましょう、しばらくかかります。
0394デフォルトの名無しさんNGNG
個人的には関数の型が気にいらんな。

type Assoc = [(Field, Value)]
lookupAssoc :: [Key] -> Assoc -> Assoc

をつくれ、としたほうが抽象化のレベルがあうのでないか。まあ、

parseAssoc :: [Token] -> Assoc

をつくって

lookupTokens :: [Key] -> [Token] -> [(Field, Value)]
lookupTokens keys tokens = lookupAssoc keys (parseAssoc tokens)

とすれば元の題意にはあうだろうが。






0395デフォルトの名無しさんNGNG
>>389
題名的には上下逆だろ。
0396日曜HaskellerオヤジNGNG
関数型言語の素人のコードなので変かも知れませんが大体こんな感じになります。
本できたら、このスレッドに報告してくださいね、買います。

type Token = String
type Key = String
type Field = String
type Value = String

hoge_key = [ "Name" , "Title" , "Address" ]

hoge_token = [ "Name" , ":" , "Yamada" , "Taroh" , ";" , "Title" , ":" , "Mr" , ";" , "Address" , ":" , "Tokyo" , "Shinjuku" , ";" ]

-- ここが本体
func :: [Key] -> [Token] -> [(Field, Value)]
func k t = receive [] t
  where
    receive xcomplete remain
      | remain == [] = xcomplete             -- 全部完了
      | nokey     = receive xcomplete raw_recs    -- キー無し
      | otherwise   = receive (rec:xcomplete) raw_recs -- 成功
        where
          -- 先頭レコードのその以外のレコードの定義
          ( raw_rec , raw_recs ) = sprit_records remain

          -- キーと ':' と結合前の値のリスト定義
          -- 必要ならコロンのチェックをすること
          ( key : ( colon : value_token ) ) = raw_rec

          -- キーがあるかどうかの定義
          nokey = (has_member k key) == False

          -- 値の定義
          value = cat_value value_token

          -- 整形済みレコード
          rec = ( key , value )

0397日曜HaskellerオヤジNGNG
続きです

-- トークン分解と ';' の取り除き
-- 末尾 ';' チェックはしていないので必要なら無限再帰防止策をとること
sprit_records :: [Token] -> ( [Token] , [Token] )
sprit_records token = receive ( [] , token )
  where
    receive ( x , (y:ys) )
      | y == ";"   = ( x , ys )
      | otherwise   = receive ( x ++ [y] , ys )


-- 空白を入れながら文字列の結合をする
cat_value (x:xs) = receive x xs
  where
    receive complete remain
      | remain == [] = complete
      | otherwise   = receive ( complete ++ " " ++ x ) xs
        where
          (x:xs) = remain

-- キー名があるかどうかチェック
has_member (key:keys) x
  | x == key   = True
  | keys /= []  = has_member keys x
  | otherwise   = False

0398383NGNG
日曜Haskellerオヤジさん ありがとうございます。

なんか、本を出すことで盛り上がってるみたいなのですが。。
すみません、>389 は私ではないです。誰かがネタでやったみたいです。
なのに、期待して答えて頂いて感謝してます。

それと、すぐ宿題ってばれましたね(苦笑)。事実、海外でITを勉強してる学生です。
これはアサイメントで来週提出で7問中、1問だけとけてる状態です。そして、苦肉の策で
このスレに質問をしてみました。そして、みなさんにヒントを頂き感謝してます。

みなさんはかなりの知識をお持ちのようで、私なんてJAVAの教科は自分では得意だと
思ってやってましたが、haskelになると途端にややこしくなり、自分の頭の悪さを、思い知らされてます。
数学の知識がさらに必要となってきてますね。

日曜Haskellerオヤジ さん、参考になりました。ありがとうございます。
ついでにこのアサイメントの全容を貼っときました。(期待しつつ)。自分でやるつもりです。
海外は教科をパスするのがきついですね。

http://www7.big.or.jp/~mb2/bbs/up/img-box/img20020820192929.zip

また、質問があればさせていただいていいですか?

お礼のレス遅れてしまってすみません。なんか、私の使ってるプロバ、規制されてるんです。うー
だから、友人にメールで送って、それからレスしてもらってるので。すみません。荒らしではないですよ。
0399デフォルトの名無しさんNGNG
日曜オヤジさん、カコ(・∀・)イイ!!
0400デフォルトの名無しさんNGNG
>>383
hogehoge ks ts
= filter (\ (k,v) -> elem k ks) $ map hogera $ hoge ts
where
hoge [] = []
hoge ts = case break (";" ==) ts of
(_,[]) -> [ts]
(xs,_:ys) -> xs : hoge ys

hogera ls = case break (":" ==) ls of
(_,[]) -> (unwords ls, "")
(x,_:y) -> (unwords x, unwords y)
0401デフォルトの名無しさんNGNG
uge
0402日曜HaskellerオヤジNGNG
>すみません、>389 は私ではないです。誰かがネタでやったみたいです。
やっぱりそうか(笑)

関数型は脳の回路がスイッチしないとやっぱり大変です、
普段の仕事では普通の言語を使っているので、土日に関数型に切り替えると毎週のように戸惑います。
JAVA 等で使われているオブジェクト指向的な考え方が頭の中に残っているとうまく組めません。

関数型プログラムのコツは写像を追うことと、
自分が欲しい結果を細部に分解しながら欲しいものを定義してゆくことだと思います。
しかし、これは考えても無駄で、なれるしかないです

>また、質問があればさせていただいていいですか?
どうぞ、このスレッドは最近ずっと寂れていたようですし、私が答えなくても
だれかが答えてくれると思いますし、私も書いてみます。


#ダウンロードしようと思いましたが、ファイルはもうアップローダーに残っていないみたいです。
0403デフォルトの名無しさんNGNG
まずfという関数があり、それはトークンの列を受け取って題意の処理を行うと仮定します。

1. 次の関数
g v [v1, ..., vn,":"]++xs=(v++" "++v1++" "++...++" "++vn,f xs)
を作りましょう。

2. gを使って関数fを定義します。関数fは、もしnがリストkに現れていたら
f [n,";",v1, ..., vn,":"]++xs = (n,v1++" "++...++" "++vn):f xs
そうじゃなかったらf xsを返します。fの定義はkのスコープの中で行われるものとします。

3. 最後に二つの関数をまとめてansを作りましょう。ansはキーのリストとトークンのリストをとり、
f,gを内部で定義してfにトークンのリストを渡します。

宿題の答えを書くのもアレなので、こういうかたちにしてみました。
0404デフォルトの名無しさんNGNG
>>403
> 2. gを使って関数fを定義します。関数fは、もしnがリストkに現れていたら
2. gを使って関数fを定義します。関数fは、もしnがキーのリストkに現れていたら
でした。舌足らずですた。
0405デフォルトの名無しさんNGNG
東大の「こ・何とか」って人は何人?
0406デフォルトの名無しさんNGNG
nisseicom.co.jp
0407日曜HaskellerオヤジNGNG
>>403
ん、お盆休み明けてのぞいてみれば、だれもレスを付けていないのか・・・
今週末ちょっと考えて見ます。
0408日曜HaskellerオヤジNGNG
やっと週末、必死こいて圏論勉強中の日曜Haskellerオヤジです。

ちょっと読んでみたんですが、正直題意が良くわからなかったです。
これはレスつけられないのでは、と思いました。
出題は、宿題のパターンでよいとは思います。ただし、宿題は自分の良心で自分でやりましょうね。(笑

ちなみに、引数に使ったラベルに意味説明を入れたほうが良いと思います。
いきなり v とか v1 とかで説明されてもわかりにくいです。

v1 v2 ... は入力トークンで、末尾は ":" です、
そのリストを [v1 , ... vn , ":" ] とします。

みたいな感じで書いた方がよいのではないかと感じました。
v はキー・・・・なんでしょうか?
あと、2については、 f の中に g が見当たりません。
( v ++ " "++v1++" "++...++" "++vn,f xs) = (n,v1++" "++...++" "++vn)
なんでしょうか?

0409デフォルトの名無しさんNGNG
正直ハスケルってどこで使うの?別に煽りじゃなくて、
どういうところで使われてるか不思議で。shcemeとかは
dr schemeのチュートリアルで結構仕事があるみたいなことを
書いてあったけど。
0410デフォルトの名無しさんNGNG
>>409
学校
0411デフォルトの名無しさんNGNG
>>410
(小)
0412デフォルトの名無しさんNGNG
>>400 kakoii! tuka hutuu dakedo, >>396-397 no ato ni miruto kakoii!
0413デフォルトの名無しさんNGNG
http://www.sampou.org/nobsun/journal/?0320
そこでいう setter って x {foo = "chample"} みたいなのじゃないんすか?

data Foo = Coo { foo :: String, bar :: Integer} deriving Show
x = Coo { foo = "sample", bar = 12345 } -- 初期化
main = print x >> print (x {foo = "chample"})

と、こんなところで半年近くも前の話に質問をしてみるテスト。
0414デフォルトの名無しさんNGNG
>>413
君はこういう (http://www.bier-reise.com/cooking/recipe/go-ya/chample.htm)
つもりなのかもしれんが、"チャンプル" でなく "チャンプルー" と伸ばすこともあり、
chample よりは champloo って書くべきものなのだよ。
0415デフォルトの名無しさんNGNG
>>352
なんだそれは。
0416デフォルトの名無しさんNGNG
ここらへんで一丁Haskellで

七行プログラミング part2
http://pc3.2ch.net/test/read.cgi/tech/1018840143/

に乱入して、関数型言語の恐ろしさを見せつけてやりませんか?

Haskellなら相当な事が出来そうですが(今↑ではやりのRLEとかも)
0417デフォルトの名無しさんNGNG
おまえがやって見ろよ
0418デフォルトの名無しさんNGNG
>>416
大して戦果をあげれないと思う。入出力とか弱いし。
Haskell 向きなのを何か考えればアレかもしれんが。
0419デフォルトの名無しさんNGNG
モナドパーサ
0420 NGNG
0421デフォルトの名無しさんNGNG
7行プログラミングってPerlが一番凄そう。
0422デフォルトの名無しさんNGNG
むしろperlはそのための言語。
0423司馬乱NGNG
>>408
久しぶりにこのスレ覗いてみたら寂れてますねー.
コンピュータサイエンス向けの日本語の易しい圏論の本って需要あるのかな?
0424日曜HaskellerオヤジNGNG
そーですねー、淋しいです。

>コンピュータサイエンス向けの日本語の易しい圏論の本って需要あるのかな?
取り合えず私にはあります、だれか作ってー
離散数学に興味を持ったところ、そのまま勢いでこれも面白くなってきています。
もっとも、一般位相はしらないわ、集合論はしらないわで大変ですが・・・
Haskell という言語はこういうものを勉強するときに便利ですね。
0425デフォルトの名無しさんNGNG
http://www.mail-archive.com/[email protected]/index.html
0426石敢當NGNG
>>423
なぜコンピュータサイエンスに圏論なのか、圏論を勉強すると
プログラムを作成するにあたりどんな嬉しいことがあるのか、
などについて序章あたりに書かれているような本だったら買いたいです。

英語で書かれたのを1冊持っていますが、なかなか読み進めません。
ありがたみを実感できる章にたどり着けばはずみがつくと思うのですが・・。
0427デフォルトの名無しさんNGNG
>>426
その本とはなんでしょう?
さしつかえなければ教えてください。
0428デフォルトの名無しさんNGNG
圏論ですか、下の本で見たときがあります。
情報数学講座7 プログラム意味論 横内寛文 共立出版 1994.6

それにしてもプログラミング処理系は、実用的にするため色々な拡張が施され
ています。そのため純粋な数学との間には大きな溝が出来てしまってい
るような気がします。
0429デフォルトの名無しさんNGNG
これが圏論だっていうコードを見れば
分かるようになるかも。
0430デフォルトの名無しさんNGNG
Frege構造って何?
0431石敢當NGNG
>>427
Bird & de Moor の "Algebra of Programming" です。
0432司馬乱NGNG
コンピュータサイエンスの場合,圏論の代数的な面を強く出すよりは
論理や型理論と一緒にやる方がいいと思いますが(代数は等式論理なので)
どうやって動機付けするのがいいのかな.

圏論には多分
- プログラムの意味論を厳密に議論するための言葉を提供してくれる
- 様々なプログラミングのメタファーを提供してくれる
という二つの面があると思いますが,お互いに依存しあっているので
最後まで引っ張っていく書き方というのは結構challengingかも.
きちんと書くと今度は厚くなりそうだし.
0433司馬乱NGNG
>>431
たしかallegoryとか使っているやつですか?
0434石敢當NGNG
>>433
はい、そうです。

>>きちんと書くと今度は厚くなりそうだし.

執筆する側としては厚い本を書くのは大変だと思いますが、
読む側としては多少厚くても難解な薄い本よりはずっと
ありがたいです。もっとも、431の本をなかなか読み進めない
一番の理由は十分な間を取れていないからで、難解とか言う
以前の問題です。
0435デフォルトの名無しさんNGNG
>>432
というような会話を、約10年程前にしてたんですけど、
相変わらずそのスジでは必須科目(wなのですか?
0436デフォルトの名無しさんNGNG
多分、答えないと思うけど(w
0437日曜HaskellerオヤジNGNG
>>429
圏論というのは、集合論の代わりになるもので、集合論が「要素」の論理
であるのに対して、圏論は「要素」と「要素」の間の関係の論理です。
集合論を置き換える為の物のようです。( 多分(^^; )

圏論って定義は分るんですけれど、その意味しているところは難解です、いまだに分りません。
しかも定義も注意深く定義を読まないと、いきなり変なところにはまり込んでしまいます。
私は ob(C) が「点」とか書かれていて最初こんがらがっていました。
ついでに射も最初はこんがらがってました。
#といいますか、全部だ・・・

もし分らないのが圏論の定義なら
しょうもない集合でいいので一個具体的に作ってみると少しづつ分ってきます。
たとえば { {false,true} , {0,1} } = ob(C) から出発して
全部作ってみるといいですよ。

#ちかごの感じるんですが
# 圏論 : 関数型
# 集合 : オブジェクト指向
#「点」が中心の時がよいのか「射」が中心の時がよいのか
#時々強烈に的確に記述できる関数型の特徴の正体が見えたような見えないような・・・
0438デフォルトの名無しさんNGNG
わたしの、数学から見たイメージでは、
集合論:構成的(実装を扱う)
圏論:公理的(インターフェースを扱う)

射の位相空間での実装は連続写像、群での実装は準同型写像って感じ。

インターフェースのみを使って記述すれば、そのインターフェースを
持っているどんな実装でも成り立つものを作ることができる。
また、インターフェースを前に出すことで、性質を明確に記述でき、
性質の比較ができる。
などのことが、圏論のメリットと感じます。

コンピュータサイエンスで圏論がどう使われているのかは知りませんが。
いや、数学でもあまり知らないんだけど。
0439デフォルトの名無しさんNGNG
>>423 >>432
もしかして書く気ですか?
0440デフォルトの名無しさんNGNG
Hugsって、そろそろバージョンアップしたりしないのかな。
テンキーの'/'が効かないのはなぜ?
0441日曜HaskellerオヤジNGNG
越田一郎先生のページが復活していたので記念上げしておきます。
チュートリアルとしては最適と思います、私もこれを使っておぽえました。
http://www.teu.ac.jp/kougi/koshida/Prog6/index.html
0442デフォルトの名無しさんNGNG
寝られないので今さっき勉強始めてみました、あげ
0443デフォルトの名無しさんNGNG
Haskell ?
なにそれ?
0444デフォルトの名無しさんNGNG
>>443
若者向けのLisp
0445デフォルトの名無しさんNGNG
>>444
若者向けのLisp
0446デフォルトの名無しさんNGNG
prologの方がいいよ
0447デフォルトの名無しさんNGNG
んなわきゃねぇ(w
0448442NGNG
越田先生のチュートリアルいいよ。
公式のドキュメント読んでもいまいちだったけど、
これ読んだらけっこうすんなり入ってきました。

東京工科の学生には負けられません。
0449デフォルトの名無しさんNGNG
`ってどこ?っていうのがFAQかよ(藁
0450デフォルトの名無しさんNGNG
pの横にあるキーボードもありますけどね。
0451デフォルトの名無しさんNGNG
キーマップが違っててもすぐ分かるだろ
0452デフォルトの名無しさんNGNG
わからんキーはかたっぱしから押してみるのが近道だろうが
最近はヘタなキー押すとサスペンドしたりユーザー切り替わったりするらすいな。
なんでこれ以上ボタン増やしたがるのかわからんよ。
0453442NGNG
あのー、スレ違いなんですけど。。。
0454名無しさん@EmacsNGNG
越田先生の
fibStep :: (Integer, Integer) -> (Integer, Integer)
fibStep (u, v) = (v, u+v)
fibPair :: Int -> (Integer, Integer)
fibPair n
  | n == 0 = (0, 1)
  | otherwise = fibStep (fibPair (n-1))
nacchi :: Integer -> Integer
nacchi = fst . fibPair
このnacchi関数サイコー!
ところでIntegerは最高何桁まで扱えるんでしょうか?
nacchi 10000 ぐらいまでは余裕みたいですが。
0455デフォルトの名無しさんNGNG
(●

(略
0456名無しさん@EmacsNGNG
越田先生の10/9の再帰的関数と組の問題を解いたのだけど、
かなり汚いです。だれかスッキリした正解を教えて下さい。

maxOccursTwo :: Int -> Int -> (Int, Int)
maxOccursTwo a b
| a > b = (a, 1)
| a == b = (a, 2)
| otherwise = (b, 1)

maxThreeAux :: Int -> (Int, Int) -> (Int, Int)
maxThreeAux a (b, c)
| a == b = (a, c + 1)
| a > b = (a, 1)
| a < b = (b, c)

maxOccursThree :: Int -> Int -> Int -> (Int, Int)
maxOccursThree a b c =
maxThreeAux a (maxOccursTwo b c)
0457名無しさん@EmacsNGNG
越田先生の10/16の「リスト」の問題なんですが、

innerfunc :: Int -> Int -> [Int]
innerfunc num op
  | op == 0 = []
  | num `mod` op == 0 = innerfunc num (op-1) ++ [op]
  | otherwise = innerfunc num (op-1)
divisors :: Int -> [Int]
divisors num
  | num <= 0 = []
  | otherwise = innerfunc num num

これでリストに要素を追加しようと思い":"を使おうと
思ったのですが、これの型はa -> [a] ->[a]
なので使うことができません。
[a] -> a ->[a]という型の関数はないんでしょうか?
[op]っていう書き方がなんとなくダサい気がします。
そういう関数は組込みであるんでしょうか?

というか組込み関数一覧みたいなのってどっかにありません?
0458名無しさん@EmacsNGNG
divisors関数を使った素数判定はこうかな?

isPrime :: Int -> Bool
isPrime num
  | num <= 2 = False
  | length (divisors num) > 2 = False
  | otherwise = True

なんとなくHaskellが楽しくなってきました。
東京工科大のやつらがうらやましひです。。。

早くIO使った実用的アプリを作れるところまでいきたいのぉ
0459名無しさん@EmacsNGNG
型変換するよい方法はないでしょうか?

hugs上で
>:type "abc"
"abc" :: String
>:type ["abc"]
["abc"] :: [[Char]]

となってしまいます。本当は[String]となって欲しいわけですが、
Charのリストのリストになってしまうんですね。
どうしてなんでしょう? そこで、
>:type ["abc"::String]とかやってみてもダメですね。[[Char]]になります。
:type 1::Intならうまくいくんですが。。。
0460デフォルトの名無しさんNGNG
String は [Char] の別名だから。

http://www.haskell.org/onlinereport/basic.html#characters
↑を見てみればわかるように言語仕様で
type String = [Char]
というセマンティクスが規定されてる.
0461名無しさん@EmacsNGNG
>>761 ありがとうございます。
CharとStringの扱いですが、なかなか難しいですね。
おなじくhugs上で
>("aaa","b") == ("aaa", 'b')
というのはもちろんエラーになるわけですが、
Stringとなって欲しいようなところで[Char]と評価されて
しまうので。。。

チュートリアルの図書館データベースの問題で、

type Person = String
type Book  = String
type Record = (Person, Book)

-- 図書の返却を行う関数
isData :: Record -> Record -> Bool
isData record1 record2
  = record1 /= record2
returnLoan :: Database -> Person -> Book -> Database
returnLoan remove_person remove_book
  = [ record | record <- exampleBase, isData record (remove_person, remove_book)]

これだと
ERROR "library.hs":54 - Type error in application
*** Expression : isData record (remove_person,remove_book)
*** Term : (remove_person,remove_book)
*** Type : ([([Char],[Char])],[Char])
*** Does not match : ([Char],[Char])
というエラーが出ます。んー、わからんです。
0462名無しさん@EmacsNGNG
s/761/460/
でした。すんません。
0463名無しさん@EmacsNGNG
×returnLoan remove_person remove_book
○returnLoan exampleBase remove_person remove_book
でした。質問忘れてください。m(  )m
0464名無しさん@EmacsNGNG
それでもあれですね。思ったより簡単ですね。
もっとCやPerlと比べて難しいかと思っていたら
そうでもなかった。二日である程度慣れました。
ループを一切使わずに全て再帰で書くのは
なれないうちはしんどそうだけど、見返りとして
バグの出にくいプログラムになるのかな。

これがすらすら書けるようになったら
この言語で仕事してみたいですね。
手っ取り早くHaskellを活用できる分野というと
XMLの処理系でしょうか。
Haskellについてはまだよくは分っていませんが(藁)
他の言語より向いている気がするんですね。
もっとフォーマルなプログラムにおいてこそ
こういった言語は意味をなすのかもしれないけど、
多分そういうのはヘタレには無理だろうし(w
とりあえず、IO、スレッドが使えるまで基礎勉強ですね。

無料で使わせてもらっていて、講義より先に
問題に関する質問をここに書いてしまっては
先生に申し訳ないのでここらへんでやめにしておきます。

先生には入門者用の本を書いてほしいなあ。
0465デフォルトの名無しさんNGNG
>>464
IBMのdeveloperWorksサイトに、HaskellでXMLを云々って記事が有ったね。
既出だろうけど。
0466名無しさん@EmacsNGNG
>>465
なるほど、それでかな。
Haskellを使ってみる前からXMLの処理には
関数型言語が向いている気がしてたんです。
ただ単に自分が以前DWを読んだだけだったのですね(汗

関数型言語初体験の感想としてなんですが、
JavaやC++ではいかようにも書けてしまうのが
むしろあまりよくないことに思えてきました。
アルゴリズムを素直に表現してそれがそのまま
プログラムになっているという。素晴らしいです。
久しぶりに萌え萌えです。

もっと綺麗に書けるよう努力せないかんですね。
0467名無しさん@EmacsNGNG
朝起きてから、Haskellスレパート1を見てたのですが、
2chに神が君臨したかのようなレベルですね(汗
自分の書き込みが恥かしくなって来たのでしばらく潜伏します。
早くみなさんのレベルに追いつきたひ。。。

これだけじゃ情報価値なしなのでせめてリンク
純粋遅延関数型言語 Concurrent Clean
http://sky.zero.ad.jp/~zaa54437/programming/clean/
このサイトの書評は私のような初心者には参考になりそうです。
また管理者の人はCleanシステムのドキュメントの翻訳を精力的に
行われています。素晴らしいです。
0468デフォルトの名無しさんNGNG
英語サイトで東工大くらいの難易度のチュートリアルってあります?
0469デフォルトの名無しさんNGNG
ゲージンはいきなりGentle〜を読んでコード書き出すの?
なんか信じられないんだけど、あれより簡単なドキュメントって
英語じゃみたことないよ。
0470468NGNG
>>469
情報どうもです。
テーマごとに手ごろな課題がついてて段階的に
ステップアップできるようなのがいいんですが。
もうちょっと探してみます。
0471デフォルトの名無しさんNGNG
これってまじですか?
http://research.microsoft.com/Users/simonpj/papers/meta-haskell/

というかAlexandrescuに触発されたとか。。
0472デフォルトの名無しさんNGNG
>>464
関数型言語でXMLを扱う例としてこんなのがあります。
http://xduce.sourceforge.net/
メインの開発者は日本人です。
実装はHaskellじゃなくてMLだけど。
0473デフォルトの名無しさんNGNG
Haskell.NETはどうなりますたか?
0474デフォルトの名無しさんNGNG
classって使ってます?
ghcのソースコード見ても殆ど使ってないんだけど、、、
C++がめんどくさくなるとという理由から敬遠されるのと
同じような理由で型クラスも使われてないとか?
0475460NGNG
ttp://www.haskell.org/onlinereport/basic.html#sect6.3
(6.3 Standard Haskell Classes)の図にある如く
言語仕様で定義されてる基本型からして使いまくりですが? >>474
0476デフォルトの名無しさんNGNG
>>471
0477デフォルトの名無しさんNGNG
I/Oとかの副作用処理って、モナドがファイナルアンサーですか?
他に良い方法無いの?(Haskell固有の話じゃなくて)
0478デフォルトの名無しさんNGNG
自分で考えろ
0479名無しさん@MeadowNGNG
http://pc3.2ch.net/test/read.cgi/tech/1007387924/717
0480デフォルトの名無しさんNGNG
ユニークな型ねー。
これだけで解決?

>>478
あなたも一緒に考えましょうよ。
0481デフォルトの名無しさんNGNG
他にもあるよ。
・lazyなストリームとみなす。
・continuationを使う。
0482デフォルトの名無しさんNGNG
そもそもLazyなのがいけないんだろ
0483デフォルトの名無しさんNGNG
このスレ相変わらずプログラムコード量が著しく少ないねぇ
0484480NGNG
>>481
その2つの方法もありますね。
でも古典的(あまり普及できない)方法なのでは?
0485名無しさん@MeadowNGNG
>>482
> そもそもLazyなのがいけないんだろ

‥‥‥誰もつっこまないのか。


っつうかオレ釣られた?
0486デフォルトの名無しさんNGNG
面倒なんで突っ込む必要なし
0487 ◆y3A2MadQ16 NGNG
苦労の割にありがたみが少ないということかもね…。
嫌いじゃないんだけど、導入の旨みが苦労に勝っていると証明できないんで、
最近はLazyにも個人的に放置気味…。>Lazy Evaluation

代わりにという訳でもないが最近は部分評価野郎になってまつ。
(その上、HaskellどころかJava野郎に成り下がってまつ(w。)
0488デフォルトの名無しさんNGNG
ガイシュツな話題。
Lazyが悪い訳じゃないのに・・・・

>>477
他にも色々なアンサーがありますよ。時制理論とね。
透明参照性を保つためには、時間とか状況とかを導入すれば良い。
0489デフォルトの名無しさんNGNG
効率性の問題に行き当たる
0490デフォルトの名無しさんNGNG
>>488
もちろん悪くはないんだ。漏れも個人的には好きだ。
ただ好みの問題を越えて、
実装の苦労と実行効率を補ってなお十分にいいと言い得るかが問題…。
0491デフォルトの名無しさんNGNG
>>489 >>490
実行速度も、もちろん気になるので言語に新しい要素を導入するときは
慎重にするべきですね。

でも構文で制限かければ良いような
もしくは処理系のanalysisによる最適化(正格性判断による末尾再帰とかね)
とかで何とかなりそうな気もします。
だれか何とかして。
0492デフォルトの名無しさんNGNG
Hugs98 November 2002 release
http://haskell.org/hugs/
0493デフォルトの名無しさんNGNG
November 2002 release (November 19, 2002)

We are pleased to announce a new major release of Hugs98. The most important features of this release are:

・ Much improved FFI support (contributed by Alastair Reid), bringing Hugs really very close to the Haskell
FFI specification.
・ Adoption of a significant subset of GHC's hierarchical libraries (contributed by Ross Paterson).
・ An (allegedly) complete implementation of the Haskell98 module system (Sigbjorn Finne).

Most reported bugs have also been fixed; however, some issues still remain. See Hugs Bugs & Features for
further information.
0494デフォルトの名無しさんNGNG
随分とでかくなったな・・・
0495デフォルトの名無しさんNGNG
>>440
バージョンアップしてもテンキーの"/"は効かないままな模様(Winhugs on W2k)
つーか日本語キーボードじゃないと再現しなくて
開発元は気づいてないなんてオチじゃないだろうな。
英語キーボード持ちの人だれか試してプリーズ。
0496デフォルトの名無しさんNGNG
>>495
漏れは英語キーボードだが。
日本語OSでしか再現しないのか?
0497495NGNG
>>496
英語KBでも効かないか。
ウチにゃ日本語W2kしかないから、英語OSの検証は無理だし。

もうちっと色々してみてダメだったらバグレポするつもり。
0498デフォルトの名無しさんNGNG
新しいHugs、なんかインストーラがおかしくない?
アクセス権の設定とか。
0499デフォルトの名無しさんNGNG
誰か、
lispとhaskellとocamlの
メリットデメリットを教えてください。
0500デフォルトの名無しさんNGNG
500get
0501デフォルトの名無しさんNGNG
501got!
0502デフォルトの名無しさんNGNG
新しいhugsにはwinhugsはついてないの?
0503デフォルトの名無しさんNGNG
越田先生の「値しての関数」と「オーバーロードとクラス」の問題が
全然分からない・・・。
誰かお助けを〜
0504デフォルトの名無しさんNGNG
(´-`).。oO(tab-width 4文字にしててはまった。あー悩んだ悩んだ。do で。)
0505デフォルトの名無しさんNGNG
GHC 5.04.2 Released
http://www.haskell.org/ghc/
0506デフォルトの名無しさんNGNG
HaskellはMS Research所属の人間が関わっているのに、
UNIX指向なんでつか?
0507デフォルトの名無しさんNGNG
さあ
0508506NGNG
「GHCは」、だった。
0509デフォルトの名無しさんNGNG
ネタ?

もともとグラスゴ大のプロジェクトで,
大学の研究者を MSR が引っこ抜いてきて,
継続してる研究だからってかんじか.

ってゆ〜か MSR ってマジで全く何の要求も
されない,ってウワサっすけど,本当?

個人的に一番参照してるサイモン博士の頁は↓だったりするが.
ttp://research.microsoft.com/~simonpj/win32-cheat.html
0510デフォルトの名無しさんNGNG
いや、GHCの最新版で一番最初に出るのがUNIX版なもんで
0511デフォルトの名無しさんNGNG
え,ソースは CVS でいつでも最新だよ? とかボケてみる(w

ttp://www*haskell.org/ghc/docs/latest/html/building/winbuild.html
彼らが常用してる開発環境が↑の Windows ビルド用環境ではない,
というだけかな,と.
0512デフォルトの名無しさんNGNG
>502
>新しいhugsにはwinhugsはついてないの?
オレも見つけられない。どこにあるの?
0513デフォルトの名無しさんNGNG
http://www.haskell.org/~petersen/haskell/lc2001.html
>Emacs in Haskell の計画
これはネタですか?こんなことやってる人いるのかな?
0514デフォルトの名無しさんNGNG
http://www.haskell.org/humor/
↑これのどこが面白いのか、誰かひとつ解説してくれ。
0515デフォルトの名無しさんNGNG
その面白さを理解できないあなたはHaskellerではなし。
無理にでも笑いなさい。
0516デフォルトの名無しさんNGNG
http://yzg.3nopage.com/haskell.jpg
質問なんですが、これってなんていう本だか分かりますか?
おそらく、Haskell:the Craft of Functional Programmingの和訳だと思われるのですが……
検索しても出てこないもので……
0517デフォルトの名無しさんNGNG
>>516 何処ぞの大学か何かの授業用のテキストじゃないかなぁ.
前の年には毎回配ってたプリントを,次の年は一括して印刷・
簡易製本とかいうパターンって結構あるから
0518デフォルトの名無しさんNGNG
んが
0519IP記録実験NGNG
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/

1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。

27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?

38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27
鋭いです。

73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
0520デフォルトの名無しさんNGNG
IP記録するのはいいけど串も規制しないと意味ないよな
0521デフォルトの名無しさんNGNG
フシアナ標準にすればいいのに。
困るのは厨くらいだろ?
0522デフォルトの名無しさんNGNG
>>292
どのIPがどの垢かは、ISPが記録してます。
だから、悪い事すればモデムだろとADSLだろうと捕まりますよ。
0523ぶんNGNG
始めまして。今私はplorogの勉強をしています。問題集に並べ替えのプログラムがあったのですが、よくわからないのでどなたか教えて下さい。

concatenate([],List,List).
concatenate([Head | This Tail],List,[Head | That Tail]):-
concatenate(This Tail,List,That Tail).

sort([],[]).
sort([Head|[]],[Head]).
sort([Head|[THead|[]]],Result):-
Head <= THead, concatenate([Head],[THead],Result).
sort([Head|[THead|[]]],Result):-
Head > THead, concatenate([THead],[Head],Result).
sort([First|[second|Tail]],Result):-
First <= Second,
concatenate([Second],Tail,Temp),
[First|RTail]=Result,
sort(Temp,RTail).
sort([First|[second|Tail]],Result):-
First>second,
concatenate([First],Tail,Temp),
[Second|RTail]=Result,
sort(Temp,RTail).

それで、これをどう繰り返せばいいのかがわからないのです。何かわかる人がいたら教えて下さい。







0524デフォルトの名無しさんNGNG
これからは馬鹿って書いただけで訴えられる可能性がでてきたわけで
0525デフォルトの名無しさんNGNG
既に訴えられているわけだが。ひろゆきが責任を取ってるだけで。
0526デフォルトの名無しさんNGNG
======2==C==H======================================================

         2ちゃんねるのお勧めな話題と
     ネットでの面白い出来事を配送したいと思ってます。。。

===============================読者数: 138720人 発行日:2003/1/9

年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。

そんなわけで、年末に予告したIP記録ですが実験を開始しています。

「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。

んじゃ!

────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0527デフォルトの名無しさんNGNG
2ch板一覧
 http://www.skipup.com/~niwatori/keijiban.htm

>728 ( ´∀`)σ)Д`) プニ
0528デフォルトの名無しさんNGNG
そりゃ最初はよほどの大事でもない限りIPを渡すことはしないだろう、
でも物事はだんだんエスカレートしていく物、そのうち密告とかも「誹謗中傷」として
IPを渡すようになる、、、
0529デフォルトの名無しさんNGNG
最近、腐れさん見ないね・・
0530デフォルトの名無しさんNGNG
★ ひろゆき重大な決意を語る。
http://live2.2ch.net/test/read.cgi/news/1041069586/l50
0531デフォルトの名無しさんNGNG
最高裁への上告は認められなくなったから、これで事実上判決確定だよ。
逆転も何もないって。
勢いで上告なんかしても一発で上告却下(門前払い)だよ。

二審も一審を支持。これに対して上告しようにも、
刑事訴訟と同様、自由に上告できるってもんでもないのです。
民事訴訟法312条 (上告の理由) 1項
「上告は、判決に憲法の解釈の誤りがあること
その他憲法の違反があることを理由とするときに、することができる。」
http://www.m-net.ne.jp/~doba/goto/hon.htm

ようするに上告しても今の制度では100%無駄。
これで完全終了ってことか。
0532デフォルトの名無しさんNGNG
>>754
まともじゃない掲示板なんて存在意義ないね。
そういうことならここじゃ意味ないと思うが。
0533デフォルトの名無しさんNGNG
スレタイの日本語、微妙におかしいね。
0534デフォルトの名無しさんNGNG
(前略)815様

落ち着け。お前の感じている感情は精神的疾患の一種だ。
静める方法は俺が(中略)
鯖の前で両目をひんむいて「びっくりするほどユートピア」と唱えながらキュウリを(以下略
0535デフォルトの名無しさんNGNG

なつかし。
0536デフォルトの名無しさんNGNG
ひろゆき
お前にはがっかりした。
2chにも。さいなら。
0537デフォルトの名無しさんNGNG
全部ミギーが書きましたって言えば問題ナッシング
0538デフォルトの名無しさんNGNG
ううん、既存のTripodとかじゃなくて新たにそういうシステムを
作っちゃうの。

どう作るかはわかりませんw

しかし嵐とか不愉快な対策には「こいつがむかつく」と
ひとり1票で投票してきめます。
そしてその人はもうカキコ禁止。

どうやってカキコ禁止にするとかそういうのはわかりませんw
0539デフォルトの名無しさんNGNG
記録されてる分なにかと現社会より厳しくなった感じします、
0540デフォルトの名無しさんNGNG
とりあえず、訴えられたらスレ住人全員で土下座しよう。
ていうか、それくらいの気概で書き込め。

今までひろゆきに丸投げしていた負担を、個人個人で背負えばイイだけの話だろ。
ここからが本当の市民運動のスタートだよ。
0541デフォルトの名無しさんNGNG

>1 :ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ :03/01/08 17:13 ID:???
>そんなわけで、qbサーバでIPの記録実験をはじめましたー。

IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/l20

IP記録実験PART2
http://qb.2ch.net/test/read.cgi/accuse/1042020193/l20

これまでのあらすじは あたりに誰かお願い。
0542デフォルトの名無しさんNGNG
マターリしてるのにスレ違いな質問はどーかと。
それに、会社立ち上げたんだし、たぶんにその辺からだろ〜ね。
0543デフォルトの名無しさんNGNG
2chをはけ口にしていた人はどこで憂さ晴らしをするのか少し興味ある
0544デフォルトの名無しさんNGNG
漏れはどこもさくさく行ける。
プロバ次第だと思われ。
0545デフォルトの名無しさんNGNG
漏らすバカが出るだろうというのが一番の問題なんだよ
0546デフォルトの名無しさんNGNG
ごめん、なんで「それを言うなら」になるのかがわからん(^_^;)
後半の批判は批判でいいと思うんだけど、書き込む人間の自己責任ってのとどう関係してるの?
0547デフォルトの名無しさんNGNG
だろ。
461みたいなことばっか起こるだろ。
ろくなことなないな。2ちゃんなんか。
それもやられ損かなぁ?
訴えてやればいいのに。
0548デフォルトの名無しさんNGNG
>>1-517
荒らされる前までのリンク。
なんでプログラム技術板で私が覗いてる全スレでやられてるんだか・・・。
0549デフォルトの名無しさんNGNG
全ての責任は当事者同士で解決しろってこと
人が書き込んだものに対して賠償するのもアホらしいしな
ごく当り前な考えだわな
騒ぐ程のもんでもない
わかるか?
0550デフォルトの名無しさんNGNG
プチ法廷ごっこでは、詭弁で開き直る2ちゃん擁護派は強い。
でもリアル法廷ではボロ負け。

0551デフォルトの名無しさんNGNG
過度の期待は禁物です。
0552山崎渉NGNG
(^^)
0553デフォルトの名無しさんNGNG
そんなに世の中が嫌いか。
年収600万円に満たない屑でも愉快に暮らせる楽しい世の中じゃないか。
いちいち爆破するな。
0554デフォルトの名無しさんNGNG
Functional Programming With Haskell
http://www.amazon.com/exec/obidos/tg/detail/-/0077093305/
こんな本が出てました。誰か読んだ人はいますか?

あと4月いは損氏の本。といっても仕様書そのままかもしれないけど
Haskell 98 Language and Libraries : The Revised Report
http://www.amazon.com/exec/obidos/tg/detail/-/0521826144/
0555山崎渉NGNG
(^^)
0556デフォルトの名無しさんNGNG
標準ライブラリ関数のクイックリファレンス本って無いのかな?
入門本は取り敢えず読んだから、
簡潔な説明と簡単な使用例が有ると嬉しいんだけど。

>>554の本は、ちょっと違うみたいだし、
1969年にならないと手に入らないって書いてある……バグってるな。
0557デフォルトの名無しさんNGNG
>>554 後者って
http://www.haskell.org/definition/
↑の最初にある Report ふたつの PS・PDF を
印刷製本したものではとか思われ
0558デフォルトの名無しさんNGNG
http://research.microsoft.com/Users/simonpj/haskell98-revised/

これだろ
0559山崎渉NGNG
(^^)
0560デフォルトの名無しさんNGNG
圧縮ツール bzip2 の作者 Julian Seward さん、Haskellerになったんですね。
http://sources.redhat.com/bzip2/#about-author
0561デフォルトの名無しさんNGNG
つってもなー、Haskellerにはlurkerが多いらしいからな
0562デフォルトの名無しさんNGNG
www.haskell.org内にも Seward氏の名前はたくさん出てるから、lurkerではないのでは?
0563デフォルトの名無しさんNGNG
今日からHaskell使ってプログラミング始めます。
とりあえずHP作ってみた。
http://haskell.tripod.co.jp/index.html
0564デフォルトの名無しさんNGNG
>>563
(・∀・)イイ!
応援しますよ
0565デフォルトの名無しさんNGNG
>>563
もう解決したんだろうか。":?"
0566デフォルトの名無しさんNGNG
>>564
心強いです。感謝。
>>565
解決しました。感謝感謝。
0567デフォルトの名無しさんNGNG
荒すな
0568デフォルトの名無しさんNGNG
WinHugsでテンキーの'/'が効かない件、
バグか仕様か知らないけど、取り敢えず直してみた。

Windowsでプログラム組んだ事無いんで、変な事してる
かもしれないけど、一応動いたよ。

*** Wintext.c.origTue Aug 6 07:29:18 2002
--- Wintext.cMon Feb 3 21:20:30 2003
***************
*** 2497,2502 ****
--- 2497,2506 ----
goto otherKey;
}

+ if (readKey.KeyCode == '/') {
+ readKey.IsExtended = 0;
+ }
+
return readKey;
}

0569デフォルトの名無しさんNGNG
template haskell まだあ〜?
0570デフォルトの名無しさんNGNG
Hoshkell
0571デフォルトの名無しさんNGNG
素朴な疑問Haskell使ってる人たちって情報系の人ばかり?
0572デフォルトの名無しさんNGNG
【何処も】情報科学総合スッドレ【板違い】
http://science.2ch.net/test/read.cgi/rikei/1046173479/l50


0573デフォルトの名無しさんNGNG
11 March 2003 GHC 5.04.3 Released
0574デフォルトの名無しさんNGNG
どこが変わったのかわかりゃしねぇ。

ところで最近寂れてるな。
やっぱもうネタないのかね。
0575デフォルトの名無しさんNGNG
Haskellコミュニティは議論は盛んなんだけどなー
0576デフォルトの名無しさんNGNG
はやく日本語で本出ないかなー。
0577デフォルトの名無しさんNGNG
lazy evaluation ってなんですか?
0578 NGNG
遅延評価 (lazy evaluation)
  遅刻の回数を基準にボーナスの額を決めること。
ttp://www.nurs.or.jp/~kneo/m_ti.html
0579デフォルトの名無しさんNGNG
>>577
値が実際に必要となるまで引数の評価を遅らせること。
要求呼び出し(call by need)
0580デフォルトの名無しさんNGNG
命令型言語ではほとんど実現されていない。
引数の評価は何らかの副作用を伴うことがあり、
引数がいつ必要になるか正確に知るのは難しい。
また、要求呼び出しはスタックによる実現が難しい。
0581デフォルトの名無しさんNGNG
http://www.generic-haskell.org/
ここで作られてるコンパイラを使っている人はいますか?
0582デフォルトの名無しさんNGNG
>>579-580
説明ありがとうございます。
0583デフォルトの名無しさんNGNG
Haskellerの中にはまたストリームベースを唱えている人もいるようだが
0584デフォルトの名無しさんNGNG
ttp://www.sampou.org/haskell/report-j/preface-13.html
0585デフォルトの名無しさんNGNG
意味不明でっす
0586デフォルトの名無しさんNGNG
>>583
この板にも居ますよ。たぶん数学屋の方でしょうけど。

ところでデータ構築子って理論的にカリー化できないのでしょうか?
最弱頭正規形を作ればいいのだから可能なのでは?と思いますが。
0587デフォルトの名無しさんNGNG
可能だからといって言語仕様にいれるとは限らないでしょう
その辺は言語設計上の様々な観点を
考慮しながら決定するということで
0588デフォルトの名無しさんNGNG
> 586
カリー化されてるんじゃないの?
0589デフォルトの名無しさんNGNG
余裕でっす
0590デフォルトの名無しさんNGNG
されているね、十分。
----code
data Tree a = Node a [Tree a]
instance (Show a) => Show (Tree a)
 where show (Node item xs) = show item ++ show xs
-----実行
*Main> :type Node 1
forall a. (Num a) => [Tree a] -> Tree a
*Main> Node 0 (map (Node 1) (map (map (flip Node [])) [[2,3],[4,5]]))
0[1[2[],3[]],1[4[],5[]]]
-----
それとも、もしかして、こんなん?
-----code追加
test (Node a) = a
-----予想実行
*Main > test (Node 0)
0
*Main > test (Node 1 [])
1
-----
上はともかく、下はあってもおかしくないし、欲しいな。
あとで少し探してみるか…。
0591586NGNG
>>588-590
すでに可能だったのか・・。
すまんかった。
0592デフォルトの名無しさんNGNG
Windows版のHugsって、ドキュメントのバージョンがずれてない?
.hlp .pdf .htmlが古くて、.chmだけちょっと新しいような?

あと、Trexライブラリがうまく使えないんだけど、
もしかして再コンパイルが必要なのかな?

Hugs mode: Restart with command line option +98 for Haskell 98 mode

Reading file "C:\Hugs98\libraries\Hugs\Prelude.hs":
Reading file "C:\Hugs98\libraries\Prelude.hs":
Type :? for help
Prelude> :load Hugs.Trex
Reading file "C:\Hugs98\libraries\Hugs\Trex.hs":
ERROR "C:\Hugs98\libraries\Hugs\Trex.hs" - Illegal export of a lone
data constructor "EmptyRec"
0593デフォルトの名無しさんNGNG
はあー、MLはまだ何とかなりそうだが、haskellさっぱりわかんね。
0594デフォルトの名無しさんNGNG
漏れは逆にMLの構文がわけわからん、つーか好みに合わん。
Haskellも一部複雑だけどね。

ttp://www.teu.ac.jp/kougi/koshida/Prog6/
とか見て動かしてみれば慣れるよ。
0595デフォルトの名無しさんNGNG
haskell.org維持費用捻出できなくなったのかよ
0596デフォルトの名無しさんNGNG
ワラタ
2ちゃんねらーで金出してやれよ。
トップページのλの隣にモナー飾ってもらえるかもしれんぞ。
0597デフォルトの名無しさんNGNG
>>595
April fool じゃないのか?
0598デフォルトの名無しさんNGNG
そうなら、もう消すだろ
0599デフォルトの名無しさんNGNG
1 Apr 2003 のニュースだから、永久保存かも
0600600NGNG
でも、去年は April fool なかったみたい age
0601山崎渉NGNG
(^^)
0602デフォルトの名無しさんNGNG
ホシュ
0603デフォルトの名無しさんNGNG
このゴールデンウィークにでも勉強したいと思いまフ。
0604デフォルトの名無しさんNGNG
これ、行列の対角化とかできますか?
0605デフォルトの名無しさんNGNG
対角化の計算を自分で書けばもちろんできる。
行列計算用のモジュールも公式サイトから辿れる。
あとはやりたい本人の裁量次第でいくらでも。
0606デフォルトの名無しさんNGNG
>>605
アリガd
0607デフォルトの名無しさんNGNG
初期のhaskellはschemeで作られたって本当?
昔Yale大学のサイトになんか書かれてたけど。
0608デフォルトの名無しさんNGNG
けど・・けど・・
0609デフォルトの名無しさんNGNG
Common Lisp?
0610動画直リンNGNG
http://homepage.mac.com/hitomi18/
0611デフォルトの名無しさんNGNG

f x = let a = 1; b = c g
y = exp2
in exp1

f x = let a = 1; b = c
g y = exp2
in exp1
0612デフォルトの名無しさんNGNG
最強
0613デフォルトの名無しさんNGNG
logoが変わった
0614デフォルトの名無しさんNGNG
前よりよくなったねえ
0615デフォルトの名無しさんNGNG
そ…、そうか?
かなりビミョーなデザインだと思うが。
0616デフォルトの名無しさんNGNG
λの回りにゴミが付着してる様に見える
0617デフォルトの名無しさんNGNG
:: = 静的型付け
-> = 高階関数
∀ = 多相
=> = 型クラス
>> = モナド

つーことかいな。
0618デフォルトの名無しさんNGNG
そう考えると凝ってるな
0619デフォルトの名無しさんNGNG
凝ってる、っつーか、まんまやん。
0620デフォルトの名無しさんNGNG
CGAの話止まってるけど、なかなかまとまらんのかね。
0621デフォルトの名無しさんNGNG
>>619
featuring static typing, higher-order functions,
polymorphism, type classes and monadic effects

にそれぞれ対応してるという解釈のようだけどそれ分かって言ってんの?
0622山崎渉NGNG
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
0623デフォルトの名無しさんNGNG
結局、wxWindowsのバインディングで終わりそうな気配だな
0624遅報NGNG
ghc major version up
0625デフォルトの名無しさんNGNG
6.0の目玉はTemplateということになるのかな?
http://www.haskell.org/ghc/docs/6.0/html/users_guide/template-haskell.html
0626デフォルトの名無しさんNGNG
教えて君で申し訳ないのですけど、他の関数型言語と比べて Haskell のどのあたりが
(・∀・)イイ! or (゚д゚)マズー なのですか?
できれば、いい面と悪い面の両方を聞いてみたいです。
0627デフォルトの名無しさんNGNG
>>626

(・∀・)イイ!
実装がいくつかある。

(゚д゚)マズー
末尾再帰じゃない。
0628デフォルトの名無しさんNGNG
○:数少ない遅延評価な言語の一つ
△:clean は遅延/正格の切替えができるらしいが、Haskellは…
0629デフォルトの名無しさんNGNG
>>627 実装がいくつかある。
SchemeやSMLも実装はいくつかあるが。
個々の実装の間に互換性がなければ、却って混乱するのでは?
0630Lazy eva.NGNG
call by need
必要なら呼んで
0631デフォルトの名無しさんNGNG
>>627
>(゚д゚)マズー
>末尾再帰じゃない。
lazyだと末尾の最適化はいらないんじゃなかった?
おれが勘違いしてるのかも知れないけど
0632デフォルトの名無しさんNGNG
(´-`).。oO( Haskell の (・∀・)イイ! 点がこの程度しか挙がらなくていいのだろうか)
0633デフォルトの名無しさんNGNG
いいところ:
    純粋な関数型言語
    厳格な型チェック
    比較的豊富なライブラリ
    遅延評価
わるいところ:
    遅い
    flatなarrayが無い
0634デフォルトの名無しさんNGNG
スレの伸びが lazy ...
0635デフォルトの名無しさんNGNG
>>634
…実はこのスレの定義は既にすべて準備されていて、誰かが問いを放つとレスが見えるようになる?
0636デフォルトの名無しさんNGNG
Haskell: The Craft of Functional Programming
これの新しいバージョンがでるっていううわさは本当なの?
Ruby系サイトのどこかで書いてあった気がするのだけど。
0637デフォルトの名無しさんNGNG
http://www.amazon.co.jp/exec/obidos/search-handle-form/249-3518664-2502769
0638637NGNG
あ、だめだった。Amazonで検索すれ。
0639デフォルトの名無しさんNGNG
>>635
逆かも?
問いが放たれてから、必要に応じて定義を考える。
0640デフォルトの名無しさんNGNG
問に対して常に同じ答えが返ってきます。
0641デフォルトの名無しさんNGNG
文脈が変っていても同じ質問に対しては同じ答えが返ってきます。
0642デフォルトの名無しさんNGNG
>>640
問いの系列がmonadな演算で関連付けられてるので、
単独の問いに対しては当てはまらないカモッ!
0643デフォルトの名無しさんNGNG
>>641
それではガイシュツ処理が出来ませんので、
不具合発生です。
0644モナdNGNG
 ΛΛ
(´d`) .。o〇(monad∈モナー?)
0645デフォルトの名無しさんNGNG
モナドは、人間から見て、副作用を扱ってるコードとほとんど
同じように見える。
人間にとって副作用のあるコードと同じように見えてる
とすれば、モナドって何の意味があるの?
人間が関数プログラミングしやすくするために副作用が
禁止されてるんじゃ無かったの?
0646デフォルトの名無しさんNGNG
「ある」と「あるように見えるけどない」は違うだろ…
0647_NGNG
http://homepage.mac.com/hiroyuki44/
0648デフォルトの名無しさんNGNG
>>646
違うけど、プログラマから見て同じように見えてるんだったら
プログラマにとっては同じでは?
コンパイラにとっての意味しかないのですか?
0649デフォルトの名無しさんNGNG
関数型の場合、コンパイラにとっては「ない」方が都合がいいけど、
人間にとってはあなたの言う通りあるように見えた方が扱いよいわけだ。
で、「ない」ものをあるように見せるモナドは、便利ってことにならない?

それならモドキじゃなくて本物の副作用を認めてもいいじゃんという話はまた別
0650デフォルトの名無しさんNGNG
>>649
> 人間にとってはあなたの言う通りあるように見えた方が扱いよいわけだ。

それは関数プログラミングに反するから、関数プログラミング
の立場から見た場合、扱いが良いとは言えないんじゃないですか?
0651デフォルトの名無しさんNGNG
話が逆なんじゃないか?モナドは副作用をわざわざあるように見せるためのものでもないだろう。
0652デフォルトの名無しさんNGNG
a <- hoge
ってやったら、あとは a は見るからに完全に副作用の無い
関数型プログラミングであつかうわけだから、
モナドがあるおかげで関数型の意味がなくなるなんてことは全然無い。

結局モナドって、
副作用や、コードを書いた時点では決まらないものを
普通の関数の引数なんかにつかって破綻するのをさけるために、
型の前にMとかつけてそのままじゃつかえなくする仕組みでしょう。
0653デフォルトの名無しさんNGNG
日本語扱えるhaskellの処理系ってありますか?
0654デフォルトの名無しさんNGNG
いやらしいリンク集作った
http://homepage3.nifty.com/coco-nut/
0655デフォルトの名無しさんNGNG
Haskellはじめますた。
面白いですね〜
・リストの内包表現に萌えた
・無限データ構造萌え
 numForm n = n : numForm (n+1) とか。
 あるもんをあるように書いたらいいって言うのがすどい。

詳しい方々、わかんないことがあったら教えてください。
アフォなんですが何とかがんばって基本を理解してから、
モナドを通って詳しい皆さんのところにゆきつきますので。

いまは、組み込み関数?を調べるのに困ってたりします。
IntをDoubleに変換するのってどうするの?
IntとIntegerの変換どうするんでうか?
とか、わからん。
「**」が解らなくて困ってた事も。
(-1)で懲りて、あらゆるところに括弧つけまくりのコードを書いてたり。
0656デフォルトの名無しさんNGNG
>>655
fromIntegral :: forall b a. (Num b, Integral a) => a -> b
toInteger :: forall a. (Integral a) => a -> Integer
fromInteger :: forall a. (Num a) => Integer -> a
0657デフォルトの名無しさんNGNG
今年もICFPの時期が来ましたがみなさんいかがお過ごしですか?
0658デフォルトの名無しさんNGNG
>>655
$をつかうと
f (g (h x))
みたいなのを
f $ g $ h x
とかけて括弧削減。
0659デフォルトの名無しさんNGNG
初心者質問いいですか?
GHCで、API、例えばIsDBCSLeadByte Char -> Bool を使いたいと思ったらどうすればいいのでしょう
0660貧乏脱出!これであなたはお金持ちNGNG
普通に働いてお金持ちになれるのは全体の1%のみって本当!?
本当にお金持ちになるにはやはり「副収入」が必要!
一日30分 おうちでコピペ、コピペ!
嘘だと思うんならランキング見てみてくださいよ↓↓
(直リン不可)
http://www.adultshoping.com/addclickport.cgi?pid=1053353765(直リン不可)

///////.......///////////////////////////
0661デフォルトの名無しさんNGNG
誤解があるようだが、モナドは純粋な関数型言語が
手続き風にコードを書くためのシンタックストリックに過ぎない。
拡張でもなんでもない。
(もちろんシーケンシャルのオプションと使われることが多いわけだが)
0662デフォルトの名無しさんNGNG
         _,..............._,.......
      ,ノ⌒::::::::::::::::::::::::::::::::::::⌒ヽ_
     _ノ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヾ、
    (::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::)
   _ノ:::::::::::::::;ヘ::::::::::ノ⌒ヽ:::::::::::::::::::::::::::::::::)
  (::::::::::::::::::/   ̄ , ‐-、 |::::::::::::::::::::::::::::::::)     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (:::::::::::::/ヽj _/ -‐-、 |::::::::::::::::::::::::::::::::)    |  トリックだ。
   ):::::::::ヾllli_、_,;iiiillllllllli <::::::;へ:::::::::::::::::(   | 
   (::::::::::::/`i´ ,└=゚'┘  |::::| 6 |:::::::::::::::::::}  <  副作用があるように見えているに
    `〜、 ゝ| _コ、_、 /|::::| ソ/::::::::::;〜"    |  過ぎん。
      ヾ|||ll|||||||||||l〉|  三ー'〜〜"         | 
         |||:二三|||| l  ,三   ヽ、          \______________
         |l  ⌒ ||| ://     ヽ=、-、_
       |l、:( : : ||/ /       ヽ, |    ̄\
      /   ̄   /        ノ /       \
0663デフォルトの名無しさんNGNG
サータン,サータン!
0664デフォルトの名無しさんNGNG
ところで、日本語訳のページが見れなくないですか??
0665デフォルトの名無しさんNGNG
>>659わかるひといませんか〜
0666デフォルトの名無しさんNGNG
>>664
http://www.sampou.org/haskell ならサーバマシンの調子が悪いそうです
0667デフォルトの名無しさんNGNG
>>666
復活したようです。

>>665
いないんじゃないですか。人少なそうだし。
俺は、外界との繋がりはsystem :: String -> IO ExitCodeくらいしか知らない。
0668659=665NGNG
検索の結果、MessageBoxを呼んでいる例は見つけました。(真似たらできました)
でも、*.hiをバイナリ検索しても、IsDBCSLeadByteはインポートされて無いようです。
(CharNextとか、代用できそうなAPIも同様)

これは、Haskellで全角文字を扱うなというお告げでしょうか…
0669デフォルトの名無しさんNGNG
>>668
IsDBCSLeadByteってwindowsのAPI?
そういうものはそのライブラリとリンクしてつかうんじゃないのかな。
haskellに入ってるわけがないというか。

http://www.haskell.org/libraries/
のInterfacing with other Languages and Systemsとか。
0670デフォルトの名無しさんNGNG
>>668
>(真似たらできました)
おー、あなたも私から見たらすどい。
よろしければ、MessageBoxを出すコードをこのスレに張って
共有していただければありがたいです。
0671デフォルトの名無しさんNGNG
>>669
いや、GHC(Win版)には既にWin32 API(の一部)のHaskell用インポートが付いてるんですよ。

>>670
どーせ丸写しなので、いくらでも共有しましょう。

import Win32
main = messageBox nullHANDLE "Text" "Title" mB_OK

たった二行。
コンパイル時に -package win32オプションが必要です。
(win32ディレクトリ以下はデフォルトでは見てくれないので)

↓見つけたページ
http://www.haskell.org/pipermail/glasgow-haskell-users/2002-March/003110.html

なお、同じようにしてMessageBeepを呼ぼうとしましたが、挫折中です。
0672デフォルトの名無しさんNGNG
>>669
あ、でもリンク先のFFIとか使えばできそう?できるのか俺に?
…ありがとうございます
0673デフォルトの名無しさんNGNG
FranTkを使った事のあるかたは居られますか?
使おうとしたけど何だかよくわからんかった。(窓使いです)
0674デフォルトの名無しさんNGNG
>659
ttp://www.sampou.org/haskell/report-j/basic.html
>6.1.2 文字と文字列
>文字型 Char は列挙型のひとつで、16 bit の値からなり、Unicode 標準 [10] に準拠する。
Unicodeなので要らないのでは?
ちゃんと実装されているならばだが。
0675デフォルトの名無しさんNGNG
> ちゃんと実装されているならばだが。

内部ではUnicodeかもしれないけど、全角文字をgetCharで読むと二回に分けて来るんですよ…
0676デフォルトの名無しさんNGNG
>>674
Unicodeとその(バイトでの)エンコーディングは別物だ。
0677デフォルトの名無しさんNGNG
>>676
実際
I/O functionsがbyte読んでそれをかえすだけだから、
Charが16ビットである意味がないんだよな。
謎の設計。
0678デフォルトの名無しさんNGNG
return () << [1,2,3] が [1,2,3] を返すのは何で? ()モナドの定義?
0679デフォルトの名無しさんNGNG
ごめん。わかってると思うけど << じゃなくて >> の間違い
0680 NGNG
>>678
リストはモナドだから。
0681デフォルトの名無しさんNGNG
そういや、漏れもIOモナドはちょっと分かったつもりだけど、
なんでリストがモナドなのがいまいちよく分からん。
0682デフォルトの名無しさんNGNG
m がモナドのとき return () << m が m になるのはなんで? ()モナドの定義?
0683デフォルトの名無しさんNGNG
また >> を間違えて << にしてまった

書いた後気づいたのだが return [3,4] >> [1,2] も [1,2] 返すのか
() がポイントではなく return の方がポイントだった
かきまぜてスマン
0684デフォルトの名無しさんNGNG
return 1 >> [1,2] でも return 'a' >> [1,2] でも同じだな
0685デフォルトの名無しさんNGNG
>>682
 >>の型からわかる型推論。
0686デフォルトの名無しさんNGNG
もっというと()はどのモナドでも返せる。
0687デフォルトの名無しさんNGNG
getChar って結局何返すの?
参照透明性からいって 'a' が入力されたからといって IO 'a' が返るわけじゃないんだよね
たびたび出る話題でスマンが毎回納得にいたらない
0688デフォルトの名無しさんNGNG
IO
0689デフォルトの名無しさんNGNG
>>687
意味不明。IO Charだけど?
0690デフォルトの名無しさんNGNG
>>687
強いて言えば IO 'a'だろうが、それで参照透明性に何の問題が?
0691デフォルトの名無しさんNGNG
そもそもモナドを理解するのにIOモナドから入る,っていうのが間違っている
という気がする.モナドを理解するためには,次の論文を読むのが吉かと.

Wadler, P. : Monads for functional programming
0692デフォルトの名無しさんNGNG
>>691
http://www.research.avayalabs.com/user/wadler/topics/monads.html
ここにあるやつ?
0693デフォルトの名無しさんNGNG
>> 692
そうそう.
0694デフォルトの名無しさんNGNG
関数型では同じ関数なら何回呼んでも同じ値が返る建前では
実は暗黙のworldが渡されていて暗黙の新しいworldも返されている?
0695デフォルトの名無しさんNGNG
モナドって、食べ物じゃなかったのか。
0696デフォルトの名無しさんNGNG
理解するのに論文を読ませる必要がある事自体に
何か問題があるような気もするがー。
0697デフォルトの名無しさんNGNG
今印刷して読んでます…辞書片手に…どなたか、厨房向けに噛み砕いて説明してホスィ
0698デフォルトの名無しさんNGNG
>>697
         _,..............._,.......
      ,ノ⌒::::::::::::::::::::::::::::::::::::⌒ヽ_
     _ノ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヾ、
    (::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::)
   _ノ:::::::::::::::;ヘ::::::::::ノ⌒ヽ:::::::::::::::::::::::::::::::::)
  (::::::::::::::::::/   ̄ , ‐-、 |::::::::::::::::::::::::::::::::)     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (:::::::::::::/ヽj _/ -‐-、 |::::::::::::::::::::::::::::::::)    |  トリックだ。
   ):::::::::ヾllli_、_,;iiiillllllllli <::::::;へ:::::::::::::::::(   | 
   (::::::::::::/`i´ ,└=゚'┘  |::::| 6 |:::::::::::::::::::}  <  副作用があるように見えているに
    `〜、 ゝ| _コ、_、 /|::::| ソ/::::::::::;〜"    |  過ぎん。
      ヾ|||ll|||||||||||l〉|  三ー'〜〜"         | 
         |||:二三|||| l  ,三   ヽ、          \______________
         |l  ⌒ ||| ://     ヽ=、-、_
       |l、:( : : ||/ /       ヽ, |    ̄\
      /   ̄   /        ノ /       \
0699デフォルトの名無しさんNGNG
>>682
return () >> [1,2,3]
後ろがリストなので、これはリストモナド
returnを外して、>> を >>= に変換すると、
[()] >>= (\x -> [1,2,3])
前のリストの要素それぞれに対して後ろの関数を呼んで、その結果を連結したものがこの式の値なので、
(\x -> [1,2,3]) ()
[1,2,3]
0700デフォルトの名無しさんNGNG
>>694
その通り。IO a はHaskellの側から見ると、
data IO a = IO (World -> (a, World))
このような構造になっていて、実行結果がIOだった場合に、表示する前にWorldが渡されて実行される。
実際はそんな面倒なことしていないと思うけどね。
0701デフォルトの名無しさんNGNG
半分ぐらい読みました…まさに>>698のおっしゃる通り…それ以後の式を全部λとして渡して、
でっかい合成関数を組み立てて、最後に一括して実行してるようなイメージでいいのでしょうか?→モナド
(と同時に、実装までそうなってないよなあと信じたい)
0702デフォルトの名無しさんNGNG
>>698
モナドを使えば副作用は「ある」というべきだろう。

たとえばモナドを利用したカウンタを利用して、
あるいは、ファイルに1, 2, ...と書き込んでループをつくれば、
あきらかにそこには副作用があるわけだ。

むしろWorldを変化させながら渡し続けるという発想の転換で(言語に対し)
無いように見せかけているだけだ。人間にとっては副作用は存在する。
0703デフォルトの名無しさんNGNG
>>702
あるように見せかけているだけだろ?
そうじゃなきゃモナドの意味がない
0704山崎 渉NGNG

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
0705デフォルトの名無しさんNGNG
>>701 よいはず。
あと、遅延実行されるのでそう実装しても効率は悪くならないと思う。
0706デフォルトの名無しさんNGNG
>>703
逆だよ。というか循環論法。

そもそも関数型言語には本来副作用は存在し得ない。状態ってものが無いからね。
しかし、特に外部とアクセスするプログラムのためには副作用が必要だ。

関数型言語と、その副作用をともなう処理を、
副作用の種類(IOとか)毎の(内部状態を保持する)モナドを導入することで*分離*してるだけだ。
0707デフォルトの名無しさんNGNG
>>705
701のイメージはあってるが、

>  あと、遅延実行されるのでそう実装しても効率は悪くならないと思う。

遅延実行だからこそそういう式の組み立てと式の保存をやらないといけないわけで、
むしろ遅延評価だからと言ってそういう実装をするととんでもないことになる
というべき。

通常の式の評価でも下手に(末尾)再帰すると未評価の式の列が莫大になって
すぐオーバーフローする。
0708701NGNG
大雑把に読みました。後半のパーサは読み飛ばしましたが…
データ型としてのモナドは、要するにC++のクラスtemplate、のようなもの…ですよね?
ということは、IO a -> aな関数が記述不可能なのは、言語の外を相手にしたIOモナドに限った制限で
一般的にはそんな制限は無い、で合ってます?

簡単なサンプルコードどこかにないかな…
0709デフォルトの名無しさんNGNG
>>708
リストから成分を抽出できるでしょ。
0710デフォルトの名無しさんNGNG
>>709
ありがとです。
で、>>681氏と同じ疑問に行き当たるわけですが…
リストが状態を持っているとは思えないのですが、なぜモナド?
(a, b)とか他の一般の構造化型はモナドじゃ無いですよね。
0711デフォルトの名無しさんNGNG
>>710
リストを丸ごと全部で値と思わずに一部だけ更新したいんじゃない?
一部だけ更新するような操作には普通副作用がある。

…違うかな?
0712デフォルトの名無しさんNGNG
リストは >>= と return がモナド演算の法則を 満たしているからモナドなんじゃないかな
(a,b)とか一般の構造型はコンテナの中身の個数が1個ではない定数なのでうまく
モナド演算を定義できないような気がする
リストモナドの中身は任意個数。IOモナドは1個固定。
0713デフォルトの名無しさんNGNG
眠れない…
えーと、要するに、必然性は無いけど、
モナドということにすると [a] >>= (\e -> return (f e)) みたいな便利機能として使えるので
モナドということにしてある、ということですか。

>>711
よく見て無いのですが、ライブラリリファレンスにMutable ArraysとしてIOArrayが書かれてますので、
もしリストモナドで一部の更新が可能なら、こんなもの用意しないと思うので、それは違う気が
(我ながら無茶苦茶な論法だ…)
0714デフォルトの名無しさんNGNG
あれもこれも、Haskellの和書が出ないのが悪い。
0715デフォルトの名無しさんNGNG
>>707
すまんが、そういうふうにする以外の方法が自分には想像できない。
doも普通の再帰なので問題はなさそうだが?
>>711
リストモナド≒内包表記
副作用を発生できるモナドはIOモナドだけです。
>>710
ListとMaybeだけだね。
試しに、(a, b) でMonadを作ってみたが…きつい。
---
instance Monad ((,) a) where
(>>=) (sub, main) f = (sub, main') where
(sub', main') = f main
return main = (bottom, main)
bottom = bottom
test = do x <- (("a", 2), 1)
y <- return $ x+1
return $ y*2
---
*Main> test
(("a",2),4)
0716デフォルトの名無しさんNGNG
だれとはなくに
「型構築子」IO はモナドだけど IO a はモナドじゃないよ。
「型構築子」[] はモナドだけど [a] はモナドじゃないよ。
0717デフォルトの名無しさんNGNG
>>713
haskellのリストやアレイはは一部を変更すると全部コピー。
というのは、そのデータ(リスト等)が他の場所で使われるかもしれないから。

一部を変更したということがそのデータを使うプログラムの他の部分にも
わからないといけない。
そのためには、使う部分全部をそのデータの内部状態をあらわすモナドでくるんで
おく必要がある。
# 変更し終わったら、それはモナドの外に出してもいい。

>>715
701の件については、誤読していた。それ以降の式、ってのが何を指すのかわからない。

それはともかくとして、
(IO/状態)モナド内の計算の実行は、手続き型と同様にできるとおもうけど。

>  副作用を発生できるモナドはIOモナドだけです。

haskellプログラムがわからみればIOも他のモナドもかわらない。
プログラマから見たときも結局は同じこと。謎の内部状態をもつ
モナドを受渡しながら処理を順次実行するわけだから。
内部で定義されたモナドでもそのモナドの性質をみとおさなければ、
副作用と同様でしょう。
0718デフォルトの名無しさんNGNG
別のいいかたをすれば、711が書いているように、普通一部を変更すると
副作用が出るわけで、関数型言語では一般にはそれができない。

だが、その副作用/状態を追跡するモナド(STArray,IOArray等)を引数と
して渡し続けながらの順次計算であれば一部変更もできるわけだ。
0719デフォルトの名無しさんNGNG
だれとはなくに
「データ構築子」はファーストクラスだけど
「型構築子」はファーストクラスじゃないよ。
0720デフォルトの名無しさんNGNG
だれとはなくに
モナドは「型構築子」の性質であって、データの性質じゃないよ。
0721デフォルトの名無しさんNGNG
>>717
まず、すまんかった。
確かに中身を見なければ副作用を起こすことは可能だ。そちらの言う通り。

以降の式だが、自分は a >>= (\x -> b) の式に出てくるλのことだと思っている。
そして、715のそういうふうにとは、どでかい合成関数を作ってからそれを実行するということ。
もちろん、遅延実行されるので、少し作ってはそれを実行してというふうになると思っているが。

>(IO/状態)モナド内の計算の実行は、手続き型と同様にできるとおもうけど。
main = sequence_ $ reverse $ [putStr "\n", putStr "a", putStr "b"]
こう言うのはどうする…?
…特殊すぎるか。他は最適化されててもおかしくないやね。
>>718
少なくともIOArrayはIOモナドの一部であってモナドそのものではないと思うが。
>>719
しかし少なくともカリー化はされている。
0722デフォルトの名無しさんNGNG
>>715
サンプルとして活用させていただきます
で、勝手にインデント。

module Main where

instance Monad ((,) a) where

 (>>=) (sub, main) f = (sub, main') where
  (sub', main') = f main

 return main = (bottom, main)

bottom = bottom

test = do
 x <- (("a", 2), 1)
 y <- return $ x+1
 return $ y*2

>>721
表現が悪くて申し訳ないです。そのつもりでした。do A; B… と書いた時のB以降です。
0723デフォルトの名無しさんNGNG
data Id a = Id a deriving Show
instance Monad Id where
   Id x >>= f = f x
   return = Id

foo :: Int -> Id Int
foo arg =
  do { x <- ID arg
     ; x <- ID (x * 2)
     ; x <- ID (x + 1)
     ; return x }
というHaskell のプログラムと、
int
foo (int arg)
{
   int x;
   x = arg;
   x = x * 2;
   x = x + 1;
   return x;
}
は、そっくり。上は副作用をつかってないですけど、
下は副作用をつかっています。
そんだけ。

int
0724デフォルトの名無しさんNGNG
>>723
ID じゃなくて Id
0725デフォルトの名無しさんNGNG
突然ながら、FFIを試してみたり…

#include "hsFFI.h"
#include <stdio.h>
void __stdcall print_hex(HsInt a)
{
 printf("%x", a);
}

foreign import stdcall "print_hex" printHex :: Int -> IO ()
main :: IO ()
main = do printHex 1234

>ghc ffi.hs ffi_c.hc -fglasgow-exts
Warning: retaining unknown function `_print_hex@4' in output from C compiler

動くんですけど、このWarningが消せない…
0726デフォルトの名無しさんNGNG
>>720
>  以降の式だが、自分は a >>= (\x -> b) の式に出てくるλのことだと思っている。
>  そして、715のそういうふうにとは、どでかい合成関数を作ってからそれを実行するということ。

よくわからない。ダイナミックに関数を作ると?

> ...
>  main = sequence_ $ reverse $ [putStr "\n", putStr "a", putStr "b"]

関数ポインタの配列をつくっておいて並べ替えるのかな。

>>721
>  少なくともIOArrayはIOモナドの一部であってモナドそのものではないと思うが。

確かに、モナドはそれぞれIOとSTだ。
モナドの一部っていうのもよくわからないが…
monad-awareという感じか。
0727デフォルトの名無しさんNGNG
>>725
__stdcall -> ccall、ffi_c.hc->ffi_c.c

ghc -ffi ffi.hs ffi_c.c
とすると何のWarningもなくコンパイルを通った(Windowsではない)。
0728デフォルトの名無しさんNGNG
誰か Haskell の和書書いてくれよ。
5000円くらいまでなら買うからさ。
和書ないとやる気が出ねぇし、普及なんて夢のまた夢だよ。
0729デフォルトの名無しさんNGNG
Haskellはドイツ語でクシャミの事
0730デフォルトの名無しさんNGNG
>>727
拡張子を変えたら警告が出なくなりました。
よくよく見てみれば.hcってコンパイラが生成したCソース用の拡張子…
どうも、お騒がせしました。
0731デフォルトの名無しさんNGNG
>>729
くしゃみが出るくらいに香辛料の効いたカレーを“Haskell Curry”と云う!?
0732デフォルトの名無しさんNGNG
>>726
>よくわからない。ダイナミックに関数を作ると?
その通り。 (.) が関数を合成するのと同じように。
>関数ポインタの配列をつくっておいて並べ替えるのかな。
引数等を保存しておく必要があるので、それをすると、λと変わらないと思う。

>>722
無理しているので、return a >>= k = k a が成り立たなくなってたりしているので注意。

ついでに、前に作ったモナドをどうぞ。
面倒を少し減らす程度のものですが。
---
module Main where
--type ReadS a = String -> [(a,String)]
newtype ReadR v = ReadR { runr :: ReadS v}
instance Monad ReadR where
 ReadR r >>= fr = ReadR (\str -> [ret| (v,str') <- r str, ret <- fr v `runr` str'])
 return v = ReadR (\str -> [(v, str)])
rread :: (Read a) => ReadR a
rread = ReadR reads
rlex :: ReadR String
rlex = ReadR lex

test :: String -> (Int,String)
test str = head test' where
 test' = do rread
      `runr` str
---
Main> test "125 "
(125," ")
0733デフォルトの名無しさんNGNG
Randomを使ったコードを少し書いて見ました。
毎回の let (r2, g2) = random g1 in … 数字は使うたびに増やす…が面倒だったので、
モナドにすれば好きな時に r2 <- nextRandom とか書けるのかなあ、とか思ったり。
(既にあるのかもしれませんが)

>>732
うう、ありがとうございます。しかし、私のレベルでは何をやっているのかと用途の両方がわかりません…。
0734デフォルトの名無しさんNGNG
>>732
|無理しているので、return a >>= k = k a が成り立たなくなってたりしているので注意。
モナドの法則を満たさなくてモナドといえるの?
0735デフォルトの名無しさんNGNG
module RandomProgression where
import Random
data RandomProgression r a = RP (r -> (a, r))
nextRandom :: (RandomGen r, Random a) => RandomProgression r a
nextRandom = RP (\r -> random r)
instance Monad RandomProgression r a where
 --(>>=) :: RandomProgression r a -> (a -> RandomProgression r b) -> RandomProgression r b
 RP x >>= f =
  RP (\r ->
   let (a, r') = x r in
   let RP b = f a in
   b r')
 --return :: a -> RandomProgression r a
 return value = RP (\r -> (value, r))

書いてみました…instanceでエラーが出ます…わかりません…

↓こんな風に使えたらいいなと思ってる
let (answer, g) = (do a <- nextRandom; return (a `mod` 10)) (mkStdGen 100)
0736デフォルトの名無しさんNGNG
括弧が要るんですね…
instance Monad (RandomProgression r) where
実行用に
eval :: (RandomGen r) => RandomProgression r a -> r -> (a, r)
eval (RP e) r = e r
書き足して
RandomProgression> eval((do x <- nextRandom; return (x `mod` 10)) :: RandomProgression StdGen Int) (mkStdGen 10)
(7,432453652 1655838864)
動いたー!

どうも、スレ汚しごめんなさい
0737デフォルトの名無しさんNGNG
>>733-736
そんなことをする必要はない。

randoms (mkStdGen 1) ::[Int]

のようにして無限乱数列が作れるのだから。
Make use of the power of lazy evaluation !

# あとはそれにmapでもなんでもして加工すればいい。
0738デフォルトの名無しさんNGNG
ハクションと似てなくもないような
0739デフォルトの名無しさんNGNG
>>737
なるほど!遅延評価を忘れてました。
しかしそれでも2個の乱数を取ってきたい時は、let (r1:r2:rs') = rs (以降はrs'から取る) みたく
乱数列を意識して渡していかないといけないような。いや、ずっと書きやすいではありますが。
0740デフォルトの名無しさんNGNG
>>734
知らん。気になるのなら、たとえば、こうすればちゃんとモナドになる。
module Main where
instance (Num a) => Monad ((,) a) where
 (>>=) (sub, main) f = (sub+sub', main') where
  (sub', main') = f main
 return main = (0, main)

>>733
まずちょっと修正...スマソ。
import Monad -- 追加
instance Monad ReadR where
 ReadR r >>= fr = ReadR (\str -> [ret| (v,str') <- r str, ret <- fr v `runr` str'])
 return v = ReadR (\str -> [(v, str)])
 fail s = mzero -- 以下追加
instance MonadPlus ReadR where
 mzero = ReadR (\s -> [])
 mplus (ReadR f) (ReadR g) = ReadR (\s -> f s ++ g s)

用途としては、下のようなコード(やさしいHaskell 8.3節からコピペ)のtuvwxのような変数を書かなくてもよくすること。それだけです。
>readsTree :: (Read a) => ReadS (Tree a)
>readsTree s = [(Branch l r, x) | ("<", t) <- lex s,
>                     (l, u) <- readsTree t,
>                     ("|", v) <- lex u,
>                     (r, w) <- readsTree v,
>                     (">", x) <- lex w]
>          ++
>          [(Leaf x, t) | (x, t) <- reads s]
0741デフォルトの名無しさんNGNG
上のコードのReadR版
>rreadTree :: (Read a) => ReadR (Tree a)
>readsTree s = rreadTree `runr` s
>rreadTree = do "[" <- rlex
>          l <- rreadTree
>          "|" <- rlex
>          r <- rreadTree
>          "]" <- rlex
>          return $ Branch l r
>        `mplus`
>        do x <- rread
>          return $ Leaf x
0742デフォルトの名無しさんNGNG
>>739
なんかまだ手続き型の頭のような気がする:)

関数型だったら結局繰り返しは再帰で書くんだから、
結局こんな感じになると思う。

f 0 result rs = result
f n result (r1:r2:rs) = f (n - 1) (g r1 r2 result) rs

# f 10 [] randomlist のように使う。
# g で欲しいものを計算。
0743デフォルトの名無しさんNGNG
う、結局が二つも。
0744デフォルトの名無しさんNGNG
>> 740
Num a が気になる
0745デフォルトの名無しさんNGNG
GHCって実はfromIntが無かったりします…?
Variable not in scopeと言われるのですが
0746デフォルトの名無しさんNGNG
>744
気にするな。
0747デフォルトの名無しさんNGNG
>>745
fromInteger じゃだめなの?
今のHaskell 98 の Prelude には fromInt は無いのでは。
0748デフォルトの名無しさんNGNG
>>747
いえ、Intからの変換にfromInteger (toInteger n)と書くのが冗長な気がしただけです。
0749デフォルトの名無しさんNGNG
>>748
Enum クラスのメソッドが使えるのでわ。
toEnum :: Int -> a
fromEnum :: a -> Int
0750デフォルトの名無しさんNGNG
>>749
FloatやDouble…のつもりでしたが、それらもtoEnumでいけるのですね。
ありがとうございます。そして遅レスごめんなさい
0751デフォルトの名無しさんNGNG
ニセ手続き型?の基本的なもなどはなんとなくわかった(というか「同じやん」ということで)
けど、それ以外のモナドがワカンネ。
ライブラリ読んでみたりしたけど激むず。

モナド難しいですね。

ニセ手続き型を理解したあとは、どうしたらよいのでしょうか
0752デフォルトの名無しさんNGNG
GHCのText.Regexで
matchRegex (mkRegex "abc") "xabcx"
=> Just []
matchRegexAll (mkRegex "abc") "xabcx"
=> Just ("x","abc","x",[])
これってバグ?
0753デフォルトの名無しさんNGNG
あ、二つ目は書き間違い。
matchRegexAll (mkRegex "abc") "xabcx"
=> Just ("","abc","x",[])
0754デフォルトの名無しさんNGNG
モナドの問題点とかは特に上がってないのですか?
実行効率周りとか。
0755デフォルトの名無しさんNGNG
GHC 6.0.1 Released
0756デフォルトの名無しさんNGNG
>>755
いただきました
0757デフォルトの名無しさんNGNG
素朴な疑問なのですが Haskell の言語使用はかなり頻繁に変わるものなのでしょうか?
2000年あたりに出版された本で勉強しようかと思っているのですが、それいらい大きく変わったとか、
近いうちに大きく変わるとか、ありますか?
0758デフォルトの名無しさんNGNG
基本はHaskell98から変わってないんじゃないだろうか。
処理系によっては独自拡張があることも。
0759デフォルトの名無しさんNGNG
>>758
サンクスコ。
言語仕様は大きく変わってないから、そのころの本で勉強しても問題ないということですね。
がんばって勉強してみます。
(関数型言語は使ったことがないから、なじめるかわからないけど)
0760デフォルトの名無しさんNGNG
確かに言語仕様はほとんど変わっていないが、
ライブラリがかなり違うような気がする。
ライブラリは階層化ライブラリ(Data.Listとか)
で決まりでいいのだろうか。

標準ライブラリ以外になると混沌としか言い様がない
0761デフォルトの名無しさんNGNG
Hugsもライブラリを2通り持ってるね。
0762デフォルトの名無しさんNGNG
http://www.haskell.org/onlinelibrary/
ここにあるのが標準ライブラリーで、足りない部分は、
http://www.haskell.org/libraries/
から探すとか、自作するということですか?

http://www.haskell.org/ghc/docs/latest/html/libraries.html
で、これが HUGS についてくるライブラリー群?
0763デフォルトの名無しさんNGNG
Hugsのライブラリについて書いてあるよ。
http://cvs.haskell.org/Hugs/pages/hugsman/libs.html
GHCは5.04.1=>6.0でライブラリ関係が少し変わっているような気がする。
0764デフォルトの名無しさんNGNG
前スレは約一年に使い切ったのに、part2 に移行して少し停滞してます。
0765デフォルトの名無しさんNGNG
http://www.cse.ogi.edu/〜hook/cse532f99/haskell1.htm
↑赤黒木の実装に感動。
だれか、コンパクトなdelete実装しれ!
0766山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0767デフォルトの名無しさんNGNG
6.0.1入れたらwxHaskellが使えなくなっちまった
0768デフォルトの名無しさんNGNG
win de GUI no hito mada-?
■ このスレッドは過去ログ倉庫に格納されています