1 名前:デフォルトの名無しさん [2012/03/16(金) 21:54:23.92 ] haskell.org ttp://www.haskell.org/ 日本語サイト ttp://www.sampou.org/cgi-bin/haskell.cgi ttp://www.shido.info/hs/ 過去ログ 関数型プログラミング言語Haskell Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/ Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/ Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/ Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/ Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/ Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/ Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/ Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/ Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/ Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/ Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/ Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/ Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/ Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/ Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/ Part17 ttp://toro.2ch.net/test/read.cgi/tech/1325510368/
2 名前:デフォルトの名無しさん mailto:sage [2012/03/16(金) 21:54:40.15 ] 関連書籍 ・Introduction to Functional Programming Using Haskell (2nd ed.) ttp://www.amazon.co.jp/exec/obidos/ASIN/0134843460/ ・Haskell: The Craft of Functional Programming ttp://www.amazon.co.jp/exec/obidos/ASIN/0201342758/ ・The Fun of Programming ttp://www.amazon.co.jp/exec/obidos/ASIN/0333992857/ ・The Haskell School of Expression: Learning Functional Programming Through Multimedia ttp://www.amazon.co.jp/exec/obidos/ASIN/0521644089/ ・入門Haskell ttp://www.amazon.co.jp/exec/obidos/ASIN/4839919623/ ・ふつうのHaskellプログラミング ttp://item.rakuten.co.jp/book/4052963/ ・Programming in Haskell ttp://www.amazon.co.jp/exec/obidos/ASIN/0521692695/ ・Real World Haskell ttp://www.amazon.co.jp/exec/obidos/ASIN/0596514980 ・関数プログラミングの楽しみ ttp://www.amazon.co.jp/exec/obidos/ASIN/4274068056
3 名前:デフォルトの名無しさん mailto:sage [2012/03/16(金) 21:55:18.42 ] 関連リンク ・GHC Wiki ttp://hackage.haskell.org/trac/ghc/wiki/TitleIndex ・A History of Haskell ttp://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/ ・関数型関連の用語集 ttp://sky.zero.ad.jp/~zaa54437/programming/concepts/ ・本物のプログラマはHaskellを使う ttp://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/?ST=ittrend ・Haskell API search Engine ttp://www.haskell.org/hoogle/ ・Real World Haskell book.realworldhaskell.org/read/ ・Learn You a Haskell for Great Good! learnyouahaskell.com/chapters 【簡単な使い方】 1.検索バーに関数名を入れて検索 例 map 2.検索バーに型名を入れて検索 例 (a -> b) -> [a] -> [b]
4 名前:デフォルトの名無しさん mailto:sage [2012/03/16(金) 21:55:48.46 ] 関連書籍 つづき ・Haskell: The Craft of Functional Programming (3rd ed.) www.haskellcraft.com/craft3e/Home.html www.amazon.co.jp/dp/0201882957/ ・Learn You a Haskell for Great Good! learnyouahaskell.com/ www.amazon.co.jp/dp/1593272839/
5 名前:デフォルトの名無しさん mailto:sage [2012/03/16(金) 23:38:20.95 ] 乙
6 名前:デフォルトの名無しさん mailto:sage [2012/03/17(土) 02:19:03.09 ] HTTPサーバアプリケーションって、yesod が主流になるのでしょうか? Mightyってのがあった気がするんですが、廃れたのでしょうか
7 名前:デフォルトの名無しさん [2012/03/17(土) 15:47:42.83 ] HTTPサーバとか、メモリをどんどん食い尽くしてとんでもないことになる気がするんだけど、きちんとGCしてくれるのかな…
8 名前:デフォルトの名無しさん mailto:sage [2012/03/17(土) 20:34:27.93 ] HaskellのGCってJavaの足下にも及ばないの?
9 名前:デフォルトの名無しさん mailto:sage [2012/03/17(土) 20:37:20.93 ] Javaみたいにプロのベンダが作ってるわけじゃないしな…
10 名前:デフォルトの名無しさん mailto:sage [2012/03/17(土) 22:23:40.81 ] GHCのGCはすごくまともに動くと思う インクリメンタルGCとか凝ったものはないけど
11 名前:デフォルトの名無しさん mailto:sage [2012/03/17(土) 23:32:54.22 ] >>1 乙
12 名前:デフォルトの名無しさん mailto:sage [2012/03/17(土) 23:50:09.99 ] >>6 よく知らんが、ちょうど今月号のWEB+DB PRESS vol.67の濃縮還元オレンジニュースって記事には、"Haskellで書かれたWebフレームワーク「Yesod」のチュートリアル"というタイトルで初心者向けのチュートリアル記事を書いたと言う記事がある その中から引用する限りじゃ、Yesodは主要フレームワークの一つらしい 以下、記事を引用 Haskellの主要Webフレームワークには、Yesod、Happstack、Snapの3つがありますが、その中で比較的初心者が取り組みやすくコミュニティが活発なことからYesodを取り上げています。 ・ ・ ・ 中略 ・ ・ ・ HaskellのWebフレームワークがRailsやPHPはもとよりNode.jsよりパフォーマンスに優れていることを示しています。
13 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 01:31:10.89 ] javaのtomcatみたいなものか…
14 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 01:51:05.93 ] Yesod は Hello World を見ると初めギョッとするが、 考え方を理解すると、非常に洗練されてて理にかなっていることが分かる
15 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 14:39:00.03 ] C 言語側で次の定義の関数 f をインポートする場合 enum EEE { EEE0, EEE1 }; void f (enum EEE x) { ... } Haskell 側では、次のようには「できない」ですよね data TTT = TTT0 | TTT1 deriving (Enum) foreign import ccall "f" g :: TTT -> IO () これは、関数 g の引数を CInt 型にするしか無いのでしょうか en.wikibooks.org/wiki/Haskell/FFI#Enumerations ここに、hsc ファイルで #enum マクロを使った列挙型の例がありますが、 これも結局は CInt を Haskell 側のスタブ関数の引数にしていますよね これって、rule gauss15 とかやらずに 100 とかリテラルを直接書いても コンパイルは通ってしまうので、型的に安全とは言えないと思うんですよ これは FFI で列挙型を含む外部関数を使う以上仕方のないことなのでしょうか 構造体は Storable クラスのインスタンスにすれば型的に安全に扱えるので、 列挙型も何かできるといいのですが
16 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 15:23:26.46 ] hsc2hsは全然使ったこと無いから解らんが、 とりあえずnewtypeにしてんだから、データコンストラクタとアクセサ(例の場合ならIntegrationRuleとrule)をエキスポートしなけりゃ、 モジュールの外ではCIntとして扱えないんだから問題なくね?
17 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 16:01:26.89 ] c2hsのenum defineルールを使った場合でも toEnum 100 :: IntegrationRuleした時に実行時エラー吐くのが関の山だな
18 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 16:08:26.89 ] >>16 リンク先では、hsc2hs で作った Enum 型を 次のように使って C 言語側の関数に渡しています(途中省略しました) status <- c_qag gsl_f (realToFrac a) ・・・ (rule gauss) ・・・ errorPtr この c_qag gsl_f 関数は名前や使われ方から見て きっとどこかで foreign import されていると思いますが、 リンク先のページにはその定義は書かれていませんね しかし、おそらく c_qag gsl_f :: CFloat -> ・・・ -> CInt -> ・・・ のような定義だと思います(そうでなければ型エラー) これ、c_qag gsl_f (realToFrac a) ・・・ 100 ・・・ errorPtr のように使用しても型エラーにならずにコンパイルが通ってしまいますよね import された実際の C 言語側の関数で、不正な値の引数を検知して、 戻り値でエラーコードを返すような定義になっていればまだ良いのですが、 そうでなければ何が起こるか分からず、危険です Haskell 側でこの 100 というリテラルをコンパイル時にエラーとして検知できないか、 という趣旨の質問でした
19 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 16:12:59.75 ] >>17 そうなんです たとえ私が >>15 で「できない」と言った方法が使えたしても、 Enum クラスのインスタンスでは toEnum 関数を使われてしまいます やはり、こういう時こそ Template Haskell の出番ですかね
20 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 16:22:13.05 ] Yesod上でWordPressやEC-CUBEみたいなキラーアプリが出来るといいね WordPressは単に便利なだけでなくて、コードが抽象化されてなくてベタな設計なのが良くも悪くもサイト制作側で受けてる EC-CUBEはみんな泣きながらカスタマイズしてるけど、自作したら得られない決済系の実績があるから使ってる Yesod広めたいんなら、なんでみんなPHP使うのかにヒントがあるんじゃないかな?
21 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 16:54:34.49 ] できるとしたら値から型、型から種の持ち上げを利用した 整数リテラルから型レベル整数、そしてそれに対応したインスタンスとしてtoEnumを定義したEnumを使うというものぐらいだな これならばコンパイル時にS (S (S ...))のインスタンスが見つからないという旨のエラーになる筈 これはリテラルとしてハードコーディングされた(コンパイル時に決まる)整数とそれ以外を区別するということでもあるのだが そんな機構があっても使いこなせる人は極少数にしかならんというのはC++のconstexprがいい前例となってるのであまり期待はできないな
22 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 17:05:06.11 ] >>18 リンク先のImports and Inclusionsの項のソース見て欲しいんだが、 エキスポートされてるのはqag関数と定数 gauss15, gauss21...だけになってるじゃない? 本体のc_qag関数とか、IntegrationRule型のデータコンストラクタとアクセサはエキスポートしてないから、外からは使えない。 って、事は(IntegrateRule 100) とかリテラル渡すようなコード書けるのはモジュールの中だけだし、 qag関数に渡ってくるのは、基本的にエキスポートした定数のウチどれかしかありえないわけよ。 だから後はモジュールのテストを十分尽くせば、>15が思ってるような不安はない、って事を言いたかった。 モジュール内でもエラーになるようにしたい、っていうのが趣旨だったならまぁちょっとずれた回答だったかもしれんが。
23 名前:デフォルトの名無しさん mailto:sage [2012/03/18(日) 18:02:30.69 ] >>22 すいません、おっしゃってることの意味がようやく理解できました 趣旨を勘違いさせてしまったようです 私が訊きたいことは、FFI で列挙型を含む C 言語の関数を使う場合に、 関数に渡す値の範囲をその列挙型の中に限定する方法は無いか、 という事でした なぜなら、C 言語の列挙型の値は C 言語の int 型ですが、 Haskell の foreign import の型シグネチャで CInt を使うと、 列挙型の範囲を超えた値も構文上何も問題なく渡せてしまえるからです リンク先の記事を示したのは、hsc2hs の #enum マクロを使ったとしても、 結局のところアクセス関数が自動的に作成されるだけであって、 アクセス関数を使わなければその関数を使えない訳ではない、 だからその方法も今回の問題解決には使えない事を言いたかっただけでした 今のところ、foreign import の型シグネチャでは CInt 型を使い、 それとは別に、その関数を呼ぶだけの別名の関数を定義し、 そのシグネチャで C 言語の列挙型の値の範囲に対応したデータ型を使い、 後者の関数のみをモジュールから公開することで、 モジュールの利用者には範囲外の値が利用できないようにしています 確かに、このように余計な関数を定義しても、インライン展開されて、 実行速度上はほとんど何の問題もない筈ですが、けっこう無様です なにか別の案はないですかという趣旨でした とりあえず、上記の方法で我慢します
24 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 01:31:28.47 ] おい前スレで指定の確率分布に従うランダムジェネレータが欲しいといったら 自分で作れとか言ってきた奴 staticパッケージという素晴らしいものがあったじゃないか 全く隠してやがったな
25 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 07:09:37.10 ] www.amazon.co.jp/dp/4903814351/ せっかくこういう本もあるのだから、自作するのもいいと思うんだが
26 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 08:24:52.24 ] staticじゃねーstatisticsじゃねーかちくしょう
27 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 08:27:21.40 ] >>25 お前と違って研究費で落ちねえんだよ 高えよちくしょう
28 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 12:33:02.16 ] >>27 私は地元の図書館で見つけました
29 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 14:00:02.75 ] >>25 「この商品を買った人は」に、ちくま学芸文庫の甘利先生の本がでてきたのだが、 すごい装丁だw
30 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 15:12:03.39 ] >>25 こんなニッチな本を誰が買うのかと思ったら機械学習系ブログがプッシュしてました。 隠れた良書「計算機シミュレーションのための確率分布乱数生成法」を大プッシュしたい d.hatena.ne.jp/echizen_tm/20100710/1278781380 「計算機シミュレーションのための確率分布乱数生成法」でサンプリングのお勉強 d.hatena.ne.jp/echizen_tm/20100712/1278952192 計算機シミュレーションのための確率分布乱数生成法を買った d.hatena.ne.jp/tkng/20101107/1289118743
31 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 15:54:21.23 ] これがステルスマーケッティングと言うやつか
32 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 20:13:39.54 ] べつにステマと言われようがどうでもいいよ こういうのに興味ある人に、こんな本もあるのかと気づいてほしくて紹介しただけだから 興味が無ければ無視してくれればいい
33 名前:デフォルトの名無しさん mailto:sage [2012/03/19(月) 20:24:52.96 ] 嫌儲厨はほっとけ
34 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 01:29:25.44 ] ライブラリリファレンスの右上の隠しリンク便利だな パッケージのモジュールが3画面分割で見易くなる
35 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 10:02:14.10 ] 隠れてねーじゃん
36 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 10:22:45.60 ] それよりも、フレーム表示から元に戻すリンクを教えてほしい
37 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 11:04:43.10 ] >>35 俺IE6なんだ。。。
38 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 11:36:20.94 ] IE6 ってもう葬儀を済ませたんだろ 安らかに眠らせてあげろよ
39 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 14:12:30.19 ] Haskelってどんな人種がどんな目的で使うの?優しく教えて
40 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 14:50:48.49 ] 個人的には、人種という言葉自体から差別的な響きを感じて使いたくないが、 目的の方でいうと、たとえば私の仕事場では単位時間辺りの 実質的な仕事の量と質を上げるために利用している 慣れというのもあるだろうが、初めから厳密な型を意識したプログラミングは、 そうでないCなどでのプログラミングと比較して、小さくて大量の(悩ましい)バグが、 コンパイルの段階で潰しやすく、実行時にはもっとアプリに本質的なバグの発見に集中できる 型推論の機能も、間違った型の使い方をコンパイル時に指摘してくれて助かってる また遅延評価のおかげで、一連の大きな計算において、 その計算を意味の塊を基準にして個々のモジュールに分割しやすい 主にこれら2点が実質的な仕事の量と質を上げるだろうと目論んでHaskellを使い始めたが、 目的は見事に達成されている ちなみに、たまたま私の部署は処理時間の短縮や計算リソースの削減を 厳しく求められるアプリを作るところではないため、Haskell のデメリットは表に出にくい
41 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 14:56:30.41 ] Haskell -> C のトランスレータってないですかね?
42 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 14:59:57.29 ] >>41 GCC がそれをやってくれる
43 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 15:09:00.10 ] >>41 ghcのコンパイラオプションでCのコード吐けるけど?
44 名前:42 mailto:sage [2012/03/20(火) 15:15:36.89 ] すまんこ GCC じゃなくて ghc だ
45 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 16:21:13.11 ] Perlで書いたコードは二度と見たくない Haskellでコンパクトに書けたコードはまた見てみたくなる Haskellは書くときにうんざりする 多言語は書いた後で絶望する
46 名前:デフォルトの名無しさん mailto:sage [2012/03/20(火) 23:58:58.60 ] 要素数 n のリストが一つ与えられた時、 要素番号の重複を認めない m (0 <= m <= n) 個の要素からなる組み合わせを 全て集めたリストを作るのって、効率よくエレガントにやろうとすると意外に難しいな とくにエレガントさって、自分でなかなか納得いくものができんよね comb :: Int -> [a] -> [[a]] comb 3 [1,2,3,4] ==> [[1, 2, 3], [1, 2, 4], [1, 3, 4], [2,3,4]]
47 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 00:22:47.67 ] SICPで見たような気がするけど気のせいか
48 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 01:26:20.30 ] ベタに実装したbinary counting以上簡単にはならないと思う
49 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 01:32:45.19 ] リストで縛るとどうあがいても遅そうだな。 要素リストは配列にぶち込んどいて、 インデックスの組み合わせ生成して列挙すんのがベターかね。
50 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 02:20:06.92 ] let comb n xs = if length xs == n then [xs] else concatMap (\i -> comb n $ delete i xs) xs こういう感じ?
51 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 03:13:40.85 ] 重複を含む配列からの組合せは? ABBCDDDEFFGGGG から5個選ぶ時の組合せを全て列挙せよ みたいな 重複を許したものを吐き出してフィルターかけるのはもちろん駄目 重複が無い配列の時の組合せを応用してできるの?
52 名前:46 mailto:sage [2012/03/21(水) 07:31:22.42 ] >>51 俺が取り組んだのは、元のリストは要素の対して重複を許し、 そこから選ぶ要素番号に対しては重複を認めないタイプの問題だった たとえば、元のリスト xs から 3 つ選ぶ場合、 [xs !! 0, xs !! 3, xs !! 8] は許されるけど、 [xs !! 0, xs !! 3, xs !! 3] は認めない まだ取り組んではいないけど、重複を許した方が多少記述が減るんじゃないかな
53 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 09:34:51.31 ] AAAAAAAAAAAAAAAAA `comb` 3 だと酷いことになる 重複するリストから組合せ取り出す局面がどれほどあるか判らないけど
54 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 15:31:44.99 ] アナグラム作成装置として使えそうだね。
55 名前:デフォルトの名無しさん mailto:sage [2012/03/21(水) 16:36:15.52 ] let mapcon f xs = concatMap (\i -> f $ drop i xs) [0..length xs -1] let comb n xs ys | length ys == n = [ys] | xs == [] = [] | True = mapcon (\(z:zs) -> comb n zs $ z:ys) xs もうあんまりエレガントとも思えないけど
56 名前:46 mailto:sage [2012/03/21(水) 23:06:26.29 ] 自分で作ったのは、こんな感じ tails' :: [a] -> [[a]] tails' [] = [] tails' [x] = [[x]] tails' xs = xs : tails' (tail xs) comb1 :: [a] -> [[a]] comb1 xs = map (:[]) xs combN', combN :: ([a] -> [[a]]) -> [a] -> [[a]] combN' f (x:xs) = map (x:) (f xs) combN f xs = concatMap (combN' f) (tails' xs) comb :: [a] -> Int -> [[a]] comb xs n = (iterate combN comb1 !! (n-1)) xs 使用例 comb [1,2,3,4,5] 3 ==> [ [1,2,3], [1,2,4], [1,2,5], [1,3,4], [1,3,5] , [1,4,5], [2,3,4], [2,3,5], [2,4,5], [3,4,5] ] n重ループを分解した感じ 自分で書いたコードだが、なんか自分でムカツク
57 名前:46 mailto:sage [2012/03/21(水) 23:34:59.74 ] >>56 あれ、一つ前のバージョンをコピペってしまった tails' は init . tails で、定義しないで直に使ってます 結局こんな感じ comb1 xs = map (:[]) xs combN' f (x:xs) = map (x:) (f xs) combN f xs = concatMap (combN' f) (init $ tails xs) comb xs n = (iterate combN comb1 !! (n-1)) xs
58 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 01:58:12.62 ] combination だけはポインタある方が楽だわ
59 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 08:19:30.23 ] comb 0 _ = [[]] comb _ [] = [] comb n (x:xs) = map (x :) (comb (n-1) xs) ++ comb n xs どうしてもってんならlength xsを最初に数えて持ち回せ。
60 名前:46 mailto:sage [2012/03/22(木) 12:40:04.54 ] >>59 美しいですね こういうセンスあるコードがスラスラと書けるようになりたい
61 名前:デフォルトの名無しさん mailto:sage [2012/03/22(木) 22:49:41.00 ] (x :) ストライクウィッチーズのあの人に見えた
62 名前:デフォルトの名無しさん [2012/03/25(日) 04:51:06.13 ] (;x;)
63 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 09:08:01.99 ] (:[]) ← 口を開けた顔; データを1つ食べて内容物のリストを返す
64 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 22:18:09.21 ] 書籍「関数型プログラミングの楽しみ」の練習問題 3.1 を考えてみました これが非正格関数 h に対しては成り立たないのは、 h が実際にどのような関数なのか定義が分からないことには変換が進まないからでしょうか 例えば xs = Nil とした場合でも、 (h . foldL f e) xs --> h (foldL f e xs) --> ・・・ h を何に変換すれば良いのか不明 ・・・ もし h が正格関数なら、ここで --> h (foldL f e xs) --> h (let g zs = case zs of Nil -> e; Cons y ys -> f y (g ys) in g xs) --> h (let g zs = case zs of Nil -> e; Cons y ys -> f y (g ys) in g Nil) --> h e --> e' と変換が進む もちろんこの場合は foldL f' e' からの逆方向の変換もできて等号が成り立ち、 また xs = Cons y ys の場合も構造的帰納法で等号が成り立つことが証明できる 非正格関数 h に対しては、h から先に評価しなければならず、 例えば極端な話 h = h では一向に簡約が進まなくなるから成り立たない場合もある という理解で良いでしょうか
65 名前:デフォルトの名無しさん mailto:sage [2012/03/25(日) 23:14:33.16 ] hの正格性が必要なのは以下の等式が必要だからでしょう q (case e of { p1 -> e1; ... pn -> en }) = case e of { p1 -> q e1; ... pn -> q en }
66 名前:64 mailto:sage [2012/03/25(日) 23:21:45.04 ] すいません、けっこう混乱しています それは、単に問題文を言い換えただけではないのですか? 結局 >>65 の場合も「なぜ q が非正格関数だとその等式が成り立たないのか」 を説明しないと練習問題 3.1 を説明したことにはならないような気がするのですが
67 名前:デフォルトの名無しさん mailto:sage [2012/03/26(月) 08:28:16.54 ] xs := ⊥ で両辺計算してみな
68 名前:デフォルトの名無しさん mailto:sage [2012/03/26(月) 22:04:32.42 ] 64じゃないけど、 foldL f' e' ⊥ = ⊥ foldLは第三引数について正格な性質を持ってる。 ところが、例えばh = const xで非正格な関数とすると (h . foldL f e) ⊥ = x だから、h . foldL f e = foldL f' e'の融合則が成り立つには hは正格関数でないといけない、ってことかな?
69 名前:デフォルトの名無しさん [2012/03/27(火) 03:34:38.13 ] Haskellを新しく勉強しようと、 まず日本語マニュアルhrefのインストールを下のサイトを参考に 「Haskellのリファレンスマニュアルを検索するツール href」 d.hatena.ne.jp/pcmaster/20090215/p2 $ make $ mkdir -p /usr/local/share/href $ export HREF_DATADIR=/usr/local/share/href $ make bindir=/usr/local/bin install $ sudo mkhref ref/* mkhref: HREF_DATADIR: getEnv: does not exist (no environment variable) このエラーが出て、ここから先に進めません。 こちらの環境はubuntuでghc7.0.3、libghc-network-devのパッケージがインストール済みです。 getEnv関数が手持ちのパッケージでは用意されていないのでしょうか、環境変数の与え方は大丈夫でしょうか どなたかインストールできない原因分かりましたら教えていただけるとありがたいです
70 名前:デフォルトの名無しさん [2012/03/27(火) 19:41:43.97 ] 漏れもハスケるためにう分津にGHCとか入れて準備万端だぜ
71 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 21:53:06.47 ] >>69 sudoでmkhref ref/*したときに、 export HREF_DATADIR=/usr/local/share/hrefが効いてないと思う。 それと、ubuntuって/usr/local/share/href が一般ユーザで作れるのかね? make instalもスーパユーザでやる必要があると思う。 適当にやるならこんな感じか。 $ make $ sudo bash # mkdir -p /usr/local/share/href # export HREF_DATADIR=/usr/local/share/href # make bindir=/usr/local/bin install # mkhref ref/* おわったらスーパユーザを抜けること 使うときもexport HREF_DATADIR=/usr/local/share/hrefが有効になるよう、 ~/.profileかどっかに書いておく。
72 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 22:40:37.45 ] >>71 Haskell とは何の関係もないが、 $ sudo bash これやるくらいなら $ su - でいいと思うんだが
73 名前:デフォルトの名無しさん mailto:sage [2012/03/27(火) 23:34:13.91 ] >>72 su - だと、cdしなおさないといけないじゃん。 まあ、suだけにすればいいかもだが、rootのパスワードはなるべく入力したくないな。
74 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 02:38:54.37 ] sudo -s はどう?
75 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 03:12:56.50 ] スーパユーザになれれば何でもいいだろw >>69 は良く分かってないみたいだから、suでrootのパスワード入力させとくのが確実 sudoは設定ちゃんとしてないとうまく動いてくれないかもしれない まあ、でも、sudo mkhref ref/* が一応実行されてるみたいだから、たぶんsudo -sでもsudo bashでもいいかな
76 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 08:12:21.70 ] sudo -E でしょ
77 名前:デフォルトの名無しさん mailto:sage [2012/03/28(水) 23:03:43.68 ] Control.Exception に bracket 関数があるけど、 これって第1引数のアクション(イニシャライザ)で例外が発生しても、 第2引数のアクション(ファイナライザ)は実行さないよね bracket 関数と同じ形で、 イニシャライザで例外が発生してもファイナライザが実行される関数は 標準ライブラリで用意されてるの? それとも自作する必要がある? 同じ形というのは、イニシャライザの戻り値が ファイナライザやコンピュテーションの引数として利用できるという意味
78 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/29(木) 08:51:07.11 ] 初期化が終わってないのにファイナライズとな…?
79 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/29(木) 12:38:05.02 ] >>78 あぁそうか 言われてみれば設計がおかしいな・・・ 見直してみるよ ありがと
80 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 18:39:21.66 ] yesodの中の人がcabalの代わりのcabalaって記事出してたけど、 あれエープリルフールなんか?
81 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 18:52:29.02 ] cabal は実際に改善点が少なくないわけで、 エープリルフールならもっと分かりやすいネタにして欲しいもんだ
82 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 19:15:16.28 ] yesodくらいは、もうはじめからHaskellプラットフォームに入れておいてほしい
83 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 20:55:29.57 ] >>82 なんで?
84 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 21:07:15.70 ] >>83 スタンドアロン環境で使いたいから
85 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 21:11:00.55 ] yesodにcabalaでゆだやんってよく分かるんだけど、宗教色が強いのは ちょと苦手かも。CLISPも同じなんだがな。
86 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 21:30:33.12 ] >>84 なんだよ、それなら Haskell Platform に hmatrix 入れろよとか、 yamapa 入れろよとか、wx や gtk2hs 入れろよとか、iteratee 入れろよとか そういう単なる「〜だったらいいなぁ」というチラ裏と変わらんじゃん いや、べつにそういうのがダメとは言わないけど、 もう少し Haskell 全体を考えたり、 もう少し本質的なことから論理的に導き出した要望かと思って期待してた
87 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/01(日) 21:32:41.92 ] そう言えば、久々に yampa がバージョンアップしたな
88 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 05:31:58.67 ] >>87 ホントだ。 でもAnimasの改良取り入れただけかな? コメントは書いてんのに、ドキュメントのスカスカっぷりは相変わらずゆがみねぇな…。
89 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/02(月) 12:45:15.77 ] >>86 「Haskell 全体を考えたいなぁ」もチラ裏と変わらない
90 名前:営利利用に関するLR審議中@詳細は自治スレへ [2012/04/02(月) 18:36:33.86 ] プログラミングHaskell とかゆー本買って来たぜ 今夜から枕の下に敷いて勉強する これで漏れも立派なハスケラーだ
91 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/03(火) 01:13:37.94 ] 「プログラミングHaskell」って教科書としては優れてるとおもうけれど、 自習書としてはどうなんだろう。 新しい構文とかがけっこう説明なしにでてくるよね。 まあ文法は別の本で見ればいいのか。 あと8章が……
92 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/03(火) 06:28:43.11 ] >>91 パーサーは難しいけど、モナドと同じで動かしてみないと、どういう働きか実感できない所があるな ふつケルでも結局Wiki作る時に書かされるから、この本だけの特別ではない (初心者置いてきぼりにしないように頑張ってる分だけプログラミングHaskellの方が親切ではある)
93 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/03(火) 18:52:31.15 ] HaskellWikiを流し読みしてると色々面白そうなプロジェクトを見つけるのだけれど、 ほとんど開発が止まっているように見えるのは何故だろう
94 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/03(火) 18:58:32.29 ] 他の言語と違って研究の類いも含まれてるからね。 大学の研究ならほとんどが死んでいるプロジェクトで当然。 卒業したら放置なものが多いから。 これには悪い面もあるが、常に新しい風が吹き込む理由にもなってる。 そういうことも理解して使いこなしたほうがよい。 HaskellWikiも単なる道具に過ぎないのだから。
95 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/04(水) 08:26:36.31 ] そのまま枯れたものとして扱っていいものもあると思うよ。 常に更新されている方がいいとも限らないのでね。 依存関係でおかしくなってるものを放置されてると困るけどね。
96 名前:営利利用に関するLR審議中@詳細は自治スレへ [2012/04/05(木) 22:47:55.68 ] みんなHaskellに飽きたんだよ
97 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/06(金) 23:06:06.65 ] ghc7.2から[リスト内包表記]をモナドにも使えるようになったんだね 有用な使い道を教えてくれ
98 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/07(土) 07:53:10.20 ] 対角版リストモナドなんかも内包表記で書ける、とか
99 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/07(土) 08:50:43.42 ] 論理プログラミングDSLを自作モナドで簡単にかくためのもの
100 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 15:11:00.50 ] cabal の executable-profiling オプションって何に使うの?
101 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/08(日) 15:50:48.11 ] cabal で何かパッケージをインストールすると gcc.exe が起動するけど、 インストール処理が終わった後も gcc.exe のプロセスが消えない これって、正常じゃないよね