1 名前:潜伏していた1 mailto:sage [02/02/16 16:55] 何とか生き残れました。 前スレ pc.2ch.net/test/read.cgi/tech/996131288/l50 関連 >>2 以降
51 名前:デフォルトの名無しさん [02/03/19 22:40] 質問ですいません。 「lambda lifter」って、どういう処理なんでしょうか? 局所関数(関数内の関数)を展開して外側の関数と一体化する処理らしいですけど 実行速度改善のための最適化処理の一種だと考えてよいのでしょうか? citeseer.nj.nec.com/lester91modular.html それと関数型言語にある代表的な最適化処理があれば教えてください。
52 名前:デフォルトの名無しさん mailto:sage [02/03/19 22:42] >>51 Cのインラインと違うの?
53 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/03/20 01:04] > # 今やMicrosoft Research(CLI!)のSimon P. Jonesのが一冊、 research.microsoft.com/~simonpj/Papers/papers.html ここ (の一番上のとこ) から落とせるやつですな。
57 名前:無名λ式 mailto:sage [02/03/20 10:30] research.microsoft.com/~simonpj/win32-cheat.html これ面白いよね。この作業苦痛じゃないのかな...
58 名前:デフォルトの名無しさん mailto:sage [02/03/20 12:17] >>57 なんだか大変そうですね。これホントに自分でやってるのかな?(藁
59 名前:デフォルトの名無しさん mailto:sage [02/03/21 16:58] 仕事でcygwinを強いられるSimon萌え!
60 名前:デフォルトの名無しさん mailto:age [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 名前:デフォルトの名無しさん mailto:sage [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 というものがリリースされたようです。 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] www.teu.ac.jp/kougi/koshida/Prog6/index.html ↑ ない・・・
87 名前:デフォルトの名無しさん [02/04/17 17:53] www.brl.ntt.co.jp/people/mizuhito/CS/ ↑ ここも講義録だったような気がするんだけど、つながらない・・・
88 名前:デフォルトの名無しさん mailto:sage [02/04/18 01:13] >>87 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 名前:デフォルトの名無しさん mailto:sage [02/04/19 00:49] >>89 getLine の型は IO String だが putStr は String 型を貰うので 型エラーになります。(IO が付いているかいないかの違いだけど) getLine >>= putStr とすれば意図してるように動きます。 「>>= って何?」などと思うのでしょうが、説明するのは大変なので 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 名前:デフォルトの名無しさん mailto:sage [02/04/22 05:02] >>91 case c of {'y' -> sel (x + 1) ;'n' -> x ;_ -> sel x} この式の型は何でしょう?
93 名前:91 mailto:sage [02/04/22 06:35] IO Int …のつもり…です。 それをreturnで返していますから、selの返値もIO Intで、 selの型は Int -> IO Int … エラーになるということは、間違った理解なのでしょうけれど…
94 名前:91 mailto:sage [02/04/22 06:48] sel (x + 1) と sel x が IO Intなのに、'n' の時の x がただの Int だからいけない…? とすれば、ただの Int を IO Int に揃える必要があるということですか?
95 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [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 mailto:sage [02/05/01 23:13] IO型にするだけで、脱出はしないということですか?
99 名前:デフォルトの名無しさん [02/05/02 00:29] 返り値という表現に違和感を感じので。 深い意味はないです。return は、返り値を もって呼び出し元へ帰る命令ではなく、単に a 型の値を m a 型の値に写像する関数だと いってみただけです。
100 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/05/03 16:10] ML、Haskellってお互い仲悪いんですか?
107 名前:デフォルトの名無しさん mailto:sage [02/05/03 16:11] ゆーざーがね
108 名前:デフォルトの名無しさん [02/05/03 19:18] 仲悪いなんて聞いたこともないぞ。 なかはわるくないです。 MLとHaskelは ちょっと雰囲気は違うような気はしますけどね。 でもまあそれは両方使ってみれば解ることで。
109 名前:デフォルトの名無しさん mailto:sage [02/05/03 20:43] >106 Haskell-MLというのが有るらしいですYO!
110 名前:デフォルトの名無しさん [02/05/04 23:53] Haskellは、純粋関数型言語だから MLの不純さが嫌なのかも? どうなの?>ALL
111 名前:デフォルトの名無しさん mailto:sage [02/05/05 00:01] 確かにHaskellの処理系の効率が良くなればMLは不要になる。
112 名前:デフォルトの名無しさん [02/05/05 01:34] MLとHaskellは設計思想自体が全然違う気がします。 ML(Ocaml)は現実的にある程度の副作用を認めている代わりに 使っているとコンパクトな感じがします。 副作用も使えると言うだけで、副作用のある構文を使わずに書く事は 全然出来ますし、遅延評価もコードによって簡単に実現できます。 未だ出来あがっていないものの、ML2000の仕様書では言語自体に 遅延評価など新しい機能がかなり含まれています。 Haskellは純粋を歌ってはいますが、 結局の所モナドというものに問題を押しこんだだけのようにも思え 美しくないようにも思われます。 仕様もわりとごちゃごちゃしている気がします。 言語の性質上ML並みに速くなる事も難しいのではないかと思います。
113 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/05/06 02:01] 勉強中だからよく分かんないけど、state モナドの事?
121 名前:デフォルトの名無しさん mailto:sage [02/05/06 03:57] MLと(Haskellとも)離れますが、 モナドを使うと、手続き型言語を 関数的に解釈することができますか?
122 名前:デフォルトの名無しさん [02/05/06 10:53] >>121 「関数的に解釈」の意味がよくわからない。 Haskellでインタープリタが書けるか? という意味じゃないよね。
123 名前:デフォルトの名無しさん [02/05/06 11:38] sato-www.cs.titech.ac.jp/prism/index.html
124 名前:デフォルトの名無しさん mailto:sage [02/05/06 12:35] >>122 モナドを使うと、どうみても副作用な操作でもfunctionalな 操作と解釈できるわけですが、それと同じように手続き型言 語のプログラムに純関数的な意味を与えることができますか? という意味です。
125 名前:デフォルトの名無しさん mailto:sage [02/05/07 00:50] >>124 Idealized Algolとかいうのがなかったっけ。
126 名前:デフォルトの名無しさん [02/05/07 01:16] グローバル変数が見当たらないんですが・・・
127 名前:デフォルトの名無しさん mailto:sage [02/05/07 18:47] >>121 >>124 できません。 強引に無理矢理こじつけることならできるかもしれないけど意味無し。
128 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/05/07 23:11] >>130 なるんじゃない? きちんとやれば操作的意味論だろ。
132 名前:デフォルトの名無しさん [02/05/08 00:35] 結局、Haskellは非正格言語なのが問題じゃない? 実際に各項が何時評価されるか?どういう順番で評価されるか? ということが予測しづらい(できない)からねー。 その点、正格言語や手続き型言語は評価の順序が一目瞭然だからねー。 Prologにカットオペレータがあるように、Haskellも競争書き込みで 評価の順序を、ある程度コントロールできる様にしたらよいのかな?
133 名前:デフォルトの名無しさん mailto:sage [02/05/08 00:39] >>132 ?? 問題なのは結果であって、 順番なんてどうでも良いだろう。 順番じたいが望む結果に含まれる (例えば入出力とかGUIとか)なら、 そこだけモナド使えば良いしさ。
134 名前:デフォルトの名無しさん [02/05/08 07:47] >>133 133も書いていますがコンピュータの入出力は ストリームを基本としているものが多いですよね。 しかし、ストリームにとって並び方も結果の内ではないでしょうか? プログラムは外部と入出力して、なんぼのものだと私は思っています。 ゆえにストリームのようなモノに対して実行順序がコントロールできることは プログラミング言語にとって重要であると思います。 そうじゃなきゃPrologもカットオペレータなんて付けなかった と思います。 あと私のような消防には、実行される順序が予測できないと デバッグしづらいです。(もしかして、こっちが本題か?)
135 名前:デフォルトの名無しさん mailto:sage [02/05/08 08:13] >>134 ほんとに消防だな。Haskellだって ストリームの順番が狂うわけはないだろう。 ストリームは「いくらでも長くなりうる列」 というデータだ。関数型の基本はデータの値を 求めることなんだから、モナドなんか用いなくたって ちゃんと求まる。
136 名前:チュウボウ [02/05/08 09:56] なんで副作用って困るの? よく聞くはなしでは 副作用あり=>参照透過性がない=>数理論理的でない 数学って、まったく副作用のない構成になっているの?
137 名前:デフォルトの名無しさん mailto:sage [02/05/08 10:03] > 数学って、まったく副作用のない構成になっているの? 副作用がなんなのかわかってる?
138 名前:デフォルトの名無しさん [02/05/08 10:04] 副作用が無ければ、デバッグ簡単
139 名前:チュウボウ [02/05/08 11:10] >副作用がなんなのかわかってる? オレの理解 状態という一種の記憶域のようなものがあってその値が 変わること。 数学ではオートマトンとか除けば、状態のような概念は 知らない。
140 名前:デフォルトの名無しさん mailto:sage [02/05/08 11:55] >>136 評価順序に依存してるから
141 名前:チュウボウ [02/05/08 12:32] 順序なしで考えるより、順序を指定されて考える方が楽じゃない?
142 名前:デフォルトの名無しさん mailto:sage [02/05/08 12:34] >>141 そう思えるのはモノが単純な場合だけ
143 名前:チュウボウ [02/05/08 12:49] 状態(もの)と動作(働き)があった方が考えやすい気もする。 主語+述語が人間の頭にあってるような気がする。 (状態があるならば副作用があると思ってる) ペトリネットなんかかじってみてると、そんな気がしてきた。 ttp://www.aichi-pu.ac.jp/ist/~qua/intropn/intropn.html
144 名前:デフォルトの名無しさん mailto:sage [02/05/08 15:04] 副作用って、関数が値を返す以外の何かの作用を起してしまうことでしょ。 「なぜ関数プログラミングは重要か」に副作用が無い事のよさが力説されてた。 実感湧かなかったが。
145 名前:デフォルトの名無しさん mailto:sage [02/05/08 18:09] >>143 日本語は主語なんかなくても良い言語だよ。英語カブレめ(w 実際この書き込み(145かな?)のなかに主語のある文は一つもないが、 意味はちゃんと通じるだろ?
146 名前:5月病 [02/05/08 18:24] オレも人並みにSOE本ながめたりして、haskellの理解に 努めたわけよ。モナドの意味もつかもうとしてがんばった んだけど、あるときふと、こんなに無理して副作用さけよう という努力はなんなんだろうと感傷的になるわけよ。
147 名前:デフォルトの名無しさん mailto:sage [02/05/08 18:26] Cでグローバル変数はやめよう、と似たようなもんじゃないの?
148 名前:チュウボウ [02/05/08 18:35] >>145 >日本語は主語なんかなくても良い言語だよ おお、そうであった。日本語は述語だけでつうじるのだ。 日本語こそ真の関数型言語であった。なんてわけないか。
149 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/05/08 19:19] 無限列から無限列への対応関係を陽に書くことはできないが、 無限列の有限部分列から有限部分列への対応関係なら書ける。 そしてその対応関係が再帰的に定義できているなら、 限りなく計算を続けられる。 ただ、有限部分列の入力から続きを計算する際に何度も同じ計算が 繰り返される場合がある。そういう場合は内部状態としてメモしておけば 計算効率が改善される。
154 名前:デフォルトの名無しさん [02/05/08 19:21] >>153 現実的にはどんなケースがありますか?
155 名前:デフォルトの名無しさん [02/05/08 19:39] 無限ストリームはメッソドの呼び出しを遅延評価するように しておけばJavaなんかでも再帰的に記述できるよ。
156 名前:デフォルトの名無しさん mailto:sage [02/05/08 19:49] >>154 httpプロクシサーバとか。 リクエストは無限列とみなせる。 以前にあったリクエストなら、内部状態としてキャッシュしとけば 速くなる。この場合でも副作用は別に必須じゃないけどね。
157 名前:デフォルトの名無しさん mailto:sage [02/05/08 20:42] 多分もっと技術レベルが高かったら萌えるんだろうなぁ。 今はC、C++、C#、Javaで手一杯だよ・・・
158 名前:デフォルトの名無しさん mailto:sage [02/05/08 20:47] >>156 副作用が絡むのは配列やオブジェクトの部分更新とかが絡むときが典型。 もちろん更新する値以外も全部複製してしまえば副作用は消せるが、 効率は・・・・・・(ガクガクブルブル) ---- >>155 遅延評価は評価の仕方を「メモ」って行くわけだが、 結構、後でそのメモ・ツリーを辿るのに時間がかかったりする。
159 名前:153 mailto:sage [02/05/08 20:50] >>157 てひひひー。C#は全然把握してないッスー。
160 名前:デフォルトの名無しさん mailto:sage [02/05/08 21:19] C#っていってももともとは.net frameworkのために作られた言語だからね。 シンタックスだけはJavaに似てるけど。逆に言語から仮想環境を想定するとしたら どんなものになるんだろね。Hakell、というより関数型言語全般のために 作られたようなもの。あるとしたらどんなもんでしょ?
161 名前:153 mailto:sage [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] www.yfcbookshelf.com/ml_lisp_scheme.htm ここの下の所に「Programming Languages:Concepts and Constructs 2/E」 の「日本語訳版を期待」という文字が見えるんですが、今翻訳中なのでしょうか? もしそうなら超期待!! >>158 どうも効率面を問題にされているようですが、 私自身たいして関数型言語の経験はありませんが、 仕事の関係上感じている事です。 コンパイラ作ってると、この副作用がないというのが 結構オプティマイズに有効だったりするので、 結構これからの言語の核にすえるのは悪くないと最近思ってます。 計算の依存関係が明白でないと最近のスーパスカラーみたいに 命令スケジュールが必要だと面倒です。 全体的とはいわなくても部分的には関数型言語が高速化への寄与大きいと考えています。 計算機の並列度が上がってくると、少し考え方を変えてみるのも悪くはないと思っています。 ちなみにモナドはあんまり良くわかっていません。(TT) だれか教えてくれー
165 名前:デフォルトの名無しさん mailto:sage [02/05/09 02:25] >>163 昔のバージョンではストリームでI/OやってたんだよHaskellは。 I/Oエラーが扱いにくくってなあ… モナドの方が楽だよ。
166 名前:134 [02/05/09 02:43] >>165 本当ですか? 何時の頃のモノなんでしょう? 処理系の名前とバージョンを教えてもらえませんか? >I/Oエラーが扱いにくくってなあ… >モナドの方が楽だよ。 たしかに、そうですね。 うーん、モナドから逃げてるのかなー?俺は
167 名前:デフォルトの名無しさん mailto:sage [02/05/09 02:45] モナドを意味づける(動作を定義する)のにストリーム使えるしね。
168 名前:デフォルトの名無しさん [02/05/09 02:46] 副作用推進派のかた、もっと高階関数を活用してみては どうでしょう? 関数も各引数を繋ぐための糊だと考えると 副作用が無いほうが嬉しいのでは?
169 名前:158 mailto:sage [02/05/09 02:50] >>164 効率は計算機上での実行の際のことです。 ・・・・・・というか効率を考えた動作をガチガチにプログラマが記述する際に 場合によってはあるほうが便利ということですね。 一方、最適化のためのプログラムの解析においては 一般に副作用がないほうがやりやすいのは確かだと思います。 だからこそ代入を消してSSAなんて形式に落としたりもするんでしょうし。
170 名前:158 mailto:sage [02/05/09 02:51] >>168 行列を配列並みの高効率で実装できる方法があるなら是非そう致したいと。
171 名前:158 mailto:sage [02/05/09 02:54] 引数で指されるオブジェクトがコピーのコストが気にならないほど小さいうちは それほど悩ましくないんですが・・・・・・。
172 名前:デフォルトの名無しさん mailto:sage [02/05/09 02:57] >>166 Haskell 1.1まではそういう仕様だった。全ての準拠処理系がそうなって たはず。stream I/Oとcontinuation-based I/Oの両方が使えた。 www.haskell.org/definition/haskell-report-1.1.tar.gz Monadic I/Oがあんまり便利なんで今は全部そっち。
173 名前:デフォルトの名無しさん mailto:sage [02/05/09 03:04] >>170 配列使えばいいじゃん。副作用なしの。 SISALっていう関数型言語がそうやって、スーパーコンでも Fortranに負けない性能出してたよ。 Fortran厨は他の言語が書けなかったので普及しなかったが。
174 名前:デフォルトの名無しさん mailto:sage [02/05/09 08:17] なんかこのスレ人増えたな。
175 名前:158 mailto:sage [02/05/09 09:51] >>173 www.sys.uea.ac.uk/~jrwg/Sisal/index.html を読んで見てるけど、やたら配列に特化した言語だなぁ。APLを思い出したよ。 サワリの部分を読んでの感想としては、 配列に特化した構文が多すぎるし、拡張性にも疑問が残る。 この言語を実装する上で研究された内容(解析や最適化の技術)は有益そうだが、 それをつかって書けと言われると結構苦痛かも。 CやFortranのソースに混ぜられると言われてもねぇ。
176 名前:158 mailto:sage [02/05/09 10:01] でついでに、「スーパーコンでも」というよりは むしろ「スーパーコンのために」開発されたようだ。 スパコン以外にも移植はされているようだが、 どうもメインの技術ははデータ並列っぽい気配が。 もっと詳しく読んでみないと判らない部分もあるが、 そうなると今時のマシンの記憶階層と マッチするかどうかは些か怪しげ。
177 名前:Super Combinator [02/05/09 11:43] MonadとInfinite listの関係について知りたければ、 "Comprehending Monads", Philip Wadler読め。面白い。
178 名前:デフォルトの名無しさん mailto:sage [02/05/09 13:23] >>176 文句の多いヤツだな。
179 名前:デフォルトの名無しさん mailto:sage [02/05/09 15:07] >>158 は >>173 を「Sisal 使えば?」と読んでそうな感じだが >>173 は「Haskell の副作用無しの配列使え」と言ってるのだろう。たぶん。
180 名前:デフォルトの名無しさん mailto:sage [02/05/09 20:50] >>179 どんな実装してるんでソ。>「Haskell の副作用無しの配列使え」 私が読んだ何件かの「副作用なし配列」の論文は皆頑張っていたけどヤパ−リ オーバーヘッドが大きくて生の配列ほどには早くない・・・・・・。
181 名前:デフォルトの名無しさん [02/05/09 21:06] >>132 >Prologにカットオペレータ カットオペレータ思い出した。これでProlog嫌いになった。 ところで、Prologも関数型かな? 副作用ないみたいだし。 真偽の2値のみを返すと考えられるかな。もっとも偽の値が 返ればストップするので真のみ返るが。
182 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:age [02/05/10 03:55] Mondrianって言語がHaskellをコンパクトにして OO対応にしたような言語で、.NETにも対応してるらしい んだけど、この言語ってどうですか? www.mondrian-script.org/
186 名前:デフォルトの名無しさん mailto:sage [02/05/10 03:57] >>184 ていうか、副作用が無いってのはようするに 思わぬバグが混入しないようにする効果があるわけだから、 デバッグ以前にバグが混入しにくいのでは?
187 名前:デフォルトの名無しさん mailto:sage [02/05/10 04:05] 代わりに呼び出し関係が入り組んでくるからねぇ。>>186 やっぱ銀の弾丸はないもんだよねぇ。
188 名前:デフォルトの名無しさん [02/05/12 02:28] >>186 でもバグが無くなる訳ではないでしょ? 仕様のバグという根絶不可能なバグがあるんだから。 やっぱデバッガ必要でしょ。
189 名前:デフォルトの名無しさん mailto:sage [02/05/12 10:10] >>188 既存のデバッガ的な考えは合わないよね。
190 名前:デフォルトの名無しさん mailto:sage [02/05/12 19:07] >>184 副作用がないので Unit Test あたりが向いてるかも。
191 名前:デフォルトの名無しさん [02/05/13 22:37] www.haskell.org/libraries/#testing のあたりだろうか。
192 名前:デフォルトの名無しさん [02/05/13 22:39] >>188 仕様のバグとデバッガが関係あるんですか?
193 名前:デフォルトの名無しさん mailto:sage [02/05/13 22:47] 副作用が無いんだから、 コードの打ち間違いと理論にだけ気をつければ やっていけます。
194 名前:Super Combinator [02/05/13 22:57] >>192 帰納推論系の人たちで、 間違った具体例の指摘から仕様を直したり、 なんて事が流行ったよね? そのengineのUI programはdebuggerと呼ばれることが多かった。
195 名前:デフォルトの名無しさん mailto:sage [02/05/13 22:59] なんじゃそら 屁理屈か
196 名前:デフォルトの名無しさん [02/05/14 16:02] つまり、従来のデバッガの役割は 非常に少なくなると言うことでいいのか?
197 名前:デフォルトの名無しさん [02/05/15 00:14] デバッガの使い道ってバグを取るためだけの物かなー?
198 名前:え? [02/05/15 00:35] デバッガをバグ取りに使わないの?
199 名前:デフォルトの名無しさん mailto:sage [02/05/15 01:06] >>198 プログラミング言語の前に日本語を勉強尻。
200 名前:え? mailto:sage [02/05/15 01:16] >>199 君こそ根。
201 名前:デフォルトの名無しさん [02/05/15 01:24] Stream IOを勉強した頃は、同期関係の bugがあったら取り難そうだなあ、 とおもた。 Monadになったら改善できるのかしらん?
202 名前:デフォルトの名無しさん mailto:sage [02/05/15 01:28] >>198 はすさまじいアフォ
203 名前:デフォルトの名無しさん mailto:sage [02/05/15 01:28] >>201 並列処理の話?
204 名前:え? mailto:sage [02/05/15 01:29] >>199 は、すさまじいエロ
205 名前:デフォルトの名無しさん mailto:sage [02/05/15 01:38] >デバッガの使い道ってバグを取るためだけの物かなー? 他に使い道は?
206 名前:デフォルトの名無しさん mailto:sage [02/05/15 02:30] >>204 ウザイ 「バグ取りの他に使う」と「バグ取りに使わない」の 区別もつかない糞は小1からやりなおせヴォケ
207 名前:デフォルトの名無しさん [02/05/15 12:22] >>206 その前にお前は>>205 の質問に答えろよ。
208 名前:デフォルトの名無しさん [02/05/15 13:45] 静的なプログラム検証ツールはデバッガの範疇に入るの? こういうものが作りやすいのが関数型言語の特徴って言われてるから そっちに期待しちゃうな。あくまで素人の考えだけど。
209 名前:C厨房 mailto:sage [02/05/15 14:01] lintはデバッガって言うか?
210 名前:デフォルトの名無しさん mailto:sage [02/05/15 14:24] なんでHaskellスレは厨房がワラワラと寄ってくるんだろ。 無視できない何かがあるんですかねー。
211 名前:206ではないが [02/05/15 14:28] 関数型言語にあてはまるかどうかは知らんが、 他人が書いたプログラム(またはライブラリ)を理解するために デバッガを使って動作を見るのは、けっこうよく使う手だと思う。 >>208 普通は静的な検証ツールはデバッガには含めないと思うけど、 参照透明性の高い関数型言語では、静的/動的の境界はどう定義するんだろう? 例えば多相型の型エラーをデバッグするのって、静的なのか動的なのか…
212 名前:デフォルトの名無しさん mailto:sage [02/05/15 14:42] 言語理論に比べて処理系のセオリーが 弱い気がするのは気のせいでしょうか?>>211
213 名前:デフォルトの名無しさん [02/05/15 15:27] >>210 お前のような厨房がな。
214 名前:201 mailto:sage [02/05/16 00:31] >>203 並列って言うか、そもそも関数型言語は逐次処理でもないじゃん。 木の好き勝手なところを簡約していくっていうか。 そでで再帰的に定義された無限リストの簡約とかまちがうとこわいな。と。 P.Wadlerの入門書にもそれがらみの話あったよねえ?
215 名前:デフォルトの名無しさん [02/05/16 01:21] 関数プログラミングでは、動作手順を記述するわけではないので、命令プログラミングの 動作をステップ実行する従来のデバッグ手法のイメージとはあいいれないかも。 でも、計算順序を無理矢理いれこむ、モナドIO使いまくりのプログラミングなら 命令プログラミングとおんなじだから、print デバッグができるよ。
216 名前:デフォルトの名無しさん [02/05/16 01:39] Windowの表示とかやる場合はモナド使うんですか? 関数型でイベント駆動処理を書くのって、 ちょっと想像できないんですが。
217 名前:デフォルトの名無しさん mailto:sage [02/05/16 13:57] Fudgetあげ ようとしたけど古いから sage
218 名前:デフォルトの名無しさん [02/05/16 14:49] >>216 GTK+HS のサンプルコードとかみてみれば?
219 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/05/18 05:44] ウリです。
226 名前:デフォルトの名無しさん mailto:sage [02/05/18 05:45] デバッガっでようするにアナライザだろ。 デバッガがバグを指摘するわけじゃなし。
227 名前:デフォルトの名無しさん mailto:sage [02/05/18 13:13] >>226 書くのが遅い
228 名前:デフォルトの名無しさん [02/05/19 20:37] >>221 遅延評価だと、どのprintが先に実行されるかわかんなくねえ? そんなんでデバッグできるのか?
229 名前:デフォルトの名無しさん mailto:sage [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「関数プログラミング」 www.amazon.co.jp/exec/obidos/ASIN/4764901811/qid=1022390348/sr=1-17/ref=sr_1_2_17/250-5692221-3686632 萩谷昌己「関数プログラミング」 www.amazon.co.jp/exec/obidos/ASIN/4535608172/250-5692221-3686632 あたりで。
233 名前:デフォルトの名無しさん [02/05/26 18:09] まさみさまがそんな本書いているとはしらなんだ.. 竹内先生の Lisp本もじつは読んでないんだよなあ。
234 名前:デフォルトの名無しさん mailto:sage [02/05/26 20:36] 日本語で書かれたHaskell本はいつ頃出ますか? SMLだって出てるのに……。
235 名前:デフォルトの名無しさん mailto:sage [02/05/26 22:00] >>234 日本のHaskellユーザの数が、初回印刷部数(200)を越えたら。
236 名前:デフォルトの名無しさん mailto:sage [02/05/26 22:42] ユーザの数はどうやって数えるんですか?
237 名前:デフォルトの名無しさん mailto:sage [02/05/26 23:11] うちの研究室だけで10人はいるんだから簡単に超えそうなもんだけど(藁
238 名前:デフォルトの名無しさん mailto:sage [02/05/26 23:14] >>237 そこが特別なんじゃないの?
239 名前:デフォルトの名無しさん mailto:sage [02/05/26 23:31] じゃ、漏れが布教用に3冊買ってやるから、早く出してくれよ。 訳本でいいからさ。
240 名前:デフォルトの名無しさん mailto:sage [02/05/26 23:46] つーかさ、200位だったら、 いろんな図書館に要望しまくれば、 なんとかなるんじゃないの?
241 名前:デフォルトの名無しさん mailto:sage [02/05/27 00:06] 200じゃだめみたい。 www.onweb.to/ken9/log/039.htm
242 名前:デフォルトの名無しさん mailto:sage [02/05/27 11:55] >>237 ここのところ素人も増えてるぞ>オレオレ
243 名前:デフォルトの名無しさん mailto:sage [02/05/28 02:43] 有明で売れよ! ってことですか?
244 名前:デフォルトの名無しさん mailto:sage [02/05/28 10:52] >>243 東京ビッグサイトの巨大同人誌即売会サークル抽選当選しますた。 でもジャンルはプログラミング言語とはホド遠いけど(w。
245 名前:デフォルトの名無しさん mailto:sage [02/05/28 22:01] >>244 適当でいいからHaskell本もきぼんぬ 買いに行くから(藁
246 名前:244 mailto:sage [02/05/29 14:49] ウチはなんと女装本だぞ。それでも買いに来られるか?(w って、実際問題としてHaskell本を作る余力はなし。
247 名前:デフォルトの名無しさん mailto:sage [02/06/04 16:02] Haskell本かどうかは分からんが、 R. Birdの「関数プログラミング」第2版を翻訳して出版して欲しい。 流れで近代科学社に。
248 名前:デフォルトの名無しさん [02/06/04 19:43] 今売ってる「関数プログラミング」も、 みなしHaskell本では。
249 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/06/07 13:20] ネタスレ化か?
261 名前:デフォルトの名無しさん [02/06/07 22:26] 女装した場合には、その人の参照の透明性はどう確保されるのでしょうか?
262 名前:デフォルトの名無しさん mailto:sage [02/06/07 22:34] アブノーマルな野郎は消えろ。
263 名前:デフォルトの名無しさん mailto:sage [02/06/12 09:48] >>216 FranTk
264 名前:デフォルトの名無しさん [02/06/13 16:21] HTk
265 名前:デフォルトの名無しさん mailto:sage [02/06/13 21:34] >>261 女装は代入ではありません。ラップするだけです。 本人への参照はそのままにしてください。 女装人格←女装関連の知り合い ↓ 本人人格←普通の知り合い 私個人は女装人格をそのまま丸投げの委譲によって実装しているので、 実質どっちを見てても服装と化粧以外はさほどかわりません。 >>262 頑健なソフトウェアを構築するには 例外の存在をなかったことにして無視してはいけません。
266 名前:244 mailto:sage [02/06/13 21:37] >>265 もね。
267 名前:デフォルトの名無しさん mailto:sage [02/06/13 23:55] 下らんこと書くな。 つまらんし。
268 名前:ち ◆A2MadQ16 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/06/23 23:26] >>270 すまん、>>256 でいいのか?
272 名前:デフォルトの名無しさん mailto:sage [02/06/24 01:02] >>270 というわけでこのスレでは Simon P.J. 先生を「サイモン博士」と 呼ぶことを漏れは提案したいっすけど駄目っすか?
273 名前:デフォルトの名無しさん [02/06/26 00:42] Haskellは東大工学部の一部でデフォルトの授業用言語になってて、 そのせいで全国の工学部(の一部)の授業に拡散・伝染してるから、 1000部ぐらいすぐに出ると思ってたんだが、どうよ? 女装じゃ無理かもしれんが…(それとも女装のほうががいけるか!?)
274 名前:デフォルトの名無しさん mailto:sage [02/06/26 07:04] 女装って何のこと?
275 名前:デフォルトの名無しさん mailto:sage [02/06/26 09:19] 「 Haskell を 1.25 倍使うコピー本」でどうだ。 売り子が女装でなくてじょせーだと嬉しい、ってオイ>漏れ
276 名前:K mailto:sage [02/06/26 20:00] >>273 うちのことだな>東大工学部の一部 講義で教えてもらうまで名前も知らなかった。 日本語の解説書さえあれば使いたい言語なのだが>Haskell
277 名前:デフォルトの名無しさん [02/06/26 20:52] >>276 みんなそんなもんか。 私は大堀先生に感化されてML使ってる。
278 名前:デフォルトの名無しさん mailto:sage [02/06/27 00:01] >>275 女婿だと嬉しいの?
279 名前:!275 mailto:sage [02/06/27 00:48] うん、嬉しい。 出来ればレイヤーさんきぼ。
280 名前:デフォルトの名無しさん [02/06/27 22:54] 最近のCPUは、条件分岐がたくさんあると頻繁に 分岐予測ミスが発生してストールであぼーんな訳ですが、 関数型言語って手続き型に比べてその辺どうなの? ガードの存在って影響ある? CMOVccとかSETccとか使ってくれるのかな。
281 名前:275 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/07/01 15:16] >>285 そうだそうだ。(煽) ついでに非同期って正義 ? Crusoe の内部論理では活かされてるとか 聞いたことがあるけど > 非同期
287 名前:デフォルトの名無しさん [02/07/11 09:01] univ.ygu.ac.jp/e-itoh/2001/9805126-shimizu.pdf www.microsoft.com/japan/msdn/academic/ark/Webfiles/languages.htm#mondrian
288 名前:デフォルトの名無しさん [02/07/11 09:14] 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って仕組みを使ってみるのが吉かと。 www.cs.kun.nl/~clean/ で合ってる?>もっと詳しい人
293 名前:デフォルトの名無しさん [02/07/16 10:17] linear logic (線形論理) ね。 論理にヨワい自分は岩波の 2 冊本 「コンピュータサイエンス入門」 で、やっとこ様相論理に辿り付いたトコなんで 有意義な助言はできんが... とりあえずロジックに関してどれくらいわかってます ? >>291
294 名前:デフォルトの名無しさん mailto:sage [02/07/16 16:29] 分からないんだったらまずはぐぐりなさい。 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 名前:デフォルトの名無しさん mailto:sage [02/07/16 16:30] 又は、 www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=linear+type&lr=
296 名前:デフォルトの名無しさん [02/07/16 22:58] どうして、そんなに遅いの?
297 名前:デフォルトの名無しさん mailto:sage [02/07/16 23:06] >>296 それは言える… CleanとかMLとかは速いらしいのに!
298 名前:名無しさん@Emacs mailto:sage [02/07/16 23:37] Haskellは生成されたバイナリよりも、 コンパイラ自体がhaskellで書かれてる ことによる遅さがちょっとイラつかせる。 また勉強中の身だから偉そうなことは いえないですね。失礼しました。
299 名前:デフォルトの名無しさん mailto:sage [02/07/16 23:44] Cleanもそうです。
300 名前:291 [02/07/17 03:36] 沢山のレスありがとうございます。 >>292 英語は、辞書が在れば何とか読めるという程度です。 「uniqueness typing」ですか。Cleanの特徴の一つらしいですね。 評価するたびに違う(多様?)型を生成するというぐらいしか知りません。 参照透明性は確保されそうですが、使いやすいの? というぐらいの認識しかありません。もう少し調べてみます。 >>293 私も論理に弱いです。 Linear Ligicと言われても、使った公理は無くなる。 つまり公理の有る無しで状態を表すようにするという位しか わかっていません。 この認識も間違っているかもしれませんし・・・ つたない英語力と乏しい知識を総動員して何か判りやすい文章、本、論文 は無いかとあさっているという状態です。 >岩波の 2 冊本「コンピュータサイエンス入門」 ですか今度、大きい本屋に行ったときでも見てみます。 >>294 日本でも沢山の所が研究しているんですねー。 みてみます。
301 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/07/18 03:04] > non-strict な ML と、strict な Haskell を 逆
306 名前:名無しさん@Emacs mailto:sage [02/07/18 05:03] なんでいつもMLとHaskellはいがみあるばかりなんですか? CとC++ JavaとC# PerlとRuby 他にもそういうの多いですがね。
307 名前:デフォルトの名無しさん mailto:sage [02/07/18 10:17] >>306 そういう低次元な話にもっていくな。
308 名前:302 mailto:sage [02/07/18 18:30] >>305 トチった。シクシク >>306 別に、いがみあう必要ないじゃん。Standard ML では、 引数は適用される前に評価される、Haskell では、 普通はそうじゃない、ってダケの話。 他のヤツだって。.NET 使いたいなら C# 、 ケータイ用アプレットが作りたいなら Java とか、 現実、選択肢は広く持っていたほうが楽しいん だからさ。
309 名前:デフォルトの名無しさん mailto:sage [02/07/18 20:45] Haskellってnamespace無いの?
310 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/07/19 00:57] >310 あ、ほんとだ。サンクスコ
312 名前:デフォルトの名無しさん [02/07/19 01:13] >>308 SMLでも遅延評価でますよね。 Hsakellほど積極的では無いですが。
313 名前:デフォルトの名無しさん mailto:sage [02/07/19 01:46] >JavaとC# >PerlとRuby この変は似たもの同士だからだろ?
314 名前:哲板過去ログから mailto:sage [02/07/19 17:42] 哲学板「論理なぜなにスレッド」の最後のレス 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) www.amazon.co.jp/exec/obidos/ASIN/0937073784/
315 名前:314続き mailto:sage [02/07/19 17:43] >>314-315 続き 235 名前: 考える名無しさん 投稿日: 01/12/12 17:18 www.amazon.co.jp/exec/obidos/ASIN/0415126002/ をかいなさい。 242 名前: 考える名無しさん 投稿日: 02/01/06 15:37 >>229 いまどきならTroelstraとかHughes-Cresswell(古臭いっ)よりこっちがいい。 非古典論理を統一的に学べます. www.amazon.co.jp/exec/obidos/ASIN/041521534X/ 日本語なら小野寛晰先生の本がおすすめ。 244 名前: 考える名無しさん 投稿日: 02/01/10 02:32 >>242 おいおい、Hughes-Cresswell の第二版は 1996年に出たばかりだぞ。 なんかがらりとかわって別の本みたいになってると思ったけど、違うっけ? 今どきで、お手軽で様相論理絡みの非古典論理というなら、俺は、 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 mailto:sage [02/07/21 13:51] で、そんなのが何の役に立つかというと、いろいろとあって ・もう「決して使わない」ことがわかった値はゴミなので、ガベコレできる ・式の遅延評価をするときに、「1回しか使わない」とわかっている値は 後のために覚えなくても良いので、オーバーヘッドを減らせる ・逆に「必ず1回は評価される」ことがわかってる式は、そもそも 遅延評価しなくて良いので、やっぱりオーバーヘッドを減らせる ・同じように、「必ず1回は実行される」ことがわかってる副作用は、 (Haskellのモナドみたく)遅延しなくても良いので、MLみたく その場で直ちに実行できる(?) って感じ。最後のは俺がよく知らないので、Cleanとかに詳しい人がいたら フォローをきぼんぬ。
320 名前:Super Combinator mailto:sage [02/07/21 14:00] >>316 竹内外史の本はかなり手ごわい。
321 名前:317 mailto:sage [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 mailto:sage [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 名前:覚え違いスマソ mailto:sage [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 mailto:sage [02/07/24 11:54] あ、論理カゼを吹かせてしまったのは自分だ。スマソ m(_ _)m Wadler の解説に目を通してみました。World 型の ような、捨てたり複製しちゃいけないとかいう値を 導入するための仕掛けが線形型ってことですね。 monad の解説 "Imperative functional programming" の 4 節にある、評価順序を保証するためだけにある、 受け渡されるだけで値は運ばない変数 w を表面に 引っ張り出して活用する、という感じなのでしょうか。 ↑これは激しく勘違いかも。 上の >>319 で説明されてるところは、Haskellコンパイラ 方面で研究されてる必須性解析やら更新回避解析やらを プログラマが明示できる/しないといけない、と感じたん ですが、どうでしょうか。
329 名前:デフォルトの名無しさん mailto:sage [02/07/24 23:14] Cleanに関するページのようです。 Cleanってすごいですね。 ttp://sky.zero.ad.jp/~zaa54437/
330 名前:デフォルトの名無しさん mailto:sage [02/07/25 22:22] ttp://www.sysj.co.jp/sichp/msg0104_2.htm
331 名前:デフォルトの名無しさん mailto:sage [02/07/26 13:33] 藁藁
332 名前:デフォルトの名無しさん mailto:sage [02/07/26 18:49] >>329 のサイト、ブラウザで画像もJavaScriptもOFFにしてたら、トップページから中に入れない。 しかたないからHTMLソース見てみたら… ><!-- >こういっちゃなんだけど、人のページのソースを見るのはどうかと思いますよ。 >そういう人は今後このサイトには来ないようにして下さい。ええ。 >--> コワイヨー
333 名前:332 mailto:sage [02/07/26 18:59] あ、上の書き込みだけだと中傷にしか見えませんね。スマソ。 初心者の僕にはとても勉強になりました。つーか、大堀先生の本が読めなくて ちょっとへこんでたんですけど、書評読んだらすこし元気が出てきました。 がんばるぞー。
334 名前:デフォルトの名無しさん mailto:sage [02/07/26 19:22] >>333 わかんなければソース見てもいいと思うぞ。勉強になる。 あっちが見られる様な媒体で見られたくないものを置いている方が悪いんだから。
335 名前:デフォルトの名無しさん mailto:sage [02/07/26 19:53] (゜д゜)<あらやだ! www.amazon.co.jp/exec/obidos/ASIN/0201882957/ 未だ全部読んでないのに、 Haskell:the Craft of Functional Programming の第三版が出ちゃった! ……と思ったら日付が、
336 名前:デフォルトの名無しさん mailto:sage [02/07/26 20:04] スゲ〜 二度と見に行くかよ、と思わせるためにやってるとすれば、 とっても効果的だ。
337 名前:デフォルトの名無しさん mailto:sage [02/07/27 00:35] >>335 俺も一瞬そう思った
338 名前:デフォルトの名無しさん [02/07/27 00:49] age toku yo
339 名前:デフォルトの名無しさん mailto:sage [02/07/27 01:15] <!-- すぐに出せるようにと思ったんで、 今後の更新予定とかをコメントでつけてましたが、 それらは全部削除しました。 まあ確かにそんなものをつけるべきではないのかもしれませんね。 --> コメント変わった? ここ読んでる?
340 名前:デフォルトの名無しさん [02/07/27 01:35] >>329 の書き込みは要するに自作自演書き込みって事でしょ。
341 名前:デフォルトの名無しさん [02/07/27 01:35] 世間が狭いだけでは
342 名前:デフォルトの名無しさん mailto:sage [02/07/27 09:03] >>339 削除した理由が、 「まあ確かにそんなものをつけるべきではないのかもしれませんね。」 誰かに注意を受けたと取るのが一番か。
343 名前:デフォルトの名無しさん [02/07/27 09:34] 書評も的を射ていないっぽ
344 名前:デフォルトの名無しさん mailto:sage [02/07/27 14:07] スレ違い。
345 名前:デフォルトの名無しさん [02/07/27 18:13] CLEANを紹介したのはエライが、 自作自演とか、偉そうにWeb作ってるのはイクナイ。
346 名前:デフォルトの名無しさん mailto:sage [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 www.galconn.com/
351 名前:デフォルトの名無しさん mailto:sage [02/07/29 10:31] もし、今後 Haskell 本とか書くヒトが居たら、是非 「本書の内容の正否・当否についての質問・意見は、明確で 具体的な理由をつけて、匿名ではなく、hoge@hoge.jp まで お願いします。また、これら以外のことに関する本書への 批判・評論は刑法230条又は231条等に触れる恐れがあり ますのであくまでも自己責任でお願い致します。」 とでも、表 2 カバー裏あたりに書いとけば良いかも :-)
352 名前:デフォルトの名無しさん [02/07/29 10:38] >>351 なんだそれは。 Cleanのページ作った人ですか? 突っ込まれたから、ぼやいている? Haskellのページとかschemeのページは前からあるけど、 だれも苦情は言わないし、ありがとうしか言わない・・ですが?
353 名前:デフォルトの名無しさん mailto:sage [02/07/29 10:38] 「本書の内容の正否・当否についての質問・意見は、明確で 具体的な理由をつけて、匿名ではなく、hoge@hoge.jp まで お願いします。また、これら以外のことに関する著作者への 批判・評論は刑法230条又は231条等に触れる恐れがあり ますのであくまでも自己責任でお願い致します。」 こうだな、正確には。
354 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/07/29 20:55] ああ、DUAL!ってやつ?
359 名前:デフォルトの名無しさん mailto:sage [02/07/29 23:02] ?
360 名前:デフォルトの名無しさん mailto:sage [02/07/30 18:13] >>352 ぼやきか・・・ それはもしかしたらイタイ発言ではなかろうか
361 名前:332 mailto:sage [02/07/30 20:28] なんか俺のカキコのせいで荒らされちゃってますね、スレの皆さんごめんなさい。 もう夏休みに入ってるって事をすっかり忘れてました。
362 名前:デフォルトの名無しさん mailto:sage [02/07/31 00:54] >>361 お前のような万年厨も問題だがな
363 名前:デフォルトの名無しさん mailto:sage [02/07/31 02:40] >>362 ハー。 人の振り見て・・・ということで。
364 名前:デフォルトの名無しさん mailto:sage [02/07/31 17:02] >>363 厨
365 名前:石敢當 [02/08/02 22:28] Haskell 98 Report が本になるみたいですね。
366 名前:デフォルトの名無しさん mailto:sage [02/08/02 23:01] >>365 母さんソース
367 名前:デフォルトの名無しさん mailto:sage [02/08/02 23:08] じゃ、誰かものすごい勢いで日本語版も 出版してくれよな。
368 名前:デフォルトの名無しさん [02/08/03 08:55] 気づいたら最初のスレが立ってから一年過ぎてる。 最初のころはHaskellスレ限定コテハンも何人かいて妙にまたーりとしていた 気がするのだが、最近廃れっぷりが激しいな。最初のころのような勢いも無いし。 懐 古 う ざ い よね。 すまん。逝ってくる。
369 名前:デフォルトの名無しさん mailto:sage [02/08/03 09:25] ネタがないんじゃよー 誰かお遊びで作ったプログラムとか貼ってくれませんか?
370 名前:デフォルトの名無しさん [02/08/03 15:03] 関数型言語初心者です。 Haskellでクイックソートのコードを以前見かけて、こんなにシンプルになるのかと感動しました。 では、バブルソート(二重for文で大小比較の単純なやつ)はどうなるのでしょうか。 iとjを引数にして二重に再帰を繰り返し、takeやdropで切り貼りするしか無いのでしょうか? もっと効率のいいやり方があるのでは、と思うのですが…
371 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/08/04 07:27] Haskellは犬ですか?
374 名前:デフォルトの名無しさん mailto:sage [02/08/04 13:54] Haskellerと言ってもその程度。
375 名前:370 mailto:sage [02/08/04 16:19] 何故>>371 でソートになるのか悩んで、紙に書いてようやく理解しました。 最小値を取り出して、それを x : bs rest [] で先頭に結合しているわけですか。 bs xs i j なんて関数を作って手続き型そのままにやろうとした俺とはえらい違いです。敬服。
376 名前:370 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/08/10 12:14] x:xs 複数形のsです。
380 名前:日曜Haskellerオヤジ [02/08/11 06:22] ものすごい久々です、 現在はプログラミング基礎論の勉強がてら一緒に Haskell もお勉強モードな土日です。 >>368 特に初心者がやるときには、英語を勉強しつつ Haskell の勉強もしようとすると 忙しくなりすぎて、とりわけ社会人だと極度のんびり勉強モードになってしまいます。 そうすると、どうしてもネタが尽き気味になりますよね、 和書の入門書がぜひとも欲しいところです。 大学院の学生さんたちの誰かが執筆してくれればいいんですが、だれか書きませんかね? Haskell は離散数学とか圏論とかとセットにすると非常に面白い本ができると思うのですがどうでしょう? あと、圏論の専門本も是非とも欲しいところですね、これも本当にない、 まったくと言って良いほど本がない、あっても絶版ばかりで手に入りません。 シュプリンガーフェアラーク出版の「代数学とは何か」に書かれてあるのが、 手に入りかつ、知っている範囲なのですが、 これは数学の専門書でプログラマには少々というかかなりの難解ぶりです。 自分がなんとか読めそうと感じられる範囲では、 ここ www.etl.go.jp/etl/divisions/~yoshiki/ut97/ にあるんですが、これも内容を充実して製本された本が欲しいところです。 初心者向きといえば、以前工科大のページがあったんですが 消滅してしまっているようです、越田センセまた何かページつくってくれないかな・・
381 名前:デフォルトの名無しさん [02/08/11 07:14] プログラムはじめてやるのにラムダカルキュラスは難しすぎる
382 名前:デフォルトの名無しさん mailto:sage [02/08/11 09:07] 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 名前:デフォルトの名無しさん mailto:sage [02/08/20 09:14] >>383 宿題は自分でやりましょうね。
386 名前:デフォルトの名無しさん mailto:sage [02/08/20 11:42] Haskellって、 学校の授業でどのくらい使われてるの?
387 名前:日曜Haskellerオヤジ [02/08/20 12:50] 宿題だとすると・・・そのまま答えを書いたらまずいかな(笑 私だったらこんな感じで作りますかね。 見ているとスペースのところで文字列が切断されていて非常に感じが悪いのでそれをまず結合します。 つづいてこの文字列リストから ":" , ";" を取り除いて出来上がり
388 名前:日曜Haskellerオヤジ [02/08/20 12:52] おまけ 結合すべき文字列は直後が ";" ":" でないことに着目すると簡単に作れるでしょう。
389 名前:383 mailto:sage [02/08/20 12:55] 「Haskell言語プログラミングレッスン <上> Haskell言語を始めよう」 「Haskell言語プログラミングレッスン <下> 関数型言語を始めよう」 出版準備です。
390 名前:デフォルトの名無しさん mailto:sage [02/08/20 13:02] 出版準備?大丈夫かよオイ
391 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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オヤジ さん、参考になりました。ありがとうございます。 ついでにこのアサイメントの全容を貼っときました。(期待しつつ)。自分でやるつもりです。 海外は教科をパスするのがきついですね。 www7.big.or.jp/~mb2/bbs/up/img-box/img20020820192929.zip また、質問があればさせていただいていいですか? お礼のレス遅れてしまってすみません。なんか、私の使ってるプロバ、規制されてるんです。うー だから、友人にメールで送って、それからレスしてもらってるので。すみません。荒らしではないですよ。
399 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/08/22 03:23] >>403 > 2. gを使って関数fを定義します。関数fは、もしnがリストkに現れていたら 2. gを使って関数fを定義します。関数fは、もしnがキーのリストkに現れていたら でした。舌足らずですた。
405 名前:デフォルトの名無しさん mailto:sage [02/08/26 10:16] 東大の「こ・何とか」って人は何人?
406 名前:デフォルトの名無しさん mailto:sage [02/08/29 13:10] nisseicom.co.jp
407 名前:日曜Haskellerオヤジ mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/09/05 10:28] >>409 学校
411 名前:デフォルトの名無しさん mailto:sage [02/09/07 12:25] >>410 (小)
412 名前:デフォルトの名無しさん mailto:sage [02/09/07 12:25] >>400 kakoii! tuka hutuu dakedo, >>396-397 no ato ni miruto kakoii!
413 名前:デフォルトの名無しさん [02/09/07 12:42] 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 君はこういう (www.bier-reise.com/cooking/recipe/go-ya/chample.htm ) つもりなのかもしれんが、"チャンプル" でなく "チャンプルー" と伸ばすこともあり、 chample よりは champloo って書くべきものなのだよ。
415 名前:デフォルトの名無しさん mailto:sage [02/09/07 15:41] >>352 なんだそれは。
416 名前:デフォルトの名無しさん [02/09/07 23:10] ここらへんで一丁Haskellで 七行プログラミング part2 pc3.2ch.net/test/read.cgi/tech/1018840143/ に乱入して、関数型言語の恐ろしさを見せつけてやりませんか? Haskellなら相当な事が出来そうですが(今↑ではやりのRLEとかも)
417 名前:デフォルトの名無しさん mailto:sage [02/09/07 23:28] おまえがやって見ろよ
418 名前:デフォルトの名無しさん mailto:sage [02/09/08 02:11] >>416 大して戦果をあげれないと思う。入出力とか弱いし。 Haskell 向きなのを何か考えればアレかもしれんが。
419 名前:デフォルトの名無しさん mailto:sage [02/09/09 13:38] モナドパーサ
420 名前: [02/09/18 03:35]
421 名前:デフォルトの名無しさん mailto:sage [02/09/18 06:54] 7行プログラミングってPerlが一番凄そう。
422 名前:デフォルトの名無しさん mailto:sage [02/09/18 16:41] むしろperlはそのための言語。
423 名前:司馬乱 [02/09/27 23:46] >>408 久しぶりにこのスレ覗いてみたら寂れてますねー. コンピュータサイエンス向けの日本語の易しい圏論の本って需要あるのかな?
424 名前:日曜Haskellerオヤジ [02/09/30 14:31] そーですねー、淋しいです。 >コンピュータサイエンス向けの日本語の易しい圏論の本って需要あるのかな? 取り合えず私にはあります、だれか作ってー 離散数学に興味を持ったところ、そのまま勢いでこれも面白くなってきています。 もっとも、一般位相はしらないわ、集合論はしらないわで大変ですが・・・ Haskell という言語はこういうものを勉強するときに便利ですね。
425 名前:デフォルトの名無しさん mailto:sage [02/09/30 16:02] 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 名前:デフォルトの名無しさん mailto:sage [02/10/01 00:43] これが圏論だっていうコードを見れば 分かるようになるかも。
430 名前:デフォルトの名無しさん mailto:sage [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] 越田一郎先生のページが復活していたので記念上げしておきます。 チュートリアルとしては最適と思います、私もこれを使っておぽえました。 www.teu.ac.jp/kougi/koshida/Prog6/index.html
442 名前:デフォルトの名無しさん [02/10/28 04:33] 寝られないので今さっき勉強始めてみました、あげ
443 名前:デフォルトの名無しさん [02/10/28 05:04] Haskell ? なにそれ?
444 名前:デフォルトの名無しさん mailto:sage [02/10/28 05:09] >>443 若者向けのLisp
445 名前:デフォルトの名無しさん [02/10/28 05:18] >>444 若者向けのLisp
446 名前:デフォルトの名無しさん [02/10/28 09:38] prologの方がいいよ
447 名前:デフォルトの名無しさん mailto:sage [02/10/28 09:47] んなわきゃねぇ(w
448 名前:442 mailto:sage [02/10/28 10:08] 越田先生のチュートリアルいいよ。 公式のドキュメント読んでもいまいちだったけど、 これ読んだらけっこうすんなり入ってきました。 東京工科の学生には負けられません。
449 名前:デフォルトの名無しさん mailto:sage [02/10/28 10:56] `ってどこ?っていうのがFAQかよ(藁
450 名前:デフォルトの名無しさん mailto:sage [02/10/28 11:29] pの横にあるキーボードもありますけどね。
451 名前:デフォルトの名無しさん mailto:sage [02/10/28 11:41] キーマップが違っててもすぐ分かるだろ
452 名前:デフォルトの名無しさん mailto:sage [02/10/28 12:15] わからんキーはかたっぱしから押してみるのが近道だろうが 最近はヘタなキー押すとサスペンドしたりユーザー切り替わったりするらすいな。 なんでこれ以上ボタン増やしたがるのかわからんよ。
453 名前:442 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/10/29 22:47] String は [Char] の別名だから。 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 mailto:sage [02/10/30 00:06] s/761/460/ でした。すんません。
463 名前:名無しさん@Emacs mailto:sage [02/10/30 00:10] ×returnLoan remove_person remove_book ○returnLoan exampleBase remove_person remove_book でした。質問忘れてください。m( )m
464 名前:名無しさん@Emacs mailto:sage [02/10/30 01:06] それでもあれですね。思ったより簡単ですね。 もっとCやPerlと比べて難しいかと思っていたら そうでもなかった。二日である程度慣れました。 ループを一切使わずに全て再帰で書くのは なれないうちはしんどそうだけど、見返りとして バグの出にくいプログラムになるのかな。 これがすらすら書けるようになったら この言語で仕事してみたいですね。 手っ取り早くHaskellを活用できる分野というと XMLの処理系でしょうか。 Haskellについてはまだよくは分っていませんが(藁) 他の言語より向いている気がするんですね。 もっとフォーマルなプログラムにおいてこそ こういった言語は意味をなすのかもしれないけど、 多分そういうのはヘタレには無理だろうし(w とりあえず、IO、スレッドが使えるまで基礎勉強ですね。 無料で使わせてもらっていて、講義より先に 問題に関する質問をここに書いてしまっては 先生に申し訳ないのでここらへんでやめにしておきます。 先生には入門者用の本を書いてほしいなあ。
465 名前:デフォルトの名無しさん mailto:sage [02/10/30 01:31] >>464 IBMのdeveloperWorksサイトに、HaskellでXMLを云々って記事が有ったね。 既出だろうけど。
466 名前:名無しさん@Emacs mailto:sage [02/10/30 01:47] >>465 なるほど、それでかな。 Haskellを使ってみる前からXMLの処理には 関数型言語が向いている気がしてたんです。 ただ単に自分が以前DWを読んだだけだったのですね(汗 関数型言語初体験の感想としてなんですが、 JavaやC++ではいかようにも書けてしまうのが むしろあまりよくないことに思えてきました。 アルゴリズムを素直に表現してそれがそのまま プログラムになっているという。素晴らしいです。 久しぶりに萌え萌えです。 もっと綺麗に書けるよう努力せないかんですね。
467 名前:名無しさん@Emacs mailto:sage [02/10/30 07:49] 朝起きてから、Haskellスレパート1を見てたのですが、 2chに神が君臨したかのようなレベルですね(汗 自分の書き込みが恥かしくなって来たのでしばらく潜伏します。 早くみなさんのレベルに追いつきたひ。。。 これだけじゃ情報価値なしなのでせめてリンク 純粋遅延関数型言語 Concurrent Clean sky.zero.ad.jp/~zaa54437/programming/clean/ このサイトの書評は私のような初心者には参考になりそうです。 また管理者の人はCleanシステムのドキュメントの翻訳を精力的に 行われています。素晴らしいです。
468 名前:デフォルトの名無しさん [02/10/31 21:02] 英語サイトで東工大くらいの難易度のチュートリアルってあります?
469 名前:デフォルトの名無しさん [02/10/31 21:19] ゲージンはいきなりGentle〜を読んでコード書き出すの? なんか信じられないんだけど、あれより簡単なドキュメントって 英語じゃみたことないよ。
470 名前:468 mailto:sage [02/10/31 21:31] >>469 情報どうもです。 テーマごとに手ごろな課題がついてて段階的に ステップアップできるようなのがいいんですが。 もうちょっと探してみます。
471 名前:デフォルトの名無しさん [02/11/02 09:19] これってまじですか? research.microsoft.com/Users/simonpj/papers/meta-haskell/ というかAlexandrescuに触発されたとか。。
472 名前:デフォルトの名無しさん [02/11/02 11:51] >>464 関数型言語でXMLを扱う例としてこんなのがあります。 xduce.sourceforge.net/ メインの開発者は日本人です。 実装はHaskellじゃなくてMLだけど。
473 名前:デフォルトの名無しさん [02/11/02 15:15] Haskell.NETはどうなりますたか?
474 名前:デフォルトの名無しさん [02/11/03 11:45] classって使ってます? ghcのソースコード見ても殆ど使ってないんだけど、、、 C++がめんどくさくなるとという理由から敬遠されるのと 同じような理由で型クラスも使われてないとか?
475 名前:460 mailto:sage [02/11/04 11:04] ttp://www.haskell.org/onlinereport/basic.html#sect6.3 (6.3 Standard Haskell Classes)の図にある如く 言語仕様で定義されてる基本型からして使いまくりですが? >>474
476 名前:デフォルトの名無しさん mailto:age [02/11/07 21:28] >>471 う
477 名前:デフォルトの名無しさん [02/11/07 21:57] I/Oとかの副作用処理って、モナドがファイナルアンサーですか? 他に良い方法無いの?(Haskell固有の話じゃなくて)
478 名前:デフォルトの名無しさん mailto:sage [02/11/07 23:30] 自分で考えろ
479 名前:名無しさん@Meadow mailto:sage [02/11/07 23:44] pc3.2ch.net/test/read.cgi/tech/1007387924/717
480 名前:デフォルトの名無しさん [02/11/10 23:22] ユニークな型ねー。 これだけで解決? >>478 あなたも一緒に考えましょうよ。
481 名前:デフォルトの名無しさん mailto:sage [02/11/10 23:43] 他にもあるよ。 ・lazyなストリームとみなす。 ・continuationを使う。
482 名前:デフォルトの名無しさん [02/11/11 01:28] そもそもLazyなのがいけないんだろ
483 名前:デフォルトの名無しさん mailto:sage [02/11/11 16:00] このスレ相変わらずプログラムコード量が著しく少ないねぇ
484 名前:480 [02/11/12 03:32] >>481 その2つの方法もありますね。 でも古典的(あまり普及できない)方法なのでは?
485 名前:名無しさん@Meadow mailto:sage [02/11/12 12:55] >>482 > そもそもLazyなのがいけないんだろ ‥‥‥誰もつっこまないのか。 っつうかオレ釣られた?
486 名前:デフォルトの名無しさん mailto:sage [02/11/13 15:44] 面倒なんで突っ込む必要なし
487 名前: ◆y3A2MadQ16 mailto:sage [02/11/14 05:57] 苦労の割にありがたみが少ないということかもね…。 嫌いじゃないんだけど、導入の旨みが苦労に勝っていると証明できないんで、 最近はLazyにも個人的に放置気味…。>Lazy Evaluation 代わりにという訳でもないが最近は部分評価野郎になってまつ。 (その上、HaskellどころかJava野郎に成り下がってまつ(w。)
488 名前:デフォルトの名無しさん [02/11/17 23:10] ガイシュツな話題。 Lazyが悪い訳じゃないのに・・・・ >>477 他にも色々なアンサーがありますよ。時制理論とね。 透明参照性を保つためには、時間とか状況とかを導入すれば良い。
489 名前:デフォルトの名無しさん mailto:sage [02/11/18 10:18] 効率性の問題に行き当たる
490 名前:デフォルトの名無しさん mailto:sage [02/11/19 11:00] >>488 もちろん悪くはないんだ。漏れも個人的には好きだ。 ただ好みの問題を越えて、 実装の苦労と実行効率を補ってなお十分にいいと言い得るかが問題…。
491 名前:デフォルトの名無しさん mailto:sage [02/11/19 23:09] >>489 >>490 実行速度も、もちろん気になるので言語に新しい要素を導入するときは 慎重にするべきですね。 でも構文で制限かければ良いような もしくは処理系のanalysisによる最適化(正格性判断による末尾再帰とかね) とかで何とかなりそうな気もします。 だれか何とかして。
492 名前:デフォルトの名無しさん [02/11/20 16:59] Hugs98 November 2002 release haskell.org/hugs/
493 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [02/11/20 18:40] 随分とでかくなったな・・・
495 名前:デフォルトの名無しさん mailto:sage [02/11/21 15:25] >>440 バージョンアップしてもテンキーの"/"は効かないままな模様(Winhugs on W2k) つーか日本語キーボードじゃないと再現しなくて 開発元は気づいてないなんてオチじゃないだろうな。 英語キーボード持ちの人だれか試してプリーズ。
496 名前:デフォルトの名無しさん mailto:sage [02/11/22 01:10] >>495 漏れは英語キーボードだが。 日本語OSでしか再現しないのか?
497 名前:495 mailto:sage [02/11/22 21:57] >>496 英語KBでも効かないか。 ウチにゃ日本語W2kしかないから、英語OSの検証は無理だし。 もうちっと色々してみてダメだったらバグレポするつもり。
498 名前:デフォルトの名無しさん mailto:sage [02/11/26 09:05] 新しいHugs、なんかインストーラがおかしくない? アクセス権の設定とか。
499 名前:デフォルトの名無しさん [02/12/02 00:14] 誰か、 lispとhaskellとocamlの メリットデメリットを教えてください。
500 名前:デフォルトの名無しさん mailto:sage [02/12/02 00:31] 500get
501 名前:デフォルトの名無しさん mailto:sage [02/12/02 00:41] 501got!
502 名前:デフォルトの名無しさん mailto:sage [02/12/02 04:55] 新しいhugsにはwinhugsはついてないの?
503 名前:デフォルトの名無しさん mailto:sage [02/12/02 20:57] 越田先生の「値しての関数」と「オーバーロードとクラス」の問題が 全然分からない・・・。 誰かお助けを〜
504 名前:デフォルトの名無しさん mailto:sage [02/12/04 11:46] (´-`).。oO(tab-width 4文字にしててはまった。あー悩んだ悩んだ。do で。)
505 名前:デフォルトの名無しさん [02/12/05 00:49] GHC 5.04.2 Released www.haskell.org/ghc/
506 名前:デフォルトの名無しさん mailto:sage [02/12/05 01:40] HaskellはMS Research所属の人間が関わっているのに、 UNIX指向なんでつか?
507 名前:デフォルトの名無しさん mailto:sage [02/12/05 02:41] さあ
508 名前:506 mailto:sage [02/12/05 10:28] 「GHCは」、だった。
509 名前:デフォルトの名無しさん mailto:sage [02/12/06 09:11] ネタ? もともとグラスゴ大のプロジェクトで, 大学の研究者を MSR が引っこ抜いてきて, 継続してる研究だからってかんじか. ってゆ〜か MSR ってマジで全く何の要求も されない,ってウワサっすけど,本当? 個人的に一番参照してるサイモン博士の頁は↓だったりするが. ttp://research.microsoft.com/~simonpj/win32-cheat.html
510 名前:デフォルトの名無しさん mailto:sage [02/12/06 14:02] いや、GHCの最新版で一番最初に出るのがUNIX版なもんで
511 名前:デフォルトの名無しさん mailto:sage [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] www.haskell.org/~petersen/haskell/lc2001.html >Emacs in Haskell の計画 これはネタですか?こんなことやってる人いるのかな?
514 名前:デフォルトの名無しさん [02/12/16 06:01] www.haskell.org/humor/ ↑これのどこが面白いのか、誰かひとつ解説してくれ。
515 名前:デフォルトの名無しさん mailto:sage [02/12/20 16:48] その面白さを理解できないあなたはHaskellerではなし。 無理にでも笑いなさい。
516 名前:デフォルトの名無しさん [02/12/22 11:30] yzg.3nopage.com/haskell.jpg 質問なんですが、これってなんていう本だか分かりますか? おそらく、Haskell:the Craft of Functional Programmingの和訳だと思われるのですが…… 検索しても出てこないもので……
517 名前:デフォルトの名無しさん mailto:sage [02/12/24 10:15] >>516 何処ぞの大学か何かの授業用のテキストじゃないかなぁ. 前の年には毎回配ってたプリントを,次の年は一括して印刷・ 簡易製本とかいうパターンって結構あるから
518 名前:デフォルトの名無しさん [03/01/06 23:34] んが
519 名前:IP記録実験 mailto:IP記録実験 [03/01/08 21:43] IP記録実験 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 名前:デフォルトの名無しさん mailto:sage [03/01/09 02:32] IP記録するのはいいけど串も規制しないと意味ないよな
521 名前:デフォルトの名無しさん mailto:sage [03/01/09 03:16] フシアナ標準にすればいいのに。 困るのは厨くらいだろ?
522 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [03/01/09 14:21] これからは馬鹿って書いただけで訴えられる可能性がでてきたわけで
525 名前:デフォルトの名無しさん mailto:sage [03/01/09 15:05] 既に訴えられているわけだが。ひろゆきが責任を取ってるだけで。
526 名前:デフォルトの名無しさん mailto:sage [03/01/09 17:49] ======2==C==H====================================================== 2ちゃんねるのお勧めな話題と ネットでの面白い出来事を配送したいと思ってます。。。 ===============================読者数: 138720人 発行日:2003/1/9 年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。 そんなわけで、年末に予告したIP記録ですが実験を開始しています。 「2ちゃんねる20030107」 こんな感じで各掲示板の最下部に日付が入ってるんですが、 20030107以降になってるところはログ記録実験中ですー。 んじゃ! ────────────────────────Age2ch─ ■この書き込みは、Age2chを使って配信されています。 ──────────────────────────── Keep your thread alive ! pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
527 名前:デフォルトの名無しさん mailto:sage [03/01/09 23:41] 2ch板一覧 www.skipup.com/~niwatori/keijiban.htm >728 ( ´∀`)σ)Д`) プニ
528 名前:デフォルトの名無しさん mailto:sage [03/01/10 08:39] そりゃ最初はよほどの大事でもない限りIPを渡すことはしないだろう、 でも物事はだんだんエスカレートしていく物、そのうち密告とかも「誹謗中傷」として IPを渡すようになる、、、
529 名前:デフォルトの名無しさん mailto:sage [03/01/10 10:39] 最近、腐れさん見ないね・・
530 名前:デフォルトの名無しさん mailto:sage [03/01/10 11:09] ★ ひろゆき重大な決意を語る。 live2.2ch.net/test/read.cgi/news/1041069586/l50
531 名前:デフォルトの名無しさん mailto:sage [03/01/10 11:55] 最高裁への上告は認められなくなったから、これで事実上判決確定だよ。 逆転も何もないって。 勢いで上告なんかしても一発で上告却下(門前払い)だよ。 二審も一審を支持。これに対して上告しようにも、 刑事訴訟と同様、自由に上告できるってもんでもないのです。 民事訴訟法312条 (上告の理由) 1項 「上告は、判決に憲法の解釈の誤りがあること その他憲法の違反があることを理由とするときに、することができる。」 www.m-net.ne.jp/~doba/goto/hon.htm ようするに上告しても今の制度では100%無駄。 これで完全終了ってことか。
532 名前:デフォルトの名無しさん mailto:sage [03/01/10 12:24] >>754 まともじゃない掲示板なんて存在意義ないね。 そういうことならここじゃ意味ないと思うが。
533 名前:デフォルトの名無しさん mailto:sage [03/01/10 13:16] スレタイの日本語、微妙におかしいね。
534 名前:デフォルトの名無しさん mailto:sage [03/01/10 15:37] (前略)815様 落ち着け。お前の感じている感情は精神的疾患の一種だ。 静める方法は俺が(中略) 鯖の前で両目をひんむいて「びっくりするほどユートピア」と唱えながらキュウリを(以下略
535 名前:デフォルトの名無しさん mailto:sage [03/01/10 17:05] なつかし。
536 名前:デフォルトの名無しさん mailto:sage [03/01/10 23:26] ひろゆき お前にはがっかりした。 2chにも。さいなら。
537 名前:デフォルトの名無しさん mailto:sage [03/01/10 23:34] 全部ミギーが書きましたって言えば問題ナッシング
538 名前:デフォルトの名無しさん mailto:sage [03/01/11 00:50] ううん、既存のTripodとかじゃなくて新たにそういうシステムを 作っちゃうの。 どう作るかはわかりませんw しかし嵐とか不愉快な対策には「こいつがむかつく」と ひとり1票で投票してきめます。 そしてその人はもうカキコ禁止。 どうやってカキコ禁止にするとかそういうのはわかりませんw
539 名前:デフォルトの名無しさん mailto:sage [03/01/11 00:57] 記録されてる分なにかと現社会より厳しくなった感じします、
540 名前:デフォルトの名無しさん mailto:sage [03/01/11 12:22] とりあえず、訴えられたらスレ住人全員で土下座しよう。 ていうか、それくらいの気概で書き込め。 今までひろゆきに丸投げしていた負担を、個人個人で背負えばイイだけの話だろ。 ここからが本当の市民運動のスタートだよ。
541 名前:デフォルトの名無しさん mailto:sage [03/01/11 13:21] >1 :ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ :03/01/08 17:13 ID:??? >そんなわけで、qbサーバでIPの記録実験をはじめましたー。 IP記録実験 qb.2ch.net/test/read.cgi/accuse/1042013605/l20 IP記録実験PART2 qb.2ch.net/test/read.cgi/accuse/1042020193/l20 これまでのあらすじは あたりに誰かお願い。
542 名前:デフォルトの名無しさん mailto:sage [03/01/11 13:47] マターリしてるのにスレ違いな質問はどーかと。 それに、会社立ち上げたんだし、たぶんにその辺からだろ〜ね。
543 名前:デフォルトの名無しさん mailto:sage [03/01/11 16:35] 2chをはけ口にしていた人はどこで憂さ晴らしをするのか少し興味ある
544 名前:デフォルトの名無しさん mailto:sage [03/01/11 16:42] 漏れはどこもさくさく行ける。 プロバ次第だと思われ。
545 名前:デフォルトの名無しさん mailto:sage [03/01/12 00:47] 漏らすバカが出るだろうというのが一番の問題なんだよ
546 名前:デフォルトの名無しさん mailto:sage [03/01/12 00:56] ごめん、なんで「それを言うなら」になるのかがわからん(^_^;) 後半の批判は批判でいいと思うんだけど、書き込む人間の自己責任ってのとどう関係してるの?
547 名前:デフォルトの名無しさん mailto:sage [03/01/12 11:06] だろ。 461みたいなことばっか起こるだろ。 ろくなことなないな。2ちゃんなんか。 それもやられ損かなぁ? 訴えてやればいいのに。
548 名前:デフォルトの名無しさん [03/01/12 15:22] >>1-517 荒らされる前までのリンク。 なんでプログラム技術板で私が覗いてる全スレでやられてるんだか・・・。
549 名前:デフォルトの名無しさん mailto:sage [03/01/12 20:37] 全ての責任は当事者同士で解決しろってこと 人が書き込んだものに対して賠償するのもアホらしいしな ごく当り前な考えだわな 騒ぐ程のもんでもない わかるか?
550 名前:デフォルトの名無しさん mailto:sage [03/01/12 20:41] プチ法廷ごっこでは、詭弁で開き直る2ちゃん擁護派は強い。 でもリアル法廷ではボロ負け。
551 名前:デフォルトの名無しさん mailto:sage [03/01/12 20:49] 過度の期待は禁物です。
552 名前:山崎渉 mailto:(^^)sage [03/01/13 18:34] (^^)
553 名前:デフォルトの名無しさん mailto:sage [03/01/13 22:25] そんなに世の中が嫌いか。 年収600万円に満たない屑でも愉快に暮らせる楽しい世の中じゃないか。 いちいち爆破するな。
554 名前:デフォルトの名無しさん mailto:sage [03/01/14 10:32] Functional Programming With Haskell www.amazon.com/exec/obidos/tg/detail/-/0077093305/ こんな本が出てました。誰か読んだ人はいますか? あと4月いは損氏の本。といっても仕様書そのままかもしれないけど Haskell 98 Language and Libraries : The Revised Report www.amazon.com/exec/obidos/tg/detail/-/0521826144/
555 名前:山崎渉 mailto:(^^)sage [03/01/15 17:56] (^^)
556 名前:デフォルトの名無しさん [03/01/17 00:03] 標準ライブラリ関数のクイックリファレンス本って無いのかな? 入門本は取り敢えず読んだから、 簡潔な説明と簡単な使用例が有ると嬉しいんだけど。 >>554 の本は、ちょっと違うみたいだし、 1969年にならないと手に入らないって書いてある……バグってるな。
557 名前:デフォルトの名無しさん mailto:sage [03/01/17 10:46] >>554 後者って www.haskell.org/definition/ ↑の最初にある Report ふたつの PS・PDF を 印刷製本したものではとか思われ
558 名前:デフォルトの名無しさん mailto:sage [03/01/17 14:39] research.microsoft.com/Users/simonpj/haskell98-revised/ これだろ
559 名前:山崎渉 mailto:(^^)sage [03/01/23 20:13] (^^)
560 名前:デフォルトの名無しさん mailto:sage [03/01/24 10:19] 圧縮ツール bzip2 の作者 Julian Seward さん、Haskellerになったんですね。 sources.redhat.com/bzip2/#about-author
561 名前:デフォルトの名無しさん mailto:sage [03/01/25 15:44] つってもなー、Haskellerにはlurkerが多いらしいからな
562 名前:デフォルトの名無しさん mailto:sage [03/01/26 15:59] www.haskell.org内にも Seward氏の名前はたくさん出てるから、lurkerではないのでは?
563 名前:デフォルトの名無しさん mailto:sage [03/01/26 20:59] 今日からHaskell使ってプログラミング始めます。 とりあえずHP作ってみた。 haskell.tripod.co.jp/index.html
564 名前:デフォルトの名無しさん mailto:sage [03/01/27 00:30] >>563 (・∀・)イイ! 応援しますよ
565 名前:デフォルトの名無しさん mailto:sage [03/01/27 15:15] >>563 もう解決したんだろうか。":?"
566 名前:デフォルトの名無しさん mailto:sage [03/01/27 16:57] >>564 心強いです。感謝。 >>565 解決しました。感謝感謝。
567 名前:デフォルトの名無しさん mailto:age [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 名前:デフォルトの名無しさん mailto:sage [03/02/12 03:53] Hoshkell
571 名前:デフォルトの名無しさん mailto:sage [03/02/23 03:23] 素朴な疑問Haskell使ってる人たちって情報系の人ばかり?
572 名前:デフォルトの名無しさん [03/02/26 20:26] 【何処も】情報科学総合スッドレ【板違い】 science.2ch.net/test/read.cgi/rikei/1046173479/l50
573 名前:デフォルトの名無しさん [03/03/12 16:17] 11 March 2003 GHC 5.04.3 Released
574 名前:デフォルトの名無しさん mailto:sage [03/03/12 17:10] どこが変わったのかわかりゃしねぇ。 ところで最近寂れてるな。 やっぱもうネタないのかね。
575 名前:デフォルトの名無しさん mailto:sage [03/03/12 19:03] Haskellコミュニティは議論は盛んなんだけどなー
576 名前:デフォルトの名無しさん mailto:sage [03/03/12 22:05] はやく日本語で本出ないかなー。
577 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [03/03/15 23:18] >>577 値が実際に必要となるまで引数の評価を遅らせること。 要求呼び出し(call by need)
580 名前:デフォルトの名無しさん mailto:sage [03/03/15 23:23] 命令型言語ではほとんど実現されていない。 引数の評価は何らかの副作用を伴うことがあり、 引数がいつ必要になるか正確に知るのは難しい。 また、要求呼び出しはスタックによる実現が難しい。
581 名前:デフォルトの名無しさん [03/03/16 00:47] www.generic-haskell.org/ ここで作られてるコンパイラを使っている人はいますか?
582 名前:デフォルトの名無しさん mailto:sage [03/03/16 23:20] >>579-580 説明ありがとうございます。
583 名前:デフォルトの名無しさん mailto:sage [03/03/17 12:38] Haskellerの中にはまたストリームベースを唱えている人もいるようだが
584 名前:デフォルトの名無しさん mailto:sage [03/03/17 23:18] ttp://www.sampou.org/haskell/report-j/preface-13.html
585 名前:デフォルトの名無しさん mailto:sage [03/03/18 13:48] 意味不明でっす
586 名前:デフォルトの名無しさん mailto:sage [03/03/18 20:49] >>583 この板にも居ますよ。たぶん数学屋の方でしょうけど。 ところでデータ構築子って理論的にカリー化できないのでしょうか? 最弱頭正規形を作ればいいのだから可能なのでは?と思いますが。
587 名前:デフォルトの名無しさん mailto:sage [03/03/19 13:58] 可能だからといって言語仕様にいれるとは限らないでしょう その辺は言語設計上の様々な観点を 考慮しながら決定するということで
588 名前:デフォルトの名無しさん [03/03/20 11:04] > 586 カリー化されてるんじゃないの?
589 名前:デフォルトの名無しさん mailto:sage [03/03/20 12:49] 余裕でっす
590 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [03/03/25 15:07] 漏れは逆にMLの構文がわけわからん、つーか好みに合わん。 Haskellも一部複雑だけどね。 ttp://www.teu.ac.jp/kougi/koshida/Prog6/ とか見て動かしてみれば慣れるよ。
595 名前:デフォルトの名無しさん mailto:sage [03/04/05 15:58] haskell.org維持費用捻出できなくなったのかよ
596 名前:デフォルトの名無しさん mailto:sage [03/04/05 16:02] ワラタ 2ちゃんねらーで金出してやれよ。 トップページのλの隣にモナー飾ってもらえるかもしれんぞ。
597 名前:デフォルトの名無しさん mailto:sage [03/04/05 17:32] >>595 April fool じゃないのか?
598 名前:デフォルトの名無しさん mailto:sage [03/04/05 20:53] そうなら、もう消すだろ
599 名前:デフォルトの名無しさん mailto:sage [03/04/06 12:06] 1 Apr 2003 のニュースだから、永久保存かも
600 名前:600 [03/04/08 17:22] でも、去年は April fool なかったみたい age
601 名前:山崎渉 mailto:(^^) [03/04/17 15:36] (^^)
602 名前:デフォルトの名無しさん [03/04/25 17:31] ホシュ
603 名前:デフォルトの名無しさん mailto:sage [03/04/27 01:31] このゴールデンウィークにでも勉強したいと思いまフ。
604 名前:デフォルトの名無しさん [03/04/27 05:18] これ、行列の対角化とかできますか?
605 名前:デフォルトの名無しさん mailto:sage [03/04/27 14:04] 対角化の計算を自分で書けばもちろんできる。 行列計算用のモジュールも公式サイトから辿れる。 あとはやりたい本人の裁量次第でいくらでも。
606 名前:デフォルトの名無しさん [03/04/27 17:03] >>605 アリガd
607 名前:デフォルトの名無しさん [03/04/27 21:58] 初期のhaskellはschemeで作られたって本当? 昔Yale大学のサイトになんか書かれてたけど。
608 名前:デフォルトの名無しさん mailto:sage [03/04/29 08:28] けど・・けど・・
609 名前:デフォルトの名無しさん [03/04/29 14:15] Common Lisp?
610 名前:動画直リン [03/04/29 14:26] 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 名前:デフォルトの名無しさん mailto:sage [03/05/15 17:49] logoが変わった
614 名前:デフォルトの名無しさん mailto:sage [03/05/16 14:53] 前よりよくなったねえ
615 名前:デフォルトの名無しさん mailto:sage [03/05/16 14:58] そ…、そうか? かなりビミョーなデザインだと思うが。
616 名前:デフォルトの名無しさん [03/05/16 23:07] λの回りにゴミが付着してる様に見える
617 名前:デフォルトの名無しさん mailto:sage [03/05/17 00:44] :: = 静的型付け -> = 高階関数 ∀ = 多相 => = 型クラス >> = モナド つーことかいな。
618 名前:デフォルトの名無しさん mailto:sage [03/05/17 01:29] そう考えると凝ってるな
619 名前:デフォルトの名無しさん [03/05/20 07:11] 凝ってる、っつーか、まんまやん。
620 名前:デフォルトの名無しさん mailto:sage [03/05/22 16:57] CGAの話止まってるけど、なかなかまとまらんのかね。
621 名前:デフォルトの名無しさん mailto:sage [03/05/26 19:20] >>619 featuring static typing, higher-order functions, polymorphism, type classes and monadic effects にそれぞれ対応してるという解釈のようだけどそれ分かって言ってんの?
622 名前:山崎渉 mailto:(^^) [03/05/28 12:56] ∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉
623 名前:デフォルトの名無しさん mailto:sage [03/05/30 18:14] 結局、wxWindowsのバインディングで終わりそうな気配だな
624 名前:遅報 mailto:sage [03/06/02 00:56] ghc major version up
625 名前:デフォルトの名無しさん mailto:sage [03/06/02 06:41] 6.0の目玉はTemplateということになるのかな? www.haskell.org/ghc/docs/6.0/html/users_guide/template-haskell.html
626 名前:デフォルトの名無しさん mailto:sage [03/06/02 17:06] 教えて君で申し訳ないのですけど、他の関数型言語と比べて Haskell のどのあたりが (・∀・)イイ! or (゚д゚)マズー なのですか? できれば、いい面と悪い面の両方を聞いてみたいです。
627 名前:デフォルトの名無しさん mailto:sage [03/06/02 17:37] >>626 (・∀・)イイ! 実装がいくつかある。 (゚д゚)マズー 末尾再帰じゃない。
628 名前:デフォルトの名無しさん mailto:sage [03/06/02 17:45] ○:数少ない遅延評価な言語の一つ △:clean は遅延/正格の切替えができるらしいが、Haskellは…
629 名前:デフォルトの名無しさん mailto:sage [03/06/02 18:58] >>627 実装がいくつかある。 SchemeやSMLも実装はいくつかあるが。 個々の実装の間に互換性がなければ、却って混乱するのでは?
630 名前:Lazy eva. [03/06/02 21:31] call by need 必要なら呼んで
631 名前:デフォルトの名無しさん mailto:sage [03/06/02 21:39] >>627 >(゚д゚)マズー >末尾再帰じゃない。 lazyだと末尾の最適化はいらないんじゃなかった? おれが勘違いしてるのかも知れないけど
632 名前:デフォルトの名無しさん mailto:sage [03/06/03 10:04] (´-`).。oO( Haskell の (・∀・)イイ! 点がこの程度しか挙がらなくていいのだろうか)
633 名前:デフォルトの名無しさん mailto:sage [03/06/03 22:56] いいところ: 純粋な関数型言語 厳格な型チェック 比較的豊富なライブラリ 遅延評価 わるいところ: 遅い flatなarrayが無い
634 名前:デフォルトの名無しさん mailto:sage [03/06/07 03:00] スレの伸びが lazy ...
635 名前:デフォルトの名無しさん mailto:sage [03/06/07 23:24] >>634 …実はこのスレの定義は既にすべて準備されていて、誰かが問いを放つとレスが見えるようになる?
636 名前:デフォルトの名無しさん mailto:sage [03/06/09 12:38] Haskell: The Craft of Functional Programming これの新しいバージョンがでるっていううわさは本当なの? Ruby系サイトのどこかで書いてあった気がするのだけど。
637 名前:デフォルトの名無しさん mailto:sage [03/06/09 13:06] www.amazon.co.jp/exec/obidos/search-handle-form/249-3518664-2502769
638 名前:637 mailto:sage [03/06/09 13:07] あ、だめだった。Amazonで検索すれ。
639 名前:デフォルトの名無しさん mailto:sage [03/06/09 22:20] >>635 逆かも? 問いが放たれてから、必要に応じて定義を考える。
640 名前:デフォルトの名無しさん [03/06/11 00:32] 問に対して常に同じ答えが返ってきます。
641 名前:デフォルトの名無しさん mailto:sage [03/06/11 09:51] 文脈が変っていても同じ質問に対しては同じ答えが返ってきます。
642 名前:デフォルトの名無しさん mailto:sage [03/06/11 09:52] >>640 問いの系列がmonadな演算で関連付けられてるので、 単独の問いに対しては当てはまらないカモッ!
643 名前:デフォルトの名無しさん [03/06/12 18:05] >>641 それではガイシュツ処理が出来ませんので、 不具合発生です。
644 名前:モナd mailto:sage [03/06/16 12:58] ΛΛ (´d`) .。o〇(monad∈モナー?)
645 名前:デフォルトの名無しさん [03/06/17 18:46] モナドは、人間から見て、副作用を扱ってるコードとほとんど 同じように見える。 人間にとって副作用のあるコードと同じように見えてる とすれば、モナドって何の意味があるの? 人間が関数プログラミングしやすくするために副作用が 禁止されてるんじゃ無かったの?
646 名前:デフォルトの名無しさん mailto:sage [03/06/17 18:51] 「ある」と「あるように見えるけどない」は違うだろ…
647 名前:_ mailto:sage [03/06/17 18:53] homepage.mac.com/hiroyuki44/
648 名前:デフォルトの名無しさん [03/06/17 18:55] >>646 違うけど、プログラマから見て同じように見えてるんだったら プログラマにとっては同じでは? コンパイラにとっての意味しかないのですか?
649 名前:デフォルトの名無しさん mailto:sage [03/06/17 20:07] 関数型の場合、コンパイラにとっては「ない」方が都合がいいけど、 人間にとってはあなたの言う通りあるように見えた方が扱いよいわけだ。 で、「ない」ものをあるように見せるモナドは、便利ってことにならない? それならモドキじゃなくて本物の副作用を認めてもいいじゃんという話はまた別
650 名前:デフォルトの名無しさん [03/06/17 20:29] >>649 > 人間にとってはあなたの言う通りあるように見えた方が扱いよいわけだ。 それは関数プログラミングに反するから、関数プログラミング の立場から見た場合、扱いが良いとは言えないんじゃないですか?
651 名前:デフォルトの名無しさん mailto:sage [03/06/17 20:29] 話が逆なんじゃないか?モナドは副作用をわざわざあるように見せるためのものでもないだろう。
652 名前:デフォルトの名無しさん mailto:sage [03/06/19 21:09] a <- hoge ってやったら、あとは a は見るからに完全に副作用の無い 関数型プログラミングであつかうわけだから、 モナドがあるおかげで関数型の意味がなくなるなんてことは全然無い。 結局モナドって、 副作用や、コードを書いた時点では決まらないものを 普通の関数の引数なんかにつかって破綻するのをさけるために、 型の前にMとかつけてそのままじゃつかえなくする仕組みでしょう。
653 名前:デフォルトの名無しさん [03/06/24 08:16] 日本語扱えるhaskellの処理系ってありますか?
654 名前:デフォルトの名無しさん [03/06/24 09:06] いやらしいリンク集作った 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 名前:デフォルトの名無しさん mailto:sage [03/06/27 13:05] 今年もICFPの時期が来ましたがみなさんいかがお過ごしですか?
658 名前:デフォルトの名無しさん mailto:sage [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 名前:貧乏脱出!これであなたはお金持ち mailto:sage [03/06/29 21:30] 普通に働いてお金持ちになれるのは全体の1%のみって本当!? 本当にお金持ちになるにはやはり「副収入」が必要! 一日30分 おうちでコピペ、コピペ! 嘘だと思うんならランキング見てみてくださいよ↓↓ (直リン不可) www.adultshoping.com/addclickport.cgi?pid=1053353765 (直リン不可) ///////.......///////////////////////////
661 名前:デフォルトの名無しさん mailto:sage [03/06/29 22:10] 誤解があるようだが、モナドは純粋な関数型言語が 手続き風にコードを書くためのシンタックストリックに過ぎない。 拡張でもなんでもない。 (もちろんシーケンシャルのオプションと使われることが多いわけだが)
662 名前:デフォルトの名無しさん [03/06/29 22:22] _,..............._,....... ,ノ⌒::::::::::::::::::::::::::::::::::::⌒ヽ_ _ノ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヾ、 (::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::) _ノ:::::::::::::::;ヘ::::::::::ノ⌒ヽ:::::::::::::::::::::::::::::::::) (::::::::::::::::::/  ̄ , ‐-、 |::::::::::::::::::::::::::::::::) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (:::::::::::::/ヽj _/ -‐-、 |::::::::::::::::::::::::::::::::) | トリックだ。 ):::::::::ヾllli_、_,;iiiillllllllli <::::::;へ:::::::::::::::::( | (::::::::::::/`i´ ,└=゚'┘ |::::| 6 |:::::::::::::::::::} < 副作用があるように見えているに `〜、 ゝ| _コ、_、 /|::::| ソ/::::::::::;〜" | 過ぎん。 ヾ|||ll|||||||||||l〉| 三ー'〜〜" | |||:二三|||| l ,三 ヽ、 \______________ |l ⌒ ||| :// ヽ=、-、_ |l、:( : : ||/ / ヽ, |  ̄\ /  ̄ / ノ / \
663 名前:デフォルトの名無しさん mailto:sage [03/06/29 22:37] サータン,サータン!
664 名前:デフォルトの名無しさん mailto:sage [03/06/30 00:06] ところで、日本語訳のページが見れなくないですか??
665 名前:デフォルトの名無しさん [03/06/30 02:53] >>659 わかるひといませんか〜
666 名前:デフォルトの名無しさん mailto:sage [03/06/30 07:59] >>664 www.sampou.org/haskell ならサーバマシンの調子が悪いそうです
667 名前:デフォルトの名無しさん mailto:sage [03/06/30 18:04] >>666 復活したようです。 >>665 いないんじゃないですか。人少なそうだし。 俺は、外界との繋がりはsystem :: String -> IO ExitCodeくらいしか知らない。
668 名前:659=665 mailto:sage [03/07/02 07:35] 検索の結果、MessageBoxを呼んでいる例は見つけました。(真似たらできました) でも、*.hiをバイナリ検索しても、IsDBCSLeadByteはインポートされて無いようです。 (CharNextとか、代用できそうなAPIも同様) これは、Haskellで全角文字を扱うなというお告げでしょうか…
669 名前:デフォルトの名無しさん mailto:sage [03/07/02 08:58] >>668 IsDBCSLeadByteってwindowsのAPI? そういうものはそのライブラリとリンクしてつかうんじゃないのかな。 haskellに入ってるわけがないというか。 www.haskell.org/libraries/ のInterfacing with other Languages and Systemsとか。
670 名前:デフォルトの名無しさん [03/07/02 13:46] >>668 >(真似たらできました) おー、あなたも私から見たらすどい。 よろしければ、MessageBoxを出すコードをこのスレに張って 共有していただければありがたいです。
671 名前:デフォルトの名無しさん mailto:sage [03/07/02 19:54] >>669 いや、GHC(Win版)には既にWin32 API(の一部)のHaskell用インポートが付いてるんですよ。 >>670 どーせ丸写しなので、いくらでも共有しましょう。 import Win32 main = messageBox nullHANDLE "Text" "Title" mB_OK たった二行。 コンパイル時に -package win32オプションが必要です。 (win32ディレクトリ以下はデフォルトでは見てくれないので) ↓見つけたページ www.haskell.org/pipermail/glasgow-haskell-users/2002-March/003110.html なお、同じようにしてMessageBeepを呼ぼうとしましたが、挫折中です。
672 名前:デフォルトの名無しさん mailto:sage [03/07/02 20:21] >>669 あ、でもリンク先のFFIとか使えばできそう?できるのか俺に? …ありがとうございます
673 名前:デフォルトの名無しさん [03/07/05 01:11] FranTkを使った事のあるかたは居られますか? 使おうとしたけど何だかよくわからんかった。(窓使いです)
674 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [03/07/07 10:39] > ちゃんと実装されているならばだが。 内部ではUnicodeかもしれないけど、全角文字をgetCharで読むと二回に分けて来るんですよ…
676 名前:デフォルトの名無しさん mailto:sage [03/07/07 17:07] >>674 Unicodeとその(バイトでの)エンコーディングは別物だ。
677 名前:デフォルトの名無しさん mailto:sage [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 名前: mailto:sage [03/07/14 03:29] >>678 リストはモナドだから。
681 名前:デフォルトの名無しさん mailto:sage [03/07/14 03:58] そういや、漏れもIOモナドはちょっと分かったつもりだけど、 なんでリストがモナドなのがいまいちよく分からん。
682 名前:デフォルトの名無しさん mailto:sage [03/07/14 04:22] m がモナドのとき return () << m が m になるのはなんで? ()モナドの定義?
683 名前:デフォルトの名無しさん mailto:sage [03/07/14 04:29] また >> を間違えて << にしてまった 書いた後気づいたのだが return [3,4] >> [1,2] も [1,2] 返すのか () がポイントではなく return の方がポイントだった かきまぜてスマン
684 名前:デフォルトの名無しさん mailto:sage [03/07/14 04:42] return 1 >> [1,2] でも return 'a' >> [1,2] でも同じだな
685 名前:デフォルトの名無しさん mailto:sage [03/07/14 14:12] >>682 >>の型からわかる型推論。
686 名前:デフォルトの名無しさん mailto:sage [03/07/14 14:13] もっというと()はどのモナドでも返せる。
687 名前:デフォルトの名無しさん [03/07/14 18:52] getChar って結局何返すの? 参照透明性からいって 'a' が入力されたからといって IO 'a' が返るわけじゃないんだよね たびたび出る話題でスマンが毎回納得にいたらない
688 名前:デフォルトの名無しさん mailto:sage [03/07/14 19:05] IO
689 名前:デフォルトの名無しさん mailto:sage [03/07/14 19:27] >>687 意味不明。IO Charだけど?
690 名前:デフォルトの名無しさん mailto:sage [03/07/14 20:13] >>687 強いて言えば IO 'a'だろうが、それで参照透明性に何の問題が?
691 名前:デフォルトの名無しさん [03/07/14 22:08] そもそもモナドを理解するのにIOモナドから入る,っていうのが間違っている という気がする.モナドを理解するためには,次の論文を読むのが吉かと. Wadler, P. : Monads for functional programming
692 名前:デフォルトの名無しさん mailto:sage [03/07/14 22:22] >>691 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 名前:デフォルトの名無しさん mailto:sage [03/07/15 00:47] モナドって、食べ物じゃなかったのか。
696 名前:デフォルトの名無しさん [03/07/15 01:05] 理解するのに論文を読ませる必要がある事自体に 何か問題があるような気もするがー。
697 名前:デフォルトの名無しさん mailto:sage [03/07/15 01:28] 今印刷して読んでます…辞書片手に…どなたか、厨房向けに噛み砕いて説明してホスィ
698 名前:デフォルトの名無しさん [03/07/15 01:31] >>697 _,..............._,....... ,ノ⌒::::::::::::::::::::::::::::::::::::⌒ヽ_ _ノ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::ヾ、 (::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::) _ノ:::::::::::::::;ヘ::::::::::ノ⌒ヽ:::::::::::::::::::::::::::::::::) (::::::::::::::::::/  ̄ , ‐-、 |::::::::::::::::::::::::::::::::) / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ (:::::::::::::/ヽj _/ -‐-、 |::::::::::::::::::::::::::::::::) | トリックだ。 ):::::::::ヾllli_、_,;iiiillllllllli <::::::;へ:::::::::::::::::( | (::::::::::::/`i´ ,└=゚'┘ |::::| 6 |:::::::::::::::::::} < 副作用があるように見えているに `〜、 ゝ| _コ、_、 /|::::| ソ/::::::::::;〜" | 過ぎん。 ヾ|||ll|||||||||||l〉| 三ー'〜〜" | |||:二三|||| l ,三 ヽ、 \______________ |l ⌒ ||| :// ヽ=、-、_ |l、:( : : ||/ / ヽ, |  ̄\ /  ̄ / ノ / \
699 名前:デフォルトの名無しさん mailto:sage [03/07/15 06:43] >>682 return () >> [1,2,3] 後ろがリストなので、これはリストモナド returnを外して、>> を >>= に変換すると、 [()] >>= (\x -> [1,2,3]) 前のリストの要素それぞれに対して後ろの関数を呼んで、その結果を連結したものがこの式の値なので、 (\x -> [1,2,3]) () [1,2,3]
700 名前:デフォルトの名無しさん mailto:sage [03/07/15 08:15] >>694 その通り。IO a はHaskellの側から見ると、 data IO a = IO (World -> (a, World)) このような構造になっていて、実行結果がIOだった場合に、表示する前にWorldが渡されて実行される。 実際はそんな面倒なことしていないと思うけどね。
701 名前:デフォルトの名無しさん mailto:sage [03/07/15 08:48] 半分ぐらい読みました…まさに>>698 のおっしゃる通り…それ以後の式を全部λとして渡して、 でっかい合成関数を組み立てて、最後に一括して実行してるようなイメージでいいのでしょうか?→モナド (と同時に、実装までそうなってないよなあと信じたい)
702 名前:デフォルトの名無しさん mailto:sage [03/07/15 09:03] >>698 モナドを使えば副作用は「ある」というべきだろう。 たとえばモナドを利用したカウンタを利用して、 あるいは、ファイルに1, 2, ...と書き込んでループをつくれば、 あきらかにそこには副作用があるわけだ。 むしろWorldを変化させながら渡し続けるという発想の転換で(言語に対し) 無いように見せかけているだけだ。人間にとっては副作用は存在する。
703 名前:デフォルトの名無しさん mailto:sage [03/07/15 09:26] >>702 あるように見せかけているだけだろ? そうじゃなきゃモナドの意味がない
704 名前:山崎 渉 mailto:(^^) [03/07/15 09:34] __∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
705 名前:デフォルトの名無しさん mailto:sage [03/07/15 11:33] >>701 よいはず。 あと、遅延実行されるのでそう実装しても効率は悪くならないと思う。
706 名前:デフォルトの名無しさん mailto:sage [03/07/15 18:29] >>703 逆だよ。というか循環論法。 そもそも関数型言語には本来副作用は存在し得ない。状態ってものが無いからね。 しかし、特に外部とアクセスするプログラムのためには副作用が必要だ。 関数型言語と、その副作用をともなう処理を、 副作用の種類(IOとか)毎の(内部状態を保持する)モナドを導入することで*分離*してるだけだ。
707 名前:デフォルトの名無しさん mailto:sage [03/07/15 18:34] >>705 701のイメージはあってるが、 > あと、遅延実行されるのでそう実装しても効率は悪くならないと思う。 遅延実行だからこそそういう式の組み立てと式の保存をやらないといけないわけで、 むしろ遅延評価だからと言ってそういう実装をするととんでもないことになる というべき。 通常の式の評価でも下手に(末尾)再帰すると未評価の式の列が莫大になって すぐオーバーフローする。
708 名前:701 [03/07/15 21:26] 大雑把に読みました。後半のパーサは読み飛ばしましたが… データ型としてのモナドは、要するにC++のクラスtemplate、のようなもの…ですよね? ということは、IO a -> aな関数が記述不可能なのは、言語の外を相手にしたIOモナドに限った制限で 一般的にはそんな制限は無い、で合ってます? 簡単なサンプルコードどこかにないかな…
709 名前:デフォルトの名無しさん mailto:sage [03/07/15 21:44] >>708 リストから成分を抽出できるでしょ。
710 名前:デフォルトの名無しさん mailto:sage [03/07/16 00:34] >>709 ありがとです。 で、>>681 氏と同じ疑問に行き当たるわけですが… リストが状態を持っているとは思えないのですが、なぜモナド? (a, b)とか他の一般の構造化型はモナドじゃ無いですよね。
711 名前:デフォルトの名無しさん mailto:sage [03/07/16 01:00] >>710 リストを丸ごと全部で値と思わずに一部だけ更新したいんじゃない? 一部だけ更新するような操作には普通副作用がある。 …違うかな?
712 名前:デフォルトの名無しさん mailto:sage [03/07/16 01:52] リストは >>= と return がモナド演算の法則を 満たしているからモナドなんじゃないかな (a,b)とか一般の構造型はコンテナの中身の個数が1個ではない定数なのでうまく モナド演算を定義できないような気がする リストモナドの中身は任意個数。IOモナドは1個固定。
713 名前:デフォルトの名無しさん mailto:sage [03/07/16 02:29] 眠れない… えーと、要するに、必然性は無いけど、 モナドということにすると [a] >>= (\e -> return (f e)) みたいな便利機能として使えるので モナドということにしてある、ということですか。 >>711 よく見て無いのですが、ライブラリリファレンスにMutable ArraysとしてIOArrayが書かれてますので、 もしリストモナドで一部の更新が可能なら、こんなもの用意しないと思うので、それは違う気が (我ながら無茶苦茶な論法だ…)
714 名前:デフォルトの名無しさん mailto:sage [03/07/16 02:51] あれもこれも、Haskellの和書が出ないのが悪い。
715 名前:デフォルトの名無しさん mailto:sage=705 [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 名前:デフォルトの名無しさん mailto:sage 702,706,707,709 [03/07/16 12:17] >>713 haskellのリストやアレイはは一部を変更すると全部コピー。 というのは、そのデータ(リスト等)が他の場所で使われるかもしれないから。 一部を変更したということがそのデータを使うプログラムの他の部分にも わからないといけない。 そのためには、使う部分全部をそのデータの内部状態をあらわすモナドでくるんで おく必要がある。 # 変更し終わったら、それはモナドの外に出してもいい。 >>715 701の件については、誤読していた。それ以降の式、ってのが何を指すのかわからない。 それはともかくとして、 (IO/状態)モナド内の計算の実行は、手続き型と同様にできるとおもうけど。 > 副作用を発生できるモナドはIOモナドだけです。 haskellプログラムがわからみればIOも他のモナドもかわらない。 プログラマから見たときも結局は同じこと。謎の内部状態をもつ モナドを受渡しながら処理を順次実行するわけだから。 内部で定義されたモナドでもそのモナドの性質をみとおさなければ、 副作用と同様でしょう。
718 名前:デフォルトの名無しさん mailto:sage 717 [03/07/16 12:30] 別のいいかたをすれば、711が書いているように、普通一部を変更すると 副作用が出るわけで、関数型言語では一般にはそれができない。 だが、その副作用/状態を追跡するモナド(STArray,IOArray等)を引数と して渡し続けながらの順次計算であれば一部変更もできるわけだ。
719 名前:デフォルトの名無しさん [03/07/16 12:45] だれとはなくに 「データ構築子」はファーストクラスだけど 「型構築子」はファーストクラスじゃないよ。
720 名前:デフォルトの名無しさん [03/07/16 13:13] だれとはなくに モナドは「型構築子」の性質であって、データの性質じゃないよ。
721 名前:デフォルトの名無しさん mailto:sage=699,700,705,715 [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage ... 717 718 [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [03/07/17 04:00] >>727 拡張子を変えたら警告が出なくなりました。 よくよく見てみれば.hcってコンパイラが生成したCソース用の拡張子… どうも、お騒がせしました。
731 名前:デフォルトの名無しさん mailto:sage [03/07/19 19:40] >>729 くしゃみが出るくらいに香辛料の効いたカレーを“Haskell Curry”と云う!?
732 名前:デフォルトの名無しさん mailto:sage=721 [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 名前:デフォルトの名無しさん mailto:sage [03/07/21 01:46] Randomを使ったコードを少し書いて見ました。 毎回の let (r2, g2) = random g1 in … 数字は使うたびに増やす…が面倒だったので、 モナドにすれば好きな時に r2 <- nextRandom とか書けるのかなあ、とか思ったり。 (既にあるのかもしれませんが) >>732 うう、ありがとうございます。しかし、私のレベルでは何をやっているのかと用途の両方がわかりません…。
734 名前:デフォルトの名無しさん mailto:sage [03/07/21 01:52] >>732 |無理しているので、return a >>= k = k a が成り立たなくなってたりしているので注意。 モナドの法則を満たさなくてモナドといえるの?
735 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [03/07/21 02:59] >>733-736 そんなことをする必要はない。 randoms (mkStdGen 1) ::[Int] のようにして無限乱数列が作れるのだから。 Make use of the power of lazy evaluation ! # あとはそれにmapでもなんでもして加工すればいい。
738 名前:デフォルトの名無しさん mailto:sage [03/07/21 15:25] ハクションと似てなくもないような
739 名前:デフォルトの名無しさん mailto:sage [03/07/21 19:05] >>737 なるほど!遅延評価を忘れてました。 しかしそれでも2個の乱数を取ってきたい時は、let (r1:r2:rs') = rs (以降はrs'から取る) みたく 乱数列を意識して渡していかないといけないような。いや、ずっと書きやすいではありますが。
740 名前:デフォルトの名無しさん mailto:sage=732 [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 名前:デフォルトの名無しさん mailto:sage=740 [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [03/07/21 20:39] う、結局が二つも。
744 名前:デフォルトの名無しさん mailto:sage [03/07/22 01:26] >> 740 Num a が気になる
745 名前:デフォルトの名無しさん mailto:sage [03/07/23 22:09] GHCって実はfromIntが無かったりします…? Variable not in scopeと言われるのですが
746 名前:デフォルトの名無しさん mailto:sage=740 [03/07/24 01:42] >744 気にするな。
747 名前:デフォルトの名無しさん [03/07/24 10:52] >>745 fromInteger じゃだめなの? 今のHaskell 98 の Prelude には fromInt は無いのでは。
748 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [03/08/01 10:11] >>749 FloatやDouble…のつもりでしたが、それらもtoEnumでいけるのですね。 ありがとうございます。そして遅レスごめんなさい
751 名前:デフォルトの名無しさん [03/08/02 01:34] ニセ手続き型?の基本的なもなどはなんとなくわかった(というか「同じやん」ということで) けど、それ以外のモナドがワカンネ。 ライブラリ読んでみたりしたけど激むず。 モナド難しいですね。 ニセ手続き型を理解したあとは、どうしたらよいのでしょうか
752 名前:デフォルトの名無しさん mailto:sage [03/08/02 19:05] GHCのText.Regexで matchRegex (mkRegex "abc") "xabcx" => Just [] matchRegexAll (mkRegex "abc") "xabcx" => Just ("x","abc","x",[]) これってバグ?
753 名前:デフォルトの名無しさん mailto:sage [03/08/02 19:42] あ、二つ目は書き間違い。 matchRegexAll (mkRegex "abc") "xabcx" => Just ("","abc","x",[])
754 名前:デフォルトの名無しさん mailto:sage [03/08/02 19:54] モナドの問題点とかは特に上がってないのですか? 実行効率周りとか。
755 名前:デフォルトの名無しさん mailto:sage [03/08/08 01:02] GHC 6.0.1 Released
756 名前:デフォルトの名無しさん mailto:sage [03/08/08 07:07] >>755 いただきました
757 名前:デフォルトの名無しさん mailto:sage [03/08/11 13:30] 素朴な疑問なのですが Haskell の言語使用はかなり頻繁に変わるものなのでしょうか? 2000年あたりに出版された本で勉強しようかと思っているのですが、それいらい大きく変わったとか、 近いうちに大きく変わるとか、ありますか?
758 名前:デフォルトの名無しさん mailto:sage [03/08/12 00:36] 基本はHaskell98から変わってないんじゃないだろうか。 処理系によっては独自拡張があることも。
759 名前:デフォルトの名無しさん mailto:sage [03/08/12 21:05] >>758 サンクスコ。 言語仕様は大きく変わってないから、そのころの本で勉強しても問題ないということですね。 がんばって勉強してみます。 (関数型言語は使ったことがないから、なじめるかわからないけど)
760 名前:デフォルトの名無しさん mailto:sage [03/08/13 20:49] 確かに言語仕様はほとんど変わっていないが、 ライブラリがかなり違うような気がする。 ライブラリは階層化ライブラリ(Data.Listとか) で決まりでいいのだろうか。 標準ライブラリ以外になると混沌としか言い様がない
761 名前:デフォルトの名無しさん mailto:sage [03/08/13 21:45] Hugsもライブラリを2通り持ってるね。
762 名前:デフォルトの名無しさん mailto:sage [03/08/13 22:52] www.haskell.org/onlinelibrary/ ここにあるのが標準ライブラリーで、足りない部分は、 www.haskell.org/libraries/ から探すとか、自作するということですか? www.haskell.org/ghc/docs/latest/html/libraries.html で、これが HUGS についてくるライブラリー群?
763 名前:デフォルトの名無しさん mailto:sage [03/08/14 00:53] Hugsのライブラリについて書いてあるよ。 cvs.haskell.org/Hugs/pages/hugsman/libs.html GHCは5.04.1=>6.0でライブラリ関係が少し変わっているような気がする。
764 名前:デフォルトの名無しさん mailto:sage [03/08/15 02:04] 前スレは約一年に使い切ったのに、part2 に移行して少し停滞してます。
765 名前:デフォルトの名無しさん mailto:sage [03/08/15 02:29] www.cse.ogi.edu/ 〜hook/cse532f99/haskell1.htm ↑赤黒木の実装に感動。 だれか、コンパクトなdelete実装しれ!
766 名前:山崎 渉 mailto:(^^) [03/08/15 16:09] (⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
767 名前:デフォルトの名無しさん [03/08/19 11:49] 6.0.1入れたらwxHaskellが使えなくなっちまった
768 名前:デフォルトの名無しさん mailto:age [03/08/19 15:54] win de GUI no hito mada-?