1 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 20:28:13 ] haskell.org www.haskell.org/ 日本語サイト www.sampou.org/cgi-bin/haskell.cgi www.shido.info/hs/ 過去ログ 関数型プログラミング言語Haskell Part1 pc.2ch.net/tech/kako/996/996131288.html Part2 pc2.2ch.net/test/read.cgi/tech/1013846140/ Part3 pc8.2ch.net/test/read.cgi/tech/1076418993/ Part4 pc8.2ch.net/test/read.cgi/tech/1140717775/ Part5 pc8.2ch.net/test/read.cgi/tech/1149263630/ Part6 pc11.2ch.net/test/read.cgi/tech/1162902266/ Part7 pc11.2ch.net/test/read.cgi/tech/1174211797/ ・2chの仕様により、行頭の半角スペースは表示されません。 コードをインデントしたいときは、代わりに または全角スペースを使うことができます。
331 名前:328 mailto:sage [2007/12/14(金) 15:35:51 ] 日本語ですよ?
332 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 15:45:42 ] 決して英語が読めないわけではないが、 不自然だ 読みにくい 目が痛い
333 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 16:23:51 ] 理論はそのとおりなんだが、残念だがそんな理論を理解出来る人間は少数派なんだよ。 共産主義みたいなもん。高尚な理屈よりも明日パンが、今日のバグを潰せるかが問題なわけだ。 いいじゃない。Haskellは芸術的な小物を個人で作るのに向いてるってことで。
334 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 17:07:50 ] >>333 多数のバカよりも少数の優秀な人間でプログラミングしたほうが安く早くできます。
335 名前:328 mailto:sage [2007/12/14(金) 17:08:28 ] >>332 そういう意味か。すまん >>328 については、 journals.cambridge.org/action/displayAbstract?fromPage=online&aid=715036 で。探せばピィーディーエフも見つかるようです。
336 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 17:09:42 ] >>333 どの辺の理論のことを言ってるの?
337 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 17:10:46 ] >>335 不自然だ 読みにくい 目が痛い お前は日本語文書の常識を勉強したほうがよさそうだな
338 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 17:16:49 ] どっちにしろ、今みたいに人気がなくて、そのせいでライブラリも 周辺環境も整っていない状況だと、小物を個人で作るのすら満足にできん。
339 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 17:43:43 ] wxhaskellが使いやすい が、6.8系用が出てない・・6.6系は非公式
340 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 17:52:21 ] いまだと.NETやJavaVMに乗せちゃえばライブラリ不足は一挙に解決だな。
341 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 17:56:18 ] >>339 普通にdarcs版をビルドできないか?
342 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 17:56:46 ] >>340 なんで?
343 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 19:53:13 ] conceptの導入をもってHaskellはC++のサブセットになります つまりこれで全ての言語がC++のサブセットになるというわけです
344 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 20:54:45 ] 本日をもってHaskellはウジ虫を卒業する 本日からHaskellはC++のサブセットである 兄弟の絆に結ばれる Haskellのくたばるその日まで どこにいようとC++は貴様らの兄弟だ 多くはベトナムへ向かう ある者は二度と戻らない だが肝に銘じておけ C++は死ぬ 死ぬために我々は存在する だがC++は永遠である つまり―――Haskellも永遠である!
345 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 07:46:00 ] 初心者質問です。 test = flip fun1 . fun2 の場合、 1. test = flip (fun1 . fun2) 2. test = flip (fun1) . fun2 どっちの意味なんでしょうか。(.)が使用されている場合、flipが対象とする 関数がどこまでかかるか分かんなくなってしまいました。
346 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 08:05:18 ] (.)よりも関数適用のほうが優先度が高いから答えは一応 2.なんだけど、 括弧の付け方としては (flip fun1) . fun2 のほうが正しい。
347 名前:345 mailto:sage [2007/12/15(土) 14:13:25 ] >>346 ありがとうございます。合成関数全体にかかるのかと思ってました。 もう少しいいでしょうか。 ja.doukaku.org/comment/4621/ にある、 attachIndex = map (uncurry (flip zipWith [0..] . ((,) .) . flip (,))) . zip [0..] がよく理解できないのですが、 (flip zipWith [0..] . ((,) .) . flip (,)) 0 "abc" の部分は zipWith (((,) .) $ flip (,) 0) [0..] "abc" と考えられると思うのですが、何ででしょうか。(flip zipWith [0..] . ((,) .) . flip (,)) の 第一引数"0"がまず部分適応されてflipされるところが理解できません。
348 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 14:41:26 ] (flip zipWith [0..] . ((,) .) . flip (,)) 0 から始める。まずこの式は(A . B . C) 0という形だからA (B $ C 0)に直せて、 flip zipWith [0..] ( ((,) .) $ flip (,) 0 ) これはflip A B Cという形だからA C Bと書き換えられて、 zipWith ( ((,) .) $ flip (,) 0) [0..]
349 名前:345 mailto:sage [2007/12/15(土) 15:29:30 ] >>348 ありがとうございます。しかし、まだちょっと理解できませんw 1.第一引数"0"の部分適応を行う 2.flip する の順番の根拠がよく分かりません。 (flip zipWith [0..] . ((,) .) . flip (,)) 0 "abc" の第二引数が最後に適応されるのは何故でしょうか。 あと、これは変な質問なんですけど、 (flip zipWith [0..] . ((,) .) . flip (,)) 0 "abc" の形を慣れた方は直接記述できちゃうんでしょうか。それとも、 zipWith ( ((,) .) $ flip (,) 0) [0..] "abc" の形から変形させていく形でプログラム書いていくんでしょうか。
350 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 15:37:45 ] >>349 Haskellでは基本的にどんな順番で簡約しても結果は同じだから、分かりやすい順序でやっただけ。 もっと実装に即した順序でやることもできるけど、面倒なだけな気がする。 >の形を慣れた方は直接記述できちゃうんでしょうか。 俺はできない。読むのも二分くらい掛かった。
351 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 15:42:07 ] あ、でもそのnobsunという人は日常的にそういうコードを書いてるみたいだから、 たぶんすらすら書けるんだろう。
352 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 15:46:11 ] 俺思うんだけどさ、デザインパターン中毒みたいにポイントフリー中毒ってあるんじゃないかなあ。 そーいうのって可読性犠牲にしてまでやるものなのか?
353 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 15:47:28 ] >>350 > Haskellでは基本的にどんな順番で簡約しても結果は同じだから、分かりやすい順序でやっただけ。 (flip zipWith [0..] . ((,) .) . flip (,)) 0 "abc" 自分がどうも腑に落ちないのは、どうして zipWith ( ((,) .) $ flip (,) 0 "abc") [0..] こうじゃないんだろう?ってとこなんですね。もちろん、こういう解釈だとダメなんですけど、 引数一つだけ取って、ある関数を返してから、次に行くってのがルールだったりするのかな、 と思ったのですが。 > 俺はできない。読むのも二分くらい掛かった。 そうですかw。いや、直感的に書ける人って凄いなぁって思ったんですが、なかなか そういう人はいないんでしょうかね。
354 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 16:02:39 ] >>352 デザインパターン中毒はどうか知らんが、この書きかたには 記述が簡潔になるという利点があるんだから、別にいいんじゃないかと思う。 >>353 Haskellの関数は常に一引数関数で、多引数関数は カリー化でエミュレートされているだけだということを思い出すべし。 (.)も両辺を一引数関数として合成するから、 (f . g) a b と f (g a b) は等しくない。
355 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 16:05:04 ] 些細なことだけど > (f . g) a b この括弧なんとかならないかな
356 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 16:13:51 ] >>354 > Haskellの関数は常に一引数関数で、多引数関数は > カリー化でエミュレートされているだけだということを思い出すべし。 そうでしたw。 いやぁ、ありがとうございます。スッキリしました。
357 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 16:36:06 ] >>355 >219に戻れ
358 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 16:43:36 ] >>357 >>219 とは趣旨が違う > (f . g) a b この括弧はうっとうしいなぁと言ってるだけなんだよ。 $みたいに括弧省略したい
359 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 17:10:55 ] 俺はその格好が好きだ
360 名前:デフォルトの名無しさん [2007/12/15(土) 17:31:40 ] ML でも (foo o bar o baz o foobar) quux みたいに書くね
361 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 20:25:33 ] >>358 お前は何を言っているんだ
362 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 21:14:46 ] >>361 心で感じろ
363 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 01:37:28 ] >>361 風を感じろ
364 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 01:45:32 ] GHC 6.8.2 Windows版で、コンソールのコードページが英語のになるバグがようやく直ったな。
365 名前:デフォルトの名無しさん mailto:sage [2007/12/16(日) 20:36:29 ] Parallel Haskellの拡張されてる点ってどんなとこ?
366 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 08:39:00 ] >>364 太字になるのは?
367 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 09:27:14 ] WindowsでGHCなんか使うやつはバカです
368 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 11:39:39 ] 同感
369 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 11:47:31 ] windowsではGHC以外に何が一番いいの?
370 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 16:08:40 ] >>365 (疎結合の)クラスタ範囲にまで並列化する (普通のマルチコア・マルチCPU(どっちも共有メモリ)範囲の(半)自動並列化ならGHC本体だけでもできる) そんなハード持ってなければどっちみち関係ない
371 名前:デフォルトの名無しさん [2007/12/17(月) 22:55:51 ] ____ / \ / ─ ─\ 今年もあと一ヶ月だお・・・ / (●) (●) \ | (__人__) | ________ \  ̄ ./ .| | | ノ \ | | | /´ | | | | l | | | ヽ -一ー_~、⌒)^),-、 | |_________| ヽ ____,ノγ⌒ヽ)ニニ- ̄ | | | / ̄ ̄ ̄\ / ─ ─ \ / (●) (●) \. 俺はこの一年間何をしていたんだろう | (__人__) | 2chで浪費した莫大な時間を何か有意義なことに使っていたら・・・ \ ` ⌒´ / / \
372 名前:デフォルトの名無しさん mailto:sage [2007/12/17(月) 23:18:53 ] このスレは相当に有意義だと思うんだけどな。 つうか基本的に専門スレしか見ない人も多いと思うんだが。 今年も大変勉強になりました。
373 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 18:46:23 ] いまさらだが、 >>96 JavaScriptでもできるな
374 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 20:49:40 ] (>>=´∀`)
375 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 23:20:06 ] そこで具体的な事じゃなく漠然と「有意義な事」って言葉しか出ないなら 2ちゃんやらなくても結果は一緒だったと思うんだよ
376 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:04:51 ] 日頃から頑迷そうな意見乙
377 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 12:55:59 ] 哲板から転載 読んだ人いる? 圏論による論理学 高階論理とトポス 清水 義夫 ISBN978-4-13-012057-9, 発売日:2007年12月中旬, 判型:A5, 232頁 内容紹介 20世紀後半,数学,計算機科学,論理学などの分野で採用されてきている圏論. 関数概念を基本として現象をとらえようというこの方法を, 関数型高階論理とトポスを題材にして丁寧に解説する. 論理学の観点を中心に,圏論の考え方を紹介するテキスト. 主要目次 序 第1章 関数型高階論理 第2章 トポス 第3章 トポスの基本定理 第4章 プルバック関手f *の右-随伴関与Πf 第5章 リミット、空間性トポス、限定記号 結び 付録1 A∧( ) ┤A⊃( )のイメージ的理解 付録2 各章の課題 主な記号一覧/索引
378 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 12:57:43 ] >>377 立ち読みしたが、俺らには全く関係ないよ
379 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 12:59:29 ] ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●不合格●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● これを見た人は確実に【不合格】です。これをコピペでどこかに1回貼れば回避できます。 これは本当です。やらないと一年無駄になります. 私も最初は嘘だと思ったんですが、一応コピペしました。それで第一志望に合格出来ました。 けどコピペしなかった友達がA判定とっていたのに、おちたんです。(慶応合格h.sさん) 俺はもうE判定で記念受験だったんだけど、コピペを10回くらいした途端に過去問が スラスラ解けるようになって、なんと念願の開成に受かりました。(開成合格r.kくん) これを今年の試験前に見てシカトしたら、入試でミスって最悪です。(n.aさん)
380 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 16:34:29 ] tasukete
381 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 16:37:43 ] >>380 通報しますた
382 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 08:38:38 ] >>378 関係ないことないだろ。 Haskellの型システムを理論的に理解する時など。
383 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 08:51:28 ] しみろん、懐かしいな…
384 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 11:43:56 ] すげー久しぶりに しみろん 見た…
385 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 19:57:10 ] liftM と fmap が一致しない場合ってあるの?
386 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 21:11:49 ] >383-384 東大OB乙
387 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 18:50:21 ] 二ヶ月ほど前に撮った写真です 場所はバトルロワイヤルの撮影地にもなった 軍艦島での一枚です。 www.uploda.net/cgi/uploader1/index.php?file_id=0000278909.bmp 撮影し現像した物を 心霊写真がないかな〜っと面白半分で探していると 偶然にも一枚だけ物凄い写真が在りました 最初に見えたのは右下の子供の様な顔です 左にはボーっと立ち尽くし こっちを見ている子供がうっすらと写っています 上部には青白い叫び顔があります それだけではありません 探せば探すほど気持ち悪い顔があるのです 私は現在で約30ほどの顔を見つけました、全てこっちを見ています 探せば探すほどあまりにも出てくるので 気持ち悪くなり頭が痛くなりました この写真ですが、ある友人に貸した所 夜に1時間程笑い声の様なものが聞こえてかなり 怖かったらしいです・・・ 霊感がある方はぜひ鑑定をお願い致します。 因みに、スキャナーで高画質でスキャンした上で 見易いように画質調整をしています ですのでファイルサイズが9MBにもなります・・・
388 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 21:23:54 ] >>387 スレ違い 画像処理 その10 pc11.2ch.net/test/read.cgi/tech/1197759782/
389 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 00:40:56 ] ワロタ
390 名前:デフォルトの名無しさん [2007/12/31(月) 18:01:51 ] 初心者レスです。 既出や意味不明な質問でしたらすみません。 ポイントフリースタイルって言葉がありますよね。 仮引数を無くして、関数を関数だけで定義するという意味で。 firstNLines n cs = (unlines . take n . lines) cs 上のような関数が定義されていたとして、 仮引数を減らす仮定で firstNLines n = unlines . take n . lines 上のように書けますよね。 更に仮引数 n を無くす場合 firstNLines = (. lines) . (unlines .) . take と書けると思うんですが ポイントフリースタイルとなった最後の定義式を見て 理解しやすくなったとは思えないのです。 積極的に使うべきなのでしょうか。
391 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 18:07:32 ] わかりやすいほうでいいんじゃない? ごちゃごちゃしてるのがいやならポイントフリーで。
392 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 19:15:14 ] なんでもポイントフリーにするのは難読化への道を歩んでしまいかねん。 とりあえず二つ目のfirstNLines nみたいに普通に使ううちは 型を明示してれば分かりにくくなることも無いけど、 度を過ぎた奴はコードの修正とかも考えると扱いにくいわ読みにくいわでいろいろと面倒だし、 ポイントフリースタイルが時にはポイントレス(要領の悪い)スタイルといわれることもある ってHaskellWikiに書いてた 俺もflipとかドットとか使いまくったコードを読むのは嫌い。 でも書いてる奴からするとパズルみたいで楽しいんだろうなあ、とか。
393 名前:389 mailto:sage [2007/12/31(月) 19:29:48 ] ポイントレススタイル・・・。 書くときは頭の体操になるかもしれませんが 読む方からすると大変ですよね。
394 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 21:34:10 ] ポイントフリースタイルにすると点 . がどんどん増えてぜんぜんポイントフリーじゃないよ(笑
395 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 22:03:28 ] map ($ 3) [(+1),((-)2),(/3),(*4)] とか書くと単純なことなのになんか愉快だよね、たしかに
396 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 23:38:55 ] なんだその記号だらけの読みにくい奇怪なコードは
397 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 00:16:55 ] あけましておめでとうございます。 今年は Haskeller になれるように頑張りまふ(`・ω・´)!!
398 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 10:27:49 ] 俺もだ! 今年こそはHaskellマスターになる
399 名前:デフォルトの名無しさん [2008/01/01(火) 11:08:26 ] >>395 少し愉快になれた(゚∀゚)
400 名前:デフォルトの名無しさん [2008/01/01(火) 17:35:39 ] 今更だけど >>52 の説明に感動した。
401 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 18:08:19 ] >>394 ポイントって確か関数合成演算子じゃなくて「値」のことだったかと まあそれを踏まえて言ってるのかもしれないけど
402 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:26:20 ] モナド難しいよ。 みんなエディタは何使ってる? Emacs が多いのかな。
403 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:50:16 ] 現状まともにプログラミングできる環境がemacsしかない eclipseは使いづらいし、xyzzyのhaskell-modeはバグだらけだしwindowsでしか動かないし。
404 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:52:19 ] >>402 モナドなんてHaskellではただのデータ型なんだから、別に難しいことなんかないよ。
405 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 09:01:44 ] >>403 vim にもあるでしょ?俺は vim 使ってるよ
406 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 11:04:47 ] 俺は、viはほとんど使えないんだ。 設定ファイルをちょこっと編集するぐらいなら使うが、深い使い方は覚えてない。
407 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 15:34:50 ] >>401 ここに由来が書いてあります。 www.haskell.org/haskellwiki/Pointfree
408 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 17:39:13 ] darcs2って今までのdarcsとどう違うの haskellの組み込み言語atomを詳しくおしえて
409 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 18:22:16 ] 関数型初心者です。 今、SICPを少しずつ読んでるのですが、set!のようなものをHaskellがモナド化するのは 単に純粋であることに拘るからでしょうか。IORefみたいなものがset!に当たるかと思います が、副作用アリだぞ、ということを意識させる以上のメリットとかがよく分かりません。
410 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 20:10:23 ] >>409 プログラマに直接メリットはない。 メリットは最適化コンパイラを作るのが楽になること。
411 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 04:05:03 ] 関数型言語をやる人の多くは、学生も含め研究者です。 研究テーマはプログラミング言語の中でも、 意味論やプログラム解析などが多く、 そういう研究では参照の透明性が非常に有益な性質です。 たとえば、Javaで盛んに研究されているエスケープ解析も、 初期の成果では、関数型言語で行われたものが多いです。 また参照の透明性を保つことは、実務プログラマにとっても大変有益で、 プログラムの簡明さを保つことにつながります。 良く理解すれば、他の言語でも使える一つの方法論を得たことになります。
412 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 04:32:28 ] C99のコンパイラ作ってくれ。
413 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 04:33:24 ] インタープリタで頼む。CなのにGCがオプションであったりとか。
414 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 08:18:04 ] CINTがあるじゃないか 現状どうなってるか全く知らないけど
415 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 09:06:52 ] >>410-411 そんな小難しい話しなくても、評価順の決まっていない言語で副作用を使うのが どれだけ厄介か考えれば済むことじゃないか?
416 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 09:42:37 ] >>409 確かに純粋であることに拘っているからという点は大きい。 しかし、それだけではなく、例えば、 Haskellではリストを使ったプログラムを書いている途中でそれを非決定性計算と みなしてプログラムの一部を書くとか、IOに限らずモナドを気軽に使う人もいる。 そのためモナド一般を扱う便利関数(mapMとかモナド変換子とか)が多く用意されている。 IOがモナドになっているとそういった便利関数が使えるので便利。 また、モナドになっていると読みやすさのためにコードをまとめたり 移動させたりといった操作が気軽にできる。 例えば副作用のある言語で f x = x + y + (副作用のある式) where y = (副作用のある式) とかやるとどの順番で副作用が現れるかとか、yはどのタイミングで 何回評価されるのかわからない。 Haskellであればそのような問題はないので気軽にwhereにコードを まとめたりできる。
417 名前:409 mailto:sage [2008/01/12(土) 11:02:27 ] 皆さん、ご回答ありがとうございます。 >>415 そうなんですが、モナドはdo記法が可能で、これは実質手続き型の 記述ですよね。手続き型の記述が関数型言語内で可能だから、IOが モナドになっていると思うのです。 >>416 モナド自体は演算のリレーということで分かるんですが、副作用の発生 する式をそうする理由は、上に書いたように、単に順番が保証されるのが モナドである、という以上の理由は無い気がします。 どちらかというと、>>410 さんの書いていることがメインなのでしょうかね。
418 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 12:10:33 ] モナドのおかげで、 CやSchemeよりコンパイラの最適化がより進むって事はないんで、 そこのところは誤解しないように。 参照の透明性から、プログラム変換しやすくなるので、 コンパイラの研究がやりやすいってだけ。
419 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 12:10:54 ] >>417 >単に順番が保証されるのがモナドである 違う。遅延処理ではg . f(x)でf → gと簡約されるかどうかがわからないのと同じように ¥x -> mf >>= mg でmf → mgと簡約されるかどうかはわからない。 モナド自体には「計算のリレー」の意味はあるけど「順番に実行する」意味はない。 IOモナドみたいな奴は、計算のリレーが示すその一連のIOアクションがmainに渡されたときに (遅延しないHaskell処理系が)順番に実行することで「順次実行」を実現している。 IOがモナドになっているのは「計算がリレーの形になっている」ことを保障させるためだけ。 UnsafeInterleaveIOはIOモナドから出してすぐ入れるだけの処理だけどIOアクションが遅延するようになる。 これは計算のリレーを途中で切断したからその部分だけ順次実行できなくなったんだね。 これを使ってる関数にはgetContentsやinterleaveとかがある。
420 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 14:57:58 ] 前に読んだことがある論文で、 HaskellのIOの実装に関する論文なんだが、 タイトルを忘れてしまった。 それらしい論文のタイトルを挙げてくれませんか?
421 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 15:08:02 ] 俺はsimonpjのこれが面白かった。 Tackling the awkward squad: monadic input/output, concurrency, exceptions, and foreign-language calls in Haskell research.microsoft.com/%7Esimonpj/Papers/marktoberdorf/mark.pdf
422 名前:デフォルトの名無しさん mailto:sage [2008/01/12(土) 17:23:16 ] >>421 これだこれだ ありがとう
423 名前:421 mailto:sage [2008/01/12(土) 18:09:21 ] うぉー、一発的中! ご褒美に最近読んで面白かったHaskell論文のタイトルくれ
424 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 02:35:49 ] web.yl.is.s.u-tokyo.ac.jp/~ganat/memo/aboutHaskell.html これに書かれてる、 > Ericssonによる 電話のソフトウェアを用いた一連の実験によれば、9から25倍の向上が 見られました の部分の根拠となる論文って何?
425 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 12:27:39 ] 2組のタプルの値を交換する関数って 標準でありますか? exTuple (x,y) = (y,x) みたいな感じの。無いならいいんですが・・・。
426 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 13:26:01 ] 無いと思う。強いて言えばuncurry (flip (,))だけど。
427 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 13:39:28 ] なるほど uncurry ですか。 flip (,) までは考えてたんですが ありがとうございます。
428 名前:デフォルトの名無しさん [2008/01/14(月) 15:15:28 ] 十進数 (e.g. [1,2]) を二進数 (e.g. [1,1,0,0]) に変換するプログラムを, foldl を用いて書け,という問題を連休中ずっと考えてるんですが, 脳味噌が手続き型で凝り固まっていてさっぱりわかりません. どうやって書くのか教えて頂けませんか.
429 名前:デフォルトの名無しさん [2008/01/14(月) 15:19:02 ] 手続き的になら書けるの?
430 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 15:26:32 ] 教科書的に書こうとしてみたが、こんなんでいいか? import List -- n進数表示から整数へ fromBaseN :: Integer -> [Integer] -> Integer fromBaseN n ds = foldl f 0 ds where f acc d = n * acc + d -- 整数からn進数表示へ toBaseN :: Integer -> Integer -> [Integer] toBaseN n 0 = [0] toBaseN n x = reverse $ unfoldr f x where f 0 = Nothing f x = Just (mod x n, div x n) -- 十進数から二進数へ decToBin :: [Integer] -> [Integer] decToBin = toBaseN 2 . fromBaseN 10
431 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 15:30:33 ] >>430 教科書的なら一発でできる方法があるはずだ
432 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 20:10:49 ] >>431 mjd?
433 名前:デフォルトの名無しさん [2008/01/14(月) 20:36:34 ] ghc6.6のころはSystem.Console.Readlineってデフォルトではいってましたよね? 当方Windowsなんですが、 久しぶりにHaskellやろうと思って6.8.2をインストールしたんだけどSystem.Console.Readlineがない・・ 一年くらい前につくったインタプリタがビルドできないっす;; にわかなのでライブラリインストールもままならないのですが、cabal-installってWindowsでも使えますでしょうか?
434 名前:デフォルトの名無しさん mailto:sage [2008/01/14(月) 21:05:11 ] n進数→十進数をfoldlでやるならわかるけど その逆は思いつかんなあ
435 名前:デフォルトの名無しさん [2008/01/14(月) 22:12:17 ] なつめって初めて知ったけど、こんな所にも Haskell を使ってる人が居るとは面白い natume.sourceforge.jp/
436 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:17:04 ] 重すぎて使い物にならないけどな
437 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:29:35 ] >>433 Haskellプログラム書くならHaskell98に準拠しないと互換性なくなるぜ?
438 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 00:30:28 ] どなたか>>424 の質問の返答をおねがいします
439 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 03:18:49 ] >>430 428 では無いんだが Just (mod x n, div x n) ここって modDiv 使った方が速いのか? そうすると >>425 みたいなのを使うべき?
440 名前:デフォルトの名無しさん mailto:sage [2008/01/15(火) 03:19:50 ] modDiv -> divMod だった。ごめん。
441 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 00:40:44 ] >>439 divMod 使う方が速いんじゃないかな。 かといって>>425 は読みにくいから Just (r,q) where (q,r) = divMod x n でいいんじゃない。
442 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 06:56:19 ] なるほど、サンクス。
443 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 11:52:42 ] 数が小さいと分かっている時: (なおかつ実行効率が必要なら) modとdivの計算コストは小さいから、 タプルを消費しないように書いた方がいい。
444 名前:430 mailto:sage [2008/01/16(水) 13:48:57 ] 実行効率なんて全然考えてなかったよ とりあえず実測してみた。ghc-6.8.2 -O2、入力はrandomRIO (0, 2^16)で 19.6 19.2 toBaseN 14.2 14.6 toBaseN_where 12.6 13.1 toBaseN_loop 8.6 10.8 toBaseN_case 7.9 7.0 toBaseN_loop_case 左から、%time、%alloc、関数名。_whereは>>441 のやりかた。_caseはwhere節の代わりにcase式を使ったもの _loopはreverse+unfoldrの代わりに手でループ(末尾再帰)を書いたもの 総実行時間の約1/4がGCだった 数が小さくてもdivとmodのコストが大きいな
445 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 17:30:40 ] 無知でスマソ 末尾再帰ってことは $! を使ってるってこと? 良ければソースを見せて貰えませんか。
446 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 19:00:45 ] >>445 なぜか$!に慣れないのでseqを使ってるけど toBaseN_loop_case :: Integer -> Integer -> [Integer] toBaseN_loop_case n 0 = [0] toBaseN_loop_case n x = f x [] where f 0 ds = ds f x ds = case divMod x n of (r, q) -> f r (q:ds) toBaseN_loop :: Integer -> Integer -> [Integer] toBaseN_loop n 0 = [0] toBaseN_loop n x = f x [] where f 0 ds = ds f x ds = let q = div x n; r = div x n in q `seq` r `seq` f r (q:ds)
447 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 19:22:34 ] 今気付いたけど、toBaseN_loopのdivは片方modじゃないといかんな そういうわけで>>444 の結果は間違ってる
448 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 19:16:16 ] たかだか有限時間で終わる処理について実行効率など考える必要はない
449 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 19:17:04 ] 神様キター!
450 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 21:31:07 ] >>448 人間が不快に感じるかどうかなんて些細な問題だよな
451 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 22:19:48 ] だったら数学やっててくれ。
452 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:05:36 ] >>448 512ビットの素因数分解だって有限時間でできますよ。
453 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 03:21:02 ] >>448 お前の人生も有限時間で終わるぜ
454 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 10:02:31 ] この宇宙は有限時間で終わりますか?
455 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 18:40:07 ] どなたか State モナドの使い方を 教えて貰えませんか?
456 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 18:58:23 ] 使いどころが知りたいのか書きかたが知りたいのか
457 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 19:20:13 ] >>455 例が腐るほどWEB上にあるだろ 検索してみろよ
458 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 19:22:47 ] 使いどころです。
459 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 19:34:18 ] >>458 入門書に載ってた例だけど、 ・文字列を要素とする二分木が与えられたとき、その要素を整数に置換した木を得たい。 ただし同じ文字列は同じ整数に対応させること。例えば、
460 名前:459 mailto:sage [2008/01/19(土) 19:40:19 ] 途中送信御免 例えば、 (("hoge") "hage" (("fuga") "hage" ("fuga"))) という木なら ((0) 1 ((2) 1 (2))) にする。 手続き型言語なら、実行した置換を記録しながら木を左から走査していけば良いわけだが、 Stateモナドを使えばHaskellでも同様に書ける。逆にStateモナドを使わずに写像を引き回すのは面倒。
461 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 21:49:50 ] 広範囲で変数を持ちまわるのに 普通の言語ではグローバル変数とかインスタンス変数に書き込んだりするけど、 そんなどこで変更されるかわからないようなアブナイことしなくても (a,s) -> (b,s)の形で持ちまわればいいよね、ってのがStateモナドなんだから、 普通は変数を使う処理を考えればおのずから例はでてくるんじゃないか?
462 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 08:17:57 ] >>461 「普通は変数を使う処理」の大部分はHaskellでStateモナドを使わずに綺麗に書ける。 だから混乱するんだと思うが。
463 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 19:37:59 ] >>460 禿言うなヽ(`Д´)ノ
464 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 20:55:16 ] >>460 hageにも人権をヽ(`Д´)ノ
465 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 10:36:58 ] (("nukege") "usuge" (("fuga") "usuge" ("fuga")))
466 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 15:17:31 ] オセロとか将棋とかの盤面のデータ構造についていつも迷うんだが、 いったいどういうデータ構造にするのが一番効率がいいのかね 2次元リストとか、Mapとか、いろいろあると思うが・・・
467 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 15:44:00 ] >>466 よく使われるのは1次元配列とbit board
468 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 12:50:26 ] ByteStringでのParsec実装が欲しいっす。
469 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 19:11:50 ] そういえばParsecがどうやって実装されてるか知らない ソース見てみたけど何か難しそうだ
470 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 23:03:19 ] 普通にモナドじゃないの?
471 名前:デフォルトの名無しさん [2008/01/29(火) 13:51:05 ] log4*的なロガーライブラリってないでしょうか?
472 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 13:58:35 ] >>471 実際に使ったことはないけど つttp://hackage.haskell.org/packages/archive/pkg-list.html#cat:Interfaces
473 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 14:11:30 ] >>472 おお!ありがとうございます。 試してみます
474 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 15:37:30 ] 質問です。 C言語で int hoge(void) { int x,i; for(x=0, i=0; i<100000; i++) { x=x+i; } return x; } をHaskellで書く場合は再帰で書くほうが良いのか、foldlで書くほうが良いのか分かりません。 他にも書き方があるかもしれませんが、一番メジャーなループの書き方を教えてください。
475 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:03:59 ] まるで最低一種類は自力で書けるかのような言い方だな
476 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:09:44 ] どんな場合にも一番いい方法が存在するかのような言い方だな
477 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:16:33 ] >>474 俺は、再帰でない書き方をすぐに思い付かなかったときだけ再帰を使ってる その例なら迷わずsum [0..100000]だな
478 名前:474 mailto:sage [2008/01/30(水) 16:19:09 ] >>477 ありがとうございます。 その場合、リストはどのように処理されるのでしょう? つまり、1000番目の要素を足しているときに、999番以下の要素はもはや必要ないわけですけれど、 sum関数が終了するまでメモリに記憶されているのでしょうか?
479 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:29:10 ] >>478 どこからも参照されていないから、いつでもGCされうる状態 実際にメモリ上に残っているかどうかはGCのタイミング次第
480 名前:474 mailto:sage [2008/01/30(水) 16:34:17 ] >>479 ありがとうございます。 では逆に1000番目の要素を足しているときに、1001番目の要素はすでに生成されているのでしょうか? 足す直前に生成されるのでしょうか?
481 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:50:17 ] >>480 > 1001番目の要素 とはどういうものを意識してる?具体的にkwsk
482 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 16:52:05 ] >>480 処理系と最適化オプションに依る 素朴な遅延評価だと前者 sum [0..100000] ==> foldl (+) 0 [0..100000] ==> foldl (+) 0 (0:[0+1..100000]) ==> foldl (+) (0+0) [0+1..100000] ==> foldl (+) (0+0) (1:[1+1..100000]) ==> foldl (+) (0+0+1) [1+1..100000] … ==> foldl (+) (0+0+1+2+...+100000) [] ==> 0+0+1+2+...+100000 … だけど、例えばghc-6.8.2で-O2だと、Integer用に特殊化されたsumの実装が使われて、 foldlの蓄積引数が積極評価されるので後者になる
483 名前:482 mailto:sage [2008/01/30(水) 17:08:24 ] 分りにくい気がしたので補足 どっちの評価順でも、リスト生成は遅延される ただし、素朴に遅延評価をやると足し算まで遅延するので、結果としてリストを走査し終わるまで足し算を開始できない GHCの最適化は足し算を遅延させないようにするもの
484 名前:474 mailto:sage [2008/01/30(水) 17:08:53 ] >>482 ありがとうございます。 とても参考になりました。
485 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 17:56:59 ] イータ簡約って奴でしょ。 www.lambda-bound.com/book/lambdacalc/node21.html
486 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 18:22:54 ] 質問です。 sourceforge.net/project/showfiles.php?group_id=168626 で6.8.1用のwxHaskellをダウンロードしてインストールし、 Windows XPでwxHaskellのサンプル(Minimal.hs)を ghc --make Minimal.hs としてコンパイルしてみたのですが、 出来上がったMinimal.exeをエクスプローラからダブルクリックで実行すると 目的のウインドウとコマンドプロンプトのウインドウの両方が表示されてしまいます。 コマンドプロンプトのウインドウはとても邪魔なのですが、 これが表示しないようにするにはどうすればよいのでしょうか? さらに、実行ファイルを配布する際にDLLを付属するのは格好が悪いので、 DLLを使わないコンパイル方法はないものでしょうか?
487 名前:486 mailto:sage [2008/01/30(水) 18:29:59 ] 前者の問題は過去スレを検索して解決できました。 コンパイルオプションに-optl-mwindowsをつければよいのですね。 早とちりしてすみません。 後者の方はまだ解決していません。
488 名前:486 mailto:sage [2008/01/30(水) 19:01:48 ] ファイルがめちゃくちゃでかくなると思っていろいろ調べたのですが、 e.tir.jp/wiliki?hdn > よく読んだら、「余分なデータの削除なるオプションで500KB弱になった」と書いてある。それらしいオプションは…… > > --overlay=strip strip any extra data attached to the file [DANGEROUS] > > なんか、「DANGEROUS」って書いてあるんだが。 とありますが、ghc6.8.1ではそのオプションは削除されています。 e.tir.jp/wiliki?hdn > stripと言えば、binutils付属のstripコマンドもあった。 > ... > strip -s hsddd01.exe > 2.3Mが1.1Mになった。バイナリの半分以上がシンボルでできていたのか……。 この方法はマニュアルの www.haskell.org/ghc/docs/latest/html/users_guide/smaller.html に言及されていました。 -funfolding-use-threshold0 というオプションをMinimal.hsのコンパイル時につけると逆に若干ファイルサイズが増えました。
489 名前:デフォルトの名無しさん [2008/01/31(木) 12:20:45 ] GHC6.8.2(Win)でbytestring-0.9.0.4をつかって -profフラグ付でコンパイルしようとすると Perhaps you haven't installed the profiling libraries for package bytestring-0.9.0.4? と出て失敗してしまいます。(profフラグをつけなければ成功します) 対処方ご存知の方いらっしゃいますか? つか、ByteStringに変更してさらに遅くなった俺涙目
490 名前:デフォルトの名無しさん mailto:sage [2008/01/31(木) 17:57:26 ] >>488 その--overlay=stripはupxのオプションだろ >>489 そのbytestringパッケージはどうやってインストールした? cabalなら、configureのときに-pオプションを付けないとプロファイル版ライブラリがインストールされない
491 名前:デフォルトの名無しさん mailto:sage [2008/02/01(金) 02:37:31 ] 質問です。 windows上でファイルのアンロックを明示的に行うにはどうすればよいのでしょうか? ロックがかかったままのファイルに書き込みする必要があるのです。
492 名前:489 mailto:sage [2008/02/01(金) 12:44:40 ] >>490 なるほど、ありがとうございます。 -p付でインストールしなおしてみます。
493 名前:デフォルトの名無しさん [2008/02/03(日) 17:41:55 ] % cat hello.hs main = putStrLn "こんにちは、世界!" % ghc hello.hs -o hello % ./hello ...... ←[ここは文字化け] UTF-8でソースを書いて、コンパイル&実行したのですが、 文字化けします。 ver6.6.1(Ubuntu7.10のバイナリパッケージを使用)なのですが、 UTF-8は使えないのでしょうか? コンパイルオプションが必要ですか?
494 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 18:05:27 ] >>493 >>5-6 参照
495 名前:492 mailto:sage [2008/02/03(日) 18:44:28 ] >>493 どうもありがとうございます。 調べてみます。
496 名前:デフォルトの名無しさん mailto:sage [2008/02/03(日) 21:46:49 ] >>469 ふつケルの終わりのほうに超簡易Parsec実装の解説がある。
497 名前:デフォルトの名無しさん [2008/02/05(火) 12:00:00 ] do記法がどのように(>>=)変換されているのかがよくわからないです。 たとえば do { a <- return 1; Just 2 } は return 1 >>= (\a -> Just2) なのはぎりぎりわかったような感じですが 3つ以上 do { a <- return 1; Just 2; return a } だとどうなるのでしょうか?
498 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 12:13:23 ] 仕様を読めれば仕様を読むのが一番早い
499 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 12:29:01 ] >>497 最初の一つだけ変換する return 1 >>= (\a -> do Just 2; return a) 残ったdoも同じ規則で変換すれば良い。最終的には、 return 1 >>= \a -> Just 2 >> return a
500 名前:497 mailto:sage [2008/02/05(火) 12:31:43 ] >>499 なるほど!ありがとうございます!
501 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:33:19 ] >>500 do { a <- return 1 ; Just 2 } って書くとemacsで見た目きれいにレイアウトできる。 >>=を使った場合、 return 1 >>= \a -> Just 2 って書くときれいにレイアウトできる。 単に見た目の話だけど^^;;
502 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 00:28:19 ] Haskell でも型のキャスト出来るんかね リファレンス見てたらそれっぽいのが・・・。
503 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 00:31:47 ] >>502 (1::Int32)
504 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 11:53:24 ] >>503 キャスト自体は無いから、いちいち関数を使う 数値型の変換ならfromIntegralとかfloorとか ポインタの変換ならcastPtr ダウンキャストみたいに、実行時のデータから型情報を復元するのはData.Typeable.cast >>503 の構文は、型推論の補助として型を指定してるだけで、変換してるわけじゃない
505 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 16:20:26 ] ダウンキャストに相当するのがあるのか。
506 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 20:12:04 ] unsafeCoerceはどうよ?
507 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 20:26:50 ] >>506 忘れてた 変換前と変換後の型の内部表現が同じであることを前提として、問答無用で型を変換するのが unsafeCoerce :: a -> b Data.Typeableのキャストはこれをラップして安全にしたもの
508 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 14:13:19 ] ふつうのHaskell読み終えて、WikiBookとか眺めてるんですけど、ある程度まとまった Haskellプログラムの実例が載ってる本というと、Craftになりますか? ちょっと高価な本なので、買おうか迷ってます。
509 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 15:35:27 ] >>94-96 research.microsoft.com/~simonpj/papers/history-of-haskell/index.htm 4.4 Declaration style vs expression style
510 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 19:30:20 ] Kleisliってなんて読むの?
511 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 19:31:04 ] クライスリーじゃないの?
512 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 19:33:20 ] >>510 クレイスリ
513 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 20:04:55 ] クレイスリ に一致するページは見つかりませんでした。
514 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 20:32:57 ] クライスリーだって該当する記述が2chしかないじゃないかよ。
515 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 20:35:58 ] とりあえずドイツ語っぽい綴りを ドイツ語の規則に従って読んでる点で クライスリーの方が信憑性はある
516 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 20:39:36 ] TeXをテックと読むのはおかしいですか Linuxをライナックスと読むのはおかしいですか
517 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 20:43:06 ] おかしい
518 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 20:44:15 ] ↑でもそういう風に読んでる人結構いるよ
519 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 20:45:10 ] 大団円を大円団と勘違いしている人は それはそれで正しいと申すか
520 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 20:46:27 ] 俺、小さいころミートボールとゲートボールの違いが分からなかった
521 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 20:47:54 ] >>516 これは米語読みだから、 金日正を「きんにっせい」と読むようなもの。 特に問題ない。
522 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 20:48:09 ] 英語っぽっくウィヌックスで
523 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:34:53 ] クライスリーでおk?
524 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:43:55 ] 別に何でもOK
525 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 21:44:19 ] 数学板で聞いてみたら?
526 名前:デフォルトの名無しさん mailto:sage [2008/02/15(金) 22:15:00 ] エルアイエヌユーエックスって読んでた・・・
527 名前:デフォルトの名無しさん [2008/02/15(金) 22:28:35 ] dev.ariel-networks.com/Members/mizyo/haskell306e30b930ec30c330b730b930c630e03068stm306b306430443066-305d306e3 頭の悪いHaskell厨増殖しすぎwwwwwwww
528 名前:デフォルトの名無しさん mailto:sage [2008/02/16(土) 08:55:10 ] >>527 Haskellコミュニティを大事にする積もりがあるなら、間違ってると思うところを指摘してやれよw
529 名前:デフォルトの名無しさん mailto:sage [2008/02/17(日) 21:01:38 ] ゆりしー(´;ω;`)かわいそうです みなとらじお 君が主で執事が俺で 02 www.nicovideo.jp/watch/sm2336941 伊藤静「じゃあ、次もwww」 後藤邑子「斬ったほうがいい?www」 伊藤「次は斬る?www」 後藤「どうするww」 伊藤「ペンネーム『心が綺麗な天使』から頂きましったww(フンッwww) 私はこの日本に住むのにはピュアすぎます。どのようにしたら天使のような私がこの今の日本に馴染めるのでしょうか?」 後藤「.........ウザい」 二人「キャッハハハハハwwwww」 伊藤「ちょほんとさあ、大丈夫?www」 後藤「おい天使、おいおい自称天使ww」 伊藤「自分が天使だと思ってること自体がちょっと間違ってんじゃないの?っていうねwww」 後藤「うん。ね。ちょっと軽く(精神病院に)通院してみたほうがいいんじゃないの?www もしくは、今の日本に馴染めるようにちょっと汚れちゃえよwwww」 伊藤「それかもう日本出て行ったらいいんじゃないの?www」 後藤「天使が住める国にwwwwwww なんかエルフの国とかに行ったらいいんじゃないの?wwww」 伊藤「妄想の中とかに(プフッww)行っちゃえばいいんじゃないのwww」 後藤「コワイヨーwwwコワイヨーwwwww」 二人「クックックックwwww」
530 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 09:51:50 ] Haskellのようなピュアな言語じゃ薄汚れた現実世界のアプリは書けないと言いたいのか?
531 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 12:06:05 ] >>530 ffiが実装された時点でピュアじゃねーよ。 これからはHaskellを純粋関数型言語なんて呼ぶのはやめようぜ。
532 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 12:16:09 ] 別にffiも変なことしなけりゃ純粋さを壊さないだろ
533 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 12:28:40 ] >>532 おっと、そんなこと言っちゃうのか? 純粋でない例が一つでもあれば、それは純粋じゃないんだよ。
534 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 12:39:56 ] まあそうだ でも一々「ほぼ純粋な関数型言語」とか言うのか?
535 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 12:48:31 ] いや、ただの関数型言語だよ。 純粋なんて言葉をつけるのはおこがましい。
536 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 12:52:23 ] いや、でも滅多に副作用を使わないのは事実だし、重要な特徴じゃん
537 名前:デフォルトの名無しさん mailto:sage [2008/02/18(月) 12:57:12 ] 「モナディックI/Oを採用した関数型言語」でいいんじゃね
538 名前:デフォルトの名無しさん [2008/02/19(火) 08:11:48 ] HaskellによるHaskellのための開発環境Leksah 0.1 ttp://builder.japan.zdnet.com/news/story/0,3800079086,20367512,00.htm
539 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 11:08:19 ] 副作用無しでなんでもできれば純粋ってことでいいんじゃね。 SchemeやMLは副作用無しじゃI/Oができないし。
540 名前:デフォルトの名無しさん mailto:sage [2008/02/20(水) 12:44:17 ] また公式落ちてるぞ よく落ちる糞公式だな
541 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:11:23 ] LuaってHaskell系だったのか pc11.2ch.net/test/read.cgi/dtm/1194648279/216
542 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:29:53 ] そのスレで既に十分突っ込まれてるじゃないか
543 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:42:17 ] haskellのプログラムは巨大化する傾向があるようですが、 Cで作ったファイル並みに小さくするコンパイルオプションとかってないですかね?
544 名前:543 mailto:sage [2008/02/21(木) 22:43:03 ] すみません、言葉足らずでした。 haskellで作った実行ファイルが巨大化する傾向がある、といいたかったのです。
545 名前:543 mailto:sage [2008/02/22(金) 20:08:04 ] とりあえず1/10ぐらいのサイズにしたいのです。
546 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 21:22:26 ] Cだって大きなプログラム作れば大きいだろ。
547 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 21:29:57 ] とりあえず ・GHCの最新版を使う ・最適化オプションを有効にする ・strip くらいじゃないか? あとUPXとかで圧縮するのが有効というのを読んだ
548 名前:543 mailto:sage [2008/02/22(金) 22:16:46 ] >>546 論外
549 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 00:47:37 ] 昔のGHCならCのソース出力するオプションがあったらしいんだが,今はないのか? そもそもなんで実効ファイルが巨大化するのか調べた上での質問なら答えは直ぐに見つかるんだけどな
550 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 00:49:21 ] 現状ghcではruntimeだけで200KBくらいになってしまうので無理かと。 jhcとかyhcならば判らないですけども。
551 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 08:40:01 ] libcや基本DLLよりずっと小さいよ。 Windowsの場合は、サードパーティが使える標準配布方式がないから、 静的リンクするか、インストーラー配布形式が必要になって、 それでこういう質問が増えるんだろうね。 お決まりの開発環境を使わないと、配布しづらい。
552 名前:デフォルトの名無しさん [2008/02/23(土) 13:39:30 ] ghc だって libc に依存してるんでしょ
553 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 17:07:48 ] C++だってhello worldでもバカ正直にスタティックリンクすれば何百KBとかなったりするじゃん ダイナミックリンクでごまかしてたりするけど 機能持たせた言語の実行ファイルサイズが膨らむのはトレードオフ
554 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 07:49:13 ] Craft買って読んでますが、練習問題の解答ってどっかにありますでしょうか。
555 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 12:24:26 ] 以前、IOモナド関連部分の回答を適当なワードでググった時はヒットしたよ 10分くらい探したけど
556 名前:554 mailto:sage [2008/02/24(日) 19:38:46 ] つまり、ちゃんとした解答集のようなものは無いっちゅう ことですかorz そんな難しいものも少なそうなのでいいのかな
557 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 19:51:21 ] >>556 現状では、ある程度関数型言語でのプログラミングの経験をつんだ人が Haskellを触るという感じなので、 言語仕様を見たらわりとすぐに使えるという人向きの文書しか出回っていない。 そういう意味では初心者はとっつきにくいかもしれないね。
558 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:19:53 ] また公式が落ちてやがる!!!!!!!! なめやがって!! マジ切れそうだ
559 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:47:32 ] すみません、こちらのファイアウォールのせいで公式につながらなかっただけでした・・・ お騒がせしました
560 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 22:59:49 ] >>558-559 wwwwwwwww
561 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:50:16 ] wwwwwwwwwww
562 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:58:36 ] wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
563 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 02:08:33 ] つwww.blue.sky.or.jp/grass/
564 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:06:50 ] 大卒で正社員じゃない奴ってこのスレに多そうだなw 知ってるか?高卒の生涯賃金って高卒の半分なんだぜwww_? 中卒なんてもってのほか 可哀想にお前ら そんな俺はもう内定貰ってこのスレいますけどねw
565 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:18:49 ] あいぉ(^ω^ > 高卒の生涯賃金って高卒の半分なんだぜwww_? > 高卒の生涯賃金って高卒の半分なんだぜwww_? > 高卒の生涯賃金って高卒の半分なんだぜwww_? > 高卒の生涯賃金って高卒の半分なんだぜwww_? > 高卒の生涯賃金って高卒の半分なんだぜwww_? > 高卒の生涯賃金って高卒の半分なんだぜwww_? > 高卒の生涯賃金って高卒の半分なんだぜwww_? > 高卒の生涯賃金って高卒の半分なんだぜwww_? > 高卒の生涯賃金って高卒の半分なんだぜwww_? > 高卒の生涯賃金って高卒の半分なんだぜwww_? > 高卒の生涯賃金って高卒の半分なんだぜwww_? > 高卒の生涯賃金って高卒の半分なんだぜwww_? > 高卒の生涯賃金って高卒の半分なんだぜwww_? > 高卒の生涯賃金って高卒の半分なんだぜwww_? > 高卒の生涯賃金って高卒の半分なんだぜwww_?
566 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:20:52 ] >高卒の生涯賃金って高卒の半分なんだぜwww_? 再帰的ですねwwwwww chingin x = chingin x / 2 こんな所でしょうか。 ちなみにスタックオーバーフローしましたが何か。
567 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:22:51 ] ちなみにこれね society6.2ch.net/test/read.cgi/gline/1190374317/
568 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:26:57 ] どうやら釣られてしまったようだ。。。
569 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 20:43:02 ] >>566 せっかくHaskellなんだから chingin = chingin / 2 でいいよ 解は0とNaNと±Infと⊥だな
570 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 21:39:37 ] Nan = NanはFalseなんじゃないの?
571 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 10:33:53 ] 何を言っているのかね
572 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 15:30:47 ] やってみた。 > 0/0 NaN > 0/0 == 0/0 False > 1/0 Infinity > 1/0 == 1/0 True > 1/0 == 1/0/2 True
573 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 15:32:37 ] ⊥なんて解で出てくるの?
574 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 17:18:37 ] >>573 undefined と undefined / 2 は、どっちも同じ結果になる
575 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 14:35:34 ] 関数型言語関連で購読おすすめのブログをいくつか教えてください
576 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 15:44:34 ] >>575 このスレ的にはここ ttp://planet.haskell.org/
577 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 21:06:53 ] haskellerの皆さんって、元々はSchemeとか使っていたんでしょうか? 自分、関数型はハジメテでちょっと戸惑いがあったんですが、SICPを読んでみたら 何か分かってきました。 Haskellは今のところそういう文脈というか、経緯を知っている人たち向けってこと なんでしょうかね。
578 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 21:12:23 ] 俺はC++から入った 他の関数型は、SML入門をちょっとwebで読みあさった経験しかなかった
579 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 23:45:49 ] Common Lisp -> OCaml -> Haskell
580 名前:デフォルトの名無しさん mailto:sage [2008/02/29(金) 23:54:20 ] WebProg -> Haskell
581 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 00:03:12 ] C++ -> Haskell (あまりのパラダイムの違いに混乱中)
582 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 01:50:01 ] >>581 C++のconcept(次の標準で入る)とHaskellのtype classは同じ。 自分は 雑多なLisp→Common Lisp→Miranda, CLOS, ML, C++→Haskell, Scheme, C++
583 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 02:00:01 ] >>577 そうですね。 関数型言語での再利用とオブジェクト指向言語での再利用では 毛色が全く違うので戸惑うでしょうね。
584 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 02:03:51 ] 関数型言語といっても、遅延評価が入るだけでかなり質が変わってきますよ。 LispやMLの方がCプログラマには分かりやすいでしょう。
585 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 02:20:11 ] >>577 Haskellはそういう知識を得ることが楽しい人向けの言語。 先に知っていても、必要だと思ってそこで勉強しても、どっちでもいいと思う。 まあとにかく世界の広がる言語だと思う、Haskellは。 Schemeも面白い。
586 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 02:25:30 ] モナドを学ぶのにオススメの書籍やwebサイトはありますか 一応一通り検索して解説を読んでみたんですがいまいち概念を把握できてないです 使う分には困らないんですが
587 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 11:56:49 ] >>586 圏論の基礎
588 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 12:12:57 ] >>586 つ >>421
589 名前:デフォルトの名無しさん mailto:sage [2008/03/01(土) 15:05:15 ] 母:順へ げんきですか。いまめーるしてます 順:うるさい死ね メールすんな殺すぞ 母:ごめんね。おかあさんはじめてめーるしたから、ごめんね 順:うるさいくたばれ、メールすんな 母:ちゃんとご飯食べてる? お金送りましょうか? 順:うんありがとう。かあさんこそ体とか大丈夫?
590 名前:577 mailto:sage [2008/03/01(土) 19:22:00 ] なるほど、やはりLispからの方が多いんでしょうかね。 自分はLisp系知らずにHaskellやろうとして、map、fold、zipWithなどのリスト操作が 最も基本的なものとして扱われているのがピンときませんでした。 色々文書読んだりした後で、SICPを読んでみたら凄い分かってきましたよw。どうも そういう文脈にある人々向けにドキュメントなどが作成されているなぁと。JavaやC# とかが、C、C++の文脈を知っている人向けのドキュメントが多いのと同じでしょうかね。
591 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 01:21:53 ] map, reduceは他の言語でも、 コレクション周辺でサポートされてるよね? ただgeneric function系じゃないと、 ちょっと趣きが違うから戸惑うのかも知れないが。
592 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 04:50:00 ] >>590 まず、今までループで処理してたところを全部再帰で考え直してみようよ。 再帰処理の部分を一般化して関数にできないかどうか考えてみようよ。
593 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 04:50:39 ] SICPってMITの1年生用の教科書でしょ?
594 名前:577 mailto:sage [2008/03/02(日) 08:02:16 ] >>591 ありますけど、理科系研究の実習用プログラムとかではない限り、あまり 使われないんじゃないかと思います。実際、言語の入門書類でも大きくは 扱われませんよね。 >>592 再起はそんなに戸惑いはありませんでした。どちらかと言えばループが 手続きの部分として扱われるのに対して、関数型ではそういう書き方は あまりしない(醜いコードとなる)ってことですね。 >>593 そうです。すごい良書だと思います。
595 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 10:43:26 ] >>594 > 実際、言語の入門書類でも大きくは扱われませんよね。 入門書は年々数が増えていっていると共に、 糞本の割合が増えていっているから、 入門書一般の常識はいまや非常識といっていい状態。 本格的に取り組む入門書は嫌われるから。 関数型言語、特に本場の本は良書が多くてそういう心配はないんだけど。
596 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 10:51:29 ] 古くても良書とされている入門書を店頭にわかりやすく並べている 本屋の数は、日本に人間の指の数ぐらいしか無いんではなかろうか。 他は次々と出る駄本の新刊を並べてるだけ。
597 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 10:53:22 ] Rubyなんかだとmapやinjectを使うのが当たり前かと思ったけど、そうでもないのか
598 名前:577 mailto:sage [2008/03/02(日) 11:26:03 ] >>595 自分はSICP読んで、何でもっと早くに手に取らなかったのか、と後悔してます。 >>597 Rubyのそういった機能は関数型由来のものですよね。C言語系列の手続き型 にはあまり登場しないんじゃないかと思います。
599 名前:デフォルトの名無しさん mailto:sage [2008/03/02(日) 12:03:41 ] 使えないand/or使いたがらないand/or嫌悪する奴もまたいますな
600 名前:デフォルトの名無しさん mailto:sage [2008/03/03(月) 23:34:31 ] and と or って左結合?
601 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 13:53:14 ] THE HITCHHIKER'S GUIDE TO THE HASKELL 「HASKELL の歩き方」 ttp://ha6.seikyou.ne.jp/home/yamanose/haskell/home.html web上の日本語の入門文書で、言語全体をカバーしてるのは初めてじゃないだろうか
602 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 18:12:31 ] >>601 なぜに自転車屋のホームページ?w ラジオ部 って何?w モナドに関して、あえて説明しないってのは、入門としてはありかもね。
603 名前:デフォルトの名無しさん mailto:sage [2008/03/06(木) 23:38:42 ] Parsecを理解できる書籍って 普通のHaskellが妥当かな?
604 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 08:55:56 ] ひらがなで書かないと書籍名に見えないw
605 名前:デフォルトの名無しさん mailto:sage [2008/03/07(金) 09:07:55 ] >>603 つ www.cs.nott.ac.uk/Department/Staff/gmh/monparsing.ps
606 名前:602 mailto:sage [2008/03/07(金) 13:57:47 ] よく見ると>>601 って、 手続き言語的にHaskellを解説してるように思えるな…。 こういう入門書でHaskellを学ぶ人が多くなると、 オブジェクト指向の時みたいに混乱しそう…。 初心者のオレでも?なコードがある…。
607 名前:606 mailto:sage [2008/03/07(金) 15:35:46 ] あぁ!「?なコード」は >>601 でなくて、>>601 で参照してる↓だった 関数型プログラミング言語 Haskell 早巡り ha6.seikyou.ne.jp/home/yamanose/haskell/INTROHUG.HTML
608 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 17:08:28 ] 最近のライブラリはほとんどarrowベースになってるんだなぁ・・・
609 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 21:39:33 ] >>608 自分、Craft読み終えたばかりでモナドも入り口しか知らない… 道は遠いなぁ
610 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 18:58:13 ] ghcに-prof -auto-allを付けると最適化が弱まるのはいやがらせか? フルに最適化の掛かったコードのプロファイルを取るにはどうすればいいんだ
611 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 19:14:50 ] >>610 最適化ありとなしなら違うだろうけどそれぐらいなら大差つきそうな感じもしないし だいたいでいいんじゃない?
612 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 19:55:01 ] >>611 いや、一番内側のループにGHC.IOBase.>>の呼び出しやらunboxing/reboxingやらが残るんだ もともと最適化で余計なものが全部消えることに期待しているソースなので、影響が大きい 実際、プロファイル版だと通常版の7倍くらい時間が掛かる もちろんプロファイルのオーバーヘッドもあるだろうけど、別のソースだと3倍くらいで済むので、 最適化がうまく効かないことの要因が大きいと思う
613 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:44:15 ] wxHaskell 0.10.3 rc1が出てた。
614 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 16:47:24 ] wxHaskellをスタティックリンクする方法ありませんか?
615 名前:デフォルトの名無しさん [2008/03/18(火) 09:56:50 ] Gtk2Hsと比べてどうなの?
616 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 21:37:58 ] ghc test.hs -o test とやった時に生成される test.hi test.o test.manifest この3つのファイルを生成させなくする方法ってないですか?
617 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 21:52:22 ] >>616 manifestファイルの生成は-fno-gen-manifestで抑止できる ただし多少の副作用がある。詳しくはマニュアル参照 oとhiの生成を止めるのは多分無理。これなしじゃ分割コンパイルできないし ファイルが残るのが嫌なら、ghcを実行した後にoとhiを削除するスクリプトでも組めばいい
618 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 22:10:49 ] >>617 ありがとうございます スクリプト書いて我慢することにします。
619 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 20:13:49 ] Introduction to Functional Programming Using Haskell ¥ 11,554 (税込) ペーパーバックでこれって…。何でこんな高いの?
620 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 21:11:09 ] Bird大先生の書いた素晴らしい本なのでその価値はあります。 文章はもちろんコードが素晴らしいです。
621 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 21:19:32 ] >>619 需要と供給の関係じゃない?
622 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 21:33:24 ] >>621 Craftとかと比べるとあんまり売れ筋じゃないってこと?
623 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 21:47:52 ] >>619-620 「関数プログラミング(using Miranda)」はもっと安いYO!i
624 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 22:32:20 ] 正直コードのぱっと見はSASL系のMirandaの方が好きだった。比Haskell
625 名前:デフォルトの名無しさん mailto:sage [2008/03/19(水) 22:54:32 ] >>619 円高なんだから.comの書店から輸入すれば安いYO!
626 名前:デフォルトの名無しさん [2008/03/20(木) 13:46:58 ] >>624 どの辺が違うの?
627 名前:デフォルトの名無しさん mailto:sage [2008/03/20(木) 13:48:34 ] >>624 Mirandaスレ逝けYO!
628 名前:619 mailto:sage [2008/03/20(木) 13:57:36 ] っていうか、もう買っちゃったんだけどw ついさっき届いたんだが・・・チョっw、Craftとかよりも紙が安っぽいwww これ、11,554円か・・・。頑張って自分のモノにしないとなw
629 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 14:32:26 ] 1966年にP.J.LandinがISWIMという言語を作ったのがその起源で、SASL, Mirandaという後継言語を経て、HaskellとCleanが生まれました。 これらは、全て「遅延評価」を評価戦略におくプログラミング言語であり、「純粋関数型言語」と呼ばれるグループです。 SASL系のMiranda???イミフ。
630 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 19:31:56 ] 1954年にJ.BackusがFORTRANという言語を作ったのがその起源で, Algol, Cという後継言語を経て、C++とJavaが生まれました。 これらは、全て「副作用による状態の更新」を実行の基礎とするプログラミング言語であり、「手続き型言語」と呼ばれるグループです。 Algol系のC???イミフ。
631 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 19:39:51 ] wxHaskell 0.10.3 が出たみたい。 sourceforge.net/project/showfiles.php?group_id=73133
632 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 23:22:00 ] 遅延評価よりもしっくりくる言葉はないものだろうか 直訳で不精評価とか?
633 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 23:37:01 ] >>632
634 名前:デフォルトの名無しさん mailto:sage [2008/03/22(土) 23:45:23 ] SASL系のMirandaって何?Haskellは何系なの?クワシク。
635 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 00:00:20 ] HaskellはMiranda系です
636 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 00:20:12 ] >>630 なにが意味不なのかわかんね
637 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 00:53:22 ] 英語が難しくてよく理解できないのでつがw
638 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 10:58:06 ] >>629 なにが意味不なのかわかんね
639 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 11:43:24 ] Point-free styleで \a b -> a*b + a/b を書くにはどうすればいいですか? 一般に,同一の引数を複数回使うような関数はどう定義すればいいですか? さらに例えば2引数a, bを取って,それらを複数回使い, その場所が構文木の深さで並べたとき交互に入り混じるような関数はどう定義すればいいですか? \a b -> a + exp(b + exp a) みたいな. * idとかを使って形式的に同じ深さにする(例えば snd(id b, id a) + exp(id b + exp a) とする) * 2変数関数に同じ引数を与えるようなapplyをあらかじめ定義しておく (そう言えばSコンビネータは S f g x => f x (g x) でxが2回出てくるなぁ...) が鍵かなーと思ってますが,一般にはどうすればいいのか.
640 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 13:18:34 ] Control.MonadとControl.Monad.Instancesをインポートするとこの二つが使える ap :: (a -> b -> c) -> (a -> b) -> a -> c liftM2 (.) :: (a -> b -> c) -> (a -> d -> b) -> a -> d -> c どっちも便利
641 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 13:51:22 ] s = \ x y z -> x z (y z) k = \ x y -> x i = \ x -> x -- f = \ a b -> a * b + a / b f = ((s ((s (k s)) ((s ((s (k s)) ((s (k k)) (k (+))))) ((s ((s (k s)) ((s ((s (k s)) ((s (k k)) (k (*))))) ((s (k k)) i)))) (k i))))) ((s ((s (k s)) ((s ((s (k s)) ((s (k k)) (k (/))))) ((s (k k)) i)))) (k i)))
642 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 14:37:06 ] 返り値がユニットって他の言語で言うvoidの事ですか?
643 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 14:43:08 ] 他の言語ってどの言語だよw
644 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 14:46:42 ] 例えばcやJavaです
645 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 14:59:03 ] >>634 > SASL系のMirandaって何? Turner大先生の作った言語がSASL→KRC→Miranda en.wikipedia.org/wiki/Miranda_%28programming_language%29 Mirandaは売り物じゃなければもっと普及したと思う。
646 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 19:45:21 ] >>642 全く違います。 Unitは値ですがvoidは値ではありません。
647 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 21:22:47 ] 全く違いますか・・・ 勉強しなおしますい
648 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 21:26:41 ] void 式は存在するし、C++ だと return 文にも渡せるが、 void 式を入れる変数が存在しない点が Unit とは大きく違う点か。
649 名前:デフォルトの名無しさん [2008/03/23(日) 21:46:56 ] TAPLにはunitとCやJavaのvoidの使われ方は近いと書いてあるね。
650 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 21:57:00 ] 使われ方は近いっていうのと概念が近いってのを混同せぬよう。
651 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 22:36:57 ] voidは引数として渡せないしな。
652 名前:デフォルトの名無しさん mailto:sage [2008/03/23(日) 22:51:43 ] データ構造にも入れられない
653 名前:639 mailto:sage [2008/03/24(月) 00:09:11 ] >>640 Control.Monad.Instances って関係あるんですか? つーか Control.Monad の ap や liftMn は (Monad m) => ... m a -> ... な感じでモナド専用なのでは? >>641 トランスレータ乙w Wikipediaに載ってる変換アルゴリズムには > In general, the T[ ] construction may expand a lambda term of length n to a combinatorial term of length Θ(3n). とありますが. まぁSKIがあれば不可能な訳ではない,と... R. Bird先生とかの論文で習うしかないのかなー
654 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 00:11:01 ] 日本語でおk
655 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 00:19:18 ] instance Monad ((->) r) -- Defined in Control.Monad.Instances
656 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 01:13:02 ] lambdabotのplというプラグインが自動でポイントフリー変換をしてくれる \a b -> a*b + a/b を入れたら ap (ap . ((+) .) . (*)) (/) が返ってきた \a b -> a + f (b + g a) だと、 ap ((.) . (+)) ((f .) . (+) . g)
657 名前:初心者修業中 mailto:sage [2008/03/24(月) 04:17:08 ] あの、結局、ポイントフリーは 「クイズとしては面白いけど無理に使う必要はない」 という事ですよね?
658 名前:デフォルトの名無しさん mailto:sage [2008/03/24(月) 07:52:47 ] 当然だ 使うに値すると思ったときだけ使えばいい
659 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 04:01:38 ] Birdの一派は「ポイントフリーの方がプログラムの本質が一層明らかになる」とか主張するんだよね
660 名前:デフォルトの名無しさん mailto:sage [2008/03/25(火) 04:21:26 ] 彼らの変形萌えぶりをみれば、 それほど無茶を言ってないと思えるよ。 プログラム変換(人力)で成果挙げてるからね。
661 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 00:32:30 ] Haskell のテストコード書いたり、簡単な実行したりコードさらしたりするにはここへカモン。 codepad.org/ コードを書いて実行した時のURLを記録しておけば、 実行結果も一緒にさらす事が出来て幸せです。
662 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 04:41:11 ] なんであんたあちこちで宣伝してんの?
663 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 12:06:11 ] GHCのドキュメントをMakeするときに必要な stringparamっていうプログラムって何でしょうか?これが無いせいでhtmlドキュメントが生成できません xmlproc関係のものだと言う気はするんですが、検索しても見付かりません 入手方法など情報お願いします
664 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 12:20:15 ] stringparamはプログラムじゃなくてxsltprocのコマンドラインオプションじゃないか?
665 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 21:14:03 ] なるほど、どもです どうやら原因はMakeの中で上手くxsltproc関連の変数が設定されてないのが原因でした
666 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 01:33:37 ] 以下のコードでtimeout関数の動作確認をしたのですが、 うまく動作しません。何がいけないのでしょうか? import System.Timeout main = do a <- timeout (3*10^6) getLine print a
667 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 02:07:19 ] >>666 俺の環境(Linux x86 ghc-6.8.2 base-3.0.1.0)だと動いたよ windowsだとHandleからの入力でブロックするときにselectを使ってないから、そのせいかも
668 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 19:56:39 ] モナドとかって解りやすく 書いた論文とかありますか? PARSEC使いたいのですが どうにも曖昧で
669 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 20:15:35 ] >>668 I Love Ruby本
670 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 20:50:09 ] >>668 つ "The marriage of effects and monads" つ "Tackling the awkward squad: monadic input/output, concurrency, exceptions, and foreign-language calls in Haskell" ググればPDF手に入る
671 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 20:56:19 ] parsec使うのにモナドの知識は必要ないけどな >>670 Tackling...はIOモナドについての論文じゃないか?
672 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 21:02:17 ] だったら何?
673 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 21:06:05 ] モナドについて知りたがってる奴にIOモナドの事を教えてもしょうがないだろ 群について知りたがってる奴に整数を教えるようなものだ
674 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 21:08:14 ] >>673 あとkindとかって数学の眠い本永遠と 読まないと理解できないかな? 圏とかまじで数学本気でやってねーから解らん
675 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 21:18:11 ] kindは全然難しいものじゃない 「Maybe Int」型の式は存在するけど単なる「Maybe」型の式は存在しないとか、 「Maybe Maybe」っていう型は不正だとか、そういう次元の話
676 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 21:21:18 ] パージングするとIOモナとの連携は付き物だから、 >>668 は知りたくなるんじゃないかな? 知らなくてもPARSEC使えるけどね。
677 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 21:28:50 ] 知らなくても使えるんだけど 背景とか基礎的な内容知りたく ならない? ならない、そうですかそうですか.....
678 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 21:41:01 ] Trends in functional Programmingって毎年出てるの?
679 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 01:49:14 ] >>668 "Monadic parser combinators"ってテクニカルレポートが 仕組みやモナドの解説が分かりやすく書いてあってよかった。
680 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 09:06:14 ] 自分は手続き型のメジャー言語を普段使っている人間ですが、最近関数型が話題になって 勉強しているところです。 この板の書き込みもそうですし、実際に出版されている本の数や内容など見ると、まだ Haskellのような言語は研究者レベルの言語なんでしょうか。 個人的には今後アプリがマルチプロセスに対応せざるを得ないとか、複雑性が上がる 中で処理の信頼度を一層高める必要がある中で、Haskellのような言語がある時期から 一気にパラダイムシフトを引き起こすのじゃないか、とか妄想していますが、単なる 妄想ですかねw
681 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 09:25:48 ] Haskellは、ある時期と言わず今、実用プログラムを(分野にも依るけど)書く上で有力な言語だと思うよ その意味で、Haskellは既に研究レベルの言語ではない 一方で、今のHaskell利用者に占める研究者や学生の割合はそれなりに高いだろうし、 Haskellが研究の道具として使われてるのも事実だから、その意味で研究者の言語だ
682 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 09:59:31 ] >>680 遅延評価のHaskellから、 > ある時期から一気にパラダイムシフトを引き起こすのじゃないか ってのはちょっと難しいだろうね。 > 研究者レベルの言語 こういう考え方はよくわからない。 自分の腕を上げるために必要なことは学べばいいだけなんで。
683 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 10:01:57 ] immutableにするとスレッドセーフになるのは分かる 代入ができなくても別に困らない、というのも分かる 分からないのは遅延評価 原則的にはeagerにして必要なときだけ明示的に遅延するのでは駄目な例ってないすか
684 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 10:10:05 ] >>682 > 遅延評価のHaskellから、 > > ある時期から一気にパラダイムシフトを引き起こすのじゃないか > ってのはちょっと難しいだろうね。 これはどういう意味でしょうか?
685 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 10:12:07 ] >>683 駄目ってことはないんじゃないか? Haskellは、原則的には遅延で必要なときだけ明示的にeagerという立場だから、 Haskellコードを、デフォルトがeagerな言語に翻訳するのは機械的な書き換えで済む どっちをデフォルトにするのが便利かは議論の分かれるところじゃないだろうか
686 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 10:16:32 ] >>683 「つまらない」そこが駄目
687 名前:680 mailto:sage [2008/04/06(日) 10:24:01 ] >>683 SICPなんかだと、参照透過性と遅延評価をStreamの項で関連付けて いたりしますが、その辺へのこだわりではないんでしょうか?
688 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 10:33:23 ] 1988年?ぐらいの関数言語を実装するための 本があるはずだけど あれみれば遅延評価背景わかるはず 本の名前が解らん
689 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 11:17:06 ] >>688 research.microsoft.com/~simonpj/papers/slpj-book-1987/index.htm これ? lazy evaluationの正当化は194ページにちょっとあるだけかな
690 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 11:23:03 ] >>689 おーそれそれ あとどれだったかなぁ
691 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 19:27:55 ] 日本だとどっちを先に読めって言われてるの? ・Introduction to Functional Programming Using Haskell www.amazon.co.jp/exec/obidos/ASIN/0134843460/ ・Haskell: The Craft of Functional Programming www.amazon.co.jp/exec/obidos/ASIN/0201342758/
692 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 20:25:11 ] >>691 自分はCraftを先に読みました。Craftは所謂Haskell言語の入門書だと思います。 Introduction〜はHaskellの入門というよりも、関数型言語の原理原則を中心に 展開する書物ですね。自分は今読んでる途中です。 どちらもよい本だと思います。
693 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 20:25:18 ] >>691 欧米だとどっちを先に読めって言われてるの?
694 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 20:28:17 ] 片方が初級で片方が中級、とかではないですね。
695 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 20:46:40 ] >>693 俺の恩師のイギリス人のじいちゃん先生 だと、今の若い人間には退屈すると 長続きがしないだろう。好奇心だけでは どうしても無理だろう。といって、Craftを 読んで言語を理解しなさいと言われたなぁ
696 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 00:14:53 ] このすれの住人って 俺以外に、5人しかいないだろ?
697 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 03:08:19 ] 日本でHaskellやってる人間なんて100人未満だろうな
698 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 03:13:05 ] だってモナドって何ですかって聞くと 「圏論について勉強するといいよ」って返されるんだもん そしてwikipediaで圏論の説明見てわからず涙目になる俺
699 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 04:11:20 ] >>697 3000人じゃなかった?
700 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 06:33:59 ] Haskellでモナドを使ったり作ったりする分には圏論の知識なんて要らないけどな
701 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 10:04:01 ] >>699 そのうち何人が実際にソフトウェアを記述するかといったら100人未満だと思うよ
702 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 00:19:34 ] Webの自動テスト Haskellで書くと面白いんだけど Arrowが良くわからん あれが必要ななんでどうまくつかいこなせない
703 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 06:49:34 ] ?
704 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 08:26:47 ] 和訳すると、 「よくわからないArrowが必要なせいで、うまく使いこなせない。」
705 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 18:22:44 ] arrowより日本語を使いこなした方がよいのでは…
706 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 18:38:51 ] まぁ、arrowよりも日本語の方が長く使うだろうからなぁ。
707 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 18:42:17 ] 分からないぞ、突如GHCが日本を占拠して日本語の代わりにHaskellを使うように命じられるかもしれない。
708 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 18:48:55 ] それは中国が世界を支配する確率とどちらが高いかね?
709 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 20:42:39 ] GHC とは General Headquarters Compiler の略だったのか・・・ ギブ・ミー・モナド
710 名前:デフォルトの名無しさん [2008/04/10(木) 11:30:08 ] >>702 Arrowが必要なのは、Arrowベースのテストツールかなにかを 使ってるからなんだろうけど、なに使ってるの?
711 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 21:50:55 ] >>710 作ってるのw
712 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 11:39:16 ] しかし雑談ばっかりだなこのスレ
713 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 11:56:43 ] うまく使いこなせないのに必要だと分かって作ってるんですか
714 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 23:23:30 ] モナドってHaskellに限った考え方ではなくて、もっと一般的な考え方なんだよね? ほかの言語にモナドの考え方を応用したようなライブラリが、もっとあってもいいと 思うんだけどな。副作用嫌いな人は喜ぶと思うんだけど。そうでもないのかね。
715 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 23:36:10 ] すでに他の言語でもあることない? すんごいマイナーだけど
716 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 01:17:35 ] Python でモナドを実装してみたよ、ってのはネットで見た気がする。
717 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 01:19:07 ] これだ。 www.valuedlessons.com/2008/01/monads-in-python-with-nice-syntax.html
718 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 02:47:54 ] つ okmij.org/ftp/Scheme/monad-in-Scheme.html つ okmij.org/ftp/Computation/monadic-shell.html
719 名前:デフォルトの名無しさん [2008/04/12(土) 21:48:14 ] 引く手あまたのプログラミング言語は? slashdot.jp/developers/article.pl?sid=08/04/06/2313251 --- Java(16479件)、C++(8080件)、C#(7780件)、JavaScript(6749件)、 Perl(5710件)、PHP(2641件)、Python(1408件)、COBOL(1207件)、 Ruby(769件)、Lisp(33件)といった感じらしい。 とりあえずJavaとC/C++/C#、あとJavaScriptを覚えれば、 当分仕事には困らないようである。COBOLのしぶとさも目立つ。 ちなみにHaskellやOCamlの求人は10以下だったそうだ。 ---
720 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 23:28:51 ] JavaはともかくC#はどうかな…? 10年後には残ってない気もするが。
721 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 00:54:40 ] そんなことよりもHaskellの求人が存在するのか!! どんな仕事だ?
722 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 02:47:10 ] リンク先まともに読んでないが 単に列記されてるのカウントしてるだけじゃねーの?
723 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 03:03:37 ] HaskellとかOcamlの仕事とかどんなんか見てみたい 研究用じゃないよな
724 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 03:05:42 ] Haskellでグラディウスを作る仕事です。 誰でも簡単にできる楽しい作業です。 初心者歓迎。
725 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 08:25:34 ] 0 <= 10 → True
726 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 08:30:48 ] 0は10以下でないとか、全部は一部でないとか、空列は列でないとか、自然言語には奇怪な慣習があるのです
727 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 09:21:12 ] Hugs> -10 <= 10 True
728 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 10:27:42 ] Haskellerお断り 10件w
729 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 11:00:54 ] アメリカの大学では、(企業もだけど) フルタイムやパートタイムの非常勤プログラマーを雇うことがあるから、 Haskellはその類いかも知れない。
730 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 11:10:29 ] >>723 www.janestcapital.com
731 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 13:02:12 ] だけど、関数型言語の勉強は仕事で使わなくてもやったほうが いいと思うけどな。手続き型で出やすい不具合をどう防ぐか、 無駄の無い記述をどう実現するか、とか勉強になること多いと思うよ。
732 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 13:08:30 ] 個人的には手続き型ベースのOOPLのコーディングに影響があったかというと微妙な気が。 具体的にどういうこと?
733 名前:デフォルトの名無しさん [2008/04/13(日) 13:11:08 ] 一々メソッドや変数の名前を考えるのが面倒で コーディングする気力が萎えて来るとか…
734 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 13:18:35 ] 海軍でhaskell使ってると思う どこの国かは言えんが topでGHCかりかり動いているみたことある
735 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 13:25:20 ] lambdaの導入とかそういう文法レベルでの影響は0ではないか。
736 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 13:30:55 ] C++は次でラムダ実装する Intelのスレッドライブラリもラムダ標準実装 C#も次期バージョンのサポート予定 Javaはかすだけどサポートするらしい(いらねw
737 名前:デフォルトの名無しさん [2008/04/13(日) 13:56:04 ] あるとか無いとか、仕様のマトリックスを埋めるだけなら意味無いよ C++ 自体がイラネ
738 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 14:04:04 ] >>732 いや、単純に(再)代入が許されない世界で、再起を使うとか、リストデータを 編集してそこから必要な情報抜くとか。そういうの訓練すると影響あるんじゃない かなぁ。 手続き型だと「要するにこれはどういう処理か」って考えずにずらずらと手続きを 書き連ねていって、目的のデータを何とか作ってしまう、とかなりがちだけど、 その辺が意識変わると思うんだけどね。
739 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 14:12:31 ] 副作用を0にするって考えは 通常の手続き型に慣れると そうぞうすらしない奴も多いから F言語はシンプルな世界観を持つ ためにはある程度知る必要があると おもふ 別に変態的に知る必要はまったくないけど それよりCraf本読むのに6時間かけてまだ 6章しか読めん俺はおわっとる
740 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 17:52:54 ] >>736 VBで既に導入されてなかった? >λ式
741 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 17:53:27 ] C#にも既に入ってる
742 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 20:29:34 ] C#とかにλ式が導入されるとか、ちょっと意味不明というか、統一感が無さ過ぎる感じが するがどうなんだろうか。だったらF#とかでいいじゃないか?って気がするけどな。 実はF#への移行の布石だったりして。
743 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 20:58:22 ] 元々あった無名delegateの構文を整理しただけだから、そんなに大袈裟な話でもない どっちにしろ、まともな高水準言語なら無名関数の類はあって当然で、統一感とか気にしてる場合じゃない 次は代数的データ型とパターンマッチに相当するものが入るといいな
744 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:12:29 ] >>743 >まともな高水準言語なら無名関数の類はあって当然で、 私が言葉尻に拘ってるのかも知れないが、なぜ?
745 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:22:47 ] >>744 上であがってる古い関数言語の実装の 論文読んでみなよ何が要素として定義 されていて必要なのかわかるから
746 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:27:35 ] >>745 でもC++とかには(少なくとも現在の規格では)無いわけだし、 実際無名関数みたいな仕組みは無くてもプログラムを組むことはできるし、 それらの事実を踏まえた上で>>744 は>>743 が「あって当然で」と言っているその考えを聞きたいんだと思うんだが。 あった方がプログラミングが綺麗になる部分もあるのは当然の話だが。
747 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:29:40 ] それこそ言葉尻じゃねw モダンな言語は取り入れる傾向にあるとでも読み換えたら。
748 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:47:26 ] >>746 OOが無くても手続きはできるし アジャイルがなくてもそれ相当のことはいくらでもできる。 Cで、どんな手段でもOKならfor_each構文を作ることもできる 結局、ラテン語やその他の自然言語がどんどん変革していったように プログラミング言語も変わっていくだけだと思うよ ただそこには、今まで苦労した結果を簡単に置き換えることで 本当の問題にどれだけ注視して取り組めるようすることを 追求しているだけだと思うよ。リスクの低減と開発効率の上昇 自然言語に対する機械言語の仕様変更とイディオムの変更は とてつもなく早いのでそれに対する拒否反応や疑問は常時出てしまうけど それは仕方のないことだろうし。まぁ慣れてくれ
749 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:34:46 ] >>746 > でもC++とかには(少なくとも現在の規格では)無いわけだし、 今もあるぞ、制限が多いだけで。 C++0xで言語自身に組み込みになってより強力になる。
750 名前:デフォルトの名無しさん [2008/04/14(月) 01:01:34 ] C++ にクロージャ入れても意味が無い
751 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 02:45:24 ] わざわざ関数オブジェクトクラスを定義しなくて良いという くだらないが重要な利点があります
752 名前:デフォルトの名無しさん [2008/04/14(月) 08:38:21 ] そして文法が果てしなく汚れて行く…
753 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 08:52:25 ] Haskell には今話題にあがってるような、構文、言語機能の拡張ってないの?
754 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 17:18:28 ] 提案されてきた拡張は数えきれないくらいある いくつかはGHCにも実装されてるし
755 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 20:34:05 ] C#にクロージャとかって、どうも奇妙な感じがするのは、関数型言語って 自然数なんかもλ式で表現する、つまり「全ては関数なり」という一貫 した思想に基づいて設計されてるわけでしょ? C#やJavaなどのオブジェクト思考言語って、値が全てなんだよね。 値を操作するために関数がある。そこにクロージャとかって、何か 意味があるのかね。
756 名前:デフォルトの名無しさん [2008/04/14(月) 20:41:20 ] オブジェクト指向言語を知らないからそう思うんじゃないの。 オブジェクト指向言語で関数オブジェクトを扱えるのは別に おかしな事じゃない。関数型言語でオブジェクト指向する事も 出来るし。
757 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 20:47:01 ] >関数型言語って >自然数なんかもλ式で表現する、つまり「全ては関数なり」という一貫 >した思想に基づいて設計されてるわけでしょ? これがそもそも勘違い 例えばHaskellのIntは関数じゃない C#やらJavaScriptやらにクロージャがあって役に立つのは事実 例を知りたければ適当に検索すればいくらでも見つかると思う
758 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 21:04:05 ] 副作用がある言語のクロージャってのも、 それはそれで使いでがある。 SICPをやってみればわかるけども。
759 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 21:24:38 ] >>756 それってUtility的なものでしょ? どうも変な感じするけどなぁ。
760 名前:デフォルトの名無しさん [2008/04/14(月) 21:36:49 ] そりゃ、あんたがどう感じるかで言語設計している訳じゃないからな。 オブジェクト指向が値が全てと言うのは勘違いだし、クロージャも みんな昔から便利に使っている。それだけ。
761 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 21:50:02 ] なんだこのNOOBどもは 小学生の議論してんなよ
762 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 21:51:03 ] あ、そうw いや、俺が感じるというか、計算モデルがそもそも違うと思うんだけどね。 まぁ、いいかw
763 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 21:53:29 ] なんかさ、大学でちょっとかじったぐらいのやつらの話ってうざくね? いかにも知ったかぶった感じで話すやつら。
764 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 21:54:57 ] ネトゲ厨降臨中
765 名前:デフォルトの名無しさん [2008/04/14(月) 21:55:00 ] >>762 アクター理論とかはどうなの?
766 名前:デフォルトの名無しさん [2008/04/14(月) 21:57:48 ] OO 特有の計算モデルとかあるの?
767 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:15:57 ] 昨日教科書読みました、みたいな発言やめてください。 背中がむずがゆくなります。
768 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:19:30 ] 偶然ですね。私も昨日SICP読みました。さっぱりわかりませんでしたがw
769 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:21:28 ] 学のない奴が語っちゃいけませんかそうですか
770 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:22:47 ] 学の無い人間は尋ねる側ので、語る側ではないな。
771 名前:デフォルトの名無しさん [2008/04/14(月) 22:23:40 ] じゃあ頭の出来が違う人達に語ってもらおうぜ
772 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:28:21 ] 命令すんなよw
773 名前:デフォルトの名無しさん [2008/04/14(月) 22:30:06 ] それなら気が向いたらでいいから宜しく頼むわ
774 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:30:13 ] >>762 は学のあるなし以前に、自分の意見をまじめに伝えようとしてないから、相手にしないほうがいい
775 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:37:10 ] Haskellの拡張については 昨日教科書読みました 程度では語れるレベルじゃないから、 Haskellでの実装の話しろよ。
776 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 23:05:51 ] BrainfuckでHaskell作ろうぜ
777 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 07:30:06 ] Haskell初心者ですが、勉強した印象として構文が若干 多いかな?という感じがします。型に関係する部分とか 特に。 これってHaskellerの間で議論があったりするんでしょうか。 比べてはいけないんでしょうけど、Schemeのようなシンプルさ で同じような型チェックができたら最高なんですが。
778 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 08:25:11 ] それはCとC++比べてるようなもんです。どうしても嫌なら、 ML系のオブジェクト指向が入ってないのをやってみてはどうでしょうか。
779 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 10:31:09 ] OCaml?
780 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 18:26:40 ] >>779 たぶんCaml liteの方。でなきゃSML。
781 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 21:15:56 ] >>777 ぐちぐちうぜーこと言ってるなら 使うな辞めろうぜーんだよ お前のチラ裏報告なんて誰も 求めてねぇよ さっさと消えろよ
782 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 21:39:09 ] >>777 厳格な型付けをする言語では避けて通れないんじゃないの。むしろ、それを望む人には 必要不可欠かと。
783 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 22:47:46 ] 空気読まずに失礼しますが、 runhaskellの引数にプログラムを書いて実行する方法はありますか? たとえばrubyだと $ ruby -e "print 'abc'" のように書くことが出来ますよね。 同じような使い方をHaskellでしたいんです。
784 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 05:22:47 ] ghc -e 'putStrLn "abc"' Hugsだと多分無理
785 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 20:56:38 ] >>781 かわいいw
786 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 23:48:13 ] Types and Programming Languages と Introduction to Functional Programming Using Haskell カバーしてる内容全然違う?
787 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 00:32:17 ] はい、上は型理論の入門書です。 数学分からない人は絶対に読むべきじゃないです。
788 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 00:36:37 ] >>787 ここ数年の少年ジャンプの面白さを 発見するよりは簡単なはずだが?
789 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 00:44:07 ] >>788 「型推論のHindley-Milner type inference」とかでピンと来るならいいんじゃね。
790 名前:デフォルトの名無しさん [2008/04/20(日) 00:46:08 ] 数学界ってネタ切れなんかね
791 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 05:25:06 ] TAPLに数学なんか関係あったか? どのへん?
792 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 07:19:16 ] 数学は万物と関係があります
793 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 08:26:36 ] 確かにそうだが随分とアバウトな答え方だね
794 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 09:45:15 ] 本の最初のLessonで main = do cs <- getContents putStr cs というサンプルがあったのだが,このまま打ち込んでも The last statement in a 'do' construct must be an expression と出る.どうすれば...?
795 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 12:09:38 ] >>794 二行目の先頭にちょうど10個のスペースを入れてる?
796 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 15:58:12 ] >>794 ttp://www.ice.nuie.nagoya-u.ac.jp/~h043078b/wiki/wiki.cgi?page=%CA%B8%CB%A1%BB%F6%B9%E0+-Haskell-#p19
797 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 20:41:46 ] >>795-796 Emacsを使ってるのですが,するとEmacsの自動インデント 機能に難ありということなのでしょうか...
798 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:51:23 ] >>797 Emacsはよく知らんが、Tabをスペースにかえればいいんでないの?
799 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:55:19 ] 関数型プログラミング言語Haskell Part7 pc11.2ch.net/test/read.cgi/tech/1174211797/ 213 :デフォルトの名無しさん:2007/04/07(土) 18:00:15 すいません。emacsのhaskell-modeでプログラムしているんですが、 インデントの方法に関して質問があります。 例えば、次の様なソースがあった時、 import System import System.IO main = do putStrLn $ "Woud you like some coffee?(y/n)." hFlush stdout c <- getChar if c == 'y' then putStrLn "Yes,please." else putStrLn "No,thank you." thenやelseの前でTabキーを押すと、if式と同じインデントになってしまうのですが、 それだとコンパイルエラーになってしまいます。なので、今はスペースでインデントを 付けています。Tabキーで正しくインデントさせる方法がありますでしょうか?
800 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:56:16 ] 関数型プログラミング言語Haskell Part7 pc11.2ch.net/test/read.cgi/tech/1174211797/ 215 :デフォルトの名無しさん:2007/04/07(土) 19:31:19 >213 明示的に {} を使うという方法はあるにはあるが。 do { putStrLn $ "Woud you like some coffee?(y/n)." ; hFlush stdout ; c <- getChar ; if c == 'y' then putStrLn "Yes,please." else putStrLn "No,thank you." } のようにすると綺麗にインデントできる。 まぁ私は手で空白を入れたり一行にしちゃったりする方が多いけれど。 216 :デフォルトの名無しさん:2007/04/08(日) 17:57:02 >>215 レスありがとうございます。 {}を使う方法か、手動でインデントをあわせる方法の2通りという事ですね。 他の方はどうやってインデントさせているのか疑問に思っていたのですが、 その疑問が解消されました。
801 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 02:56:48 ] Tabをもう一回押すんだよ。
802 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 03:05:24 ] www.fobj.com/hisa/d/20060828.html