[過去ログ]
関数型プログラミング言語Haskell Part7 (1001レス)
関数型プログラミング言語Haskell Part7 http://echo.5ch.net/test/read.cgi/tech/1174211797/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
1: デフォルトの名無しさん [sage] 2007/03/18(日) 18:56:37 haskell.org http://www.haskell.org/ 日本語サイト http://www.sampou.org/cgi-bin/haskell.cgi http://www.shido.info/hs/ 過去ログ 関数型プログラミング言語Haskell Part1 http://pc.2ch.net/tech/kako/996/996131288.html Part2 http://pc2.2ch.net/test/read.cgi/tech/1013846140/ Part3 http://pc8.2ch.net/test/read.cgi/tech/1076418993/ Part4 http://pc8.2ch.net/test/read.cgi/tech/1140717775/ Part5 http://pc8.2ch.net/test/read.cgi/tech/1149263630/ Part6 http://pc11.2ch.net/test/read.cgi/tech/1162902266/ ・2chの仕様により、行頭の半角スペースは表示されません。 コードをインデントしたいときは、代わりに または全角スペースを使うことができます。 http://echo.5ch.net/test/read.cgi/tech/1174211797/1
875: デフォルトの名無しさん [sage] 2007/09/17(月) 08:23:15 Dってまだ生きてたの? http://echo.5ch.net/test/read.cgi/tech/1174211797/875
876: デフォルトの名無しさん [sage] 2007/09/17(月) 11:58:23 >>874 Dはないw コンパイラもライブラリもボロボロ あれで何か作るって無謀すぎる まだ形になってるC#の方がまし http://echo.5ch.net/test/read.cgi/tech/1174211797/876
877: デフォルトの名無しさん [sage] 2007/09/17(月) 12:30:48 >>875 D自体は相変わらず突っ走ってるよ。 バグ取りもそこそこに、言語機能をどんどん追加していってる。 実装予定してる機能も多数ある。 それに対して、取り巻きの方は死んでる。 どのプロジェクトも、ライブラリを最新版のコンパイラで動かすのをあきらめてる状態。 もうみんなやる気ないみたい。 http://echo.5ch.net/test/read.cgi/tech/1174211797/877
878: デフォルトの名無しさん [sage] 2007/09/17(月) 20:30:25 Dはちょっとやろうかなという気にさせる魅力はあるが、 付き合いたくはないね。 http://echo.5ch.net/test/read.cgi/tech/1174211797/878
879: デフォルトの名無しさん [sage] 2007/09/20(木) 21:44:57 http://www.flightless-wing.com/index.php?%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%2FHaskell%2F%C6%FE%CC%E7 を見ながら勉強しています。 ここに出てくる data ABC = 'A' | 'B' | 'C' が Syntax error in data type declaration (unexpected character literal) と言われます。なにが間違っているんでしょうか。 また data Blood = "A" | "B" | "O" | "AB" が Syntax error in data type declaration (unexpected string literal) といわれます。文字列を値にすることはできないのでしょうか。 なおHugsを使っています。 http://echo.5ch.net/test/read.cgi/tech/1174211797/879
880: デフォルトの名無しさん [sage] 2007/09/20(木) 21:54:40 >>879 そんな構文はない。 data ABC = A | B | C とか data Blood = A | B | O | AB となら書けるけど。 この場合、AとかABとかは文字でも文字列でもない新しい値。 http://echo.5ch.net/test/read.cgi/tech/1174211797/880
881: デフォルトの名無しさん [sage] 2007/09/20(木) 22:42:51 http://web.yl.is.s.u-tokyo.ac.jp/~ganat/memo/aboutHaskell.html にある qsort [] = [] qsort (x:xs) = qsort elts_lt_x ++ [x] ++ qsort elts_greq_x where elts_lt_x = [y | y <- xs, y < x] elts_greq_x = [y | y <- xs, y >= x] というクイックソートですが、これのメモリ消費量は、リストの長さをnとしたとき、O(n^2)になるような気がするのですが、どうでしょうか。 またCやJavaで配列を使うと、配列そのものを書き換えることで、メモリ消費量は増えませんが、Haskellでも同じようなことができますか。 http://echo.5ch.net/test/read.cgi/tech/1174211797/881
882: デフォルトの名無しさん [sage] 2007/09/20(木) 22:51:38 >>879 ありがとうございます。 いわゆる列挙型を定義しようとしていたのですが、列挙型の値に文字、文字列、数値は指定できないということでしょうか。 あと、 data Rank = A | B | C data Blood = A | B | O | AB としたいのですが Multiple declarations for data constructor "A" といわれます。列挙型の値の名前空間というかスコープは、グローバルということでしょうか。 http://echo.5ch.net/test/read.cgi/tech/1174211797/882
883: デフォルトの名無しさん [sage] 2007/09/20(木) 23:06:56 >>881 O(n)だと思う。参照されなくなったリストはGCによって回収されるので。 Haskellのリストは書き換えられない。破壊的に更新したいなら専用のデータ構造が要る、例えば http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data-Array-IO.html >>882 列挙型の値を指定するというのが良く分からん。列挙値はそれ自体で値じゃないか? Cのenum { a = 3};みたいな指定がしたいということなら、それは不可能。 必要なら整数と相互変換する関数を書けば良い。 >列挙型の値の名前空間というかスコープは、グローバルということでしょうか。 そう。正確にはモジュールレベル。 http://echo.5ch.net/test/read.cgi/tech/1174211797/883
884: デフォルトの名無しさん [sage] 2007/09/21(金) 09:51:28 >>883 O(n)にはならないように思うのですが。 整列が完了したら、参照されなくなったリストはGCされますが、整列中の間は参照されているわけですからGCされませんよね? 再帰呼び出しごとに新しいリストが作られ、それらは呼び出しから戻らないとGCされませんが、呼び出しから戻る前に別の再帰呼び出しが発生するわけだから、やはりメモリ消費量はO(n)ではないと思います。 また再帰呼び出しの深さは最大n-1になるので、やはりO(n^2)ではないでしょうか。実際には、呼び出しの深さは平均でlog(n)でしょうから、 O(n*log(n))が正解かもしれませんが。 詳しい人、お願いします。 http://echo.5ch.net/test/read.cgi/tech/1174211797/884
885: デフォルトの名無しさん [sage] 2007/09/21(金) 12:10:42 >>884 確かにそうだ。最悪O(n^2)になるな。 でも、中間リストを作ることが直接の原因ではない。 実際、正確評価ならelts_lt_xとelts_greq_xを作り終えた時点で引数のxsはGCできる。 遅延評価だとこれが上手くいかなくて、逆順にソートされたリストが渡される最悪のケースでO(n^2)になる。 時間的には同じ最悪のケースでも、入力が正順にソートされていた場合はO(n)なんだが。 汚い方法だけど、seqを使って評価順を入れ替えることでO(n)になる。 qsort [] = [] qsort (x:xs) = length elts_lt_x `seq` length elts_greq_x `seq` qsort elts_lt_x ++ [x] ++ qsort elts_greq_x where elts_lt_x = [y | y <- xs, y < x] elts_greq_x = [y | y <- xs, y >= x] http://echo.5ch.net/test/read.cgi/tech/1174211797/885
886: デフォルトの名無しさん [sage] 2007/09/21(金) 12:47:02 プロファイル取って調べてみた。数字はtotal allocにqsortの%allocをかけたもの。左の数字は要素数。 >>881とランダム要素のリスト 800 : 380003.544 1600: 873076.32 2400: 1296538.048 3200: 1816425.728 4000: 2399276.16 >>885とランダム要素のリスト 800 : 400965.324 1600: 1040519.448 2400: 1389810.24 3200: 1846377.12 4000: 2776879.088 >>881と整列リスト([1..n]) 800 : 8985561.144 1600: 35887143.13 2400: 80695069.14 3200: 143405095.9 4000: 224106868.3 >>885と整列リスト([1..n]) 800 : 8995036.344 1600: 35906208.73 2400: 80723725.14 3200: 143443342.3 4000: 224154724.3 最悪ケースだとO(n^2)になるっぽい http://echo.5ch.net/test/read.cgi/tech/1174211797/886
887: 886 [sage] 2007/09/21(金) 13:00:44 ちなみにコードはこんな感じ import System.Random main = print . qsort =<< lst 800 lst n = fmap (take n . randomRs (1, 1000000)) newStdGen lst2 n = return [1 .. n] qsort [] = [] qsort (x:xs) = qsort elts_lt_x ++ [x] ++ qsort elts_greq_x where elts_lt_x = [y | y <- xs, y < x] elts_greq_x = [y | y <- xs, y >= x] qsort2 [] = [] qsort2 (x:xs) = length elts_lt_x `seq` length elts_greq_x `seq` qsort2 elts_lt_x ++ [x] ++ qsort2 elts_greq_x where elts_lt_x = [y | y <- xs, y < x] elts_greq_x = [y | y <- xs, y >= x] main関数のqsortとlstと800の部分を変化させながら計測していった。 http://echo.5ch.net/test/read.cgi/tech/1174211797/887
888: デフォルトの名無しさん [sage] 2007/09/21(金) 13:12:52 >>886 total allocは確保したメモリの総量だから、空間効率を計るのには使えない。 +RTS -sstderrをつけてmaximum residencyを見ればO(n)になってるのが分かると思う。 http://echo.5ch.net/test/read.cgi/tech/1174211797/888
889: デフォルトの名無しさん [sage] 2007/09/21(金) 13:13:52 O(n)で可能であると思われます。 ttp://kukuli.jp/haskell/qsort.zip http://echo.5ch.net/test/read.cgi/tech/1174211797/889
890: デフォルトの名無しさん [sage] 2007/09/21(金) 13:18:28 >>888 >total allocは確保したメモリの総量だから 補足。確保->回収->確保で多重に計上されるってことね。 maximum residencyは瞬間的な使用中のデータ量の最大値(を実測で近似したもの)。 http://echo.5ch.net/test/read.cgi/tech/1174211797/890
891: 886 [sage] 2007/09/21(金) 14:04:46 >>888 >>890 なるほど。 HaskellのGCって、いらなくなった瞬間に動くものだったんだな。 もっとメモリが足りなくなってから動くものだと思ってた。 (そういう扱いをする部分(世代?)もあると思うけど) というかそれ以前に、885で >逆順にソートされたリストが渡される最悪のケースでO(n^2)になる。 って書いてあるのになにも分かってなかった。 あと885は qsort [] = [] qsort (x:xs) = let !elts_lt_x = [y | y <- xs, y < x] in let !elts_greq_x = [y | y <- xs, y >= x] in qsort elts_lt_x ++ [x] ++ qsort elts_greq_x と書くといいかなと思ったり。 http://echo.5ch.net/test/read.cgi/tech/1174211797/891
892: デフォルトの名無しさん [sage] 2007/09/21(金) 18:05:39 >>891 >HaskellのGCって、いらなくなった瞬間に動くものだったんだな。 デフォルトだと確保エリアの大きさは256kらしいから、第0世代のGCは頻繁に起こるんだろう。 >と書くといいかなと思ったり。 それだとリストの先頭しかeagerに評価されないから、 [99, 100, 97, 98, 95, 96, ..., 4, 1] みたいなリストが入力だとO(n^2)になる。 リストを最後まで評価させるために>>885ではlengthを使ってる。 http://echo.5ch.net/test/read.cgi/tech/1174211797/892
893: デフォルトの名無しさん [sage] 2007/09/21(金) 18:33:36 先生! はすける君がごみ拾いばかりして、ちっとも仕事してません! 実行時間の3割がGCとか、普通ですよね http://echo.5ch.net/test/read.cgi/tech/1174211797/893
894: デフォルトの名無しさん [sage] 2007/09/21(金) 18:41:45 ちょっとしたループを書くにもconsを大量に使い捨てるスタイルが一般的だからな。 まあ、メモリ確保は馬鹿みたいに速いんだから許してやろうぜ。 http://echo.5ch.net/test/read.cgi/tech/1174211797/894
895: デフォルトの名無しさん [sage] 2007/09/21(金) 20:23:16 >>885 このコードが理解できない初心者のために、教えてください。 seqは遅延評価をしないための関数のようですが、lengthは何のためにあるのでしょうか。 あとseqは2項演算子として使うのが普通なのですか。 qsort [] = [] qsort (x:xs) = seq (length elts_lt_x) (seq (length elts_greq_x) (qsort elts_lt_x ++ [x] ++ qsort elts_greq_x)) where elts_lt_x = [y | y <- xs, y < x] elts_greq_x = [y | y <- xs, y >= x] と買いても間違いではない? >>886 >数字はtotal allocにqsortの%allocをかけたもの total alloc と %alloc が何か分からないので、それらをかけて何が求まるのか分かりません。 total alloc は全体のメモリ消費量で単位はバイトでしょうか。 http://echo.5ch.net/test/read.cgi/tech/1174211797/895
896: デフォルトの名無しさん [sage] 2007/09/21(金) 20:50:31 >>889 見てみました。わざわざありがとう。 で、この絵では再帰呼び出しのときには古いリストがGCされているようだけど、これはHaskellの言語仕様として決まってるんでしょうか。 つまり、 (a)引数で渡されたリスト (b)etls_lt_x と elts_greq_x (c)qsort elts_lt_x ++ [x] ++ qsort elts_greq_x でできるリスト があって、他の言語だとリストへの参照がある限りGC対象とはならないので、(a)より(b)のほうが先に(または同時に)GC対象となります。そのため、>>884で書いたようにO(n^2) になります。 しかし>>889の説明では、(b)より(a)のほうが先にGCされています。 これだと確かにO(n)になりますが、このように動作するためには、再帰呼び出しをするまえに(a)がGC対象とならないといけないわけですが、本当にこのように動作するのでしょうか。 またそれは言語仕様で保証されているのでしょうか。 Haskellをよくわかってないので勘違いしてるかもしれませんが、お願いします。 http://echo.5ch.net/test/read.cgi/tech/1174211797/896
897: デフォルトの名無しさん [sage] 2007/09/21(金) 21:07:44 >>895 それで合ってる。seqを中置で使うのは良く見かける気がする。 seqを使っているのは再帰に入る前にelts_lt_xとelts_greq_xを完全に評価するため。 未評価のelts_greq_xのサンクはxsを参照しているけど、 完全に評価してしまえばただのリストなので、xsへの参照がなくなって、 GCがxsを回収できるようになる。 seq A Bの値はBと同じだけど、この式を評価する時はまずAを評価して、 その結果を捨て、改めてBを評価する。 length elts_lt_x `seq` 本体 を評価するときは、まずelts_lt_xの長さを求めることになるが、 リストの長さを求めるにはリスト全体を評価する必要がある。 結局、本体が評価される前にelts_lt_xが完全に評価される。 lengthが必要な理由には、seqの仕様が関わってくる。 seq A Bが評価されるとき、Aは弱冠頭正規形(weak head normal form, WHNF)まで簡約される。 WHNFというのは、最も外側のデータ構築子が確定した形。 例えば1+2や[1,2]++[3,4]はWHNFじゃないけど、3や1:([2]++[3,4])はWHNF。 だから、lengthを使わずに elts_lt_x `seq` 本体 のように定義すると、例えば elts_lt_x = [y | y <- [1, 2, 3, 4], y < 5] のとき、これを elts_lt_x = 1 : [y | y <- [2, 3, 4], y < 5] と簡約したら、この段階でWHNFに達したことになり、評価が終わってしまう。 これだと、xs(ここでは[2, 3, 4])への参照が残っていて、GCがxsを回収できない。 http://echo.5ch.net/test/read.cgi/tech/1174211797/897
898: デフォルトの名無しさん [sage] 2007/09/21(金) 21:37:36 ところで、空間計算量を議論する時に、GCを考慮するのは普通なん? http://echo.5ch.net/test/read.cgi/tech/1174211797/898
899: デフォルトの名無しさん [sage] 2007/09/21(金) 21:49:14 >>898 GCがある環境なら考慮していいと思う。じゃないと、机上の空論となるから。 GCがなければO(n^2)になるのが、逐次GCがかかることでO(n)になるなら、そっちを議論しないとあんまり意味なくね? http://echo.5ch.net/test/read.cgi/tech/1174211797/899
900: デフォルトの名無しさん [sage] 2007/09/21(金) 21:49:56 もちろん前提条件として明示する必要はあるよ? http://echo.5ch.net/test/read.cgi/tech/1174211797/900
901: デフォルトの名無しさん [sage] 2007/09/21(金) 22:02:09 >>897 力作ありがとうございます。 seqは完全に遅延評価を回避できるわけではないんですね。なんというか、オブジェクト指向言語でよく出てくるshallow copyとdeep copyの違いみたいな感じでしょうか(つまりseqはshallow copyに似ている)。 しかし完全に評価するためにlengthを使うのって、bad know howですよね。 このためにlengthを使うのは、lengthの本来の用途ではないのだから、完全に評価するための専用の関数が標準で用意されるべきたと思いました。たとえその実体がlengthであったとしても。 http://echo.5ch.net/test/read.cgi/tech/1174211797/901
902: デフォルトの名無しさん [sage] 2007/09/21(金) 22:16:34 Control.Parallel.Strategies.force :: (NFData a) => a -> a を使うのかな。 これはこれで目的外使用な気もするが。 http://echo.5ch.net/test/read.cgi/tech/1174211797/902
903: デフォルトの名無しさん [sage] 2007/09/21(金) 23:04:59 >>899 処理系がタコなせいで遅いのなら、そっちを直すべきじゃね? http://echo.5ch.net/test/read.cgi/tech/1174211797/903
904: 886 [sage] 2007/09/21(金) 23:41:03 >>895 -prof付きでコンパイルしてから+RTS -p付きで実行するとプロファイルがとれて、 Fri Sep 21 23:19 2007 Time and Allocation Profiling Report (Final) main.exe +RTS -p -RTS total time = 0.05 secs (1 ticks @ 50 ms) total alloc = 9,079,028 bytes (excludes profiling overheads) COST CENTRE MODULE %time %alloc main Main 100.0 0.3 qsort Main 0.0 99.1 というようなログが出力される。 total allocとか%allocはこれのこと。 total allocはアロケートされたメモリの累計で、%allocは各関数ごとの割合。 とまあそういうことなんだけど、ここでの議論は、GCでメモリが再利用されて O(n)になるという話なので、無意味と言うか、的外れと言うか、 >>886-887は無かったことにしてください。 メモリ使用量を正しく知る方法は>>888。 http://echo.5ch.net/test/read.cgi/tech/1174211797/904
905: デフォルトの名無しさん [sage] 2007/09/24(月) 10:50:26 > qsort Main 0.0 99.1 消費時間0%…遅延評価のマジックですなあ http://echo.5ch.net/test/read.cgi/tech/1174211797/905
906: デフォルトの名無しさん [] 2007/09/24(月) 11:13:33 >>905 いや、プロファイラの精度の問題だろw >total time = 0.05 secs (1 ticks @ 50 ms) 一個しか標本を取ってないんだから、片方が100%になるのは必然。 http://echo.5ch.net/test/read.cgi/tech/1174211797/906
907: デフォルトの名無しさん [] 2007/10/01(月) 22:33:18 concatの反対で "AAA BBB CCC" を ["AAA", "BBB", "CCC"] にするにはどうしたらいいの? parsecというものをimportしてParserを作らないといけないのでしょうか? http://echo.5ch.net/test/read.cgi/tech/1174211797/907
908: デフォルトの名無しさん [sage] 2007/10/01(月) 22:41:57 wordsのことかな。 http://echo.5ch.net/test/read.cgi/tech/1174211797/908
909: 907 [sage] 2007/10/02(火) 16:59:39 ありがとう。それだ。 ふつうのHaskellプログラミングに乗ってないんだ http://echo.5ch.net/test/read.cgi/tech/1174211797/909
910: デフォルトの名無しさん [sage] 2007/10/02(火) 17:11:53 それらしい所を漁るといろいろ出てくるね ghc/libraries/base/Data/ByteString/Char8 http://echo.5ch.net/test/read.cgi/tech/1174211797/910
911: デフォルトの名無しさん [sage] 2007/10/02(火) 20:21:40 >>909 ざんねん載っているぞ http://echo.5ch.net/test/read.cgi/tech/1174211797/911
912: デフォルトの名無しさん [sage] 2007/10/02(火) 21:07:05 >>909 Hoogleで欲しい関数の型を検索してみると割とヒットするよ。 今回はString->[String]。 http://echo.5ch.net/test/read.cgi/tech/1174211797/912
913: デフォルトの名無しさん [sage] 2007/10/07(日) 00:59:40 Monads 1 http://www.youtube.com/watch?v=9fohXBj2UEI An introduction to monads including the definition and a look at the monoid monad. Category Howto & DIY Tags: category functor monad monoid http://echo.5ch.net/test/read.cgi/tech/1174211797/913
914: デフォルトの名無しさん [sage] 2007/10/07(日) 17:09:38 >>913 こんなマニアックなものがあるのか・・・ http://echo.5ch.net/test/read.cgi/tech/1174211797/914
915: デフォルトの名無しさん [sage] 2007/10/07(日) 17:59:08 eclipseで書いてるんだけどもHaskellパースペクティブが使いにくくてしょうがないYO モジュール名を’M’から始めないとinvalid_nameとかいわれるのはなぜなんだぜ? http://echo.5ch.net/test/read.cgi/tech/1174211797/915
916: デフォルトの名無しさん [sage] 2007/10/10(水) 09:37:48 >>915 Haskellプラグインをどこが作ってるのかは知らないが、 オープンソースなんだろうし、開発を手伝ってきたら? http://echo.5ch.net/test/read.cgi/tech/1174211797/916
917: 907 [sage] 2007/10/15(月) 22:15:18 できたー ありがとう http://echo.5ch.net/test/read.cgi/tech/1174211797/917
918: デフォルトの名無しさん [sage] 2007/10/17(水) 06:53:13 >>915-916 EclipseFP ? ttp://eclipsefp.sourceforge.net/ http://echo.5ch.net/test/read.cgi/tech/1174211797/918
919: デフォルトの名無しさん [sage] 2007/10/20(土) 02:31:07 ttp://2ch.bluesvirus.com/reserve/view/173 http://echo.5ch.net/test/read.cgi/tech/1174211797/919
920: デフォルトの名無しさん [sage] 2007/10/20(土) 13:24:39 HaskellでRubyやLispのrestパラメータのように 複数の引数をまとめてリストにしたい場合はどうするのでしょうか? http://echo.5ch.net/test/read.cgi/tech/1174211797/920
921: デフォルトの名無しさん [sage] 2007/10/20(土) 13:53:09 可変個の引数をとる関数は定義できない。 型クラスを使って真似する方法はあるけど。 http://echo.5ch.net/test/read.cgi/tech/1174211797/921
922: デフォルトの名無しさん [sage] 2007/10/20(土) 20:58:00 >>921 > 定義できない > 方法はある どっちなんだ http://echo.5ch.net/test/read.cgi/tech/1174211797/922
923: デフォルトの名無しさん [sage] 2007/10/20(土) 21:06:12 >>922 できない。似たようなことをする方法はある。 http://echo.5ch.net/test/read.cgi/tech/1174211797/923
924: デフォルトの名無しさん [sage] 2007/10/20(土) 21:24:31 やりたいことにもよるんだけど、直接リストにして受け渡すようにすれば良いんじゃない? hoge :: 任意個のa -> b ではなくて hoge :: [a] -> b 引数の型が違う時は data Param = PInt Int | PString String hoge :: [Param] -> b みたいな感じ。 http://echo.5ch.net/test/read.cgi/tech/1174211797/924
925: デフォルトの名無しさん [] 2007/10/21(日) 22:36:34 今Programming in Haskellを読んでいます。 List comprehensionという語の日本語訳が難しいのですが 普通はどう訳されているのでしょうか? http://echo.5ch.net/test/read.cgi/tech/1174211797/925
926: デフォルトの名無しさん [sage] 2007/10/21(日) 22:40:02 >>925 リスト内包表現 っていうかぐぐれよ http://echo.5ch.net/test/read.cgi/tech/1174211797/926
927: デフォルトの名無しさん [sage] 2007/10/21(日) 22:40:33 >>925 リストの内包表記 http://echo.5ch.net/test/read.cgi/tech/1174211797/927
928: デフォルトの名無しさん [sage] 2007/10/21(日) 23:26:09 GHCタッグリーグ戦にあのチームが緊急参戦? http://echo.5ch.net/test/read.cgi/tech/1174211797/928
929: デフォルトの名無しさん [sage] 2007/10/21(日) 23:54:26 包茎珍宝のリスト http://echo.5ch.net/test/read.cgi/tech/1174211797/929
930: デフォルトの名無しさん [sage] 2007/10/22(月) 22:53:32 なぁなぁ まえにPDFうpしてくれた人の作品じゃないか? 背景がまったく同じだ http://www.nicovideo.jp/watch/sm1324200 http://echo.5ch.net/test/read.cgi/tech/1174211797/930
931: デフォルトの名無しさん [sage] 2007/10/22(月) 22:58:15 同じプレゼンソフトを使ってるだけじゃないか? http://echo.5ch.net/test/read.cgi/tech/1174211797/931
932: デフォルトの名無しさん [sage] 2007/10/23(火) 00:59:43 xmonadがニュースになってるw http://japan.zdnet.com/oss/story/0,3800075264,20359294,00.htm http://echo.5ch.net/test/read.cgi/tech/1174211797/932
933: デフォルトの名無しさん [sage] 2007/10/23(火) 20:35:09 >>922 Text.Printfを見てみるといい。(単に可変個の引数の話だけど) http://echo.5ch.net/test/read.cgi/tech/1174211797/933
934: デフォルトの名無しさん [sage] 2007/10/23(火) 22:05:14 どこで見れる? http://echo.5ch.net/test/read.cgi/tech/1174211797/934
935: デフォルトの名無しさん [sage] 2007/10/23(火) 22:23:26 http://darcs.haskell.org/libraries/base/Text/Printf.hs http://echo.5ch.net/test/read.cgi/tech/1174211797/935
936: デフォルトの名無しさん [sage] 2007/10/23(火) 22:47:15 昨日ふつける読み始めた俺に誰か教えてくれ Cと連携したりできんの? CからHaskellの関数呼んだりHaskellからCの関数呼んだり http://echo.5ch.net/test/read.cgi/tech/1174211797/936
937: デフォルトの名無しさん [sage] 2007/10/23(火) 22:49:55 >>934 ソースのことだと思われ http://echo.5ch.net/test/read.cgi/tech/1174211797/937
938: デフォルトの名無しさん [sage] 2007/10/23(火) 23:03:34 >>936 できるよ。 http://echo.5ch.net/test/read.cgi/tech/1174211797/938
939: デフォルトの名無しさん [sage] 2007/10/23(火) 23:04:54 >>938 どーやって? CとHaskellって型とかだいぶ違う気がするけどそこらへんどーすんの? http://echo.5ch.net/test/read.cgi/tech/1174211797/939
940: デフォルトの名無しさん [sage] 2007/10/23(火) 23:15:16 >>939 haskell ffiでググレ http://echo.5ch.net/test/read.cgi/tech/1174211797/940
941: デフォルトの名無しさん [sage] 2007/10/23(火) 23:17:30 >>940 あまりの優しさにチンコ取れた ありがとー読んでくる http://echo.5ch.net/test/read.cgi/tech/1174211797/941
942: デフォルトの名無しさん [sage] 2007/10/24(水) 20:47:28 http://www.mitsuki.no-ip.com/~seagull/software-archives/hs-clearsilver/ Clearsilverのバインディングなんてあったんだな http://echo.5ch.net/test/read.cgi/tech/1174211797/942
943: デフォルトの名無しさん [sage] 2007/10/26(金) 19:43:35 誰かHaskellの文法一覧みたいな便利なものがあるサイト知らない? http://echo.5ch.net/test/read.cgi/tech/1174211797/943
944: デフォルトの名無しさん [sage] 2007/10/26(金) 19:56:21 日本語 → http://www.sampou.org/haskell/report-revised-j/ 英語 → http://haskell.org/onlinereport/ http://echo.5ch.net/test/read.cgi/tech/1174211797/944
945: デフォルトの名無しさん [sage] 2007/10/26(金) 21:09:02 >>944 思慮が足りないな。 仮にもhaskellに興味を持つような人間がそのサイトを知らないわけないだろ。 >>943が言いたいのはそのサイトが不便だってことなんだろうよ。 http://echo.5ch.net/test/read.cgi/tech/1174211797/945
946: デフォルトの名無しさん [sage] 2007/10/26(金) 21:26:01 >>944 流石にそれは見たことあるわ >>945 そうそう もっと適当にまとまってるとこねぇかな ふつける読み返したり>>944見たりするのはめんどくさい… http://echo.5ch.net/test/read.cgi/tech/1174211797/946
947: デフォルトの名無しさん [sage] 2007/10/26(金) 22:19:25 >>946 言い出しっぺの法則。というわけで、wikiでも建てて作ってくれ。 http://echo.5ch.net/test/read.cgi/tech/1174211797/947
948: デフォルトの名無しさん [sage] 2007/10/26(金) 22:31:51 >>947 ttp://vipprog.net/wiki/prog_lang/haskell.html http://echo.5ch.net/test/read.cgi/tech/1174211797/948
949: デフォルトの名無しさん [sage] 2007/10/26(金) 23:28:10 case x of { "a" -> 1; "b" -> 2} はうまくいくのに str1 = "a" str2 = "b" case x of { str1 -> 1; str2 -> 2} は、str1,str2がwildcardとみなされ、意図通りに動きません。 caseのpatternに変数を使う方法はないでしょうか? ちなみに意図しているのは、以下と等価な動作です。 if x == str1 then 1 else if x == str2 then 2 else error "" http://echo.5ch.net/test/read.cgi/tech/1174211797/949
950: デフォルトの名無しさん [sage] 2007/10/27(土) 02:37:03 CやJavaのswitch文でcaseに変数使えたっけ? http://echo.5ch.net/test/read.cgi/tech/1174211797/950
951: デフォルトの名無しさん [sage] 2007/10/27(土) 03:42:36 無理だとと思う、代わりにこんなのは?(あんまりまっとうな回答ではないのでわからなければスルー希望) --source1.hs Module Source1 (str1,str2) where str1 = [| "a" |] str2 = [| "b" |] --source2.hs import Source1 case x of { $(str1) -> 1; $(str2) -> 2} http://echo.5ch.net/test/read.cgi/tech/1174211797/951
952: デフォルトの名無しさん [sage] 2007/10/27(土) 08:43:40 なんで調べもせずに言い出しっぺとか言ってるんだよ Tour of the Haskell Syntax ttp://cs.anu.edu.au/Student/comp1100/haskell/tourofsyntax.html http://echo.5ch.net/test/read.cgi/tech/1174211797/952
953: デフォルトの名無しさん [sage] 2007/10/27(土) 08:57:52 >>951 [| "a" |]の型はQ ExpであってQ Patじゃない。 そもそもパターンにspliceを書くことはできないはず。 http://echo.5ch.net/test/read.cgi/tech/1174211797/953
954: デフォルトの名無しさん [sage] 2007/10/28(日) 02:29:01 >>949 の意図と違うとは思うけど table = [(str1,1),(str2,2)] fromMaybe (errror "") $ lookup x table http://echo.5ch.net/test/read.cgi/tech/1174211797/954
955: デフォルトの名無しさん [sage] 2007/10/28(日) 12:22:05 関数型初体験してみたが、 ふたつの引数 m n をとって m * (m+1) * .... * (n-1) * n を返す関数を 再帰的定義を用いて書け なんて問題を解くのに30分もかかった… 普段とぜんぜん違う思考法を要求されて面白いねこれ http://echo.5ch.net/test/read.cgi/tech/1174211797/955
956: デフォルトの名無しさん [sage] 2007/10/28(日) 12:23:17 >>955 Haskellやると頭がよくなった気がする。あくまで気がするだけだけど・・・。 http://echo.5ch.net/test/read.cgi/tech/1174211797/956
957: デフォルトの名無しさん [sage] 2007/10/28(日) 13:41:46 とりあえず、ふつうのHaskellは読んで文法とか何となく理解したのですが、 次のステップってどんなのがいいんでしょうか。 自分はWebアプリを実装してみようとか思ったんですけど、基本部品(Http リクエスト解析とか、DB処理など)使ったものやるよりも、「Write Yourself a Scheme in 48 Hours」みたいなのを勉強する方がよいのかな?と思ってます。 おすすめのHaskell学習資料なんかがあったら教えてください。 http://echo.5ch.net/test/read.cgi/tech/1174211797/957
958: デフォルトの名無しさん [sage] 2007/10/28(日) 14:05:07 >>957 まだHaskellであまりコードを書いてないなら、とにかくたくさん書いて慣れるのが重要だろう。 インタプリタ書くのは良い訓練だけど、やりたいことがあるならそっちをやった方が モチベーションが上がりやすくて良いと思う。 http://echo.5ch.net/test/read.cgi/tech/1174211797/958
959: デフォルトの名無しさん [sage] 2007/10/28(日) 14:05:15 >>957 散々過去に同じ質問が出ているわけだが。 論文読め。 http://echo.5ch.net/test/read.cgi/tech/1174211797/959
960: デフォルトの名無しさん [sage] 2007/10/28(日) 14:28:02 >>957 2に書いてある入門Haskellがおすすめ。 あとは、下記のやさしいHaskell入門かな。 http://www.sampou.org/haskell/tutorial-j/ そろそろもう一段階上の本を出してほしいなぁ > 著者さん達 http://echo.5ch.net/test/read.cgi/tech/1174211797/960
961: デフォルトの名無しさん [sage] 2007/10/28(日) 14:41:02 皆さん、ありがとうございます。 自分の経験から、あまり文法一覧を基本にした学習ではなくて、実際の アプリ実装ベースでの学習をしたいと思ってます。目標はWebアプリの 雛形作ることなんですけど、既存コードの寄せ集めになってしまいそう なので、Haskellのくせというか、定石みたいなの知った上でやりたいなと。 Write Yourself a Scheme in 48 Hoursみたいなのがいいんですけど、 似たようなの他にもあるかなぁと思って質問しました。 http://echo.5ch.net/test/read.cgi/tech/1174211797/961
962: デフォルトの名無しさん [sage] 2007/10/28(日) 14:45:46 haskellはやめておけ。 プログラミング手法が確立されていないから、 研究目的以外でやるなら別の言語を使え。 http://echo.5ch.net/test/read.cgi/tech/1174211797/962
963: デフォルトの名無しさん [sage] 2007/10/28(日) 19:33:04 定石なら、 どう書く?org http://ja.doukaku.org/ とか、 Programming:玉手箱 http://www.sampou.org/cgi-bin/haskell.cgi?Programming%3a%b6%cc%bc%ea%c8%a2 が参考になるかも http://echo.5ch.net/test/read.cgi/tech/1174211797/963
964: デフォルトの名無しさん [sage] 2007/10/28(日) 20:00:05 のぶすんすんすん http://echo.5ch.net/test/read.cgi/tech/1174211797/964
965: デフォルトの名無しさん [sage] 2007/10/28(日) 20:00:51 のぶすんのおなにーさいと http://echo.5ch.net/test/read.cgi/tech/1174211797/965
966: デフォルトの名無しさん [sage] 2007/10/28(日) 20:22:00 >>963 nobsun乙wwwww http://echo.5ch.net/test/read.cgi/tech/1174211797/966
967: デフォルトの名無しさん [sage] 2007/10/28(日) 20:34:31 >>966 >>963はただのNAIST生ですよ http://echo.5ch.net/test/read.cgi/tech/1174211797/967
968: デフォルトの名無しさん [sage] 2007/10/28(日) 20:37:08 >>955 お前頭いいな。 (m+1) * .... * (n-1) 俺には、この省略されたところで何があったのか見当もつかん。 m+1<n ってことか? http://echo.5ch.net/test/read.cgi/tech/1174211797/968
969: デフォルトの名無しさん [sage] 2007/10/28(日) 20:44:44 >>968 俺が察するに、m<nとして m, m+1, m+2, m+3, .. , n-3, n-2, n-1, n の乗積を求めたいんだろう。 http://echo.5ch.net/test/read.cgi/tech/1174211797/969
970: デフォルトの名無しさん [sage] 2007/10/28(日) 21:16:07 >>967 意味分からん http://echo.5ch.net/test/read.cgi/tech/1174211797/970
971: デフォルトの名無しさん [sage] 2007/10/28(日) 22:08:01 >>955 その例は、手続き型でも大差ないだろう。 int f(int m, int n) { return m <= n? m * f(m+1,n) : 1; } http://echo.5ch.net/test/read.cgi/tech/1174211797/971
972: デフォルトの名無しさん [sage] 2007/10/28(日) 22:10:55 >>971 手続き型ならforでまわせよ、この豚 http://echo.5ch.net/test/read.cgi/tech/1174211797/972
973: デフォルトの名無しさん [sage] 2007/10/28(日) 22:12:04 求めるのが「mからnまでの積」ではなく「mからnまでのlist」だと、 CやFortranでは一気に面倒になるね。 http://echo.5ch.net/test/read.cgi/tech/1174211797/973
974: デフォルトの名無しさん [sage] 2007/10/28(日) 22:37:35 非再帰の方が楽だな。 f m n = foldl (*) 1 [m..n] http://echo.5ch.net/test/read.cgi/tech/1174211797/974
975: デフォルトの名無しさん [sage] 2007/10/28(日) 23:34:32 そのfoldlはhaskellでどう定義するのかね。 ああ、foldlはCで書かれてるなんて言わないでね。 http://echo.5ch.net/test/read.cgi/tech/1174211797/975
976: デフォルトの名無しさん [sage] 2007/10/28(日) 23:39:37 >>975 ghc落として見るが良い http://echo.5ch.net/test/read.cgi/tech/1174211797/976
977: デフォルトの名無しさん [sage] 2007/10/28(日) 23:47:15 fl :: (a -> b -> a) -> a -> [b] -> a fl _ x [] = x fl fn init (el:la) = fl fn (fn init el) la http://echo.5ch.net/test/read.cgi/tech/1174211797/977
978: デフォルトの名無しさん [sage] 2007/10/28(日) 23:48:19 >>975 wwww アホがいる http://echo.5ch.net/test/read.cgi/tech/1174211797/978
979: デフォルトの名無しさん [sage] 2007/10/28(日) 23:49:22 foldlはライブラリにあるんだから実装はどうでもいいだろ 手で再帰を書かなくて済むことが重要 http://echo.5ch.net/test/read.cgi/tech/1174211797/979
980: デフォルトの名無しさん [sage] 2007/10/28(日) 23:50:54 foldrをゴリ押ししてみた fr :: (a -> b -> b) -> b -> [a] -> b fr _ x [] = x fr fn init (el:la) = fr fn (fn el init) la http://echo.5ch.net/test/read.cgi/tech/1174211797/980
981: デフォルトの名無しさん [sage] 2007/10/29(月) 00:01:07 今darcs中 darcs遅せぇ http://echo.5ch.net/test/read.cgi/tech/1174211797/981
982: デフォルトの名無しさん [sage] 2007/10/29(月) 00:02:06 >>980 それはfoldrじゃなくてfoldl . flipじゃないか http://echo.5ch.net/test/read.cgi/tech/1174211797/982
983: デフォルトの名無しさん [sage] 2007/10/29(月) 01:02:57 >>979 ところが実装を気にするんだよな〜 なにしろ、再帰かどうかが大問題なんだから。 http://echo.5ch.net/test/read.cgi/tech/1174211797/983
984: デフォルトの名無しさん [sage] 2007/10/29(月) 01:13:13 じゃ自分で作ってみてベンチ両方取ってくらべりゃいいじゃねぇか http://echo.5ch.net/test/read.cgi/tech/1174211797/984
985: 979 [sage] 2007/10/29(月) 01:19:29 >>983 大問題って、foldl再帰で実装されているかどうかを初めに問題にしたのは>>975だろ? foldlが再帰的に定義されていたとしても>>974のfの定義自体は非再帰的なわけで、 >>974はそれをもって「非再帰の方が楽」という言い方をしたんだと俺は理解したんだが http://echo.5ch.net/test/read.cgi/tech/1174211797/985
986: デフォルトの名無しさん [sage] 2007/10/29(月) 01:49:30 すみません、私が間違ってました http://echo.5ch.net/test/read.cgi/tech/1174211797/986
987: デフォルトの名無しさん [sage] 2007/10/29(月) 02:13:05 いや、俺も間違ってたよ http://echo.5ch.net/test/read.cgi/tech/1174211797/987
988: デフォルトの名無しさん [sage] 2007/10/29(月) 20:37:43 そろそろじすれのきせつ! http://echo.5ch.net/test/read.cgi/tech/1174211797/988
989: デフォルトの名無しさん [sage] 2007/10/29(月) 21:02:25 なんで main = do cs <- getContents putStrLn cs はOKなのに main = do cs <- getContents <TAB><TAB>putStrLn cs はダメなの? http://echo.5ch.net/test/read.cgi/tech/1174211797/989
990: デフォルトの名無しさん [sage] 2007/10/29(月) 21:21:37 >>989 上もダメじゃないか? csが(0から数えて)10桁目から始まるから、 二行目のputStrLnも10桁目にないといけない タブ幅は8と決まってるから、タブ二つでインデントするとputStrLnが16桁目から始まることになる http://echo.5ch.net/test/read.cgi/tech/1174211797/990
991: デフォルトの名無しさん [sage] 2007/10/29(月) 21:23:15 そんなゆーづーがきかないのか… http://echo.5ch.net/test/read.cgi/tech/1174211797/991
992: デフォルトの名無しさん [sage] 2007/10/29(月) 21:33:54 doの後で必ず改行するようにすれば悩まなくて済むよ http://echo.5ch.net/test/read.cgi/tech/1174211797/992
993: デフォルトの名無しさん [sage] 2007/10/29(月) 22:10:17 >>989 main = do { cs <- getContents; <TAB><TAB>putStrLn cs} にすればいいじゃない http://echo.5ch.net/test/read.cgi/tech/1174211797/993
994: デフォルトの名無しさん [sage] 2007/10/29(月) 22:15:49 >>992 愛してる >>993 何が悲しくて{}なんぞ使わにゃならんのよ… http://echo.5ch.net/test/read.cgi/tech/1174211797/994
995: デフォルトの名無しさん [sage] 2007/10/30(火) 02:15:02 悲しみを { } で包むためさ http://echo.5ch.net/test/read.cgi/tech/1174211797/995
996: デフォルトの名無しさん [sage] 2007/10/30(火) 07:32:03 >>995 だれがうまい(ry http://echo.5ch.net/test/read.cgi/tech/1174211797/996
997: デフォルトの名無しさん [sage] 2007/10/30(火) 14:56:36 >>990 ふつけるにも書いてなかったんだが、それずっと疑問だった。 Haskellってタブはスペース8個に決め打ちしてるのか? そもそも等幅フォントじゃなかったらどうすんだとか、エディタ 選ぶ言語なの? http://echo.5ch.net/test/read.cgi/tech/1174211797/997
998: デフォルトの名無しさん [sage] 2007/10/30(火) 15:03:50 >>997 等幅フォントでないと正しく見えない。 pythonのレイアウトも同じ。 http://echo.5ch.net/test/read.cgi/tech/1174211797/998
999: デフォルトの名無しさん [sage] 2007/10/30(火) 15:08:47 http://echo.5ch.net/test/read.cgi/tech/1174211797/999
1000: デフォルトの名無しさん [sage] 2007/10/30(火) 16:13:06 >>997 決め打ちしてる。 >そもそも等幅フォントじゃなかったらどうすんだ 例えば ・do、where、let、ofの後に必ず改行を入れる ・タブを使わない の二点を守ればどんなフォントでも大丈夫。 http://echo.5ch.net/test/read.cgi/tech/1174211797/1000
1001: 1001 [] Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。 http://echo.5ch.net/test/read.cgi/tech/1174211797/1001
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.019s