5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

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

1 :潜伏していた1:02/02/16 16:55
何とか生き残れました。
前スレ
http://pc.2ch.net/test/read.cgi/tech/996131288/l50

関連 >>2 以降

2 :潜伏していた1:02/02/16 16:56
パート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

3 :潜伏していた1:02/02/16 16:59
関連ありそうなスレ

関数型言語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

4 :潜伏していた1@このスレはパート2です:02/02/16 17:03
やる気を起こさせる読み物

なぜ関数プログラミングは重要か
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


5 :このスレはパート2です:02/02/16 17:08
というわけで、いきなりbottomってしまいましたが頑張りましょうage

6 :デフォルトの名無しさん:02/02/16 17:34
>>4
一番下のやつってやる気起きるのか?
英語苦手なんでちゃんと読めてないのですが
とりあえず Haskell を勧めてはいないような…。

7 :このスレはパート2です:02/02/16 18:35
なんで使ってくれないんだ? という原因を検証しているようですね。
なんで使ってくれないんだ? と訴えられると、
「よっしゃ一肌脱いだる」とか思うのは、俺だけですかねぇ。
#その割に未だ偉そうなプログラムは書けていませんが。

8 :デフォルトの名無しさん:02/02/16 18:44
> なんで使ってくれないんだ?

そんなに Haskell 側に立ってる感じでもないような。

9 :age:02/02/17 11:17
module A where
data A a = A a
f = id
g :: a -> a
g = A.f
h :: a -> A a
h = A .f

10 :デフォルトの名無しさん:02/02/18 12:20
age

11 :デフォルトの名無しさん:02/02/18 15:06
>>8
胴囲
どっちかというと、Haskell擁護者よ。
Haskellを普及させたいなら、もっと頑張れみたいな。

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

と言うわけでParalell Haskell燃えー。(といっても何かは知らんがね)

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

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

13 :11:02/02/18 16:40
いやー。
こんな関数がほしいのよ。(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でも可かな?
このようなことのできる処理系あったら誰か教えて。お願いします。

14 :デフォルトの名無しさん:02/02/18 18:05
Parallel と Concurrent ってどう違うんですか?

15 :デフォルトの名無しさん:02/02/18 22:36
お前はどう違うと思うんだよ

16 :デフォルトの名無しさん:02/02/19 21:28
Hugs98にはWin32グラフィックライブラリがついているが、
コンパイラ(GHC)の方にはグラフィック関係のライブラリない
みたい。Hugsでライフゲーム作ってみたけど、遅いので
コンパイルしたいが、GHC使ったことないので教えてくれ。

アニメーションもストリームにしちゃうから、グラフィックIO
も遅延評価じゃなきゃいけないが、このあたりがライブラリー
の作成を難しくしているのかな。

17 :デフォルトの名無しさん:02/02/21 16:56
なんと、同じ名前で新スレとは!
なんたる!

18 :デフォルトの名無しさん:02/02/21 17:10
>>17
参照の透明性が…(泣

19 :デフォルトの名無しさん:02/02/21 17:23
>>1 は Haskellにお詫びしろ。
貴様は代入を行った(笑

20 :デフォルトの名無しさん:02/02/21 18:07
実はMonadを使って回避されています……ってワケにも行かないか。>>19

21 :デフォルトの名無しさん:02/02/21 18:39
>>17-20
ワラタ

22 :デフォルトの名無しさん:02/02/21 20:29
17=18=19 の自作自演じゃない。
参照透明性くずすな。

23 :17:02/02/21 20:33
私は17しか書きこんでないっ!

24 :22:02/02/21 20:41
失礼。
17−20うまくオチが決まってたので、チャチをいれたくなった(笑)

25 :17:02/02/22 01:37
もしかしたら、再帰呼び出しなのかもしれないな(笑

#だとしたら次スレも同じ名前?(笑

26 :デフォルトの名無しさん:02/02/22 02:55
「おっ、Haskell スレにいっぱいレスが付いてる」と思ったら…

27 :20:02/02/22 04:51
代入と配列(あるいは大きなオブジェクトの部分更新)とMonadの関係について
丁度悩ましい思いをしてるトコなもんで(w。

>>25
その場合、このスレに関する型推論はどうなるのでありますか?(w

28 :面白そうだけど、調べた事ないー:02/02/22 19:53
>>27 やってたやってた、蓬莱軒行った奴がそういうテーマ。

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

多相型と関連付けると、ちいと面倒な結果になりそう...
#真面目に調べたことないけど

29 :20:02/02/23 12:55
>>28
蓬莱研?もしかすると物理的に近所かもしれない……(w。

ちなみに特に関心があるのはその実装と効率なんでスヨ。
今、メインで悩んでる課題ではないんだけどね。

30 :デフォルトの名無しさん:02/02/24 05:33
ghcを使ってちょこちょこ簡単なプログラムを
作って遊んでます。が、しかし!
コンパイルが異常に遅いです。
ghcってHaskellで書いてあるんですよね?
だとしたらHaskellで書かれたプログラムは
遅いということになったりして・・・鬱

実際にghcでアプリケーション作ってる人の
感想を聞かせてください。

31 :デフォルトの名無しさん:02/02/26 14:59
hoshu age

32 :デフォルトの名無しさん:02/02/26 15:00
http://www.mondrian-script.org/
これはなんでしょうか?

33 :デフォルトの名無しさん:02/02/28 04:08
乱数を生成関数では、素直に考えると
参照透明性が確保できませんよね?
(実行するたび帰り値が違うんですから。)

なんとか参照透明性を確保する方法ってないのでしょうか?
誰か教えてください。

34 :デフォルトの名無しさん:02/02/28 04:13
>>32

おおHaskell.NETのBetaすか?
いいですねー。
今度Downしてみよう。

35 :デフォルトの名無しさん:02/02/28 04:26
>>33
「入力」の仲間だと思えば継続(continuation)かMonadかなぁ。
無限リストで乱数列を表し遅延評価というのも、
形式的には面白いが実際に書くと重いだろうなぁ。
まー、擬似乱数を線形合同法とかでつくるなら、
お手軽には直前に出力された数を呼出し毎に渡すとか……。

36 :デフォルトの名無しさん:02/02/28 06:50
>>33
http://www.sampou.org/haskell/library-j/random.html
ほとんど>>35の言う通りのやり方。

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

そこまで重くなるとは思えないけど?
というか、他の部分も遅いだろうから、
特別その部分が遅い気はしないだろうっていうほうが正しいか(w

37 :33:02/02/28 13:23
>>35 >>36
お答えいただき有難うございます。
>ttp://www.sampou.org/haskell/library-j/random.html

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

それにしてもHaskellのIO型って変ですね。(名前が)
非決定なものは、すべてIO型なんですね。
うーん、もっと良いネーミングしてほしい。

38 :デフォルトの名無しさん:02/02/28 13:35
Linux の /dev/random みたいなものかと

39 :デフォルトの名無しさん:02/03/01 09:20
>>36
重くなるっていうか、乱数って最新の一個だけが必要なことが多いから
過去の値が全部リストになって残ると、沢山利用した時にメモリを無駄に圧迫するかなと。
GCで回収されるならまだいいんだけど。

40 :デフォルトの名無しさん:02/03/01 15:50
>>39
参照されていないオブジェクトは回収されないんですか?


41 :デフォルトの名無しさん:02/03/02 04:02
>>40
クライアントは再帰中なので、
生成された乱数は、参照可能だからかな?

そりゃ、回収されんわな。

42 :デフォルトの名無しさん:02/03/02 11:59
>>37
IO monadは、最初は本当に入出力用だったのに、
後からいろいろと付け足したのだと思われ。
別々のmonadにすればいいじゃん、と思うかもしれないが
一緒に使いたくなったときに困る。
monadの合成は、理論的に自明じゃない問題があるので。


43 :デフォルトの名無しさん:02/03/02 13:59
乱数乱数って普通言うけど、実際は乱数系列のことでしょ
だから>>36のやり方は別に特殊じゃないよ。


44 :デフォルトの名無しさん:02/03/02 14:10
>>41
末尾再起なら回収できないかな?

45 :デフォルトの名無しさん:02/03/02 14:43
つーか、素直にIO monadな>>36使え。

末尾再起じゃなくて乱数リスト回収できない事気にするくらいなら、
リストよりでかいスタックを解放するようにプログラム書き換えろ。
sagesage

46 :デフォルトの名無しさん:02/03/05 18:35
たまには age ておこう。

47 :言語障害なんです:02/03/08 04:49
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 がやたら多いという罠

48 :デフォルトの名無しさん:02/03/12 14:32
Haskellのモナドは正直言ってかったるい

49 :デフォルトの名無しさん:02/03/13 07:58
age

50 :デフォルトの名無しさん:02/03/13 09:04
あーそうだ haskell もやらなきゃ..


51 :デフォルトの名無しさん:02/03/19 22:40
質問ですいません。
「lambda lifter」って、どういう処理なんでしょうか?
局所関数(関数内の関数)を展開して外側の関数と一体化する処理らしいですけど
実行速度改善のための最適化処理の一種だと考えてよいのでしょうか?
http://citeseer.nj.nec.com/lester91modular.html

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



52 :デフォルトの名無しさん:02/03/19 22:42
>>51
Cのインラインと違うの?

53 :デフォルトの名無しさん:02/03/19 23:03
>>52
実行時までどんな関数が来るのか分からない
らむちゃんなんだから全然違うだろ。

54 :無名λ式:02/03/20 00:44
>>51
lambda liftingというのは、
一言で言えば、自由変数を除去する変換の事です。
・funarg問題がなくなる
・環境の扱いが簡単になる
・lazinessの境界がはっきりする
などなどの利点があります。
lifterはその変換器の名前です。

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

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

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






55 :無名λ式:02/03/20 00:46
>>53
> 実行時までどんな関数が来るのか分からない
> らむちゃんなんだから全然違うだろ。

λ式ちゃんは、Lisp野郎ほど酷くないですけどね。
奴の場合、cons, eval, macroと何でもありなので。


56 :デフォルトの名無しさん:02/03/20 01:04
> # 今やMicrosoft Research(CLI!)のSimon P. Jonesのが一冊、

http://research.microsoft.com/~simonpj/Papers/papers.html
ここ (の一番上のとこ) から落とせるやつですな。

57 :無名λ式:02/03/20 10:30
http://research.microsoft.com/~simonpj/win32-cheat.html
これ面白いよね。この作業苦痛じゃないのかな...

58 :デフォルトの名無しさん :02/03/20 12:17
>>57
なんだか大変そうですね。これホントに自分でやってるのかな?(藁

59 :デフォルトの名無しさん:02/03/21 16:58
仕事でcygwinを強いられるSimon萌え!

60 :デフォルトの名無しさん:02/03/21 21:05
論文発表打ちage

61 :デフォルトの名無しさん:02/03/26 05:40
>>54
コンビネータ、結合子ですか?
圏論?λ理論の話でしたか?
うーん難しい。


62 :デフォルトの名無しさん:02/03/26 23:57
>>61
理論的には難しいとおもうけど、
"Implementing Functional Languages: tutorial"
には実装についてわかりやすく書いてありますです。

63 :デフォルトの名無しさん:02/03/27 00:00
>>62
サイモン パイソン ジョーンズさんがM$用に書いたやつだよね?
どのチャプターに書いてあります?

(ファイルは持ってるんだけどねー。軟弱ものなので読んでません。)

64 :デフォルトの名無しさん:02/03/27 02:13
> Peyton
ペイトン

65 :デフォルトの名無しさん:02/03/27 09:17
>>63
Lambda lifting については 6章
コンビネータ実装のはなしは
"Implementation of Functional Programming Language"
というよく似た名前の本の方でした。これも、どこかのWEBサイトで公開
されてたとおもうですだす。

66 :デフォルトの名無しさん:02/03/28 04:41
>>65
"Implementation of Functional Programming Language"
本の方は簡単に見つかったけどなー。
判らない。くそー。

67 :Super Combinator:02/03/28 10:27
>>66
何がわからないのか、話してみれば?

68 :デフォルトの名無しさん:02/03/28 10:28
Peyton Jonesは前に学会で会ったとき、冬のロンドンを裸足で歩いてた…。
別に変人じゃなくてナイスガイなんだけど。発表は楽しいし。

69 :66:02/03/28 22:37
>>67
コンビネータといえばCL式
どんなCL式でもIKSを組み合わせたものまで分解できるらしいけど
どうやって?

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

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

でも相手にしないでください。
頭正規形(hnf)って何?といぐらいのレベルですから。
ラムダ理論も知らないんですから。


70 :Super Combinator:02/03/29 09:40
>>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のβ簡約をメモリ参照で直感的に理解している人も多いと思うが。

71 :デフォルトの名無しさん:02/03/29 19:23
>>69
I=SKK
Raymond Smullyan の "To Mock A Mockingbird" という本が楽しめます。
翻訳も出ていたと思う。

72 :デフォルトの名無しさん:02/03/29 20:47
>>71
『ものまね鳥をまねる』森北出版 isbn 4-627-01901-7


73 :69:02/03/29 22:43
みなさん、親切な解説有難うございます。
「プログラミング意味論」 横内寛文著
「計算論 計算可能性とラムダ理論」 高橋正子著
と読み理解しようと奮闘中なのですが、計算機屋の私にはさっぱりです。
しかし理論はむずかしーな。
一度ものにしてしまうと効果絶大なんですけどね。
もうちょっと、がんばってみます。

>>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
よさそうな本ですね。購入したいと思います。

74 :Super Combinator:02/03/29 22:49
>>73
> 両方に引数zを渡し

だから'分配器(distributor)'です。
Sはドイツ語だったかの頭文字だったはず。
K=cancel


75 :石敢當:02/04/09 22:39
GHC 5.02.3 がリリースされました。

ただいま amortization の勉強中。
分かったような、分からんような・・・
ということは分かってないんだなぁ。


76 :Super Combinator:02/04/10 00:36
>>75
amortizationは、時間のかかる処理を、複数の操作に対してひとまとめにして、
平均の計算量オーダーを下げる手法のこと。
木、ソートされたテーブル、pure functional arrayなどの
再構成、構造調節などで利用される事が多い。



77 :デフォルトの名無しさん:02/04/10 20:28
amortizationって何ですか?
どういう物なのか興味あるなー。
教えてSuper Combinatorさん。

78 :石敢當:02/04/10 21:57
> amortizationは、時間のかかる処理を、複数の操作に対してひとまとめにして、
> 平均の計算量オーダーを下げる手法のこと。

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

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

http://galois.com/~sof/hugs98.net/


79 :デフォルトの名無しさん:02/04/11 10:18
Cormen, Leiserson, RivestのIntro. Algorithmsに
amortized analysisの章がありますよ.

80 :デフォルトの名無しさん:02/04/11 11:31
たとえば固定長配列に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。


81 :デフォルトの名無しさん:02/04/12 21:11
ttp://www.cs.columbia.edu/~cdo/papers.html
ここに書いてあることかな?
英語が読めない。

82 :デフォルトの名無しさん:02/04/13 19:28
なんか今はnot foundになっちゃうけど、それってChris Okasakiのページだよね。>>81
だったら、そうだと思う。

でもこのスレの人でも、英語は壁になるんだ…。自動翻訳希望?

83 :81:02/04/14 01:11
そうです。
他力本願全開。

84 :石敢當:02/04/14 23:51
> 逆に言えば、最大計算量を考える
> 変わりに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で得られた平均
計算量が、平均ではなくて最大の計算量となるような実装が
いつも得られるのだろうか、ということであるような気が
してきました。

まだ良く分かっていません。変なことを書いていたらごめんなさい。


85 :デフォルトの名無しさん:02/04/15 10:08
>>84
> これは良く分かります。ただ、これだけだと amortization などという
> 言葉を持ち出すまでもなく、単に「平均」ですよね。

「最悪」の場合の1ステップあたりの「平均」ではないでしょうか。

86 :デフォルトの名無しさん:02/04/17 14:32
http://www.teu.ac.jp/kougi/koshida/Prog6/index.html



ない・・・

87 :デフォルトの名無しさん:02/04/17 17:53
http://www.brl.ntt.co.jp/people/mizuhito/CS/

 ↑

ここも講義録だったような気がするんだけど、つながらない・・・

88 :デフォルトの名無しさん:02/04/18 01:13
>>87
http://www.ipl.t.u-tokyo.ac.jp/~mizuhito/CS/

89 :デフォルトの名無しさん:02/04/19 00:40
このスレを見て面白そうだと思い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]

一行入力をそのままエコーすることを意図しているつもりなのですが、何故でしょうか?

90 :デフォルトの名無しさん:02/04/19 00:49
>>89
getLine の型は IO String だが putStr は String 型を貰うので
型エラーになります。(IO が付いているかいないかの違いだけど)
getLine >>= putStr とすれば意図してるように動きます。
「>>= って何?」などと思うのでしょうが、説明するのは大変なので
http://www.sampou.org/haskell/tutorial-j/ などを読んでください。

91 :デフォルトの名無しさん:02/04/22 03:35
色々試しているのですが、次のコードで
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) というのはどういう状態なのでしょうか?

質問ばかりで申し訳ありません。

92 :デフォルトの名無しさん:02/04/22 05:02
>>91
case c of
{'y' -> sel (x + 1)
;'n' -> x
;_ -> sel x}

この式の型は何でしょう?

93 :91:02/04/22 06:35
IO Int …のつもり…です。
それをreturnで返していますから、selの返値もIO Intで、
selの型は Int -> IO Int …

エラーになるということは、間違った理解なのでしょうけれど…

94 :91:02/04/22 06:48
sel (x + 1) と sel x が IO Intなのに、'n' の時の x がただの Int だからいけない…?
とすれば、ただの Int を IO Int に揃える必要があるということですか?

95 :デフォルトの名無しさん:02/04/22 08:29
> 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

96 :91:02/04/22 12:00
以下のコードで動作しました。ありがとうございます。

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を書かなくても、最後の式が返値になるのですね。

97 :デフォルトの名無しさん:02/05/01 14:16
return は関数であって、命令ではない。


98 :91:02/05/01 23:13
IO型にするだけで、脱出はしないということですか?

99 :デフォルトの名無しさん:02/05/02 00:29
返り値という表現に違和感を感じので。

深い意味はないです。return は、返り値を
もって呼び出し元へ帰る命令ではなく、単に
a 型の値を m a 型の値に写像する関数だと
いってみただけです。


100 :デフォルトの名無しさん:02/05/02 00:51
試してみたら、returnの後に文を続けた場合、途中returnに渡した値は無視されて、最後の値が採用されているようです。
成程…Haskellのreturnはreturnしないのですね。

101 :デフォルトの名無しさん:02/05/02 02:43
のぶさんのHaskell-MLに登録してみましょう

102 :デフォルトの名無しさん:02/05/03 01:36
return とか戻り値をCチックに理解しようとしてる時点でもうダメでしょうって
感じかも。関数型言語の発想が根本からわかってない。
IOモナドって一見して普通の手続き型にも見えますからねえ・・

関数型が全くわからない人は、HaskellのまえにMLを経由した方が良い
というのは正しいのかも。

103 :デフォルトの名無しさん:02/05/03 02:08
モナドは手続き型プログラミングの車輪の再発明だって、どっかに書いてあったね

104 :デフォルトの名無しさん:02/05/03 10:55
俺、いつもはMLしか使ってなくてHaskellは詳しくないんだけど、
Haskell(特にGHC)って例外処理とか、入出力じゃない副作用も
どんどんIOモナドに入ってるじゃん。

モナドの合成が理論的に難しいかららしいけど、そのうちに現実的な
プログラムだと何でも一つのモナドの中で書くことになって、ほとんど
MLみたくなったりはしないの?(手続き型言語とまではいわないけど、
「どこでも副作用」って感じで)

105 :デフォルトの名無しさん:02/05/03 15:56
>>104
モナドは副作用じゃないのでOK OK。
逆に言うとMLの利点がなくなってくる。

106 :デフォルトの名無しさん:02/05/03 16:10
ML、Haskellってお互い仲悪いんですか?

107 :デフォルトの名無しさん:02/05/03 16:11
ゆーざーがね

108 :デフォルトの名無しさん:02/05/03 19:18
仲悪いなんて聞いたこともないぞ。
なかはわるくないです。

MLとHaskelは
ちょっと雰囲気は違うような気はしますけどね。
でもまあそれは両方使ってみれば解ることで。

109 :デフォルトの名無しさん:02/05/03 20:43
>106
Haskell-MLというのが有るらしいですYO!

110 :デフォルトの名無しさん:02/05/04 23:53
Haskellは、純粋関数型言語だから
MLの不純さが嫌なのかも?
どうなの?>ALL

111 :デフォルトの名無しさん:02/05/05 00:01
確かにHaskellの処理系の効率が良くなればMLは不要になる。


112 :デフォルトの名無しさん:02/05/05 01:34
MLとHaskellは設計思想自体が全然違う気がします。

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

Haskellは純粋を歌ってはいますが、
結局の所モナドというものに問題を押しこんだだけのようにも思え
美しくないようにも思われます。
仕様もわりとごちゃごちゃしている気がします。
言語の性質上ML並みに速くなる事も難しいのではないかと思います。

113 :デフォルトの名無しさん:02/05/05 03:11
MLで副作用使わずにどうやってI/Oするの?

114 :104:02/05/05 14:26
あーなんか煽りっぽくなっちゃってスマソ。俺はHaskellも大好きだよ。(笑)
WadlerとかPeyton Jonesとか面白い人が多いし。(そういう問題か?)

>>113
一応、MLでもHaskellと同様のmonadicなプログラミングスタイルは可能。
MLだと文法的に面倒で、Haskellを使ったほうが楽だから誰もやらないけど…

115 :デフォルトの名無しさん:02/05/05 14:57
副作用のある関数型言語は
中途半端な感じが払拭できないということでいいのか?

116 :デフォルトの名無しさん:02/05/05 15:21
Ruby >>>>>>>>>>>>>>>>>>> Haskell


117 :デフォルトの名無しさん:02/05/05 17:42
モナドがあまりに手続き型っぽすぎるので、
Haskllを関数型を知らない人に触らせると、
モナドでC言語かよ!ということをやろうとする。
しかして正しく正面玄関から入ろうとすると、難解過ぎる。
MLの方がそういう意味でも適度に関数型な気がする。

純粋関数型を言うならば、遅延ストリームでゴリゴリ書くのが基本に
なってるような言語であるべきかなと思ってみたりする。

118 :デフォルトの名無しさん:02/05/05 18:12
いいんじゃねえの?
多目的言語なんだから。

119 :Super Combinator:02/05/05 23:13
>>104
> Haskell(特にGHC)って例外処理とか、入出力じゃない副作用も
> どんどんIOモナドに入ってるじゃん。

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

IOErrorがIOモナドmoduleにあって、
HaskellがIOError以外ろくに例外をsupportしないだけなんだと思ってたよ。

120 :デフォルトの名無しさん:02/05/06 02:01
勉強中だからよく分かんないけど、state モナドの事?


121 :デフォルトの名無しさん:02/05/06 03:57
MLと(Haskellとも)離れますが、
モナドを使うと、手続き型言語を
関数的に解釈することができますか?


122 :デフォルトの名無しさん:02/05/06 10:53
>>121
「関数的に解釈」の意味がよくわからない。
Haskellでインタープリタが書けるか?
という意味じゃないよね。



123 :デフォルトの名無しさん:02/05/06 11:38
http://sato-www.cs.titech.ac.jp/prism/index.html

124 :デフォルトの名無しさん:02/05/06 12:35
>>122
モナドを使うと、どうみても副作用な操作でもfunctionalな
操作と解釈できるわけですが、それと同じように手続き型言
語のプログラムに純関数的な意味を与えることができますか?
という意味です。

125 :デフォルトの名無しさん:02/05/07 00:50
>>124
Idealized Algolとかいうのがなかったっけ。

126 :デフォルトの名無しさん:02/05/07 01:16
グローバル変数が見当たらないんですが・・・

127 :デフォルトの名無しさん:02/05/07 18:47
>>121 >>124
できません。
強引に無理矢理こじつけることならできるかもしれないけど意味無し。

128 :デフォルトの名無しさん:02/05/07 19:13
>>124
モナドを使えば、代入、逐次的実行、手続き型ライクなI/O、例外などを
純関数型の枠組みで扱える。gotoくらいならもともとモナドに関係なく
等価な純関数型言語に変換することができる。

Cは無謀だがMINIMAL BASICくらいなら、純関数型とみなすことは可能だろ
う。

129 :Super Combinator:02/05/07 20:21
>>124
Denotational semanticsじゃ駄目?
domainの性質がやっかいになるから、いいことないけど。

そもそも「簡単に」できるくらいなら、関数型言語の存在意義が…

130 :デフォルトの名無しさん:02/05/07 22:49
Haskellで書いたプログラムに、関数的意味を与えうるなら、
手続き型の言語のインタープリタを Haskell で書いたら、
その言語の意味を与えたことになる?
ならない?


131 :デフォルトの名無しさん:02/05/07 23:11
>>130
なるんじゃない?
きちんとやれば操作的意味論だろ。

132 :デフォルトの名無しさん:02/05/08 00:35
結局、Haskellは非正格言語なのが問題じゃない?
実際に各項が何時評価されるか?どういう順番で評価されるか?
ということが予測しづらい(できない)からねー。

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

Prologにカットオペレータがあるように、Haskellも競争書き込みで
評価の順序を、ある程度コントロールできる様にしたらよいのかな?

133 :デフォルトの名無しさん:02/05/08 00:39
>>132
?? 問題なのは結果であって、
順番なんてどうでも良いだろう。

順番じたいが望む結果に含まれる
(例えば入出力とかGUIとか)なら、
そこだけモナド使えば良いしさ。


134 :デフォルトの名無しさん:02/05/08 07:47
>>133
133も書いていますがコンピュータの入出力は
ストリームを基本としているものが多いですよね。
しかし、ストリームにとって並び方も結果の内ではないでしょうか?
プログラムは外部と入出力して、なんぼのものだと私は思っています。
ゆえにストリームのようなモノに対して実行順序がコントロールできることは
プログラミング言語にとって重要であると思います。
そうじゃなきゃPrologもカットオペレータなんて付けなかった
と思います。

あと私のような消防には、実行される順序が予測できないと
デバッグしづらいです。(もしかして、こっちが本題か?)

135 :デフォルトの名無しさん:02/05/08 08:13
>>134
ほんとに消防だな。Haskellだって
ストリームの順番が狂うわけはないだろう。

ストリームは「いくらでも長くなりうる列」
というデータだ。関数型の基本はデータの値を
求めることなんだから、モナドなんか用いなくたって
ちゃんと求まる。


136 :チュウボウ:02/05/08 09:56
なんで副作用って困るの? よく聞くはなしでは
 副作用あり=>参照透過性がない=>数理論理的でない
数学って、まったく副作用のない構成になっているの?


137 :デフォルトの名無しさん:02/05/08 10:03
> 数学って、まったく副作用のない構成になっているの?

副作用がなんなのかわかってる?

138 :デフォルトの名無しさん:02/05/08 10:04
副作用が無ければ、デバッグ簡単

139 :チュウボウ:02/05/08 11:10
>副作用がなんなのかわかってる?
オレの理解
 状態という一種の記憶域のようなものがあってその値が
 変わること。

数学ではオートマトンとか除けば、状態のような概念は
知らない。

140 :デフォルトの名無しさん:02/05/08 11:55
>>136
評価順序に依存してるから

141 :チュウボウ:02/05/08 12:32
順序なしで考えるより、順序を指定されて考える方が楽じゃない?

142 :デフォルトの名無しさん:02/05/08 12:34
>>141
そう思えるのはモノが単純な場合だけ

143 :チュウボウ:02/05/08 12:49
状態(もの)と動作(働き)があった方が考えやすい気もする。
主語+述語が人間の頭にあってるような気がする。
(状態があるならば副作用があると思ってる)

ペトリネットなんかかじってみてると、そんな気がしてきた。
ttp://www.aichi-pu.ac.jp/ist/~qua/intropn/intropn.html

144 :デフォルトの名無しさん:02/05/08 15:04
副作用って、関数が値を返す以外の何かの作用を起してしまうことでしょ。
「なぜ関数プログラミングは重要か」に副作用が無い事のよさが力説されてた。
実感湧かなかったが。

145 :デフォルトの名無しさん:02/05/08 18:09
>>143
日本語は主語なんかなくても良い言語だよ。英語カブレめ(w
実際この書き込み(145かな?)のなかに主語のある文は一つもないが、
意味はちゃんと通じるだろ?

146 :5月病:02/05/08 18:24
オレも人並みにSOE本ながめたりして、haskellの理解に
努めたわけよ。モナドの意味もつかもうとしてがんばった
んだけど、あるときふと、こんなに無理して副作用さけよう
という努力はなんなんだろうと感傷的になるわけよ。

147 :デフォルトの名無しさん:02/05/08 18:26
Cでグローバル変数はやめよう、と似たようなもんじゃないの?

148 :チュウボウ:02/05/08 18:35
>>145
>日本語は主語なんかなくても良い言語だよ
おお、そうであった。日本語は述語だけでつうじるのだ。
日本語こそ真の関数型言語であった。なんてわけないか。

149 :デフォルトの名無しさん:02/05/08 18:47
>>146-147
つーか…
プログラムって要するに「入力と出力の関係を記述する」
ってだけで良いはずなのに、状態を持ち出すとよけい面倒に
なることも多いでしょ。


150 :5月病:02/05/08 19:00
モナドを使い、高階関数を使い、入力と出力の関係だけで
ストイックに記述する。そうすると見えるすばらしい世界
を教えてください。

151 :デフォルトの名無しさん:02/05/08 19:02
>>149
> 入力と出力の関係を記述する

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

>>145
主語がなくていいのは主語が明らか(容易に推測可能)な時だけだよ。
フォーマルな文章では日本語だって主語が必要。ここはかなりインフォーマルだからね。
ちなみに英語でも命令形などでは明らかな主語が省略されている。

152 :デフォルトの名無しさん:02/05/08 19:14
>>151
なんで、ストリームやモナドなどではプログラムの動作が完了した時点では
入力が決定して、出力も決定する筈ということに注目して、
実行時に対応関係を組み立てるわけだ。

153 :デフォルトの名無しさん:02/05/08 19:19
無限列から無限列への対応関係を陽に書くことはできないが、
無限列の有限部分列から有限部分列への対応関係なら書ける。
そしてその対応関係が再帰的に定義できているなら、
限りなく計算を続けられる。

ただ、有限部分列の入力から続きを計算する際に何度も同じ計算が
繰り返される場合がある。そういう場合は内部状態としてメモしておけば
計算効率が改善される。

154 :デフォルトの名無しさん:02/05/08 19:21
>>153
現実的にはどんなケースがありますか?

155 :デフォルトの名無しさん:02/05/08 19:39
無限ストリームはメッソドの呼び出しを遅延評価するように
しておけばJavaなんかでも再帰的に記述できるよ。


156 :デフォルトの名無しさん:02/05/08 19:49
>>154
httpプロクシサーバとか。
リクエストは無限列とみなせる。
以前にあったリクエストなら、内部状態としてキャッシュしとけば
速くなる。この場合でも副作用は別に必須じゃないけどね。

157 :デフォルトの名無しさん:02/05/08 20:42
多分もっと技術レベルが高かったら萌えるんだろうなぁ。
今はC、C++、C#、Javaで手一杯だよ・・・

158 :デフォルトの名無しさん:02/05/08 20:47
>>156
副作用が絡むのは配列やオブジェクトの部分更新とかが絡むときが典型。
もちろん更新する値以外も全部複製してしまえば副作用は消せるが、
効率は・・・・・・(ガクガクブルブル)

----

>>155
遅延評価は評価の仕方を「メモ」って行くわけだが、
結構、後でそのメモ・ツリーを辿るのに時間がかかったりする。

159 :153:02/05/08 20:50
>>157
てひひひー。C#は全然把握してないッスー。

160 :デフォルトの名無しさん:02/05/08 21:19
C#っていってももともとは.net frameworkのために作られた言語だからね。
シンタックスだけはJavaに似てるけど。逆に言語から仮想環境を想定するとしたら
どんなものになるんだろね。Hakell、というより関数型言語全般のために
作られたようなもの。あるとしたらどんなもんでしょ?

161 :153:02/05/08 21:28
仮想環境ッスかー?何ッスかー?

162 :デフォルトの名無しさん:02/05/09 01:26
Parallel Graph reduction Virtual Machine (PGVM) ?

163 :134:02/05/09 01:31
>>135
>ストリームは「いくらでも長くなりうる列」というデータだ。
確かに漏れも、そう思います。ストリーム()
しかし、haskellのモデルではIO入出力はストリーム(ぎリスト)ではないですよね。
ということは結局、評価の順序が入出力に影響するはずですよね。
評価の順序を強制するためにモナドというものを利用しているんじゃないですかねー?
どうなんでしょ。

164 :デフォルトの名無しさん:02/05/09 01:48
http://www.yfcbookshelf.com/ml_lisp_scheme.htm
ここの下の所に「Programming Languages:Concepts and Constructs 2/E」
の「日本語訳版を期待」という文字が見えるんですが、今翻訳中なのでしょうか?
もしそうなら超期待!!

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


165 :デフォルトの名無しさん:02/05/09 02:25
>>163
昔のバージョンではストリームでI/OやってたんだよHaskellは。
I/Oエラーが扱いにくくってなあ…

モナドの方が楽だよ。

166 :134:02/05/09 02:43
>>165
本当ですか?
何時の頃のモノなんでしょう?
処理系の名前とバージョンを教えてもらえませんか?

>I/Oエラーが扱いにくくってなあ…
>モナドの方が楽だよ。
たしかに、そうですね。
うーん、モナドから逃げてるのかなー?俺は

167 :デフォルトの名無しさん:02/05/09 02:45
モナドを意味づける(動作を定義する)のにストリーム使えるしね。

168 :デフォルトの名無しさん:02/05/09 02:46
副作用推進派のかた、もっと高階関数を活用してみては
どうでしょう?
関数も各引数を繋ぐための糊だと考えると
副作用が無いほうが嬉しいのでは?

169 :158:02/05/09 02:50
>>164
効率は計算機上での実行の際のことです。
・・・・・・というか効率を考えた動作をガチガチにプログラマが記述する際に
場合によってはあるほうが便利ということですね。

一方、最適化のためのプログラムの解析においては
一般に副作用がないほうがやりやすいのは確かだと思います。
だからこそ代入を消してSSAなんて形式に落としたりもするんでしょうし。

170 :158:02/05/09 02:51
>>168
行列を配列並みの高効率で実装できる方法があるなら是非そう致したいと。

171 :158:02/05/09 02:54
引数で指されるオブジェクトがコピーのコストが気にならないほど小さいうちは
それほど悩ましくないんですが・・・・・・。

172 :デフォルトの名無しさん:02/05/09 02:57
>>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があんまり便利なんで今は全部そっち。


173 :デフォルトの名無しさん:02/05/09 03:04
>>170
配列使えばいいじゃん。副作用なしの。
SISALっていう関数型言語がそうやって、スーパーコンでも
Fortranに負けない性能出してたよ。

Fortran厨は他の言語が書けなかったので普及しなかったが。

174 :デフォルトの名無しさん:02/05/09 08:17
なんかこのスレ人増えたな。

175 :158:02/05/09 09:51
>>173

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

を読んで見てるけど、やたら配列に特化した言語だなぁ。APLを思い出したよ。
サワリの部分を読んでの感想としては、
配列に特化した構文が多すぎるし、拡張性にも疑問が残る。
この言語を実装する上で研究された内容(解析や最適化の技術)は有益そうだが、
それをつかって書けと言われると結構苦痛かも。
CやFortranのソースに混ぜられると言われてもねぇ。

176 :158:02/05/09 10:01
でついでに、「スーパーコンでも」というよりは
むしろ「スーパーコンのために」開発されたようだ。
スパコン以外にも移植はされているようだが、
どうもメインの技術ははデータ並列っぽい気配が。
もっと詳しく読んでみないと判らない部分もあるが、
そうなると今時のマシンの記憶階層と
マッチするかどうかは些か怪しげ。

177 :Super Combinator:02/05/09 11:43
MonadとInfinite listの関係について知りたければ、
"Comprehending Monads", Philip Wadler読め。面白い。

178 :デフォルトの名無しさん:02/05/09 13:23
>>176
文句の多いヤツだな。


179 :デフォルトの名無しさん:02/05/09 15:07
>>158>>173 を「Sisal 使えば?」と読んでそうな感じだが
>>173 は「Haskell の副作用無しの配列使え」と言ってるのだろう。たぶん。

180 :デフォルトの名無しさん:02/05/09 20:50
>>179
どんな実装してるんでソ。>「Haskell の副作用無しの配列使え」
私が読んだ何件かの「副作用なし配列」の論文は皆頑張っていたけどヤパ−リ
オーバーヘッドが大きくて生の配列ほどには早くない・・・・・・。

181 :デフォルトの名無しさん:02/05/09 21:06
>>132
>Prologにカットオペレータ
カットオペレータ思い出した。これでProlog嫌いになった。
ところで、Prologも関数型かな? 副作用ないみたいだし。
真偽の2値のみを返すと考えられるかな。もっとも偽の値が
返ればストップするので真のみ返るが。

182 :デフォルトの名無しさん:02/05/09 21:22
>>181
関数型じゃないね。論理型。
項の「値」を求めてるわけじゃない。
定理を満足する変数の値の組(代入)を求めている。

両方を組み合わせた関数論理型ってのもあるけど。

183 :第5世代はどうなった:02/05/09 22:51
>>182
論理式の値を求めるのでなく、妥当な推論をするんだった。
unificationできなきゃ終わりという形式だったね。

Hugsのライブラリーに簡単なPrologあるね。
unificationなんかはもともとhaskellにあるから、
簡単に実装できるようだ。
そういえば、カットオペレーターもhaskellで実装
してたかな。


184 :デフォルトの名無しさん:02/05/10 00:36
haskellは非正格言語だからデバッグし辛いのでは?
副作用がありまくる手続き型言語や正格言語ではデバッグで
苦労しない。というかデバッグしやすい。

非正格言語の優秀なデバッガって無いからね。
一つでもモデル(非正格言語のデバッガのね)が出来ればね。

185 :デフォルトの名無しさん:02/05/10 03:55
Mondrianって言語がHaskellをコンパクトにして
OO対応にしたような言語で、.NETにも対応してるらしい
んだけど、この言語ってどうですか?
http://www.mondrian-script.org/

186 :デフォルトの名無しさん:02/05/10 03:57
>>184
ていうか、副作用が無いってのはようするに
思わぬバグが混入しないようにする効果があるわけだから、
デバッグ以前にバグが混入しにくいのでは?

187 :デフォルトの名無しさん:02/05/10 04:05
代わりに呼び出し関係が入り組んでくるからねぇ。>>186
やっぱ銀の弾丸はないもんだよねぇ。

188 :デフォルトの名無しさん:02/05/12 02:28
>>186
でもバグが無くなる訳ではないでしょ?
仕様のバグという根絶不可能なバグがあるんだから。
やっぱデバッガ必要でしょ。

189 :デフォルトの名無しさん:02/05/12 10:10
>>188
既存のデバッガ的な考えは合わないよね。

190 :デフォルトの名無しさん:02/05/12 19:07
>>184
副作用がないので
Unit Test あたりが向いてるかも。

191 :デフォルトの名無しさん:02/05/13 22:37
http://www.haskell.org/libraries/#testing
のあたりだろうか。

192 :デフォルトの名無しさん:02/05/13 22:39
>>188
仕様のバグとデバッガが関係あるんですか?

193 :デフォルトの名無しさん:02/05/13 22:47
副作用が無いんだから、
コードの打ち間違いと理論にだけ気をつければ
やっていけます。

194 :Super Combinator:02/05/13 22:57
>>192
帰納推論系の人たちで、
間違った具体例の指摘から仕様を直したり、
なんて事が流行ったよね?

そのengineのUI programはdebuggerと呼ばれることが多かった。


195 :デフォルトの名無しさん:02/05/13 22:59
なんじゃそら
屁理屈か

196 :デフォルトの名無しさん:02/05/14 16:02
つまり、従来のデバッガの役割は
非常に少なくなると言うことでいいのか?

197 :デフォルトの名無しさん:02/05/15 00:14
デバッガの使い道ってバグを取るためだけの物かなー?


198 :え?:02/05/15 00:35
デバッガをバグ取りに使わないの?

199 :デフォルトの名無しさん:02/05/15 01:06
>>198
プログラミング言語の前に日本語を勉強尻。

200 :え?:02/05/15 01:16
>>199
君こそ根。

201 :デフォルトの名無しさん:02/05/15 01:24
Stream IOを勉強した頃は、同期関係の bugがあったら取り難そうだなあ、
とおもた。
Monadになったら改善できるのかしらん?

202 :デフォルトの名無しさん:02/05/15 01:28
>>198 はすさまじいアフォ


203 :デフォルトの名無しさん:02/05/15 01:28
>>201
並列処理の話?

204 :え?:02/05/15 01:29
>>199 は、すさまじいエロ

205 :デフォルトの名無しさん:02/05/15 01:38
>デバッガの使い道ってバグを取るためだけの物かなー?
他に使い道は?

206 :デフォルトの名無しさん:02/05/15 02:30
>>204 ウザイ
「バグ取りの他に使う」と「バグ取りに使わない」の
区別もつかない糞は小1からやりなおせヴォケ

207 :デフォルトの名無しさん:02/05/15 12:22
>>206
その前にお前は>>205の質問に答えろよ。

208 :デフォルトの名無しさん:02/05/15 13:45
静的なプログラム検証ツールはデバッガの範疇に入るの?
こういうものが作りやすいのが関数型言語の特徴って言われてるから
そっちに期待しちゃうな。あくまで素人の考えだけど。

209 :C厨房:02/05/15 14:01
lintはデバッガって言うか?

210 :デフォルトの名無しさん:02/05/15 14:24
なんでHaskellスレは厨房がワラワラと寄ってくるんだろ。
無視できない何かがあるんですかねー。

211 :206ではないが:02/05/15 14:28
関数型言語にあてはまるかどうかは知らんが、
他人が書いたプログラム(またはライブラリ)を理解するために
デバッガを使って動作を見るのは、けっこうよく使う手だと思う。

>>208
普通は静的な検証ツールはデバッガには含めないと思うけど、
参照透明性の高い関数型言語では、静的/動的の境界はどう定義するんだろう?
例えば多相型の型エラーをデバッグするのって、静的なのか動的なのか…


212 :デフォルトの名無しさん:02/05/15 14:42
言語理論に比べて処理系のセオリーが
弱い気がするのは気のせいでしょうか?>>211

213 :デフォルトの名無しさん:02/05/15 15:27
>>210
お前のような厨房がな。

214 :201:02/05/16 00:31
>>203 並列って言うか、そもそも関数型言語は逐次処理でもないじゃん。
木の好き勝手なところを簡約していくっていうか。
そでで再帰的に定義された無限リストの簡約とかまちがうとこわいな。と。
P.Wadlerの入門書にもそれがらみの話あったよねえ?


215 :デフォルトの名無しさん:02/05/16 01:21
関数プログラミングでは、動作手順を記述するわけではないので、命令プログラミングの
動作をステップ実行する従来のデバッグ手法のイメージとはあいいれないかも。

でも、計算順序を無理矢理いれこむ、モナドIO使いまくりのプログラミングなら
命令プログラミングとおんなじだから、print デバッグができるよ。


216 :デフォルトの名無しさん:02/05/16 01:39
Windowの表示とかやる場合はモナド使うんですか?
関数型でイベント駆動処理を書くのって、
ちょっと想像できないんですが。

217 :デフォルトの名無しさん:02/05/16 13:57
Fudgetあげ
ようとしたけど古いから sage


218 :デフォルトの名無しさん:02/05/16 14:49
>>216
GTK+HS のサンプルコードとかみてみれば?


219 :デフォルトの名無しさん:02/05/16 17:00
>>216
モナドによるI/Oのコードをじっとみつめると
入力列内の文字種に応じて呼ばれるハンドラの集まりとも見えてくる。
それがメッセージ列に変わったと思えば書けそうな気がしてくる。

220 :デフォルトの名無しさん:02/05/17 06:30
>>205
処理系の実行過程の確認
最適化の結果、プログラマーの予想もしないプログラムに変化したりしないとか
その確認をする。勉強にもなるね。
某本にもデバッガでは、シングルステップを使えと載っていた。目から鱗。

221 :デフォルトの名無しさん:02/05/17 11:20
>>215
GHCか何かだと、unsafeとか何とかいうモジュールに、
どこでもprintできる関数がなかったっけ。
まさにprintfデバッグのための抜け道として。

222 :デフォルトの名無しさん:02/05/17 13:19
>>220
それは要するにデバッガがアナライザだって言ってるだけでは?
そういうのとは微妙に話が違うような気がするなー。
つまり、デバッガにはそういうブラウジング機能とは別に
何かあるって言ってるんだろ?

223 :デフォルトの名無しさん:02/05/17 17:10
>>222
いや、デバッグ以外に使い道があるかどうかって話だろ?
だからアナライザとして使ったり、ってのも答えとしてアリだろ。

224 :デフォルトの名無しさん:02/05/17 18:54
ナスです。

225 :デフォルトの名無しさん:02/05/18 05:44
ウリです。

226 :デフォルトの名無しさん:02/05/18 05:45
デバッガっでようするにアナライザだろ。
デバッガがバグを指摘するわけじゃなし。

227 :デフォルトの名無しさん:02/05/18 13:13
>>226
書くのが遅い

228 :デフォルトの名無しさん:02/05/19 20:37
>>221
遅延評価だと、どのprintが先に実行されるかわかんなくねえ?
そんなんでデバッグできるのか?

229 :デフォルトの名無しさん:02/05/19 21:05
>>228
何をデバッグしたいかによるけど。

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

まあprintを使うってことは順序も気にするんだろうから、
もともと$!やseqを使いまくってるんじゃないの?

230 :haskell:02/05/26 07:37
age

231 :デフォルトの名無しさん:02/05/26 13:54
高階関数に詳しくなりたいので教えて。

232 :Super Combinator:02/05/26 14:22
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
あたりで。

233 :デフォルトの名無しさん:02/05/26 18:09
まさみさまがそんな本書いているとはしらなんだ..
竹内先生の Lisp本もじつは読んでないんだよなあ。


234 :デフォルトの名無しさん:02/05/26 20:36
日本語で書かれたHaskell本はいつ頃出ますか?
SMLだって出てるのに……。

235 :デフォルトの名無しさん:02/05/26 22:00
>>234
日本のHaskellユーザの数が、初回印刷部数(200)を越えたら。

236 :デフォルトの名無しさん:02/05/26 22:42
ユーザの数はどうやって数えるんですか?

237 :デフォルトの名無しさん:02/05/26 23:11
うちの研究室だけで10人はいるんだから簡単に超えそうなもんだけど(藁

238 :デフォルトの名無しさん:02/05/26 23:14
>>237
そこが特別なんじゃないの?

239 :デフォルトの名無しさん:02/05/26 23:31
じゃ、漏れが布教用に3冊買ってやるから、早く出してくれよ。
訳本でいいからさ。

240 :デフォルトの名無しさん:02/05/26 23:46
つーかさ、200位だったら、
いろんな図書館に要望しまくれば、
なんとかなるんじゃないの?

241 :デフォルトの名無しさん:02/05/27 00:06
200じゃだめみたい。
http://www.onweb.to/ken9/log/039.htm

242 :デフォルトの名無しさん:02/05/27 11:55
>>237
ここのところ素人も増えてるぞ>オレオレ


243 :デフォルトの名無しさん:02/05/28 02:43
有明で売れよ! ってことですか?


244 :デフォルトの名無しさん:02/05/28 10:52
>>243
東京ビッグサイトの巨大同人誌即売会サークル抽選当選しますた。
でもジャンルはプログラミング言語とはホド遠いけど(w。

245 :デフォルトの名無しさん:02/05/28 22:01
>>244
適当でいいからHaskell本もきぼんぬ
買いに行くから(藁

246 :244:02/05/29 14:49
ウチはなんと女装本だぞ。それでも買いに来られるか?(w

って、実際問題としてHaskell本を作る余力はなし。

247 :デフォルトの名無しさん:02/06/04 16:02
Haskell本かどうかは分からんが、
R. Birdの「関数プログラミング」第2版を翻訳して出版して欲しい。
流れで近代科学社に。

248 :デフォルトの名無しさん:02/06/04 19:43
今売ってる「関数プログラミング」も、
みなしHaskell本では。

249 :デフォルトの名無しさん:02/06/04 22:27
ぶっちゃけた話、古いわけよ。

250 :デフォルトの名無しさん:02/06/05 00:02
で。
結局、日本語のHaskellの本て有るんですか?
無いんですか?
(というのか無いのか?)

251 :デフォルトの名無しさん:02/06/05 02:13
>>237
おどろき。
どんな研究なんだ!?

252 :デフォルトの名無しさん:02/06/05 15:33
>>237
ならむしろおまえの研究室で発行しる!

253 :デフォルトの名無しさん:02/06/05 21:53
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.

大げさだな・・・

254 :デフォルトの名無しさん:02/06/05 22:30
うまいこというな〜

255 :デフォルトの名無しさん:02/06/06 21:13
女装+Haskell本期待age


256 :デフォルトの名無しさん:02/06/06 23:28
「女装しながら覚えるHASKELL」


257 :デフォルトの名無しさん:02/06/06 23:29
「HASKELLによる女装プログラミングの理論と実践」

258 :Super Combinator:02/06/07 07:40
Mocking Bird, "Introduction to Female Attire using Haskell", Price Sale, 2002.

259 :デフォルトの名無しさん:02/06/07 13:06
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.


260 :デフォルトの名無しさん:02/06/07 13:20
ネタスレ化か?

261 :デフォルトの名無しさん:02/06/07 22:26
女装した場合には、その人の参照の透明性はどう確保されるのでしょうか?

262 :デフォルトの名無しさん:02/06/07 22:34
アブノーマルな野郎は消えろ。

263 :デフォルトの名無しさん:02/06/12 09:48
>>216
FranTk

264 :デフォルトの名無しさん:02/06/13 16:21
HTk

265 :デフォルトの名無しさん:02/06/13 21:34
>>261
女装は代入ではありません。ラップするだけです。
本人への参照はそのままにしてください。

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

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

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

>>262
頑健なソフトウェアを構築するには
例外の存在をなかったことにして無視してはいけません。

266 :244:02/06/13 21:37
>>265もね。

267 :デフォルトの名無しさん:02/06/13 23:55
下らんこと書くな。
つまらんし。

268 :◆A2MadQ16 :02/06/14 04:28
つまらんと不満をいうよりも進んでネタを振りましょう。>>267

269 :デフォルトの名無しさん:02/06/23 15:09
おい>>1よ 聞いてくれ。
昨日、母の葬式に出たんです。享年54歳。
そしたらなんか自分、涙が一滴もこぼれないんです。
で、よく見たら会ったこともないような親戚のおばさんですら泣いているんです。
もうね、アホかと。馬鹿かと。
俺な、親の死を目の前にして放心してんじゃねーよ、ボケが。
目の前に人が死んでるんだよ、母親が。
なんか親子連れとかもいるし。一家4人で葬式か。ほんとありがとう。
パパは息子さんに挨拶してくるから車で待ってなさい、とか言ってるの。いい親父だな。
俺な、親が死んでんだからもっと泣けと。
葬式ってのはな、もっと殺伐としてるべきなんだよ。
死に化粧をみた瞬間いつ涙があふれてきてもおかしくない、
泣くか叫ぶか、そんな雰囲気が普通なんじゃねーか。オレ、なんなんだよ。
で、やっと葬式が終わったかと思ったら、なんか次々と母のことが思い出されるんです。
そこでまたぶち切れですよ。
あのな、今さら思い出したところで意味ねーんだよ。ボケが。
得意げな顔して何が、今度の休みには帰るよ、だ。
俺は本当に休みに帰るつもりだったのかと問いたい。問い詰めたい。小1時間問い詰めたい。
俺、適当に親との距離をとりたかっただけちゃうんかと。
親不孝者の俺から言わせてもらえば今、若者の間での最新流行はやっぱり、反抗期、これだね。
親ってのはいつまでも生きているもんだと思っている。これがガキの考え方。
親の期待をかなえたつもりで一人暮らし。そん代わりコミュニケーション少なくなる。これ。
で、「少しだけ仕送りいれといたから」 「ああ、無理すんなよ」。これ最期の会話。
今になって後悔ばかりが思い出される、諸刃の剣。
まあお前ら若いもんは、ほんの少しでもいいから親孝行しなさいってこった。

270 :デフォルトの名無しさん:02/06/23 21:05
>>256 それは激しく同意。
 つうか、がっこで関数言語やってた奴が、
 仕事でオブジェクト指向の世界に戻されると、
 「このオブジェクト指向言語の型システムは...」とか、
 「RDBの動的型が云々...」って事を無意識に考えてしまって、結構ハマるんだよね。
 そーゆー意味で、関数言語関係者を招聘したMS Researchの今後に期待

271 :デフォルトの名無しさん:02/06/23 23:26
>>270
すまん、>>256でいいのか?

272 :デフォルトの名無しさん:02/06/24 01:02
>>270

というわけでこのスレでは Simon P.J. 先生を「サイモン博士」と
呼ぶことを漏れは提案したいっすけど駄目っすか?


273 :デフォルトの名無しさん:02/06/26 00:42
Haskellは東大工学部の一部でデフォルトの授業用言語になってて、
そのせいで全国の工学部(の一部)の授業に拡散・伝染してるから、
1000部ぐらいすぐに出ると思ってたんだが、どうよ?
女装じゃ無理かもしれんが…(それとも女装のほうががいけるか!?)

274 :デフォルトの名無しさん:02/06/26 07:04
女装って何のこと?

275 :デフォルトの名無しさん:02/06/26 09:19
「 Haskell を 1.25 倍使うコピー本」でどうだ。
売り子が女装でなくてじょせーだと嬉しい、ってオイ>漏れ


276 :K:02/06/26 20:00
>>273
うちのことだな>東大工学部の一部
講義で教えてもらうまで名前も知らなかった。
日本語の解説書さえあれば使いたい言語なのだが>Haskell

277 :デフォルトの名無しさん:02/06/26 20:52
>>276
みんなそんなもんか。
私は大堀先生に感化されてML使ってる。

278 :デフォルトの名無しさん:02/06/27 00:01
>>275
女婿だと嬉しいの?

279 :!275:02/06/27 00:48
うん、嬉しい。
出来ればレイヤーさんきぼ。

280 :デフォルトの名無しさん:02/06/27 22:54
最近のCPUは、条件分岐がたくさんあると頻繁に
分岐予測ミスが発生してストールであぼーんな訳ですが、
関数型言語って手続き型に比べてその辺どうなの?
ガードの存在って影響ある?
CMOVccとかSETccとか使ってくれるのかな。




281 :275:02/06/29 11:01
>>280
予測が当たりまくるタイプの条件分岐なら、
問題無いという話を,漏れは聞いたことがある.

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

漏れの直感ではイヤソなタイプという気がする.
GHC はバージョンupが烈しいんで,最近の奴は
自分にはようわからん.ココは Haskell 板なんで
Haskell の話と思ったが,もしかして strict な
奴の話も必要 ?


282 :デフォルトの名無しさん:02/06/29 17:29
>>280
SETccって何?

判定と分岐を分離して、間に命令をはさむDeleySlotの一種のような
ものと勝手に想像したがどう?

283 :Super Combinator:02/07/01 00:39
SETcc: 条件付き定義命令。
CMOVcc: 条件付き移動命令。

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

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

もちろんvarはregister割り当てされてるのな。


284 :デフォルトの名無しさん:02/07/01 02:19
ARMとかに最初っからついてるやつですな。
x86にも最近のはついてるときいて感心した私。

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

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



285 :デフォルトの名無しさん:02/07/01 07:52
>>284
ネタとは言い切れん。
いい加減に今のアーキテクチャでのクロック向上ってのも物理的限界が
見えてきたしね。

286 :デフォルトの名無しさん:02/07/01 15:16
>>285
そうだそうだ。(煽)
ついでに非同期って正義 ?

Crusoe の内部論理では活かされてるとか
聞いたことがあるけど > 非同期


287 :デフォルトの名無しさん:02/07/11 09:01
http://univ.ygu.ac.jp/e-itoh/2001/9805126-shimizu.pdf
http://www.microsoft.com/japan/msdn/academic/ark/Webfiles/languages.htm#mondrian

288 :デフォルトの名無しさん:02/07/11 09:14
http://www.mail-archive.com/haskell@sampou.quickml.com/

盛り上げれ

289 :石敢當:02/07/11 21:56
GHC 5.04 がリリースされました。


290 :デフォルトの名無しさん:02/07/12 01:40
さっそくビルド、あげ!

291 :デフォルトの名無しさん:02/07/16 00:36
質問くんで、すいません。
どなたか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/ のどこかとかが参考になりそうですが
どれが良いのやら。さっぱり。
だれか基礎と応用の両方を教えていただけないでしょうか?
お願いします。

292 :デフォルトの名無しさん:02/07/16 03:03
っていうか、まずその紹介されてる論文の、その章を見れば良いじゃん。(^^;
そしたら、そこからreferされてる論文を次に読むとか…
(citeseerがOKなら英語でOKだよね。)

とりあえず、すでにHaskellを知ってるなら、Cleanって言語の
uniqueness typingって仕組みを使ってみるのが吉かと。
http://www.cs.kun.nl/~clean/で合ってる?>もっと詳しい人

293 :デフォルトの名無しさん:02/07/16 10:17
linear logic (線形論理) ね。
論理にヨワい自分は岩波の 2 冊本
「コンピュータサイエンス入門」
で、やっとこ様相論理に辿り付いたトコなんで
有意義な助言はできんが...

とりあえずロジックに関してどれくらいわかってます ?
>>291


294 :デフォルトの名無しさん:02/07/16 16:29
分からないんだったらまずはぐぐりなさい。
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=


295 :デフォルトの名無しさん:02/07/16 16:30
又は、
http://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=linear+type&lr=

296 :デフォルトの名無しさん:02/07/16 22:58
どうして、そんなに遅いの?

297 :デフォルトの名無しさん:02/07/16 23:06
>>296
それは言える…
CleanとかMLとかは速いらしいのに!

298 :名無しさん@Emacs:02/07/16 23:37
Haskellは生成されたバイナリよりも、
コンパイラ自体がhaskellで書かれてる
ことによる遅さがちょっとイラつかせる。

また勉強中の身だから偉そうなことは
いえないですね。失礼しました。

299 :デフォルトの名無しさん:02/07/16 23:44
Cleanもそうです。

300 :291:02/07/17 03:36
沢山のレスありがとうございます。

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

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

>>294
日本でも沢山の所が研究しているんですねー。
みてみます。

301 :デフォルトの名無しさん:02/07/17 17:54
>>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


302 :デフォルトの名無しさん:02/07/17 21:02
>>297
>CleanとかMLとかは速いらしいのに!
non-strict な ML と、strict な Haskell を
比較すんなよ (;_;) せめて LazyML とか

303 :291:02/07/17 23:57
>>294
国立奈良工業高等専門学校の先生のページに
論理型言語ですが時相と線形理論に関する論文載っていました。
ttp://kaminari.scitec.kobe-u.ac.jp/papers/index.html
少し判った気がします。
でも、これを如何いうふうに関数型言語に輸入すればいいのやら。

あと、下の本知っている人いますか?
線型論理入門 竹内 外史
ttp://www.amazon.co.jp/exec/obidos/ASIN/4535782148/

304 :291:02/07/18 00:00
>>301
>岩波のそれは時相論理という論理の解説がメイン。
そうなんですか。買おうかな。

>IPSJ の学会誌とか研究報告が見れるんなら↓あたりが手頃そうだ。
学術誌は・・・。大学生のころは読めたのにね。
地元の大学言ってみような?如何しようかな?

305 :デフォルトの名無しさん:02/07/18 03:04
> non-strict な ML と、strict な Haskell を



306 :名無しさん@Emacs:02/07/18 05:03
なんでいつもMLとHaskellはいがみあるばかりなんですか?
CとC++
JavaとC#
PerlとRuby
他にもそういうの多いですがね。

307 :デフォルトの名無しさん:02/07/18 10:17
>>306
そういう低次元な話にもっていくな。

308 :302:02/07/18 18:30
>>305 トチった。シクシク

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

他のヤツだって。.NET 使いたいなら C# 、
ケータイ用アプレットが作りたいなら Java とか、
現実、選択肢は広く持っていたほうが楽しいん
だからさ。


309 :デフォルトの名無しさん:02/07/18 20:45
Haskellってnamespace無いの?


310 :デフォルトの名無しさん:02/07/18 22:13
>>309
たぶん module 機構がソレ。
Haskell98 仕様書の 5 節、
じぇんとるいんとろの 11 節。
ttp://www.haskell.org/onlinereport/modules.html
ttp://www.haskell.org/tutorial/modules.html


311 :デフォルトの名無しさん:02/07/19 00:57
>310
あ、ほんとだ。サンクスコ


312 :デフォルトの名無しさん:02/07/19 01:13
>>308
SMLでも遅延評価でますよね。
Hsakellほど積極的では無いですが。

313 :デフォルトの名無しさん:02/07/19 01:46
>JavaとC#
>PerlとRuby

この変は似たもの同士だからだろ?

314 :哲板過去ログから:02/07/19 17:42
哲学板「論理なぜなにスレッド」の最後のレス
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/

315 :314続き:02/07/19 17:43
>>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/

これをすすめたい。安いし、哲学の話もそれなりに多く書いてあるから、
この板の人向きと思うが。

316 :291:02/07/21 09:40
おひさしぶりの291です。
私にとって言語(英語)の壁は厚いので
そんな立派な本は、ちょっと・・・
という感じです。

とりあえず「コンピュータサイエンス入門」と「線型論理入門」は買いました。
ゆっくり勉強したいと思います。

317 :デフォルトの名無しさん:02/07/21 13:30
あーまてまて。^^; 最終目的にもよるが、linear typeの勉強をするのに、
linear logicの教科書まで読破する必要はないべ。(してもいいけど)
俺もlogicのほうは耳学問程度だが、linear typeのほうは
関連する研究で論文を発表できたぐらいには理解してる…つもり。

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

本を読むにしても、何も予備知識がないときついだろうから、以下で概説。
もし説明が下手で余計に混乱させちゃったらスマソ

318 :317:02/07/21 13:41
HaskellとかMLとか使ってれば、普通の型は知ってることにしていいよな。
言語によっていろいろと書き方は違うが、たとえばintだったら整数だし、
floatやrealだったら浮動小数だし、int -> floatだったら
整数から浮動小数への関数だし、int * floatとか(int, float)とかは
整数と浮動小数の組だし、要するに値を分類してるわけだ。

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

319 :317:02/07/21 13:51
で、そんなのが何の役に立つかというと、いろいろとあって

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

って感じ。最後のは俺がよく知らないので、Cleanとかに詳しい人がいたら
フォローをきぼんぬ。

320 :Super Combinator:02/07/21 14:00
>>316
竹内外史の本はかなり手ごわい。

321 :317:02/07/21 14:04
最後に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」を同時に
結論することはできない。

322 :317:02/07/21 14:11
と、これぐらい知っていれば、後はCleanを使ってみるなり、
上のほうのWadlerのチュートリアルを読んでみるのが
(linear logicの教科書を読破するよりは)手っ取り早いと
思うんだが、どう? もちろん、特定の目的じゃなくて
一般教養としてなら、linear logicの勉強もいいかもしれないけど。

もし英語が苦手だと最初は大変かもしれんが、この手の
(わりと)新しい話を少しでも突っ込んで調べようと思ったら、
何でも英語は避けて通れないと思われ。っていうか、下手な
日本語の解説よりも、上手な英語の説明のほうがわかりやすいかと。

323 :Super Combinator:02/07/21 15:24
andとorに分配法則が成り立つのと成り立たないのと二種類ある、
それがlinear logic。>>321みたいなのを特にresource logicと呼ぶことがある。

324 :317:02/07/21 15:39
ええと、323さんはなんでそんな風に思った?^^;
嘘を教わっているか、思い違いをしてそうなので、
例のInformation & Computationをのっとった、Girardの
オリジナルの論文を読むと吉かと思われ。

Girardの「しゃべる」英語は激しいフランス訛りで、
発表を聞いてても個人的に話をしても言ってることが
すげーわかりにくいが(笑)、上の論文はわりとわかりやすい。

325 :覚え違いスマソ:02/07/21 15:43
誤: Information and Computation
正: Theoretical Computer Science

326 :291:02/07/21 23:32
どうも291です。
みなさんの親切なレスが貰えてうれしいです。

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

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

あとCleanですか?Downはしてますけど、使ったとき無いです。
うーんCleanも勉強すべきなのかな?

327 :291:02/07/22 01:02
>大堀先生の「プログラミング言語の基礎理論」
この本は持っています。
読んでいますし、3割ぐらいは理解しているつもりです。
型推論も基礎となるアイデアも理解しているつもりです。

>上のほうのWadlerのチュートリアルを読んでみるのが
「Linear types can change the World!」は読んでいます
(20ページ程度の文書なら、英語でも読む気がするんですがね。)
でも、この論文は、317さんの解説のやつとは少し違うかな?

328 :293,301:02/07/24 11:54
あ、論理カゼを吹かせてしまったのは自分だ。スマソ m(_ _)m

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

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

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

上の >>319 で説明されてるところは、Haskellコンパイラ
方面で研究されてる必須性解析やら更新回避解析やらを
プログラマが明示できる/しないといけない、と感じたん
ですが、どうでしょうか。


329 :デフォルトの名無しさん:02/07/24 23:14
Cleanに関するページのようです。
Cleanってすごいですね。
ttp://sky.zero.ad.jp/~zaa54437/

330 :デフォルトの名無しさん:02/07/25 22:22
ttp://www.sysj.co.jp/sichp/msg0104_2.htm

331 :デフォルトの名無しさん:02/07/26 13:33
藁藁

332 :デフォルトの名無しさん:02/07/26 18:49
>>329のサイト、ブラウザで画像もJavaScriptもOFFにしてたら、トップページから中に入れない。
しかたないからHTMLソース見てみたら…

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

コワイヨー


333 :332:02/07/26 18:59
あ、上の書き込みだけだと中傷にしか見えませんね。スマソ。
初心者の僕にはとても勉強になりました。つーか、大堀先生の本が読めなくて
ちょっとへこんでたんですけど、書評読んだらすこし元気が出てきました。
がんばるぞー。

334 :デフォルトの名無しさん:02/07/26 19:22
>>333
わかんなければソース見てもいいと思うぞ。勉強になる。
あっちが見られる様な媒体で見られたくないものを置いている方が悪いんだから。

335 :デフォルトの名無しさん:02/07/26 19:53
(゜д゜)<あらやだ!
http://www.amazon.co.jp/exec/obidos/ASIN/0201882957/

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

……と思ったら日付が、


336 :デフォルトの名無しさん:02/07/26 20:04
スゲ〜

二度と見に行くかよ、と思わせるためにやってるとすれば、
とっても効果的だ。

337 :デフォルトの名無しさん:02/07/27 00:35
>>335
俺も一瞬そう思った

338 :デフォルトの名無しさん:02/07/27 00:49
age toku yo

339 :デフォルトの名無しさん:02/07/27 01:15
<!--
すぐに出せるようにと思ったんで、
今後の更新予定とかをコメントでつけてましたが、
それらは全部削除しました。
まあ確かにそんなものをつけるべきではないのかもしれませんね。
-->

コメント変わった?
ここ読んでる?

340 :デフォルトの名無しさん:02/07/27 01:35
>>329
の書き込みは要するに自作自演書き込みって事でしょ。


341 :デフォルトの名無しさん:02/07/27 01:35
世間が狭いだけでは

342 :デフォルトの名無しさん:02/07/27 09:03
>>339
削除した理由が、


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

誰かに注意を受けたと取るのが一番か。

343 :デフォルトの名無しさん:02/07/27 09:34
書評も的を射ていないっぽ

344 :デフォルトの名無しさん:02/07/27 14:07
スレ違い。

345 :デフォルトの名無しさん:02/07/27 18:13
CLEANを紹介したのはエライが、
自作自演とか、偉そうにWeb作ってるのはイクナイ。

346 :デフォルトの名無しさん:02/07/27 23:11
なぜ自作自演?
とか書くと、これも自作自演と勘違いされるのだろうか?

>偉そうにWeb作ってるのはイクナイ
作っている分だけ偉いです。
ヒガミはイケナイネ。

347 :デフォルトの名無しさん:02/07/28 08:06
Cleanのページ作ってる奴はここを読んでるやうだな。
Cleanってば名前しか知らなかったので、ページ作ってくれたのは非常に
よろしいと思う。イイ。

だけど、自分の理解が怪しいこととかまで、無理して書いてないかの?
斜めにしか読んでないが、なんか外してるところがある気がちょっとする。
>>339とかもどうかと思われ。

348 :デフォルトの名無しさん:02/07/28 08:29
Haskellの話をしよ〜ぜ。

349 :デフォルトの名無しさん:02/07/29 00:25
Haskell がメインの開発言語になってる会社ってありますか?

350 :デフォルトの名無しさん:02/07/29 08:46
>>349
Galois Connections
http://www.galconn.com/


351 :デフォルトの名無しさん:02/07/29 10:31
もし、今後 Haskell 本とか書くヒトが居たら、是非

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

とでも、表 2 カバー裏あたりに書いとけば良いかも :-)

352 :デフォルトの名無しさん:02/07/29 10:38
>>351
なんだそれは。
Cleanのページ作った人ですか?
突っ込まれたから、ぼやいている?

Haskellのページとかschemeのページは前からあるけど、
だれも苦情は言わないし、ありがとうしか言わない・・ですが?

353 :デフォルトの名無しさん:02/07/29 10:38
「本書の内容の正否・当否についての質問・意見は、明確で
具体的な理由をつけて、匿名ではなく、hoge@hoge.jp まで
お願いします。また、これら以外のことに関する著作者への
批判・評論は刑法230条又は231条等に触れる恐れがあり
ますのであくまでも自己責任でお願い致します。」

こうだな、正確には。

354 :デフォルトの名無しさん:02/07/29 10:52
>>351
バイアスかけるのは止めてね
Haskellのスレだし。

355 :デフォルトの名無しさん:02/07/29 11:30
>>351
おまえ私怨か?

356 :デフォルトの名無しさん:02/07/29 13:33
>>351マンセー(ww

357 :デフォルトの名無しさん:02/07/29 17:34
Haskeルン

358 :デフォルトの名無しさん:02/07/29 20:55
ああ、DUAL!ってやつ?


359 :デフォルトの名無しさん:02/07/29 23:02
?

360 :デフォルトの名無しさん:02/07/30 18:13
>>352
ぼやきか・・・
それはもしかしたらイタイ発言ではなかろうか

361 :332:02/07/30 20:28
なんか俺のカキコのせいで荒らされちゃってますね、スレの皆さんごめんなさい。
もう夏休みに入ってるって事をすっかり忘れてました。

362 :デフォルトの名無しさん:02/07/31 00:54
>>361
お前のような万年厨も問題だがな

363 :デフォルトの名無しさん:02/07/31 02:40
>>362
ハー。
人の振り見て・・・ということで。

364 :デフォルトの名無しさん:02/07/31 17:02
>>363


365 :石敢當:02/08/02 22:28
Haskell 98 Report が本になるみたいですね。

366 :デフォルトの名無しさん:02/08/02 23:01
>>365
母さんソース

367 :デフォルトの名無しさん:02/08/02 23:08
じゃ、誰かものすごい勢いで日本語版も
出版してくれよな。

368 :デフォルトの名無しさん:02/08/03 08:55
気づいたら最初のスレが立ってから一年過ぎてる。
最初のころはHaskellスレ限定コテハンも何人かいて妙にまたーりとしていた
気がするのだが、最近廃れっぷりが激しいな。最初のころのような勢いも無いし。


懐 古 う ざ い











          よね。

すまん。逝ってくる。

369 :デフォルトの名無しさん:02/08/03 09:25
ネタがないんじゃよー

誰かお遊びで作ったプログラムとか貼ってくれませんか?

370 :デフォルトの名無しさん:02/08/03 15:03
関数型言語初心者です。

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

では、バブルソート(二重for文で大小比較の単純なやつ)はどうなるのでしょうか。
iとjを引数にして二重に再帰を繰り返し、takeやdropで切り貼りするしか無いのでしょうか?
もっと効率のいいやり方があるのでは、と思うのですが…

371 :デフォルトの名無しさん:02/08/04 05:06
>>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)

つか効率を気にすればするほど選択ソートっぽくなると思う。

372 :デフォルトの名無しさん:02/08/04 05:20
このスレってほとんどコード出てきてないのな。

373 :デフォルトの名無しさん:02/08/04 07:27
Haskellは犬ですか?

374 :デフォルトの名無しさん:02/08/04 13:54
Haskellerと言ってもその程度。

375 :370:02/08/04 16:19
何故>>371でソートになるのか悩んで、紙に書いてようやく理解しました。
最小値を取り出して、それを x : bs rest [] で先頭に結合しているわけですか。

bs xs i j なんて関数を作って手続き型そのままにやろうとした俺とはえらい違いです。敬服。

376 :370:02/08/07 22:54
数日間が空いてはっと気付く…

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

関数型言語の場合、スタック消費は気にしない方がいいのでしょうか。

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

Haskell のような遅延評価が基本の言語では、自然な再帰のアルゴリズムの
プログラムを、末尾再帰のアルゴリズムのプログラムに書き換えることも、
計算のオーダーが変わるようなもの以外は、あまり、気にすることはない
気がします。

378 :デフォルトの名無しさん:02/08/10 11:42
よく関数型言語で Xs, とかYsってvariableなんだけど、なんでXsなの?
この最後のSはどっからでてきたの?X,Y,Z,W,Vとかでいいじゃん。
Sなんてつけなくても

379 :デフォルトの名無しさん:02/08/10 12:14
x:xs
複数形のsです。

380 :日曜Haskellerオヤジ:02/08/11 06:22
ものすごい久々です、
現在はプログラミング基礎論の勉強がてら一緒に Haskell もお勉強モードな土日です。

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

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

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

初心者向きといえば、以前工科大のページがあったんですが
消滅してしまっているようです、越田センセまた何かページつくってくれないかな・・


381 :デフォルトの名無しさん:02/08/11 07:14
プログラムはじめてやるのにラムダカルキュラスは難しすぎる

382 :デフォルトの名無しさん:02/08/11 09:07
http://nicosia.is.s.u-tokyo.ac.jp/members/hagiya.html
はぎゃー先生のページ面白い

383 :yuki:02/08/20 07:38
====================================================================

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

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になります。

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

=======================================================================

384 :デフォルトの名無しさん:02/08/20 08:36
>>383
その区切り線には宗教的意味か何かでもあるのか?

385 :デフォルトの名無しさん:02/08/20 09:14
>>383
宿題は自分でやりましょうね。

386 :デフォルトの名無しさん:02/08/20 11:42
Haskellって、
学校の授業でどのくらい使われてるの?

387 :日曜Haskellerオヤジ:02/08/20 12:50
宿題だとすると・・・そのまま答えを書いたらまずいかな(笑
私だったらこんな感じで作りますかね。

見ているとスペースのところで文字列が切断されていて非常に感じが悪いのでそれをまず結合します。
つづいてこの文字列リストから ":" , ";" を取り除いて出来上がり


388 :日曜Haskellerオヤジ:02/08/20 12:52
おまけ
結合すべき文字列は直後が ";" ":" でないことに着目すると簡単に作れるでしょう。


389 :383:02/08/20 12:55
「Haskell言語プログラミングレッスン <上> Haskell言語を始めよう」
「Haskell言語プログラミングレッスン <下> 関数型言語を始めよう」

出版準備です。

390 :デフォルトの名無しさん:02/08/20 13:02
出版準備?大丈夫かよオイ

391 :デフォルトの名無しさん:02/08/20 13:04
ネタだろ…

392 :日曜Haskellerオヤジ :02/08/20 13:11
よく見てみると、単に複数文字列があるだけじゃなくて、
レコードみたいになっていますね ';' ':' ブラウザはの見分けがつかない
間違っているので上記2レスは無しということでお願いします

';' でいったん文字列リストのそのまたリストに分解して
先頭を順序対の左
上記を取り除いた上での、先頭と末尾を取り除いた文字列の結合を右の順序対として
リストを作ればよいみたいですね。


393 :日曜Haskellerオヤジ:02/08/20 13:25
>>389
本当ならうれしいですね、ちょっと作ってみましょう、しばらくかかります。

394 :デフォルトの名無しさん:02/08/20 13:27
個人的には関数の型が気にいらんな。

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

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

parseAssoc :: [Token] -> Assoc

をつくって

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

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








395 :デフォルトの名無しさん:02/08/20 14:00
>>389
題名的には上下逆だろ。

396 :日曜Haskellerオヤジ:02/08/20 15:52
関数型言語の素人のコードなので変かも知れませんが大体こんな感じになります。
本できたら、このスレッドに報告してくださいね、買います。

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 )



397 :日曜Haskellerオヤジ:02/08/20 15:53
続きです

-- トークン分解と ';' の取り除き
-- 末尾 ';' チェックはしていないので必要なら無限再帰防止策をとること
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



398 :383:02/08/20 20:19
日曜Haskellerオヤジさん ありがとうございます。

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

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

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

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

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

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

お礼のレス遅れてしまってすみません。なんか、私の使ってるプロバ、規制されてるんです。うー
だから、友人にメールで送って、それからレスしてもらってるので。すみません。荒らしではないですよ。


399 :デフォルトの名無しさん:02/08/20 20:25
日曜オヤジさん、カコ(・∀・)イイ!!

400 :デフォルトの名無しさん:02/08/21 09:00
>>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)


401 :デフォルトの名無しさん:02/08/21 09:02
uge

402 :日曜Haskellerオヤジ:02/08/21 22:12
>すみません、>389 は私ではないです。誰かがネタでやったみたいです。
やっぱりそうか(笑)

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

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

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


#ダウンロードしようと思いましたが、ファイルはもうアップローダーに残っていないみたいです。


403 :デフォルトの名無しさん:02/08/22 03:18
まず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にトークンのリストを渡します。

宿題の答えを書くのもアレなので、こういうかたちにしてみました。


404 :デフォルトの名無しさん:02/08/22 03:23
>>403
> 2. gを使って関数fを定義します。関数fは、もしnがリストkに現れていたら
2. gを使って関数fを定義します。関数fは、もしnがキーのリストkに現れていたら
でした。舌足らずですた。

405 :デフォルトの名無しさん:02/08/26 10:16
東大の「こ・何とか」って人は何人?

406 :デフォルトの名無しさん:02/08/29 13:10
nisseicom.co.jp

407 :日曜Haskellerオヤジ:02/08/30 00:01
>>403
ん、お盆休み明けてのぞいてみれば、だれもレスを付けていないのか・・・
今週末ちょっと考えて見ます。


408 :日曜Haskellerオヤジ:02/08/31 17:37
やっと週末、必死こいて圏論勉強中の日曜Haskellerオヤジです。

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

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

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

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



409 :デフォルトの名無しさん:02/08/31 17:43
正直ハスケルってどこで使うの?別に煽りじゃなくて、
どういうところで使われてるか不思議で。shcemeとかは
dr schemeのチュートリアルで結構仕事があるみたいなことを
書いてあったけど。

410 :デフォルトの名無しさん:02/09/05 10:28
>>409
学校

411 :デフォルトの名無しさん:02/09/07 12:25
>>410
(小)

412 :デフォルトの名無しさん:02/09/07 12:25
>>400 kakoii! tuka hutuu dakedo, >>396-397 no ato ni miruto kakoii!

413 :デフォルトの名無しさん:02/09/07 12:42
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"})

と、こんなところで半年近くも前の話に質問をしてみるテスト。

414 :デフォルトの名無しさん:02/09/07 13:11
>>413
君はこういう (http://www.bier-reise.com/cooking/recipe/go-ya/chample.htm)
つもりなのかもしれんが、"チャンプル" でなく "チャンプルー" と伸ばすこともあり、
chample よりは champloo って書くべきものなのだよ。

415 :デフォルトの名無しさん:02/09/07 15:41
>>352
なんだそれは。

416 :デフォルトの名無しさん:02/09/07 23:10
ここらへんで一丁Haskellで

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

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

Haskellなら相当な事が出来そうですが(今↑ではやりのRLEとかも)


417 :デフォルトの名無しさん:02/09/07 23:28
おまえがやって見ろよ

418 :デフォルトの名無しさん:02/09/08 02:11
>>416
大して戦果をあげれないと思う。入出力とか弱いし。
Haskell 向きなのを何か考えればアレかもしれんが。

419 :デフォルトの名無しさん:02/09/09 13:38
モナドパーサ

420 : :02/09/18 03:35


421 :デフォルトの名無しさん:02/09/18 06:54
7行プログラミングってPerlが一番凄そう。


422 :デフォルトの名無しさん:02/09/18 16:41
むしろperlはそのための言語。

423 :司馬乱:02/09/27 23:46
>>408
久しぶりにこのスレ覗いてみたら寂れてますねー.
コンピュータサイエンス向けの日本語の易しい圏論の本って需要あるのかな?


424 :日曜Haskellerオヤジ:02/09/30 14:31
そーですねー、淋しいです。

>コンピュータサイエンス向けの日本語の易しい圏論の本って需要あるのかな?
取り合えず私にはあります、だれか作ってー
離散数学に興味を持ったところ、そのまま勢いでこれも面白くなってきています。
もっとも、一般位相はしらないわ、集合論はしらないわで大変ですが・・・
Haskell という言語はこういうものを勉強するときに便利ですね。


425 :デフォルトの名無しさん:02/09/30 16:02
http://www.mail-archive.com/haskell@sampou.quickml.com/index.html

426 :石敢當:02/09/30 22:16
>>423
なぜコンピュータサイエンスに圏論なのか、圏論を勉強すると
プログラムを作成するにあたりどんな嬉しいことがあるのか、
などについて序章あたりに書かれているような本だったら買いたいです。

英語で書かれたのを1冊持っていますが、なかなか読み進めません。
ありがたみを実感できる章にたどり着けばはずみがつくと思うのですが・・。


427 :デフォルトの名無しさん:02/09/30 22:58
>>426
その本とはなんでしょう?
さしつかえなければ教えてください。

428 :デフォルトの名無しさん:02/09/30 23:17
圏論ですか、下の本で見たときがあります。
情報数学講座7 プログラム意味論 横内寛文 共立出版 1994.6

それにしてもプログラミング処理系は、実用的にするため色々な拡張が施され
ています。そのため純粋な数学との間には大きな溝が出来てしまってい
るような気がします。


429 :デフォルトの名無しさん:02/10/01 00:43
これが圏論だっていうコードを見れば
分かるようになるかも。

430 :デフォルトの名無しさん:02/10/01 23:00
Frege構造って何?

431 :石敢當:02/10/02 01:07
>>427
Bird & de Moor の "Algebra of Programming" です。


432 :司馬乱:02/10/02 01:08
コンピュータサイエンスの場合,圏論の代数的な面を強く出すよりは
論理や型理論と一緒にやる方がいいと思いますが(代数は等式論理なので)
どうやって動機付けするのがいいのかな.

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

433 :司馬乱:02/10/02 01:27
>>431
たしかallegoryとか使っているやつですか?

434 :石敢當:02/10/02 22:07
>>433
はい、そうです。

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

執筆する側としては厚い本を書くのは大変だと思いますが、
読む側としては多少厚くても難解な薄い本よりはずっと
ありがたいです。もっとも、431の本をなかなか読み進めない
一番の理由は十分な間を取れていないからで、難解とか言う
以前の問題です。


435 :デフォルトの名無しさん:02/10/02 22:17
>>432
というような会話を、約10年程前にしてたんですけど、
相変わらずそのスジでは必須科目(wなのですか?


436 :デフォルトの名無しさん:02/10/02 22:34
多分、答えないと思うけど(w

437 :日曜Haskellerオヤジ:02/10/04 00:02
>>429
圏論というのは、集合論の代わりになるもので、集合論が「要素」の論理
であるのに対して、圏論は「要素」と「要素」の間の関係の論理です。
集合論を置き換える為の物のようです。( 多分(^^; )

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

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

#ちかごの感じるんですが
# 圏論 : 関数型
# 集合 : オブジェクト指向
#「点」が中心の時がよいのか「射」が中心の時がよいのか
#時々強烈に的確に記述できる関数型の特徴の正体が見えたような見えないような・・・


438 :デフォルトの名無しさん:02/10/04 02:09
わたしの、数学から見たイメージでは、
集合論:構成的(実装を扱う)
圏論:公理的(インターフェースを扱う)

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

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

コンピュータサイエンスで圏論がどう使われているのかは知りませんが。
いや、数学でもあまり知らないんだけど。

439 :デフォルトの名無しさん:02/10/09 23:28
>>423 >>432
もしかして書く気ですか?

440 :デフォルトの名無しさん:02/10/14 04:00
Hugsって、そろそろバージョンアップしたりしないのかな。
テンキーの'/'が効かないのはなぜ?


441 :日曜Haskellerオヤジ:02/10/15 22:08
越田一郎先生のページが復活していたので記念上げしておきます。
チュートリアルとしては最適と思います、私もこれを使っておぽえました。
http://www.teu.ac.jp/kougi/koshida/Prog6/index.html


442 :デフォルトの名無しさん:02/10/28 04:33
寝られないので今さっき勉強始めてみました、あげ

443 :デフォルトの名無しさん:02/10/28 05:04
Haskell ?
なにそれ?

444 :デフォルトの名無しさん:02/10/28 05:09
>>443
若者向けのLisp


445 :デフォルトの名無しさん:02/10/28 05:18
>>444
若者向けのLisp

446 :デフォルトの名無しさん:02/10/28 09:38
prologの方がいいよ

447 :デフォルトの名無しさん:02/10/28 09:47
んなわきゃねぇ(w

448 :442:02/10/28 10:08
越田先生のチュートリアルいいよ。
公式のドキュメント読んでもいまいちだったけど、
これ読んだらけっこうすんなり入ってきました。

東京工科の学生には負けられません。

449 :デフォルトの名無しさん:02/10/28 10:56
`ってどこ?っていうのがFAQかよ(藁

450 :デフォルトの名無しさん:02/10/28 11:29
pの横にあるキーボードもありますけどね。

451 :デフォルトの名無しさん:02/10/28 11:41
キーマップが違っててもすぐ分かるだろ

452 :デフォルトの名無しさん:02/10/28 12:15
わからんキーはかたっぱしから押してみるのが近道だろうが
最近はヘタなキー押すとサスペンドしたりユーザー切り替わったりするらすいな。
なんでこれ以上ボタン増やしたがるのかわからんよ。

453 :442:02/10/28 12:20
あのー、スレ違いなんですけど。。。

454 :名無しさん@Emacs:02/10/29 18:38
越田先生の
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 ぐらいまでは余裕みたいですが。

455 :デフォルトの名無しさん:02/10/29 18:45
(●

(略


456 :名無しさん@Emacs:02/10/29 20:17
越田先生の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)

457 :名無しさん@Emacs:02/10/29 21:25
越田先生の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]っていう書き方がなんとなくダサい気がします。
そういう関数は組込みであるんでしょうか?

というか組込み関数一覧みたいなのってどっかにありません?

458 :名無しさん@Emacs:02/10/29 21:47
divisors関数を使った素数判定はこうかな?

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

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

早くIO使った実用的アプリを作れるところまでいきたいのぉ

459 :名無しさん@Emacs:02/10/29 22:27
型変換するよい方法はないでしょうか?

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

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

460 :デフォルトの名無しさん:02/10/29 22:47
String は [Char] の別名だから。

http://www.haskell.org/onlinereport/basic.html#characters
↑を見てみればわかるように言語仕様で
type String = [Char]
というセマンティクスが規定されてる.


461 :名無しさん@Emacs:02/10/30 00:05
>>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])
というエラーが出ます。んー、わからんです。

462 :名無しさん@Emacs:02/10/30 00:06
s/761/460/
でした。すんません。

463 :名無しさん@Emacs:02/10/30 00:10
×returnLoan remove_person remove_book
○returnLoan exampleBase remove_person remove_book
でした。質問忘れてください。m(  )m

464 :名無しさん@Emacs:02/10/30 01:06
それでもあれですね。思ったより簡単ですね。
もっとCやPerlと比べて難しいかと思っていたら
そうでもなかった。二日である程度慣れました。
ループを一切使わずに全て再帰で書くのは
なれないうちはしんどそうだけど、見返りとして
バグの出にくいプログラムになるのかな。

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

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

先生には入門者用の本を書いてほしいなあ。

465 :デフォルトの名無しさん:02/10/30 01:31
>>464
IBMのdeveloperWorksサイトに、HaskellでXMLを云々って記事が有ったね。
既出だろうけど。


466 :名無しさん@Emacs:02/10/30 01:47
>>465
なるほど、それでかな。
Haskellを使ってみる前からXMLの処理には
関数型言語が向いている気がしてたんです。
ただ単に自分が以前DWを読んだだけだったのですね(汗

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

もっと綺麗に書けるよう努力せないかんですね。

467 :名無しさん@Emacs:02/10/30 07:49
朝起きてから、Haskellスレパート1を見てたのですが、
2chに神が君臨したかのようなレベルですね(汗
自分の書き込みが恥かしくなって来たのでしばらく潜伏します。
早くみなさんのレベルに追いつきたひ。。。

これだけじゃ情報価値なしなのでせめてリンク
純粋遅延関数型言語 Concurrent Clean
http://sky.zero.ad.jp/~zaa54437/programming/clean/
このサイトの書評は私のような初心者には参考になりそうです。
また管理者の人はCleanシステムのドキュメントの翻訳を精力的に
行われています。素晴らしいです。

468 :デフォルトの名無しさん:02/10/31 21:02
英語サイトで東工大くらいの難易度のチュートリアルってあります?

469 :デフォルトの名無しさん:02/10/31 21:19
ゲージンはいきなりGentle〜を読んでコード書き出すの?
なんか信じられないんだけど、あれより簡単なドキュメントって
英語じゃみたことないよ。

470 :468:02/10/31 21:31
>>469
情報どうもです。
テーマごとに手ごろな課題がついてて段階的に
ステップアップできるようなのがいいんですが。
もうちょっと探してみます。

471 :デフォルトの名無しさん:02/11/02 09:19
これってまじですか?
http://research.microsoft.com/Users/simonpj/papers/meta-haskell/

というかAlexandrescuに触発されたとか。。

472 :デフォルトの名無しさん:02/11/02 11:51
>>464
関数型言語でXMLを扱う例としてこんなのがあります。
http://xduce.sourceforge.net/
メインの開発者は日本人です。
実装はHaskellじゃなくてMLだけど。


473 :デフォルトの名無しさん:02/11/02 15:15
Haskell.NETはどうなりますたか?


474 :デフォルトの名無しさん:02/11/03 11:45
classって使ってます?
ghcのソースコード見ても殆ど使ってないんだけど、、、
C++がめんどくさくなるとという理由から敬遠されるのと
同じような理由で型クラスも使われてないとか?

475 :460:02/11/04 11:04
ttp://www.haskell.org/onlinereport/basic.html#sect6.3
(6.3 Standard Haskell Classes)の図にある如く
言語仕様で定義されてる基本型からして使いまくりですが? >>474


476 :デフォルトの名無しさん:02/11/07 21:28
>>471


477 :デフォルトの名無しさん:02/11/07 21:57
I/Oとかの副作用処理って、モナドがファイナルアンサーですか?
他に良い方法無いの?(Haskell固有の話じゃなくて)

478 :デフォルトの名無しさん:02/11/07 23:30
自分で考えろ

479 :名無しさん@Meadow:02/11/07 23:44
http://pc3.2ch.net/test/read.cgi/tech/1007387924/717


480 :デフォルトの名無しさん:02/11/10 23:22
ユニークな型ねー。
これだけで解決?

>>478
あなたも一緒に考えましょうよ。

481 :デフォルトの名無しさん:02/11/10 23:43
他にもあるよ。
・lazyなストリームとみなす。
・continuationを使う。

482 :デフォルトの名無しさん:02/11/11 01:28
そもそもLazyなのがいけないんだろ

483 :デフォルトの名無しさん:02/11/11 16:00
このスレ相変わらずプログラムコード量が著しく少ないねぇ

484 :480:02/11/12 03:32
>>481
その2つの方法もありますね。
でも古典的(あまり普及できない)方法なのでは?

485 :名無しさん@Meadow:02/11/12 12:55
>>482
> そもそもLazyなのがいけないんだろ

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


っつうかオレ釣られた?


486 :デフォルトの名無しさん:02/11/13 15:44
面倒なんで突っ込む必要なし

487 : ◆y3A2MadQ16 :02/11/14 05:57
苦労の割にありがたみが少ないということかもね…。
嫌いじゃないんだけど、導入の旨みが苦労に勝っていると証明できないんで、
最近はLazyにも個人的に放置気味…。>Lazy Evaluation

代わりにという訳でもないが最近は部分評価野郎になってまつ。
(その上、HaskellどころかJava野郎に成り下がってまつ(w。)

488 :デフォルトの名無しさん:02/11/17 23:10
ガイシュツな話題。
Lazyが悪い訳じゃないのに・・・・

>>477
他にも色々なアンサーがありますよ。時制理論とね。
透明参照性を保つためには、時間とか状況とかを導入すれば良い。

489 :デフォルトの名無しさん:02/11/18 10:18
効率性の問題に行き当たる

490 :デフォルトの名無しさん:02/11/19 11:00
>>488
もちろん悪くはないんだ。漏れも個人的には好きだ。
ただ好みの問題を越えて、
実装の苦労と実行効率を補ってなお十分にいいと言い得るかが問題…。

491 :デフォルトの名無しさん:02/11/19 23:09
>>489 >>490
実行速度も、もちろん気になるので言語に新しい要素を導入するときは
慎重にするべきですね。

でも構文で制限かければ良いような
もしくは処理系のanalysisによる最適化(正格性判断による末尾再帰とかね)
とかで何とかなりそうな気もします。
だれか何とかして。

492 :デフォルトの名無しさん:02/11/20 16:59
Hugs98 November 2002 release
http://haskell.org/hugs/

493 :デフォルトの名無しさん:02/11/20 17:04
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.


494 :デフォルトの名無しさん:02/11/20 18:40
随分とでかくなったな・・・

495 :デフォルトの名無しさん:02/11/21 15:25
>>440
バージョンアップしてもテンキーの"/"は効かないままな模様(Winhugs on W2k)
つーか日本語キーボードじゃないと再現しなくて
開発元は気づいてないなんてオチじゃないだろうな。
英語キーボード持ちの人だれか試してプリーズ。

496 :デフォルトの名無しさん:02/11/22 01:10
>>495
漏れは英語キーボードだが。
日本語OSでしか再現しないのか?

497 :495:02/11/22 21:57
>>496
英語KBでも効かないか。
ウチにゃ日本語W2kしかないから、英語OSの検証は無理だし。

もうちっと色々してみてダメだったらバグレポするつもり。

498 :デフォルトの名無しさん:02/11/26 09:05
新しいHugs、なんかインストーラがおかしくない?
アクセス権の設定とか。


499 :デフォルトの名無しさん:02/12/02 00:14
誰か、
lispとhaskellとocamlの
メリットデメリットを教えてください。

500 :デフォルトの名無しさん:02/12/02 00:31
500get


501 :デフォルトの名無しさん:02/12/02 00:41
501got!

502 :デフォルトの名無しさん:02/12/02 04:55
新しいhugsにはwinhugsはついてないの?

503 :デフォルトの名無しさん:02/12/02 20:57
越田先生の「値しての関数」と「オーバーロードとクラス」の問題が
全然分からない・・・。
誰かお助けを〜

504 :デフォルトの名無しさん:02/12/04 11:46
(´-`).。oO(tab-width 4文字にしててはまった。あー悩んだ悩んだ。do で。)

505 :デフォルトの名無しさん:02/12/05 00:49
GHC 5.04.2 Released
http://www.haskell.org/ghc/

506 :デフォルトの名無しさん:02/12/05 01:40
HaskellはMS Research所属の人間が関わっているのに、
UNIX指向なんでつか?

507 :デフォルトの名無しさん:02/12/05 02:41
さあ

508 :506:02/12/05 10:28
「GHCは」、だった。

509 :デフォルトの名無しさん:02/12/06 09:11
ネタ?

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

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

個人的に一番参照してるサイモン博士の頁は↓だったりするが.
ttp://research.microsoft.com/~simonpj/win32-cheat.html

510 :デフォルトの名無しさん:02/12/06 14:02
いや、GHCの最新版で一番最初に出るのがUNIX版なもんで

511 :デフォルトの名無しさん:02/12/07 10:04
え,ソースは CVS でいつでも最新だよ? とかボケてみる(w

ttp://www*haskell.org/ghc/docs/latest/html/building/winbuild.html
彼らが常用してる開発環境が↑の Windows ビルド用環境ではない,
というだけかな,と.

512 :デフォルトの名無しさん:02/12/11 20:50
>502
>新しいhugsにはwinhugsはついてないの?
オレも見つけられない。どこにあるの?

513 :デフォルトの名無しさん:02/12/14 15:59
http://www.haskell.org/~petersen/haskell/lc2001.html
>Emacs in Haskell の計画
これはネタですか?こんなことやってる人いるのかな?

514 :デフォルトの名無しさん:02/12/16 06:01
http://www.haskell.org/humor/
↑これのどこが面白いのか、誰かひとつ解説してくれ。


515 :デフォルトの名無しさん:02/12/20 16:48
その面白さを理解できないあなたはHaskellerではなし。
無理にでも笑いなさい。

516 :デフォルトの名無しさん:02/12/22 11:30
http://yzg.3nopage.com/haskell.jpg
質問なんですが、これってなんていう本だか分かりますか?
おそらく、Haskell:the Craft of Functional Programmingの和訳だと思われるのですが……
検索しても出てこないもので……

517 :デフォルトの名無しさん:02/12/24 10:15
>>516 何処ぞの大学か何かの授業用のテキストじゃないかなぁ.
前の年には毎回配ってたプリントを,次の年は一括して印刷・
簡易製本とかいうパターンって結構あるから

518 :デフォルトの名無しさん:03/01/06 23:34
んが

519 :IP記録実験:03/01/08 21:43
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を提出することがある。

520 :デフォルトの名無しさん:03/01/09 02:32
IP記録するのはいいけど串も規制しないと意味ないよな

521 :デフォルトの名無しさん:03/01/09 03:16
フシアナ標準にすればいいのに。
困るのは厨くらいだろ?

522 :デフォルトの名無しさん:03/01/09 03:58
>>292
どのIPがどの垢かは、ISPが記録してます。
だから、悪い事すればモデムだろとADSLだろうと捕まりますよ。

523 :ぶん:03/01/09 14:08
始めまして。今私は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).

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









524 :デフォルトの名無しさん:03/01/09 14:21
これからは馬鹿って書いただけで訴えられる可能性がでてきたわけで

525 :デフォルトの名無しさん:03/01/09 15:05
既に訴えられているわけだが。ひろゆきが責任を取ってるだけで。

526 :デフォルトの名無しさん:03/01/09 17:49
======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
────────────────────────────

527 :デフォルトの名無しさん:03/01/09 23:41
2ch板一覧
 http://www.skipup.com/~niwatori/keijiban.htm

>728 ( ´∀`)σ)Д`) プニ

528 :デフォルトの名無しさん:03/01/10 08:39
そりゃ最初はよほどの大事でもない限りIPを渡すことはしないだろう、
でも物事はだんだんエスカレートしていく物、そのうち密告とかも「誹謗中傷」として
IPを渡すようになる、、、

529 :デフォルトの名無しさん:03/01/10 10:39
最近、腐れさん見ないね・・

530 :デフォルトの名無しさん:03/01/10 11:09
★ ひろゆき重大な決意を語る。
http://live2.2ch.net/test/read.cgi/news/1041069586/l50

531 :デフォルトの名無しさん:03/01/10 11:55
最高裁への上告は認められなくなったから、これで事実上判決確定だよ。
逆転も何もないって。
勢いで上告なんかしても一発で上告却下(門前払い)だよ。

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

ようするに上告しても今の制度では100%無駄。
これで完全終了ってことか。


532 :デフォルトの名無しさん:03/01/10 12:24
>>754
まともじゃない掲示板なんて存在意義ないね。
そういうことならここじゃ意味ないと思うが。

533 :デフォルトの名無しさん:03/01/10 13:16
スレタイの日本語、微妙におかしいね。

534 :デフォルトの名無しさん:03/01/10 15:37
(前略)815様

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

535 :デフォルトの名無しさん:03/01/10 17:05

なつかし。

536 :デフォルトの名無しさん:03/01/10 23:26
ひろゆき
お前にはがっかりした。
2chにも。さいなら。

537 :デフォルトの名無しさん:03/01/10 23:34
全部ミギーが書きましたって言えば問題ナッシング

538 :デフォルトの名無しさん:03/01/11 00:50
ううん、既存のTripodとかじゃなくて新たにそういうシステムを
作っちゃうの。

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

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

どうやってカキコ禁止にするとかそういうのはわかりませんw

539 :デフォルトの名無しさん:03/01/11 00:57
記録されてる分なにかと現社会より厳しくなった感じします、

540 :デフォルトの名無しさん:03/01/11 12:22
とりあえず、訴えられたらスレ住人全員で土下座しよう。
ていうか、それくらいの気概で書き込め。

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

541 :デフォルトの名無しさん:03/01/11 13:21

>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

これまでのあらすじは あたりに誰かお願い。


542 :デフォルトの名無しさん:03/01/11 13:47
マターリしてるのにスレ違いな質問はどーかと。
それに、会社立ち上げたんだし、たぶんにその辺からだろ〜ね。

543 :デフォルトの名無しさん:03/01/11 16:35
2chをはけ口にしていた人はどこで憂さ晴らしをするのか少し興味ある

544 :デフォルトの名無しさん:03/01/11 16:42
漏れはどこもさくさく行ける。
プロバ次第だと思われ。

545 :デフォルトの名無しさん:03/01/12 00:47
漏らすバカが出るだろうというのが一番の問題なんだよ

546 :デフォルトの名無しさん:03/01/12 00:56
ごめん、なんで「それを言うなら」になるのかがわからん(^_^;)
後半の批判は批判でいいと思うんだけど、書き込む人間の自己責任ってのとどう関係してるの?

547 :デフォルトの名無しさん:03/01/12 11:06
だろ。
461みたいなことばっか起こるだろ。
ろくなことなないな。2ちゃんなんか。
それもやられ損かなぁ?
訴えてやればいいのに。

548 :デフォルトの名無しさん:03/01/12 15:22
>>1-517
荒らされる前までのリンク。
なんでプログラム技術板で私が覗いてる全スレでやられてるんだか・・・。

549 :デフォルトの名無しさん:03/01/12 20:37
全ての責任は当事者同士で解決しろってこと
人が書き込んだものに対して賠償するのもアホらしいしな
ごく当り前な考えだわな
騒ぐ程のもんでもない
わかるか?

550 :デフォルトの名無しさん:03/01/12 20:41
プチ法廷ごっこでは、詭弁で開き直る2ちゃん擁護派は強い。
でもリアル法廷ではボロ負け。



551 :デフォルトの名無しさん:03/01/12 20:49
過度の期待は禁物です。

552 :山崎渉:03/01/13 18:34
(^^)

553 :デフォルトの名無しさん:03/01/13 22:25
そんなに世の中が嫌いか。
年収600万円に満たない屑でも愉快に暮らせる楽しい世の中じゃないか。
いちいち爆破するな。

554 :デフォルトの名無しさん:03/01/14 10:32
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/

555 :山崎渉:03/01/15 17:56
(^^)

556 :デフォルトの名無しさん:03/01/17 00:03
標準ライブラリ関数のクイックリファレンス本って無いのかな?
入門本は取り敢えず読んだから、
簡潔な説明と簡単な使用例が有ると嬉しいんだけど。

>>554の本は、ちょっと違うみたいだし、
1969年にならないと手に入らないって書いてある……バグってるな。


557 :デフォルトの名無しさん:03/01/17 10:46
>>554 後者って
http://www.haskell.org/definition/
↑の最初にある Report ふたつの PS・PDF を
印刷製本したものではとか思われ

558 :デフォルトの名無しさん:03/01/17 14:39
http://research.microsoft.com/Users/simonpj/haskell98-revised/

これだろ

559 :山崎渉:03/01/23 20:13
(^^)

560 :デフォルトの名無しさん:03/01/24 10:19
圧縮ツール bzip2 の作者 Julian Seward さん、Haskellerになったんですね。
http://sources.redhat.com/bzip2/#about-author


561 :デフォルトの名無しさん:03/01/25 15:44
つってもなー、Haskellerにはlurkerが多いらしいからな

562 :デフォルトの名無しさん:03/01/26 15:59
www.haskell.org内にも Seward氏の名前はたくさん出てるから、lurkerではないのでは?

563 :デフォルトの名無しさん:03/01/26 20:59
今日からHaskell使ってプログラミング始めます。
とりあえずHP作ってみた。
http://haskell.tripod.co.jp/index.html

564 :デフォルトの名無しさん:03/01/27 00:30
>>563
(・∀・)イイ!
応援しますよ

565 :デフォルトの名無しさん:03/01/27 15:15
>>563
もう解決したんだろうか。":?"

566 :デフォルトの名無しさん:03/01/27 16:57
>>564
心強いです。感謝。
>>565
解決しました。感謝感謝。

567 :デフォルトの名無しさん:03/01/31 15:57
荒すな

568 :デフォルトの名無しさん:03/02/03 22:53
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;
}



569 :デフォルトの名無しさん:03/02/05 16:32
template haskell まだあ〜?

570 :デフォルトの名無しさん:03/02/12 03:53
Hoshkell

571 :デフォルトの名無しさん:03/02/23 03:23
素朴な疑問Haskell使ってる人たちって情報系の人ばかり?

572 :デフォルトの名無しさん:03/02/26 20:26
【何処も】情報科学総合スッドレ【板違い】
http://science.2ch.net/test/read.cgi/rikei/1046173479/l50




573 :デフォルトの名無しさん:03/03/12 16:17
11 March 2003 GHC 5.04.3 Released

574 :デフォルトの名無しさん:03/03/12 17:10
どこが変わったのかわかりゃしねぇ。

ところで最近寂れてるな。
やっぱもうネタないのかね。

575 :デフォルトの名無しさん:03/03/12 19:03
Haskellコミュニティは議論は盛んなんだけどなー

576 :デフォルトの名無しさん:03/03/12 22:05
はやく日本語で本出ないかなー。


577 :デフォルトの名無しさん:03/03/13 01:50
lazy evaluation ってなんですか?

578 : :03/03/15 17:45
遅延評価 (lazy evaluation)
  遅刻の回数を基準にボーナスの額を決めること。
ttp://www.nurs.or.jp/~kneo/m_ti.html

579 :デフォルトの名無しさん:03/03/15 23:18
>>577
値が実際に必要となるまで引数の評価を遅らせること。
要求呼び出し(call by need)

580 :デフォルトの名無しさん:03/03/15 23:23
命令型言語ではほとんど実現されていない。
引数の評価は何らかの副作用を伴うことがあり、
引数がいつ必要になるか正確に知るのは難しい。
また、要求呼び出しはスタックによる実現が難しい。

581 :デフォルトの名無しさん:03/03/16 00:47
http://www.generic-haskell.org/
ここで作られてるコンパイラを使っている人はいますか?

582 :デフォルトの名無しさん:03/03/16 23:20
>>579-580
説明ありがとうございます。

583 :デフォルトの名無しさん:03/03/17 12:38
Haskellerの中にはまたストリームベースを唱えている人もいるようだが

584 :デフォルトの名無しさん:03/03/17 23:18
ttp://www.sampou.org/haskell/report-j/preface-13.html

585 :デフォルトの名無しさん:03/03/18 13:48
意味不明でっす

586 :デフォルトの名無しさん:03/03/18 20:49
>>583
この板にも居ますよ。たぶん数学屋の方でしょうけど。

ところでデータ構築子って理論的にカリー化できないのでしょうか?
最弱頭正規形を作ればいいのだから可能なのでは?と思いますが。

587 :デフォルトの名無しさん:03/03/19 13:58
可能だからといって言語仕様にいれるとは限らないでしょう
その辺は言語設計上の様々な観点を
考慮しながら決定するということで

588 :デフォルトの名無しさん:03/03/20 11:04
> 586
カリー化されてるんじゃないの?

589 :デフォルトの名無しさん:03/03/20 12:49
余裕でっす

590 :デフォルトの名無しさん:03/03/20 20:56
されているね、十分。
----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
-----
上はともかく、下はあってもおかしくないし、欲しいな。
あとで少し探してみるか…。

591 :586:03/03/23 22:27
>>588-590
すでに可能だったのか・・。
すまんかった。

592 :デフォルトの名無しさん:03/03/24 02:45
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"


593 :デフォルトの名無しさん:03/03/25 08:06
はあー、MLはまだ何とかなりそうだが、haskellさっぱりわかんね。

594 :デフォルトの名無しさん:03/03/25 15:07
漏れは逆にMLの構文がわけわからん、つーか好みに合わん。
Haskellも一部複雑だけどね。

ttp://www.teu.ac.jp/kougi/koshida/Prog6/
とか見て動かしてみれば慣れるよ。

595 :デフォルトの名無しさん:03/04/05 15:58
haskell.org維持費用捻出できなくなったのかよ

596 :デフォルトの名無しさん:03/04/05 16:02
ワラタ
2ちゃんねらーで金出してやれよ。
トップページのλの隣にモナー飾ってもらえるかもしれんぞ。


597 :デフォルトの名無しさん:03/04/05 17:32
>>595
April fool じゃないのか?

598 :デフォルトの名無しさん:03/04/05 20:53
そうなら、もう消すだろ

599 :デフォルトの名無しさん:03/04/06 12:06
1 Apr 2003 のニュースだから、永久保存かも

600 :600:03/04/08 17:22
でも、去年は April fool なかったみたい age

601 :山崎渉:03/04/17 15:36
(^^)

602 :デフォルトの名無しさん:03/04/25 17:31
ホシュ

603 :デフォルトの名無しさん:03/04/27 01:31
このゴールデンウィークにでも勉強したいと思いまフ。

604 :デフォルトの名無しさん:03/04/27 05:18
これ、行列の対角化とかできますか?

605 :デフォルトの名無しさん:03/04/27 14:04
対角化の計算を自分で書けばもちろんできる。
行列計算用のモジュールも公式サイトから辿れる。
あとはやりたい本人の裁量次第でいくらでも。

606 :デフォルトの名無しさん:03/04/27 17:03
>>605
アリガd

607 :デフォルトの名無しさん:03/04/27 21:58
初期のhaskellはschemeで作られたって本当?
昔Yale大学のサイトになんか書かれてたけど。

608 :デフォルトの名無しさん:03/04/29 08:28
けど・・けど・・

609 :デフォルトの名無しさん:03/04/29 14:15
Common Lisp?

610 :動画直リン:03/04/29 14:26
http://homepage.mac.com/hitomi18/

611 :デフォルトの名無しさん:03/05/05 17:03

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

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

612 :デフォルトの名無しさん:03/05/14 12:10
最強

613 :デフォルトの名無しさん:03/05/15 17:49
logoが変わった

614 :デフォルトの名無しさん:03/05/16 14:53
前よりよくなったねえ

615 :デフォルトの名無しさん:03/05/16 14:58
そ…、そうか?
かなりビミョーなデザインだと思うが。

616 :デフォルトの名無しさん:03/05/16 23:07
λの回りにゴミが付着してる様に見える

617 :デフォルトの名無しさん:03/05/17 00:44
:: = 静的型付け
-> = 高階関数
∀ = 多相
=> = 型クラス
>> = モナド

つーことかいな。


618 :デフォルトの名無しさん:03/05/17 01:29
そう考えると凝ってるな

619 :デフォルトの名無しさん:03/05/20 07:11
凝ってる、っつーか、まんまやん。

620 :デフォルトの名無しさん:03/05/22 16:57
CGAの話止まってるけど、なかなかまとまらんのかね。

621 :デフォルトの名無しさん:03/05/26 19:20
>>619
featuring static typing, higher-order functions,
polymorphism, type classes and monadic effects

にそれぞれ対応してるという解釈のようだけどそれ分かって言ってんの?


622 :山崎渉:03/05/28 12:56
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉

623 :デフォルトの名無しさん:03/05/30 18:14
結局、wxWindowsのバインディングで終わりそうな気配だな

624 :遅報:03/06/02 00:56
ghc major version up

625 :デフォルトの名無しさん:03/06/02 06:41
6.0の目玉はTemplateということになるのかな?
http://www.haskell.org/ghc/docs/6.0/html/users_guide/template-haskell.html

626 :デフォルトの名無しさん:03/06/02 17:06
教えて君で申し訳ないのですけど、他の関数型言語と比べて Haskell のどのあたりが
(・∀・)イイ! or (゚д゚)マズー なのですか?
できれば、いい面と悪い面の両方を聞いてみたいです。

627 :デフォルトの名無しさん:03/06/02 17:37
>>626

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

(゚д゚)マズー
末尾再帰じゃない。


628 :デフォルトの名無しさん:03/06/02 17:45
○:数少ない遅延評価な言語の一つ
△:clean は遅延/正格の切替えができるらしいが、Haskellは…

629 :デフォルトの名無しさん:03/06/02 18:58
>>627 実装がいくつかある。
SchemeやSMLも実装はいくつかあるが。
個々の実装の間に互換性がなければ、却って混乱するのでは?

630 :Lazy eva.:03/06/02 21:31
call by need
必要なら呼んで

631 :デフォルトの名無しさん:03/06/02 21:39
>>627
>(゚д゚)マズー
>末尾再帰じゃない。
lazyだと末尾の最適化はいらないんじゃなかった?
おれが勘違いしてるのかも知れないけど

632 :デフォルトの名無しさん:03/06/03 10:04
(´-`).。oO( Haskell の (・∀・)イイ! 点がこの程度しか挙がらなくていいのだろうか)


633 :デフォルトの名無しさん:03/06/03 22:56
いいところ:
    純粋な関数型言語
    厳格な型チェック
    比較的豊富なライブラリ
    遅延評価
わるいところ:
    遅い
    flatなarrayが無い

634 :デフォルトの名無しさん:03/06/07 03:00
スレの伸びが lazy ...

635 :デフォルトの名無しさん:03/06/07 23:24
>>634
…実はこのスレの定義は既にすべて準備されていて、誰かが問いを放つとレスが見えるようになる?

636 :デフォルトの名無しさん:03/06/09 12:38
Haskell: The Craft of Functional Programming
これの新しいバージョンがでるっていううわさは本当なの?
Ruby系サイトのどこかで書いてあった気がするのだけど。

637 :デフォルトの名無しさん:03/06/09 13:06
http://www.amazon.co.jp/exec/obidos/search-handle-form/249-3518664-2502769


638 :637:03/06/09 13:07
あ、だめだった。Amazonで検索すれ。

639 :デフォルトの名無しさん:03/06/09 22:20
>>635
逆かも?
問いが放たれてから、必要に応じて定義を考える。

640 :デフォルトの名無しさん:03/06/11 00:32
問に対して常に同じ答えが返ってきます。

641 :デフォルトの名無しさん:03/06/11 09:51
文脈が変っていても同じ質問に対しては同じ答えが返ってきます。

642 :デフォルトの名無しさん:03/06/11 09:52
>>640
問いの系列がmonadな演算で関連付けられてるので、
単独の問いに対しては当てはまらないカモッ!

643 :デフォルトの名無しさん:03/06/12 18:05
>>641
それではガイシュツ処理が出来ませんので、
不具合発生です。

644 :モナd:03/06/16 12:58
 ΛΛ
(´d`) .。o〇(monad∈モナー?)

645 :デフォルトの名無しさん:03/06/17 18:46
モナドは、人間から見て、副作用を扱ってるコードとほとんど
同じように見える。
人間にとって副作用のあるコードと同じように見えてる
とすれば、モナドって何の意味があるの?
人間が関数プログラミングしやすくするために副作用が
禁止されてるんじゃ無かったの?

646 :デフォルトの名無しさん:03/06/17 18:51
「ある」と「あるように見えるけどない」は違うだろ…

647 :_:03/06/17 18:53
http://homepage.mac.com/hiroyuki44/

648 :デフォルトの名無しさん:03/06/17 18:55
>>646
違うけど、プログラマから見て同じように見えてるんだったら
プログラマにとっては同じでは?
コンパイラにとっての意味しかないのですか?

649 :デフォルトの名無しさん:03/06/17 20:07
関数型の場合、コンパイラにとっては「ない」方が都合がいいけど、
人間にとってはあなたの言う通りあるように見えた方が扱いよいわけだ。
で、「ない」ものをあるように見せるモナドは、便利ってことにならない?

それならモドキじゃなくて本物の副作用を認めてもいいじゃんという話はまた別

650 :デフォルトの名無しさん:03/06/17 20:29
>>649
> 人間にとってはあなたの言う通りあるように見えた方が扱いよいわけだ。

それは関数プログラミングに反するから、関数プログラミング
の立場から見た場合、扱いが良いとは言えないんじゃないですか?

651 :デフォルトの名無しさん:03/06/17 20:29
話が逆なんじゃないか?モナドは副作用をわざわざあるように見せるためのものでもないだろう。

652 :デフォルトの名無しさん:03/06/19 21:09
a <- hoge
ってやったら、あとは a は見るからに完全に副作用の無い
関数型プログラミングであつかうわけだから、
モナドがあるおかげで関数型の意味がなくなるなんてことは全然無い。

結局モナドって、
副作用や、コードを書いた時点では決まらないものを
普通の関数の引数なんかにつかって破綻するのをさけるために、
型の前にMとかつけてそのままじゃつかえなくする仕組みでしょう。

653 :デフォルトの名無しさん:03/06/24 08:16
日本語扱えるhaskellの処理系ってありますか?

654 :デフォルトの名無しさん:03/06/24 09:06
いやらしいリンク集作った
http://homepage3.nifty.com/coco-nut/

655 :デフォルトの名無しさん:03/06/26 07:32
Haskellはじめますた。
面白いですね〜
・リストの内包表現に萌えた
・無限データ構造萌え
 numForm n = n : numForm (n+1) とか。
 あるもんをあるように書いたらいいって言うのがすどい。

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

いまは、組み込み関数?を調べるのに困ってたりします。
IntをDoubleに変換するのってどうするの?
IntとIntegerの変換どうするんでうか?
とか、わからん。
「**」が解らなくて困ってた事も。
(-1)で懲りて、あらゆるところに括弧つけまくりのコードを書いてたり。

656 :デフォルトの名無しさん:03/06/27 10:48
>>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

657 :デフォルトの名無しさん:03/06/27 13:05
今年もICFPの時期が来ましたがみなさんいかがお過ごしですか?

658 :デフォルトの名無しさん:03/06/28 13:34
>>655
$をつかうと
f (g (h x))
みたいなのを
f $ g $ h x
とかけて括弧削減。

659 :デフォルトの名無しさん:03/06/29 21:21
初心者質問いいですか?
GHCで、API、例えばIsDBCSLeadByte Char -> Bool を使いたいと思ったらどうすればいいのでしょう

660 :貧乏脱出!これであなたはお金持ち:03/06/29 21:30
普通に働いてお金持ちになれるのは全体の1%のみって本当!?
本当にお金持ちになるにはやはり「副収入」が必要!
一日30分 おうちでコピペ、コピペ!
嘘だと思うんならランキング見てみてくださいよ↓↓
(直リン不可)
http://www.adultshoping.com/addclickport.cgi?pid=1053353765(直リン不可)

///////.......///////////////////////////

661 :デフォルトの名無しさん:03/06/29 22:10
誤解があるようだが、モナドは純粋な関数型言語が
手続き風にコードを書くためのシンタックストリックに過ぎない。
拡張でもなんでもない。
(もちろんシーケンシャルのオプションと使われることが多いわけだが)


662 :デフォルトの名無しさん:03/06/29 22:22
         _,..............._,.......
      ,ノ⌒::::::::::::::::::::::::::::::::::::⌒ヽ_
     _ノ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヾ、
    (::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::)
   _ノ:::::::::::::::;ヘ::::::::::ノ⌒ヽ:::::::::::::::::::::::::::::::::)
  (::::::::::::::::::/   ̄ , ‐-、 |::::::::::::::::::::::::::::::::)     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (:::::::::::::/ヽj _/ -‐-、 |::::::::::::::::::::::::::::::::)    |  トリックだ。
   ):::::::::ヾllli_、_,;iiiillllllllli <::::::;へ:::::::::::::::::(   | 
   (::::::::::::/`i´ ,└=゚'┘  |::::| 6 |:::::::::::::::::::}  <  副作用があるように見えているに
    `〜、 ゝ| _コ、_、 /|::::| ソ/::::::::::;〜"    |  過ぎん。
      ヾ|||ll|||||||||||l〉|  三ー'〜〜"         | 
         |||:二三|||| l  ,三   ヽ、          \______________
         |l  ⌒ ||| ://     ヽ=、-、_
       |l、:( : : ||/ /       ヽ, |    ̄\
      /   ̄   /        ノ /       \

663 :デフォルトの名無しさん:03/06/29 22:37
サータン,サータン!

664 :デフォルトの名無しさん:03/06/30 00:06
ところで、日本語訳のページが見れなくないですか??

665 :デフォルトの名無しさん:03/06/30 02:53
>>659わかるひといませんか〜

666 :デフォルトの名無しさん:03/06/30 07:59
>>664
http://www.sampou.org/haskell ならサーバマシンの調子が悪いそうです

667 :デフォルトの名無しさん:03/06/30 18:04
>>666
復活したようです。

>>665
いないんじゃないですか。人少なそうだし。
俺は、外界との繋がりはsystem :: String -> IO ExitCodeくらいしか知らない。

668 :659=665:03/07/02 07:35
検索の結果、MessageBoxを呼んでいる例は見つけました。(真似たらできました)
でも、*.hiをバイナリ検索しても、IsDBCSLeadByteはインポートされて無いようです。
(CharNextとか、代用できそうなAPIも同様)

これは、Haskellで全角文字を扱うなというお告げでしょうか…

669 :デフォルトの名無しさん:03/07/02 08:58
>>668
IsDBCSLeadByteってwindowsのAPI?
そういうものはそのライブラリとリンクしてつかうんじゃないのかな。
haskellに入ってるわけがないというか。

http://www.haskell.org/libraries/
のInterfacing with other Languages and Systemsとか。

670 :デフォルトの名無しさん:03/07/02 13:46
>>668
>(真似たらできました)
おー、あなたも私から見たらすどい。
よろしければ、MessageBoxを出すコードをこのスレに張って
共有していただければありがたいです。

671 :デフォルトの名無しさん:03/07/02 19:54
>>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を呼ぼうとしましたが、挫折中です。

672 :デフォルトの名無しさん:03/07/02 20:21
>>669
あ、でもリンク先のFFIとか使えばできそう?できるのか俺に?
…ありがとうございます

673 :デフォルトの名無しさん:03/07/05 01:11
FranTkを使った事のあるかたは居られますか?
使おうとしたけど何だかよくわからんかった。(窓使いです)

674 :デフォルトの名無しさん:03/07/06 22:26
>659
ttp://www.sampou.org/haskell/report-j/basic.html
>6.1.2 文字と文字列
>文字型 Char は列挙型のひとつで、16 bit の値からなり、Unicode 標準 [10] に準拠する。
Unicodeなので要らないのでは?
ちゃんと実装されているならばだが。

675 :デフォルトの名無しさん:03/07/07 10:39
> ちゃんと実装されているならばだが。

内部ではUnicodeかもしれないけど、全角文字をgetCharで読むと二回に分けて来るんですよ…

676 :デフォルトの名無しさん:03/07/07 17:07
>>674
Unicodeとその(バイトでの)エンコーディングは別物だ。

677 :デフォルトの名無しさん:03/07/08 02:44
>>676
実際
I/O functionsがbyte読んでそれをかえすだけだから、
Charが16ビットである意味がないんだよな。
謎の設計。

678 :デフォルトの名無しさん:03/07/14 01:55
return () << [1,2,3] が [1,2,3] を返すのは何で? ()モナドの定義?

679 :デフォルトの名無しさん:03/07/14 01:56
ごめん。わかってると思うけど << じゃなくて >> の間違い

680 : :03/07/14 03:29
>>678
リストはモナドだから。

681 :デフォルトの名無しさん:03/07/14 03:58
そういや、漏れもIOモナドはちょっと分かったつもりだけど、
なんでリストがモナドなのがいまいちよく分からん。

682 :デフォルトの名無しさん:03/07/14 04:22
m がモナドのとき return () << m が m になるのはなんで? ()モナドの定義?

683 :デフォルトの名無しさん:03/07/14 04:29
また >> を間違えて << にしてまった

書いた後気づいたのだが return [3,4] >> [1,2] も [1,2] 返すのか
() がポイントではなく return の方がポイントだった
かきまぜてスマン

684 :デフォルトの名無しさん:03/07/14 04:42
return 1 >> [1,2] でも return 'a' >> [1,2] でも同じだな

685 :デフォルトの名無しさん:03/07/14 14:12
>>682
 >>の型からわかる型推論。

686 :デフォルトの名無しさん:03/07/14 14:13
もっというと()はどのモナドでも返せる。

687 :デフォルトの名無しさん:03/07/14 18:52
getChar って結局何返すの?
参照透明性からいって 'a' が入力されたからといって IO 'a' が返るわけじゃないんだよね
たびたび出る話題でスマンが毎回納得にいたらない

688 :デフォルトの名無しさん:03/07/14 19:05
IO

689 :デフォルトの名無しさん:03/07/14 19:27
>>687
意味不明。IO Charだけど?

690 :デフォルトの名無しさん:03/07/14 20:13
>>687
強いて言えば IO 'a'だろうが、それで参照透明性に何の問題が?

691 :デフォルトの名無しさん:03/07/14 22:08
そもそもモナドを理解するのにIOモナドから入る,っていうのが間違っている
という気がする.モナドを理解するためには,次の論文を読むのが吉かと.

Wadler, P. : Monads for functional programming

692 :デフォルトの名無しさん:03/07/14 22:22
>>691
http://www.research.avayalabs.com/user/wadler/topics/monads.html
ここにあるやつ?

693 :デフォルトの名無しさん:03/07/14 23:45
>> 692
そうそう.

694 :デフォルトの名無しさん:03/07/15 00:39
関数型では同じ関数なら何回呼んでも同じ値が返る建前では
実は暗黙のworldが渡されていて暗黙の新しいworldも返されている?

695 :デフォルトの名無しさん:03/07/15 00:47
モナドって、食べ物じゃなかったのか。

696 :デフォルトの名無しさん:03/07/15 01:05
理解するのに論文を読ませる必要がある事自体に
何か問題があるような気もするがー。

697 :デフォルトの名無しさん:03/07/15 01:28
今印刷して読んでます…辞書片手に…どなたか、厨房向けに噛み砕いて説明してホスィ

698 :デフォルトの名無しさん:03/07/15 01:31
>>697
         _,..............._,.......
      ,ノ⌒::::::::::::::::::::::::::::::::::::⌒ヽ_
     _ノ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヾ、
    (::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::)
   _ノ:::::::::::::::;ヘ::::::::::ノ⌒ヽ:::::::::::::::::::::::::::::::::)
  (::::::::::::::::::/   ̄ , ‐-、 |::::::::::::::::::::::::::::::::)     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (:::::::::::::/ヽj _/ -‐-、 |::::::::::::::::::::::::::::::::)    |  トリックだ。
   ):::::::::ヾllli_、_,;iiiillllllllli <::::::;へ:::::::::::::::::(   | 
   (::::::::::::/`i´ ,└=゚'┘  |::::| 6 |:::::::::::::::::::}  <  副作用があるように見えているに
    `〜、 ゝ| _コ、_、 /|::::| ソ/::::::::::;〜"    |  過ぎん。
      ヾ|||ll|||||||||||l〉|  三ー'〜〜"         | 
         |||:二三|||| l  ,三   ヽ、          \______________
         |l  ⌒ ||| ://     ヽ=、-、_
       |l、:( : : ||/ /       ヽ, |    ̄\
      /   ̄   /        ノ /       \

699 :デフォルトの名無しさん:03/07/15 06:43
>>682
return () >> [1,2,3]
後ろがリストなので、これはリストモナド
returnを外して、>> を >>= に変換すると、
[()] >>= (\x -> [1,2,3])
前のリストの要素それぞれに対して後ろの関数を呼んで、その結果を連結したものがこの式の値なので、
(\x -> [1,2,3]) ()
[1,2,3]


700 :デフォルトの名無しさん:03/07/15 08:15
>>694
その通り。IO a はHaskellの側から見ると、
data IO a = IO (World -> (a, World))
このような構造になっていて、実行結果がIOだった場合に、表示する前にWorldが渡されて実行される。
実際はそんな面倒なことしていないと思うけどね。

701 :デフォルトの名無しさん:03/07/15 08:48
半分ぐらい読みました…まさに>>698のおっしゃる通り…それ以後の式を全部λとして渡して、
でっかい合成関数を組み立てて、最後に一括して実行してるようなイメージでいいのでしょうか?→モナド
(と同時に、実装までそうなってないよなあと信じたい)

702 :デフォルトの名無しさん:03/07/15 09:03
>>698
モナドを使えば副作用は「ある」というべきだろう。

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

むしろWorldを変化させながら渡し続けるという発想の転換で(言語に対し)
無いように見せかけているだけだ。人間にとっては副作用は存在する。

703 :デフォルトの名無しさん:03/07/15 09:26
>>702
あるように見せかけているだけだろ?
そうじゃなきゃモナドの意味がない

704 :山崎 渉:03/07/15 09:34

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄

705 :デフォルトの名無しさん:03/07/15 11:33
>>701 よいはず。
あと、遅延実行されるのでそう実装しても効率は悪くならないと思う。

706 :デフォルトの名無しさん:03/07/15 18:29
>>703
逆だよ。というか循環論法。

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

関数型言語と、その副作用をともなう処理を、
副作用の種類(IOとか)毎の(内部状態を保持する)モナドを導入することで*分離*してるだけだ。

707 :デフォルトの名無しさん:03/07/15 18:34
>>705
701のイメージはあってるが、

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

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

通常の式の評価でも下手に(末尾)再帰すると未評価の式の列が莫大になって
すぐオーバーフローする。

708 :701:03/07/15 21:26
大雑把に読みました。後半のパーサは読み飛ばしましたが…
データ型としてのモナドは、要するにC++のクラスtemplate、のようなもの…ですよね?
ということは、IO a -> aな関数が記述不可能なのは、言語の外を相手にしたIOモナドに限った制限で
一般的にはそんな制限は無い、で合ってます?

簡単なサンプルコードどこかにないかな…

709 :デフォルトの名無しさん:03/07/15 21:44
>>708
リストから成分を抽出できるでしょ。

710 :デフォルトの名無しさん:03/07/16 00:34
>>709
ありがとです。
で、>>681氏と同じ疑問に行き当たるわけですが…
リストが状態を持っているとは思えないのですが、なぜモナド?
(a, b)とか他の一般の構造化型はモナドじゃ無いですよね。

711 :デフォルトの名無しさん:03/07/16 01:00
>>710
リストを丸ごと全部で値と思わずに一部だけ更新したいんじゃない?
一部だけ更新するような操作には普通副作用がある。

…違うかな?

712 :デフォルトの名無しさん:03/07/16 01:52
リストは >>= と return がモナド演算の法則を 満たしているからモナドなんじゃないかな
(a,b)とか一般の構造型はコンテナの中身の個数が1個ではない定数なのでうまく
モナド演算を定義できないような気がする
リストモナドの中身は任意個数。IOモナドは1個固定。

713 :デフォルトの名無しさん:03/07/16 02:29
眠れない…
えーと、要するに、必然性は無いけど、
モナドということにすると [a] >>= (\e -> return (f e)) みたいな便利機能として使えるので
モナドということにしてある、ということですか。

>>711
よく見て無いのですが、ライブラリリファレンスにMutable ArraysとしてIOArrayが書かれてますので、
もしリストモナドで一部の更新が可能なら、こんなもの用意しないと思うので、それは違う気が
(我ながら無茶苦茶な論法だ…)

714 :デフォルトの名無しさん:03/07/16 02:51
あれもこれも、Haskellの和書が出ないのが悪い。

715 :デフォルトの名無しさん:03/07/16 10:48
>>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)

716 :デフォルトの名無しさん:03/07/16 12:02
だれとはなくに
「型構築子」IO はモナドだけど IO a はモナドじゃないよ。
「型構築子」[] はモナドだけど [a] はモナドじゃないよ。


717 :デフォルトの名無しさん:03/07/16 12:17
>>713
haskellのリストやアレイはは一部を変更すると全部コピー。
というのは、そのデータ(リスト等)が他の場所で使われるかもしれないから。

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

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

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

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

haskellプログラムがわからみればIOも他のモナドもかわらない。
プログラマから見たときも結局は同じこと。謎の内部状態をもつ
モナドを受渡しながら処理を順次実行するわけだから。
内部で定義されたモナドでもそのモナドの性質をみとおさなければ、
副作用と同様でしょう。

718 :デフォルトの名無しさん:03/07/16 12:30
別のいいかたをすれば、711が書いているように、普通一部を変更すると
副作用が出るわけで、関数型言語では一般にはそれができない。

だが、その副作用/状態を追跡するモナド(STArray,IOArray等)を引数と
して渡し続けながらの順次計算であれば一部変更もできるわけだ。

719 :デフォルトの名無しさん:03/07/16 12:45
だれとはなくに
「データ構築子」はファーストクラスだけど
「型構築子」はファーストクラスじゃないよ。


720 :デフォルトの名無しさん:03/07/16 13:13
だれとはなくに
モナドは「型構築子」の性質であって、データの性質じゃないよ。

721 :デフォルトの名無しさん:03/07/16 15:29
>>717
まず、すまんかった。
確かに中身を見なければ副作用を起こすことは可能だ。そちらの言う通り。

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

>(IO/状態)モナド内の計算の実行は、手続き型と同様にできるとおもうけど。
main = sequence_ $ reverse $ [putStr "\n", putStr "a", putStr "b"]
こう言うのはどうする…?
…特殊すぎるか。他は最適化されててもおかしくないやね。
>>718
少なくともIOArrayはIOモナドの一部であってモナドそのものではないと思うが。
>>719
しかし少なくともカリー化はされている。

722 :デフォルトの名無しさん:03/07/16 16:39
>>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以降です。

723 :デフォルトの名無しさん:03/07/16 17:37
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


724 :デフォルトの名無しさん:03/07/16 18:28
>>723
ID じゃなくて Id

725 :デフォルトの名無しさん:03/07/16 20:17
突然ながら、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が消せない…

726 :デフォルトの名無しさん:03/07/16 22:59
>>720
>  以降の式だが、自分は a >>= (\x -> b) の式に出てくるλのことだと思っている。
>  そして、715のそういうふうにとは、どでかい合成関数を作ってからそれを実行するということ。

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

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

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

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

確かに、モナドはそれぞれIOとSTだ。
モナドの一部っていうのもよくわからないが…
monad-awareという感じか。

727 :デフォルトの名無しさん:03/07/16 23:31
>>725
__stdcall -> ccall、ffi_c.hc->ffi_c.c

ghc -ffi ffi.hs ffi_c.c
とすると何のWarningもなくコンパイルを通った(Windowsではない)。

728 :デフォルトの名無しさん:03/07/17 01:25
誰か Haskell の和書書いてくれよ。
5000円くらいまでなら買うからさ。
和書ないとやる気が出ねぇし、普及なんて夢のまた夢だよ。

729 :デフォルトの名無しさん:03/07/17 02:06
Haskellはドイツ語でクシャミの事

730 :デフォルトの名無しさん:03/07/17 04:00
>>727
拡張子を変えたら警告が出なくなりました。
よくよく見てみれば.hcってコンパイラが生成したCソース用の拡張子…
どうも、お騒がせしました。

731 :デフォルトの名無しさん:03/07/19 19:40
>>729
くしゃみが出るくらいに香辛料の効いたカレーを“Haskell Curry”と云う!?

732 :デフォルトの名無しさん:03/07/19 22:54
>>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," ")


733 :デフォルトの名無しさん:03/07/21 01:46
Randomを使ったコードを少し書いて見ました。
毎回の let (r2, g2) = random g1 in … 数字は使うたびに増やす…が面倒だったので、
モナドにすれば好きな時に r2 <- nextRandom とか書けるのかなあ、とか思ったり。
(既にあるのかもしれませんが)

>>732
うう、ありがとうございます。しかし、私のレベルでは何をやっているのかと用途の両方がわかりません…。

734 :デフォルトの名無しさん:03/07/21 01:52
>>732
|無理しているので、return a >>= k = k a が成り立たなくなってたりしているので注意。
モナドの法則を満たさなくてモナドといえるの?

735 :デフォルトの名無しさん:03/07/21 02:33
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)

736 :デフォルトの名無しさん:03/07/21 02:45
括弧が要るんですね…
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)
動いたー!

どうも、スレ汚しごめんなさい

737 :デフォルトの名無しさん:03/07/21 02:59
>>733-736
そんなことをする必要はない。

randoms (mkStdGen 1) ::[Int]

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

# あとはそれにmapでもなんでもして加工すればいい。

738 :デフォルトの名無しさん:03/07/21 15:25
ハクションと似てなくもないような

739 :デフォルトの名無しさん:03/07/21 19:05
>>737
なるほど!遅延評価を忘れてました。
しかしそれでも2個の乱数を取ってきたい時は、let (r1:r2:rs') = rs (以降はrs'から取る) みたく
乱数列を意識して渡していかないといけないような。いや、ずっと書きやすいではありますが。

740 :デフォルトの名無しさん:03/07/21 20:22
>>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]

741 :デフォルトの名無しさん:03/07/21 20:26
上のコードの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

742 :デフォルトの名無しさん:03/07/21 20:38
>>739
なんかまだ手続き型の頭のような気がする:)

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

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

# f 10 [] randomlist のように使う。
# g で欲しいものを計算。

743 :デフォルトの名無しさん:03/07/21 20:39
う、結局が二つも。

744 :デフォルトの名無しさん:03/07/22 01:26
>> 740
Num a が気になる

745 :デフォルトの名無しさん:03/07/23 22:09
GHCって実はfromIntが無かったりします…?
Variable not in scopeと言われるのですが

746 :デフォルトの名無しさん:03/07/24 01:42
>744
気にするな。

747 :デフォルトの名無しさん:03/07/24 10:52
>>745
fromInteger じゃだめなの?
今のHaskell 98 の Prelude には fromInt は無いのでは。

748 :デフォルトの名無しさん:03/07/24 20:52
>>747
いえ、Intからの変換にfromInteger (toInteger n)と書くのが冗長な気がしただけです。

749 :デフォルトの名無しさん:03/07/29 00:04
>>748
Enum クラスのメソッドが使えるのでわ。
toEnum :: Int -> a
fromEnum :: a -> Int

750 :デフォルトの名無しさん:03/08/01 10:11
>>749
FloatやDouble…のつもりでしたが、それらもtoEnumでいけるのですね。
ありがとうございます。そして遅レスごめんなさい

751 :デフォルトの名無しさん:03/08/02 01:34
ニセ手続き型?の基本的なもなどはなんとなくわかった(というか「同じやん」ということで)
けど、それ以外のモナドがワカンネ。
ライブラリ読んでみたりしたけど激むず。

モナド難しいですね。

ニセ手続き型を理解したあとは、どうしたらよいのでしょうか


752 :デフォルトの名無しさん:03/08/02 19:05
GHCのText.Regexで
matchRegex (mkRegex "abc") "xabcx"
=> Just []
matchRegexAll (mkRegex "abc") "xabcx"
=> Just ("x","abc","x",[])
これってバグ?

753 :デフォルトの名無しさん:03/08/02 19:42
あ、二つ目は書き間違い。
matchRegexAll (mkRegex "abc") "xabcx"
=> Just ("","abc","x",[])


754 :デフォルトの名無しさん:03/08/02 19:54
モナドの問題点とかは特に上がってないのですか?
実行効率周りとか。

755 :デフォルトの名無しさん:03/08/08 01:02
GHC 6.0.1 Released

756 :デフォルトの名無しさん:03/08/08 07:07
>>755
いただきました

757 :デフォルトの名無しさん:03/08/11 13:30
素朴な疑問なのですが Haskell の言語使用はかなり頻繁に変わるものなのでしょうか?
2000年あたりに出版された本で勉強しようかと思っているのですが、それいらい大きく変わったとか、
近いうちに大きく変わるとか、ありますか?

758 :デフォルトの名無しさん:03/08/12 00:36
基本はHaskell98から変わってないんじゃないだろうか。
処理系によっては独自拡張があることも。

759 :デフォルトの名無しさん:03/08/12 21:05
>>758
サンクスコ。
言語仕様は大きく変わってないから、そのころの本で勉強しても問題ないということですね。
がんばって勉強してみます。
(関数型言語は使ったことがないから、なじめるかわからないけど)

760 :デフォルトの名無しさん:03/08/13 20:49
確かに言語仕様はほとんど変わっていないが、
ライブラリがかなり違うような気がする。
ライブラリは階層化ライブラリ(Data.Listとか)
で決まりでいいのだろうか。

標準ライブラリ以外になると混沌としか言い様がない

761 :デフォルトの名無しさん:03/08/13 21:45
Hugsもライブラリを2通り持ってるね。

762 :デフォルトの名無しさん:03/08/13 22:52
http://www.haskell.org/onlinelibrary/
ここにあるのが標準ライブラリーで、足りない部分は、
http://www.haskell.org/libraries/
から探すとか、自作するということですか?

http://www.haskell.org/ghc/docs/latest/html/libraries.html
で、これが HUGS についてくるライブラリー群?

763 :デフォルトの名無しさん:03/08/14 00:53
Hugsのライブラリについて書いてあるよ。
http://cvs.haskell.org/Hugs/pages/hugsman/libs.html
GHCは5.04.1=>6.0でライブラリ関係が少し変わっているような気がする。

764 :デフォルトの名無しさん:03/08/15 02:04
前スレは約一年に使い切ったのに、part2 に移行して少し停滞してます。

765 :デフォルトの名無しさん:03/08/15 02:29
http://www.cse.ogi.edu/〜hook/cse532f99/haskell1.htm
↑赤黒木の実装に感動。
だれか、コンパクトなdelete実装しれ!

766 :山崎 渉:03/08/15 16:09
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン

767 :デフォルトの名無しさん:03/08/19 11:49
6.0.1入れたらwxHaskellが使えなくなっちまった

768 :デフォルトの名無しさん:03/08/19 15:54
win de GUI no hito mada-?

200 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)