1 名前:デフォルトの名無しさん [2012/10/17(水) 08:08:28.97 ] 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/ Part18 ttp://toro.2ch.net/test/read.cgi/tech/1331902463/ Part19 ttp://toro.2ch.net/test/read.cgi/tech/1340760070/
2 名前:デフォルトの名無しさん mailto:sage [2012/10/17(水) 08:11:20.84 ] 関連書籍 ・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 ・すごいHaskellたのしく学ぼう! ttp://www.amazon.co.jp/dp/4274068854
3 名前:デフォルトの名無しさん mailto:sage [2012/10/17(水) 08:14:16.68 ] 関連リンク ・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/ 【簡単な使い方】 1.検索バーに関数名を入れて検索 例 map 2.検索バーに型名を入れて検索 例 (a -> b) -> [a] -> [b] ・Real World Haskell ttp://book.realworldhaskell.org/read/ ・Learn You a Haskell for Great Good! ttp://learnyouahaskell.com/chapters
4 名前:デフォルトの名無しさん mailto:sage [2012/10/17(水) 08:32:15.59 ] おつ
5 名前:デフォルトの名無しさん mailto:sage [2012/10/17(水) 09:31:32.10 ] 前スレの流れで一言。 関数型の考え方はExcelのおかげで充分社会に浸透していると思う。 Excelシートを使って統計や簡単な計算が出来る人は大勢いるが、同じことを 同じような時間で手続き型言語で出来る人が同程度いるとは思えない。 よって、前スレの>>988 に同意
6 名前:デフォルトの名無しさん mailto:sage [2012/10/17(水) 09:54:00.21 ] >>5 >>988 には同意だが、年寄り向きではないね。記号を使い過ぎで忘れてしまう。 Smalltalk や Prolog とはちょっと違う。
7 名前:デフォルトの名無しさん mailto:sage [2012/10/17(水) 11:34:17.99 ] ■ C for( const char *s="12345"; *s; ++s ) if( '2'<*s&&*s<'5' ) printf( "%d", (*s-'0')*2 ); ■ JavaScript console.log([1,2,3,4,5].filter(function (i){ return i > 2 && i < 5 ; }).map(function(i){ return 2 * i; })); ■ Python print(map(lambda x: x*2, filter(lambda x: x>2 and x<5, [1,2,3,4,5]))) ■ Ruby puts [1,2,3,4,5].select{|i| i > 2 and i < 5}.map{|i| i*2} ■ C# new{}{ 1,2,3,4,5 }.Where(x => 2 < x && x < 5).Select(x => x*2); ■ Common Lisp (print (loop for x in '(1 2 3 4 5) if (< 2 x 5) collect (* x 2))) ■ Haskell print [x*2| x <-[1,2,3,4,5], x > 2, x < 5] ■ Perl print map {$_*$_} grep {2<$_ and $_<5} 1..5; ■ Mathematica {1,2,3,4,5}~Select~(2<#<5&) 2 ■ MATLAB x=[1 2 3 4 5]; x(2<x&x<5).*2 ■ Scheme (print (list-ec (: x 1 6) (if (< 2 x)) (if (< x 5)) (* x 2))) ■ Clojure (for [x (range 1 6) :when (and (> x 2) (< x 5))] (* 2 x))
8 名前:デフォルトの名無しさん mailto:sage [2012/10/17(水) 11:36:23.05 ] てか、プログラミング学ぶときって、そんなに学校の勉強や日常生活のアナロジーで考えるかなあ たしかにそういう入門書は多いけどさ
9 名前:デフォルトの名無しさん mailto:sage [2012/10/17(水) 13:03:44.79 ] それより学校の国語はふつうに宣言的だし日常で使う言葉も宣言的 宣言的な考え方は認識や言葉の基本。身近すぎて>>990 が気づいてないだけでは
10 名前:デフォルトの名無しさん mailto:sage [2012/10/17(水) 18:04:45.34 ] 宣言的、の意味を理解してないのかも
11 名前:デフォルトの名無しさん mailto:sage [2012/10/17(水) 19:13:00.41 ] c#だと Enumrator.Range(1,5).Where(x => 2 < x && x < 5).Select(x => x*2); だよ。 1から5までぐらいだったら文字数増えちゃうけどね。
12 名前:デフォルトの名無しさん mailto:sage [2012/10/17(水) 20:39:30.53 ] >>8 アナロジーで考えるという事ではなく、染みついた思考法・問題解決法
13 名前:デフォルトの名無しさん mailto:sage [2012/10/17(水) 21:09:16.38 ] >>9 宣言的の意味が違う。 出くわした問題や課題を解決しようとする時に、 素直に頭に思い浮かぶ解決方法としての宣言的な考え方の話。 問題や周辺環境を宣言的に表現して解を導く子どもはあまりいない。 たいていの子は問題解決への(直接の)手続き・手順を考える。
14 名前:デフォルトの名無しさん mailto:sage [2012/10/17(水) 22:58:27.86 ] 新スレおめでとうございます:(;゙゚'ω゚'):
15 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 00:05:08.05 ] >>13 えーそんなことないでしょ。推論は宣言的な方法で問題解決してるじゃない 解決方法としての宣言的な考え方が日常的でないなんていうのはおかしい
16 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 00:56:42.35 ] 後出しの独自定義の相手すんなよ 「関数型言語は自然な人間の思考に反する」とか言うために 子供がどう考えるかとか話を拡げて泥沼化したいだけだろ 変な脳科学みたいに
17 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 04:28:28.67 ] 茂木は今関係ないだろ!
18 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 04:31:04.26 ] 宣言的ってMakefileのトップレベルの部分書くときみたいなのですか?
19 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 07:53:24.86 ] >>16 「関数型言語は自然な人間の思考に反する」と言ったことは一度もない。 人間の思考は柔軟なので、訓練すれば誰でも色々な考え方が自然にできるようになる。 先のは問題や課題を解決しようとする時、かつ、子どもの話だ。 子どもは思考をする訓練をまだそれほど受けない。 大人に向けて成長していくうちに、授業や生活の中で自然に 宣言的な考え方をする訓練を徐々に受ける。 (教師側も宣言的な考え方を学ばせようと意図しているわけではない) 社会人になる頃には、たいていは宣言的な考え方も、 手続き的な考え方もやろうと思えば普通にできるようになってる。 しかし、意識してやっているわけではないので、 そのままでは Haskell でプログラムするのにたいして役には立たない。 問題や環境を意識して宣言的にとらえたり翻訳する練習を重ねないと、 プログラムは難しい。 ただ、考え方自体はすでに慣れているので、 宣言的な記述を見たときにそれを解釈するのはそれほど苦ではない。 また、そのために、問題を宣言的にとらえるのも、 ある問題で合点がいけば他の問題もスルスルと合点がいく事も起こり得る。 Haskell を初めた頃は難しかったが、 ある日突然視界が開けたという経験をする人が多いのは、 そのことも少なからず関係しているのではないかと私は思う。
20 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 08:30:28.87 ] >>19 あなたが>>990 なら、言っていることがずいぶん変わってるが。
21 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 10:17:49.42 ] Haskell である日突然視界が開けるようになるためには型システムを理解しないとね。 宣言的とか関係ないんじゃね?
22 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 12:43:21.69 ] >>21 型システムを理解しないとね、は自分も経験してるから簡単に同意できる。 宣言的とか関係ないんじゃね? は、根拠を示してくれ。 関係ないと感じた経験がないから、じゃね?と言われても このままでは同意も反対もできん。
23 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 12:53:49.19 ] >>20 指摘はもっともだ。 >>990 > 静的な、宣言的な考え方なんて、手続き的な考え方に比べれば、 > 学校教育の現場でほとんど出くわすことはないだろう。 > たとえ出くわしても、意識しなければ素通りしていくだけで、身にならない。 これは言い過ぎた。 出くわすし、成長と供に授業の中でそれとなく訓練を受けてはいる。 しかし、いかんせん、そうだとは意識していないのだから、 そのままでは Haskell のプログラムをする事に関してはたいして役に立たない。 宣言的な考え方に触れた時にそれを理解できる体勢にはなるが、 そういう考え方を自分から進んでするまでには至らないだろう。 そして、自分から進んで宣言的に考える事に慣れなければ、 Haskell でのプログラムが C や Java より簡単とは思えないのではないだろうか。 自分で宣言的に考える事ができなければ Haskell のプログラムはいつまで経ってもしっくりこないと思う。
24 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 14:21:05.06 ] 三行以内にまとめろ
25 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 15:47:09.90 ] 諸君、議論したまえ
26 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 16:01:15.25 ] >>24 今回の件では3行以内でレスするのは今の私には無理だ。 どうしても3行以内にしてほしいのなら、 もうレスをやめざるを得ない。
27 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 18:24:22.89 ] >>25 議題なに?
28 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 20:14:57.13 ] 本日の議題: 「宣言的」とはどういう意味か
29 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 21:08:07.74 ] >>26 3行とか関係なしに、もうレスやめていいよ
30 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 21:39:11.88 ] >>29 了解した
31 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 21:49:12.21 ] やると言ったらやるのが宣言的 できるならやる、できないならやらない、は宣言的ではない 何ができるかよりも何をするべきかを重視する
32 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 21:57:13.27 ] たとえば連立方程式の解を求めよ、という問題に対して どう解くのが宣言的なのよ?
33 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 22:04:42.11 ] >>32 宣言的には解けない
34 名前:デフォルトの名無しさん mailto:sage [2012/10/18(木) 22:30:06.88 ] とにかく解いたと仮定する 矛盾するまで仮定するのをやめない
35 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 00:17:07.81 ] こういうのは宣言的っぽいと思うんだが、どう? 囲碁を例に極簡単に示すと iterateF :: a -> [a -> a] -> [a] iterateF = scanl (flip ($)) -- ゲームの進行状態とは、初期状態から交互に着手したものである progressStatuses = iterateF initialStatus (cycle [blackMove, whiteMove]) -- 終局状態とは、ゲームの進行中に投了するか、着手できなくなるか、千日手になった時である eventualStatus = find (isResigned || isFinished || isRepeated) progressStatuses ほぼ自己説明的だから本当はコメントなんて要らんと思うが一応書いておいた。 ***Status 系は今の盤の状態の他に、一つ前の盤の状態とか、 終局理由の情報も含まれてる代数データ型。 あと、ユーザー入力はどうすんの? とかいう話はとりあえず無し。
36 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 02:43:31.15 ] 囲碁では千日手は簡単に作れる これは宣言じゃなくて発見
37 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 05:07:03.70 ] …?
38 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 07:49:38.95 ] もしかしたら最新の GHC では取り除かれているかも知れませんが、 下記のようにパターンの中で簡単な計算をするのは どういう名前の言語拡張でしたっけ? f :: Int -> Int -> Int f (n + 1) x = ・・・
39 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 08:05:08.19 ] 宣言:その分野のプロでも知らない用語を定義する 発見:定義しなくてもそのうちわかる
40 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 08:43:31.84 ] >>34 つまり、アルゴリズムというものは、宣言的ではあり得ない?
41 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 10:07:40.36 ] 例えば、宣言してもしなくてもアルゴリズムが存在する場合 それは宣言とは全く関係ないから宣言的ではない 黙っていても存在感があるものは宣言的ではない 言い続けなければ消えてしまいそうなものは宣言的
42 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 12:51:29.73 ] ワロタww
43 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 16:01:54.12 ] Haskellで実用的なもの作ってみろよ ほかの言語でもできるから
44 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 16:09:48.32 ] >>40 「アルゴリズムとはチューリングマシンの計算表のことだと考えよう!」
45 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 18:14:26.77 ] 宣言的っていうのやめて静的っていえばいいんじゃね 現に宣言的型とはいわないだろ 静的型だろ
46 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 18:50:18.22 ] 終動負荷的な静的筋力トレーニング
47 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 19:02:30.34 ] 今ここで議論の真似事をしている間だけの限定でいいから、 宣言的という言葉の意味をはっきり定義してくれ じゃないとまじめな議論にならんだろ
48 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 19:32:35.75 ] A とは B のことだ。 というような文言の羅列になるのが宣言的なのでは。
49 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 20:21:24.49 ] オブジェクトなどの羅列ではなく文言の羅列なのか
50 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 20:25:54.43 ] >>49 この文脈で言うオブジェクトってなにを指す?
51 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 20:46:27.43 ] >>50 メモリ領域などを抽象化したものかな
52 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 20:49:32.89 ] メモリ領域などを抽象化ものの羅列って、意味が分からん ちなみに、Haskell の変数は特定のメモリ領域に付けられたラベル(名前)じゃないよね
53 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 21:02:41.02 ] >第1の定義によれば、ある出力を得るにあたってそれを作成する方法ではなく、出力の性質を記述することを「宣言型」と称する。 >別の定義では、純粋関数型言語/論理プログラミング言語/制約プログラミング言語で書かれたプログラムを「宣言型」と称する。
54 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 21:04:29.55 ] >>52 そうだよね 特定したくないから抽象化したんだよね
55 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 21:10:43.86 ] >>54 特定したくないから抽象化したって、何か勘違いしてないか? Haskell の変数は、値が格納されたメモリ領域に付けられたラベルではなく、 「値に付けられたラベル」だぞ。 let a = 17 というのは、17 という値の別名が a ということだ
56 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 21:17:19.21 ] >>53 これはPrologの簡単なプログラムですが、 nojiriko.asia/prolog/olympic.html A とは B のことだ。ではなく例えば、 1888とアテネは夏期オリンピック関係にある。 という文言に相当するものの羅列と見做すことができる。 これも全体として宣言的と言える。
57 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 21:19:42.83 ] >>55 特定の値ではなく抽象的な値にラベルをつけるよ まだ値がわからない段階でもラベルをつける
58 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 21:21:39.22 ] おー、ごめん。 夏期オリンピック(1996,アテネ). 1988ではなくて、1996だった。さっきjavaの宿題スレにも 同じテーマのことを書き込んでその時点から勘違いをしていた。
59 名前:58 mailto:sage [2012/10/19(金) 21:23:52.62 ] さらに間違い。1996年ではなくて、1896年です。すみません。
60 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 21:32:04.79 ] >>52 は「変数は特定のメモリ領域に付けられたラベルではない」と言ってる >>54 は「そうだよね}と同意し「特定したくないから抽象化したんだよね」と言ってる >>54 の言う「特定したくない」というのは、メモリ領域を特定したくないから、 と読み取れないか?
61 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 21:39:35.17 ] もっとオリンピックに詳しい人に聞けばいいのに プログラマーがオリンピックを宣言するのはなぜなのか
62 名前:デフォルトの名無しさん mailto:sage [2012/10/19(金) 22:01:43.64 ] >>61 この問題の解答の一部を切り取っただけだから。 nojiriko.asia/prolog/j72_387.html
63 名前:デフォルトの名無しさん mailto:sage [2012/10/20(土) 01:33:24.66 ] RWH 読んでて型構成子って何かと思ったら、型コンストラクタかよ。
64 名前:デフォルトの名無しさん mailto:sage [2012/10/20(土) 08:13:40.39 ] >>38 n+kパターンはHaskell98の仕様にあったが、Haskell2010で取り除かれた。 GHCのフラグには (No)NPlusKPatterns がそれかね。
65 名前:デフォルトの名無しさん mailto:sage [2012/10/20(土) 21:28:24.10 ] GHC 7.6.1 を使っています。 Graphics.UI.GLUT モジュールをインポートしたファイルを ghci 上でロードするまではできました。 しかし、そのモジュール内の関数を評価しようとすると、 下記のエラーメッセージが出力されます(改行は適当に入れました)。 Loading package OpenGLRaw-1.2.0.0 ... linking ... <interactive>: C:\Users\***\AppData\Roaming\cabal\OpenGLRaw-1.2.0.0\ghc-7.6.1\HSOpenGLRaw-1.2.0.0.o: unknown symbol `__imp_wglGetProcAddress' ghc.exe: unable to load package `OpenGLRaw-1.2.0.0' ネット上で調べてみました。 同じような環境で同じエラーが出た方の書き込みがいくつかありましたが、 私が見た限りでは、解決策、あるいは解決に繋がるような情報はありませんでした。 このようなエラーに関して何か心当たりはないでしょうか。 ちなみに、ghc でのコンパイルは問題なく行われ、実行ファイルも起動できます。 ghci 上でのみ問題が起きます。 [環境] Windows7 64bit GHC 7.6.1 GLUT-2.3.0.0 パッケージ(他の依存パッケージも cabal で自動インストール) glut-3.7.6-bin_x64(GLUT 本体) [コマンド] ghci -lglut32
66 名前:デフォルトの名無しさん mailto:sage [2012/10/20(土) 23:57:24.35 ] 単相性制限はその後どうなりましたか? 望まれない子の将来が気になります
67 名前:デフォルトの名無しさん mailto:sage [2012/10/21(日) 00:16:08.21 ] >>64 ありがとうございます。
68 名前:デフォルトの名無しさん mailto:sage [2012/10/21(日) 00:58:21.17 ] RWH、Maybe の箇所、唐突に Just 使って、しかも結局 Just の説明皆無かよ。
69 名前:デフォルトの名無しさん mailto:sage [2012/10/21(日) 03:29:09.78 ] RWHって文章の構成悪いよね 説明なしにいきなり初出の単語が出てくるし話はあっちこっちに逸れまくり Haskellとかコンピュータとかの枠に限らず一般的な書籍としてかなり悪いほうだと思う
70 名前:デフォルトの名無しさん mailto:sage [2012/10/21(日) 09:04:40.35 ] でも他の書籍やネットで基礎をしっかり学んでおけば、 それほど苦にならないと思うが
71 名前:デフォルトの名無しさん mailto:sage [2012/10/21(日) 10:15:13.08 ] これから学ぶ範囲の知識について他で学習しておかないと理解に苦しむような本だったら 学習のための本としての役割を果たしていないと思うけどね
72 名前:デフォルトの名無しさん mailto:sage [2012/10/21(日) 10:44:10.30 ] 「理解に苦しむ」って、今回の件ってそれほど大げさなことかな。 あれ? 何だろ? って思ったら、まずは調べてみればいいいじゃん。 Just なんてその本にしか載っていない特別に物でもないんだし。 他の本でもそういうの色々あるよ。 とくに説明もなく新しい単語や概念が出てくるのなんてしょっちゅうだ。 そんなところでいちいち躓いて憤ってたらきりがないよ。 それに改善点を指摘するなら、ここにじゃなくて、出版社や著者にでしょ。
73 名前:デフォルトの名無しさん mailto:sage [2012/10/21(日) 11:07:04.27 ] Haskellを本格的に使いこなそうと思ったらRWHのレベルまでは知っておく必要があるからね 他の入門書はとりあえずHaskellを知る程度のものでしかない RWHに代わるものが現れるまではとりあえず必要なものだ
74 名前:デフォルトの名無しさん mailto:sage [2012/10/21(日) 16:13:17.47 ] GHC 7.6.1 って、もしかして32bitアプリは作れない?
75 名前: [―{}@{}@{}-] デフォルトの名無しさん mailto:sage [2012/10/21(日) 16:58:14.86 ] >>66 何も変わってないよ。Haskell2010に入ってる ただしGHC 7.8からghciではデフォルトで外されることになった hackage.haskell.org/trac/ghc/ticket/3202
76 名前:デフォルトの名無しさん mailto:sage [2012/10/23(火) 18:13:04.53 ] >>75 遂に白河の清きに魚の住み兼ねて 元の濁りの田沼に戻るのですね!
77 名前:デフォルトの名無しさん mailto:sage [2012/10/23(火) 18:37:19.71 ] MonomorphismRestrictionのどのへんに白河の清き要素があるのか気になる
78 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 04:47:19.04 ] どなたか! この中にMonomorphismRestrictionを擁護してくださる方はいらっしゃいませんか!?
79 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 18:37:32.62 ] 型システムわからん 良かれと思って型宣言したらコンパイル通らなくなる rigid type variable bound by 云々言い出して 俺の善意を踏みにじりやがる
80 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 19:00:08.28 ] >>79 どんなコードでそのエラーが出た? そのエラーには「Could not deduce 〜」というのもあった? ちなみに型は、元々コンパイルが通っていたコードに 良かれと思って後から書き加えるものではないよ。 テスト駆動がまずテストを書くのと同じように、まず型を書くんだよ。 それから本体を「型に合わせて」書くんだ。
81 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 19:10:04.15 ] >>79 もしかしてローカル変数に多相型の宣言付けてエラーもらってる? それなら、ローカル変数の型宣言の中では、外の型変数を(ScopedTypeVariable拡張なしでは) 使えないということを覚えておけばいいよ
82 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 19:12:00.93 ] >>80 >テスト駆動がまずテストを書くのと同じように、まず型を書くんだよ。 そんなの場合によるだろ。糞どうでもいい
83 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 19:14:58.53 ] >>82 どのような場合に先の型を書き、 どのような場合に後に型を書くと良いのでしょうか? 何か簡単な事例を挙げていただけると助かります。
84 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 19:17:54.50 ] どんな場合によるのか興味ある
85 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 19:25:28.55 ] じゃあ俺も興味ある
86 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 19:26:10.20 ] me too
87 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 19:38:04.48 ] 母さんビール
88 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 19:52:22.72 ] >>87 ← 意味判らない
89 名前:デフォルトの名無しさん [2012/10/24(水) 19:59:05.00 ] haskellには(式以外の)文がない・・・って嘘じゃね?
90 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 20:09:30.95 ] >>89 そう思う根拠は?
91 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 20:40:10.35 ] >>87 そう思う根拠は?
92 名前:デフォルトの名無しさん [2012/10/24(水) 20:45:05.32 ] ifも式、letも式。ではwhereは式?
93 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 20:53:26.27 ] そもそも式以外の文がないってどこ情報よー
94 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 20:57:36.06 ] >>83 ただちに書かなくていいことは後で書く テスト駆動も、制約に合わせて書くというより 関係ないコードを書かないことで間違いを減らしている気がする
95 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 21:04:30.70 ] >>83 好きにすればいいと思うけど、俺の基準を挙げるなら、 トップレベルの定義は先に思い付いた方から書く ・普通は型の方が簡単なので型から書くことが多い -- | 標準正規分布に従う乱数を生成する randomNormal :: StdGen -> (Double, StdGen) ・定義が頭にあるのに型がすぐに思い付かないor面倒なら定義から forceTell x = rnf x `seq` tell x forceTell :: (MonadWriter w m, NFData w) => w -> m () ローカル変数は定義から書く。型は必要なときだけ後から書く
96 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 21:06:43.98 ] >>92 そもそも、「式」とは何? それをはっきり定義しないと、where が式なのかどうか判断できないだろ
97 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 21:10:37.15 ] Haskell Reportの言葉遣いに従うなら簡単 ・whereは式じゃない。宣言やcase選択肢の一部 ・Haskellに「文」は存在する。do式の中に並んでいるのがそれ
98 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 21:14:38.02 ] 俺はグローバルでもローカルでも型から先に考えるな。 書くかどうかは気分(ローカルで型推論がうまく働かなきゃ書く)。 >>80 の型から先に書くというのは、そういう意味で俺は無意識に拡大解釈したけど、 例に出したテスト駆動の方は実際に書かなきゃ意味ないなぁ、どうなんだろ。 (テスト駆動の方も、コードの内容よりテストから先に「考える」と言えばそうだろうが)
99 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 22:07:48.31 ] where は節 SQLなら
100 名前:デフォルトの名無しさん mailto:sage [2012/10/24(水) 23:39:27.46 ] tail は確かに List にも Vector にもあるから Ambiguous かも知らんけどさ 渡してるのが Vector なんだから Vector の方の tail だって推測してくれても良いんじゃないの? 分からず屋!
101 名前:デフォルトの名無しさん mailto:sage [2012/10/26(金) 07:50:23.40 ] 実行時間計測用コマンド作ってみた 良かったら使ってください (ネットで都合良く使えそうな関数見つけて、Cで良いのに意地になって作っちゃった) import Data.Time import System.Process import System.Environment import System.IO main = getCurrentTime >>= (\start -> getArgs >>= (\commands -> runInteractiveProcess (head commands) (tail commands) Nothing Nothing >>= (\(_,stdout,_,_) -> hGetContents stdout >>= putStrLn >> getCurrentTime >>= (\end -> print $ diffUTCTime end start))))
102 名前:デフォルトの名無しさん mailto:sage [2012/10/26(金) 16:32:06.34 ] 日記
103 名前:デフォルトの名無しさん mailto:sage [2012/10/26(金) 18:12:19.85 ] >>100 その機能をうまく(型推論の便利さをあまり犠牲にしないで)実装できたらすごい 俺は尊敬するし、論文も書ける
104 名前:デフォルトの名無しさん [2012/10/26(金) 18:48:34.11 ] MSがはやく Visual Haskel/CLI 出してくれればいいのに
105 名前:デフォルトの名無しさん mailto:sage [2012/10/26(金) 18:55:32.06 ] 関数型はF#とpythonが既にあるからねぇ。
106 名前:デフォルトの名無しさん mailto:sage [2012/10/27(土) 00:05:49.70 ] MSRにGHCメイン開発者いるけど学者としての活躍が使命でMS製品に反映させなくていい人たちだったとおもうので、 IronPythonみたいに外部か開発部署に物好きがいないとむずかしいかもね。 どちらかというとF#の人たちがどういうポジションなのか気になる。
107 名前:デフォルトの名無しさん mailto:sage [2012/10/27(土) 08:22:56.10 ] これ、買いですか? 関数プログラミング入門 Haskellで学ぶ原理と技法|Ohmsha ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=978-4-274-06896-6
108 名前:デフォルトの名無しさん mailto:sage [2012/10/27(土) 15:32:25.90 ] >>103 どうしてだよ! 手続き型言語によくあるオーバーロードだろ できないのかよ!
109 名前:デフォルトの名無しさん mailto:sage [2012/10/27(土) 15:51:33.66 ] >>107 特徴 ・コンピュータサイエンスっぽいノリ。関数型プログラミングを 数学の一分野として位置づけて証明をつけたりするような議論がある。 副題に「原理と技法」とあるのは適切だと思う。Haskellってリスト内包表記で 無限リストがあっさり扱えたりする反面、自分が書いたコードが本当に効率が良いのか わかりにくいところがある。この本では、コードの効率を手で分析してみせてる箇所があり、 そのような議論を丁寧に追って自らの血肉にできれば有益だと思われる。 ・モナドの説明は想像していたよりあっさりしていた。 コンピュータサイエンス寄りの本とは言え、突如領域理論や圏論で読者を打ちのめす心配は一切ない。 ・Haskellという言語自体の入門書にもなっているが、この本をHaskell入門書として紹介するのは SICPをScheme入門書として紹介するのと同じぐらいには間違っていると思う。 ・すでに訳出されている fun of programming (関数プログラミングの楽しみ) はこのBirdの本の 「続編」という位置づけであり、その本の中でIFPHでは〜のような言及がしばしばあるので 「関数プログラミングの楽しみ」を楽しむためにはこの本も持っていたほうが良い。 まとめ 「関数プログラミング入門 Haskellで学ぶ原理と技法」はHaskellをとりあえず使ってみたいという 人には向かない。そのような向きには「すごいHaskell〜」を勧める。この本は、ある程度Haskellで 自分が書きたい関数を書けるようになり、効率の問題に直面しはじめた人にこそ向いていると思う。 どのようにデータ構造を工夫し、アルゴリズムを解析し、改良するかについての実例が載っており、 これらの技法を身につければ --- 簡単ではないだろうが --- より整然とした、そして効率の良い Haskellコーディングができるようになるだろう。
110 名前:デフォルトの名無しさん mailto:sage [2012/10/27(土) 17:00:48.36 ] 自分もその本、気になってた。くわしい解説ありがとう! 「関数プログラミングの楽しみ」の前に読むといいのか、なるほど
111 名前:デフォルトの名無しさん mailto:sage [2012/10/27(土) 17:04:25.82 ] 以前原著買おうとしたけどいいお値段しててやめちゃったな オーム社さんいい仕事してくれるぜまったく
112 名前:デフォルトの名無しさん mailto:sage [2012/10/27(土) 17:07:22.18 ] 大武者
113 名前:デフォルトの名無しさん mailto:sage [2012/10/27(土) 17:11:44.56 ] pdfで出してくれー
114 名前:デフォルトの名無しさん mailto:sage [2012/10/27(土) 17:28:23.24 ] tanakh.jp/pub/fp-tudoi-2012/tudoi.html すごい本のPRスライドがあった。
115 名前:デフォルトの名無しさん mailto:sage [2012/10/27(土) 17:32:35.34 ] みんなhaskellでなにかいてるの?
116 名前:デフォルトの名無しさん mailto:sage [2012/10/27(土) 17:49:22.15 ] 続編を買って読んでいて、前編を欲してる人に是非おすすめ、という感じか
117 名前:デフォルトの名無しさん mailto:sage [2012/10/27(土) 18:24:16.32 ] なんせ「関数プログラミングの楽しみ」ではモナドの話はIFPHの11章を見てもらうことにしてここではArrowの説明するぜ! というノリだからね。 続編というか、IFPHを前提というかそういう感じかな。
118 名前:デフォルトの名無しさん mailto:sage [2012/10/27(土) 18:31:34.04 ] こういう本ってすぐ絶版になったりするから すぐ読まないにしても確保しといたほうが良さそうだな
119 名前:デフォルトの名無しさん mailto:sage [2012/10/27(土) 20:24:43.91 ] >>118 そsそうなの!? 関数プログラミングの楽しみとセットですぐ買おうかな
120 名前:デフォルトの名無しさん mailto:sage [2012/10/27(土) 20:53:45.01 ] ghc 7.6.1 で foreign import stdcall 使うと警告が出る。 the 'stdcall' calling convention is unsupported on this platform, treating as ccall これはどういう事? ccall が実際にどういう規約なのかよく分からんけど、 もし ccall == cdecl なら、ccall /= stdcall だよね。
121 名前:デフォルトの名無しさん mailto:sage [2012/10/27(土) 21:00:58.85 ] >>107 って目次を見ると、どっかで読んだような話ばっかだよな もうこの手の本はお腹いっぱいだわ
122 名前:デフォルトの名無しさん mailto:sage [2012/10/27(土) 22:57:24.33 ] >>120 これじゃね > When compiling for the x64 architecture in a Windows context (whether using > Microsoft or non-Microsoft tools), there is only one calling convention ? the > one described here, so that stdcall, thiscall, cdecl, fastcall, etc., are now all one and the same. en.wikipedia.org/wiki/X86_calling_conventions#x86-64_calling_conventions
123 名前:デフォルトの名無しさん mailto:sage [2012/10/27(土) 23:35:53.71 ] >>122 なるほど。 x64 & Windows では呼び出し規約は1種類に統一されたのか。 外部ライブラリを呼ぶ時も、呼び出し規約は何だろうと ヘッダファイルを調べたりする必要がなくなるわけだ。 こりゃ便利。 ありがと。
124 名前:デフォルトの名無しさん mailto:sage [2012/10/28(日) 09:29:26.53 ] >>109 d すごく参考になった。
125 名前:デフォルトの名無しさん mailto:sage [2012/10/28(日) 10:06:10.47 ] IFPHは完全にコンピュータサイエンスの本だから、プログラミングの本だと思って買うとがっかりするぞ
126 名前:デフォルトの名無しさん mailto:sage [2012/10/28(日) 10:17:23.02 ] SICPをScheme入門書として紹介するのと同じぐらい〜って表現がぴったりだな
127 名前:デフォルトの名無しさん mailto:sage [2012/10/29(月) 03:17:32.09 ] Vectorの変更不可の方は sliceなんかするとC++でいうところの参照のベクタになるってことでいいすか? 中身のコピーはしないんですよね?
128 名前:デフォルトの名無しさん mailto:sage [2012/10/29(月) 07:28:07.96 ] >>127 vector パッケージのドキュメントには、 Data.Vector.slice の項に次のように書かれています。 O(1) Yield a slice of the vector without copying it. The vector must contain at least i+n elements. もしコピーされているようなら、それはバグですね。
129 名前:Perl忍者 ◆M5ZWRnXOj6 [2012/10/29(月) 09:47:53.39 ] pbh.jp/wiz/ ↑ これ解けないやつは真骨頂にクズ ハッカーをを名乗る価値無し 海外からNinjaレベルと言われるほどの者なら簡単に解くことができる 解いてみてみ? 合ってるか確認してやるから SHA-1とか総当りとかほざいてるようじゃ脳味噌足りてないよ ホワイトハット気取りのお前らクズじゃJarlsbergすら解けないんだろうな
130 名前:デフォルトの名無しさん mailto:sage [2012/10/29(月) 12:36:11.29 ] >>128 ですおね^^
131 名前:デフォルトの名無しさん [2012/10/30(火) 11:10:57.70 ] 政治学習
132 名前:デフォルトの名無しさん mailto:sage [2012/10/31(水) 21:36:04.82 ] 噂の『関数プログラミング入門』を買った カバーデザインがポップでありながら品があって良い 組版もプログラミングHaskellと同じものなのですっきりしていて気が散らない Haskellのコードに使われる等幅フォントが縦長窮屈でなく読みやすい 製本は流行りのlay-flatタイプの綴じ込みでこのへんもぬかりない なかみはむつかしくてよくわからなかった
133 名前:デフォルトの名無しさん mailto:sage [2012/10/31(水) 22:45:09.39 ] >>132 > なかみはむつかしくてよくわからなかった 一番感じなところだが・・・
134 名前:デフォルトの名無しさん mailto:sage [2012/10/31(水) 22:46:57.40 ] 肝心なところ
135 名前:デフォルトの名無しさん mailto:sage [2012/10/31(水) 22:58:59.04 ] カバーデザインが非常に洗練されている「関数プログラミングの楽しみ」の前編に相当するとのことなので、 やはりデザインはいいんだな
136 名前:デフォルトの名無しさん mailto:sage [2012/10/31(水) 23:54:48.87 ] この本開きやすいよな フルフラット製本って言うらしいけど
137 名前:デフォルトの名無しさん mailto:sage [2012/11/01(木) 05:42:51.18 ] フルスロットル製本に空目した
138 名前:デフォルトの名無しさん mailto:sage [2012/11/02(金) 02:24:17.75 ] RWHより簡単かどうかだけ知りたい
139 名前:デフォルトの名無しさん mailto:sage [2012/11/02(金) 12:11:09.02 ] 諸君、議論がお留守だ
140 名前:デフォルトの名無しさん mailto:sage [2012/11/02(金) 13:45:46.44 ] >>7 ほんとにjsやpythonってそんなひどいん?
141 名前:デフォルトの名無しさん mailto:sage [2012/11/02(金) 14:04:31.23 ] >>7 ■Objective-C for (id num in @[@1,@2,@3,@4,@5]) printf("%d\n", [num intValue]); または for (id num in @[@1,@2,@3,@4,@5]) NSLog(@"%@", num);
142 名前:デフォルトの名無しさん mailto:sage [2012/11/02(金) 14:17:55.79 ] Pythonでリスト内包表記使ってないのは不公平だな ■Python [x*2 for x in range(1,6) if 2<x<5]
143 名前:デフォルトの名無しさん mailto:sage [2012/11/02(金) 15:31:54.92 ] >>7 て一番酷いのはHaskellだろ こんな阿呆なコード書くやつ居ないよ
144 名前:デフォルトの名無しさん mailto:sage [2012/11/02(金) 15:33:46.22 ] 畜生、Vectorにnub無いのかよ
145 名前:デフォルトの名無しさん mailto:sage [2012/11/02(金) 19:20:30.90 ] nub って何?
146 名前:デフォルトの名無しさん mailto:sage [2012/11/02(金) 19:20:48.30 ] >>7 って [1, 2, 3, 4, 5] みたいなリストを用意するのがルールじゃないの? range とか 1..5 はだめだろ
147 名前:デフォルトの名無しさん mailto:sage [2012/11/02(金) 20:48:54.42 ] Conal Elliott のブログの写真って、最近変わった? つい最近まで正面を見てなかったっけ まぁ、どうでもいいが この素敵なおっさん、いつになったらブログ更新するんだろ
148 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 00:05:40.15 ] >>138 RWHは泥臭く実例を追う実用主義。BirdのIFPHは、理論的な側面を強調している。 無限リストの挙動がなんでそーなるの的な数学的原理なんかはIFPHが優れてるし 画像を扱ってバーコードリーダー作るぜ⇒大量のボイラープレート⇒それモナドでまとめられるよ なんて話はRWHの優れたところだ。 コンピュータサイエンス(数学寄り)の素養があるならIFPHが簡単だろうし CとかPerlは実戦でつかえるけど理論には興味ないしそれでも関数型使ってみたいならRWHが向いてる。
149 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 00:11:37.14 ] モナド変換子を解説してる日本語書籍がRWHしか無くないかね? 現実的にHaskellを使いこなすにはモナド変換子の理解が必須だと思うのだけど
150 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 00:27:58.18 ] >>149 IFPHの10.4でモナド変換子の説明が載ってますぞ〜 例外の複合、状態の複合を例として説明し、最後にそれらを応用してますぞ〜
151 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 00:38:59.61 ] それならちょっとIFPH立ち読みしてくるかなあ よさそうなら関数プログラミングの楽しみと一緒に買ってしまうか 関数プログラミングの楽しみの方は、いつかじっくり読みたいなとは思ってたんだ
152 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 00:48:45.35 ] 丁度昨日IFPHと関数プログラミングの楽しみ併せて買ってきたわ 読みたい時に手に入らないとかありがちだからなー
153 名前:デフォルトの名無しさん [2012/11/03(土) 04:55:02.03 ] >>145 リストの重複要素を省く
154 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 12:08:13.58 ] >>153 ありがと
155 名前:デフォルトの名無しさん [2012/11/03(土) 18:50:29.18 ] モナドって、IO、継続、Stateなどの副作用系から、LISTや冪集合などの 数学系に至るまで、適用範囲がすごく幅広いのだが、これはどうしてだろうか? これだけ幅広くても、モナドとは何かを言えるものだろうか?
156 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 18:53:32.65 ] またモンゴロイドが疑問を抱いてるようです
157 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 18:57:39.06 ] >>155 関数ほどは幅広くはないよ でも関数とは何かを言えるものだろうかなんて誰も疑問に思わないな
158 名前:デフォルトの名無しさん [2012/11/03(土) 19:22:34.41 ] >>157 関数。たしかにそうだけどね。 モナドは中途半端に幅広い、と言うとどうかな。 関数の場合は、モナドのような分類(IO、State、...)はしないよね。 しかもこの分類はアドホックな分類にも見えるし。
159 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 19:45:48.97 ] >146 >7のClojureはrange使ってるよ
160 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 19:51:21.33 ] >>155 Prologは副作用系と数学系を区別してなかったのだが Haskellはいったん副作用系と数学系を対立させ、再び統一するためにモナドを発明した
161 名前:デフォルトの名無しさん [2012/11/03(土) 20:43:47.80 ] >>160 うん。そのとき、たとえば、IO a とList a における IOとListには、 どちらも型構成子であるという共通性はあるが、それ以外の共通性は 感じ取れないんだ。さらにいうと、List aの方はaの自然な拡張だと すんなり納得できるが、IO aの方は、aとIOの強引な組合せとしか 見えないんだ。
162 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 20:58:35.33 ] >>159 前スレのテンプレを見てもらえばわかるがrangeとか1..5とか使ってないのよ だから元々そういう縛りがあったんだろう
163 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 21:01:56.52 ] あれはテンプレじゃなく前スレで勝手にぶっこまれただぞ
164 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 21:09:19.21 ] >>163 それは失敬 でもテンプレ化するならそれなりにルールを決めないとだめだよね
165 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 21:10:54.68 ] >>161 お前には感じ取れなくてもListとIOには共通性があって その共通性に基づいてるのがモナドなんだな
166 名前:デフォルトの名無しさん [2012/11/03(土) 21:11:34.99 ] え聞こえないとかありがちだからなー
167 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 21:15:23.85 ] 「感じる」とはまた曖昧で主観的な・・・
168 名前:デフォルトの名無しさん [2012/11/03(土) 21:28:01.97 ] >>165 >ListとIOには共通性があって どういう共通性?
169 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 21:29:04.57 ] モナドとは、モナド則を満たすような(>>=)とreturnを定義できる型構築子のこと 逆に、ある型構築子に対してモナド則を満たすような(>>=)とreturnを定義できるならそれはモナド
170 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 21:35:43.05 ] IOとかListとかが実際に果たす役割はどうでもよくて、共通する構造によって表現可能ってことだから 関数よりむしろモナドのほうが広いとも言える
171 名前:デフォルトの名無しさん [2012/11/03(土) 21:43:13.59 ] >>169 むしろ、IOとListとが同類にみえるようなモナド則は実はナンセンスなのじゃ ないかという疑問なのだが? >>170 さすがにそんなことはないだろう。
172 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 22:04:53.50 ] >>169 そのような性質を持つものにモナドという名前を与えた背景の方が興味あるな
173 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 22:05:36.02 ] >>171 モナド則なんてなくても、Prologでは副作用と非決定性は同類に見えていた
174 名前:デフォルトの名無しさん [2012/11/03(土) 22:15:51.32 ] >>172 お察しの通り、モノイドとの類似性から >>173 非決定性が副作用の一部というなら分かるが、同類というのは分からん。 Prologの何のことを言ってる?
175 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 22:22:16.53 ] 非決定性と副作用を同類に扱う手法のひとつがモナドだよね?Prologには何かそれに代わる物がある?
176 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 22:23:16.60 ] >>171 ナンセンスとか言っても現実にリストとIOは同じモナドの概念でまとめられるので、 まとめられる以上それを別のものにする理由が無い
177 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 22:29:00.77 ] IOはRealWorldを状態に持つStateモナドのようなものだってことは理解してる?
178 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 22:36:14.23 ] Prolog: 非決定性は副作用の一部 (>>174 ) Haskell: 非決定性はモナドの一部 + 副作用はモナドの一部
179 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 22:37:13.01 ] まとめられるから、というだけでモナドにまとめている訳でもなさそうだけどな まとめられるのに、諸事情でまとまっていないものもあるし
180 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 22:40:44.12 ] でも、非決定性、状態、継続、例外、入出力等、 かなり多くのものがまとめられるからモナドを選んだんじゃないのかね?
181 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 22:49:35.35 ] 色々やってるうちに便利なことに気付いたって印象だな IOとか昔はモナドじゃなかったんでしょ
182 名前:デフォルトの名無しさん [2012/11/03(土) 22:54:29.24 ] 流体は非粘性(粘度効果は無視できる)、ポリトロープな状態方程式で記述される熱的な理想気体とし、断熱過程の下で作用する。
183 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 23:01:50.05 ] 応用範囲が広くて便利なものを「ナンセンス」と言う意味が分からんな 独自の言葉の使い方をしてるならちゃんと最初に定義してくれ
184 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 00:05:52.82 ] >>155 Moggiの論文に説明があるよ。でもまあ確かに判ってる人が 判ってる人向けに書いてる感がある。
185 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 00:09:40.59 ] >>171 さすがにそんなことはないだろう、なんてことはないのだ。 恒等関手もモナドなのでモナドによって定まるKleisli圏の中に元の圏も 含まれている。形式的な話ではあるが。勿論モナドごとに一つのKleisli圏があり、異なる モナドをつなぐためにはめんどうな事をしないといけないが (この辺は自分もまだ未把握。モナドトランスファーが関係してるのかなぁ)
186 名前:デフォルトの名無しさん [2012/11/04(日) 00:41:32.78 ] コアンダ効果を通常の翼の速度分布の説明に使うのは不適切であると
187 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 04:30:56.21 ] 駄目だ! このスレ頭良い人達でいっぱいだ!
188 名前:デフォルトの名無しさん [2012/11/04(日) 07:59:40.61 ] >>185 そういう言いかたなら、関数は射なのだから,やっぱりそんなことはないのだ。
189 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 09:31:56.97 ] >>188 射は関数とは限らないから、それは反論になってないよ(ただ185の議論が強引なのは確か)
190 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 09:59:30.19 ] プログラムとは関数では無くKleisli圏の射のことなので、 関数よりモナドの方が広いと言うのはある意味正しい
191 名前:デフォルトの名無しさん [2012/11/04(日) 10:13:46.42 ] >>185 いまここではそもそもそのKleisli圏がどれだけ意味があるのかを聞かれているんじゃないかな
192 名前:デフォルトの名無しさん [2012/11/04(日) 10:22:17.47 ] >>190 米田の補題より、関数=射。 190より、モナド⊂プログラム=Kleisli圏の射⊂射。 したがって、モナド⊂関数。 これでOK?
193 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 10:36:35.07 ] 諸君、議論しているね
194 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 10:56:48.43 ] >>192 >米田の補題より、関数=射。 ちょっと意味が解らないんだけど、 米田の補題からどうやって関数=射(ここで言うイコールって何?)が導かれるのか説明してくれない?
195 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 13:53:18.43 ] むしろ、カルテジアン閉のような気がする
196 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 15:51:14.41 ] >>189 強引? 間違ってるっていうんだよw
197 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 16:08:25.97 ] Q. 何でIOと[]の共通部分をわざわざ括り出して名前を付けるの? A. 便利だから で済む話だろ
198 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 16:21:23.88 ] Moggiの論文読めば済む話なのに、何をごちゃごちゃ言ってるのんだよ
199 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 16:59:49.49 ] 英語を読んだら死ぬという噂だし…
200 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 17:41:22.96 ] >>197 IOをモナドで扱うのが便利なのは分かるが、 リストまで同じようにモナドで扱うのが便利な理由がいまいち分からん
201 名前:デフォルトの名無しさん [2012/11/04(日) 17:43:30.65 ] >>198 だからあMoggi論文が納得できないって言ってるんだろ それはそれでありだな
202 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 17:43:44.71 ] >>200 内包表記便利じゃん あれってモナドだからだよ
203 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 18:03:37.92 ] >>195 :(;゙゚'ω゚'):カルテジアンなの? カルテシアンだと思ってた
204 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 18:09:09.26 ] コードも書かずにモナドがどうやら大して理解もしてない圏論がどうやら、 実にHaskellerらしいスレですね
205 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 18:12:53.23 ] 圏論を深く理解したHaskellerでもなさそうなあなた様が このような場末に何の御用で
206 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 18:23:29.00 ] >>200 リストモナドは総当たり(深さ優先探索)するときに使う 問題によってはStateT s []がすごく便利
207 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 18:48:07.95 ] >>202 リスト以外で内包表記が役に立つ(適している)シーンが思い浮かばない リストもモナドで括る利点が内包表記ができるってだけなら、 内包表記はリスト専用構文でもいいような気がするのだが
208 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 18:51:07.34 ] >>206 すまん、総当たり(深さ優先探索)する簡単な具体例は何か無いだろうか (俺、ここでいう総当たりの意味がよく分かっていない) リストがモナドになっていない他の言語と比較してみたい
209 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 18:57:56.15 ] つうかモナド内包表記っていつのまにか復活してたのか
210 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 19:07:30.55 ] Listモナドが何なのかもわかってなくて煽ってたのかこいつは Listの各要素に関数を適用するmap程度のものだとか思ってたのか?
211 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 19:12:23.22 ] いろんな書き方が出来て楽しいのう do { x <- xs; y <- ys; return $ x + y } [x + y | x <- xs, y <- ys] (+) <$> xs <*> ys
212 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 20:02:05.01 ] >>211 一番下の知的な書き方に憧れます
213 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 20:51:41.09 ] >>210 それ以外に効果的だと感じる内包表記の使い方を見たことがない
214 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:03:01.89 ] わかってるじゃないか お前が見たことないだけだよ
215 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:12:11.35 ] >>211 みたいなの見てるとリストの要素から別のひとつの要素作ってるだけだから、 あんま効果的に見えないんだな リストモナドの場合、 要素からリストをつくる操作(リストが入れ子になるわけじゃないよ)とか 要素を排除する操作とか(途中ですべての要素が排除されたら処理は止まる)を混ぜることができて、 最終的に結果をひとつのリストとして得ることができる
216 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:13:48.86 ] 総当りというかバックトラックの例だが。 nQueen :: Int -> [[(Int,Int)]] nQueen n = nQueen_ 1 [[]] where nQueen_ m ans | m > n = ans | otherwise = nQueen_ (m + 1) [(m, x) : xs | xs <- ans, x <- [1..n], all (\ (i, j) -> x /= j && abs (m - i) /= abs (x - j)) xs]
217 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:14:33.43 ] 4つの4で0..100を作るパズル import Data.List import Control.Monad main = putStr $ unlines $ map (intercalate ", " . take 2 . fourFours) [0..100] fourFours :: Int -> [String] fourFours target = do (val, str) <- msum $ map makeWith [[4,4,4,4], [44,4,4], [4,44,4], [4,4,44], [444,4], [4,444], [4444]] guard $ val == fromIntegral target return str makeWith :: [Int] -> [(Rational, String)] makeWith [x] = return (fromIntegral x, show x) makeWith xs = do (left@(_:_), right@(_:_)) <- zip (inits xs) (tails xs) -- xsを二つに分ける leftVal <- makeWith left -- 左部分式を作る rightVal <- makeWith right -- 右部分式を作る combine leftVal rightVal -- 演算して組み合わせる combine :: (Rational, String) -> (Rational, String) -> [(Rational, String)] combine left right = do op <- [add, sub, mul, div] -- 演算を選ぶ op left right where add a b = return $ op2 (+) "+" a b sub a b = return $ op2 (-) "-" a b mul a b = return $ op2 (*) "*" a b div a b = do guard $ fst b /= 0 return $ op2 (/) "/" a b op2 valOp strOp (v0, s0) (v1, s1) = (valOp v0 v1, "(" ++ s0 ++ ")" ++ strOp ++ "(" ++ s1 ++ ")")
218 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:24:26.05 ] 君らがやってるのはトイプログラムとか頭の体操の類いだけじゃん たとえばゲーム製作の**の部分での利用とか、 会計ソフト製作での**の部分での利用とか、 Webサービス製作での**の部分での利用とか そういう実用的な部分での使い方はねーの?
219 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:26:14.32 ] いつからそんな話になったんだよww
220 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:30:31.40 ] jQueryなんかはListモナド的なものをうまく活用してるいい例かね Listモナドのアルゴリズムはわりと広範囲に応用可能だと思う 状態モナド的なものと比べて
221 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:30:39.00 ] >>218 なんで総当たりの実演をするのにそんな分野依存の知識を要求する例が欲しいんだ? リストモナドは総当たりが必要な時にはいつでも使える、ということさえ知ってれば プログラマなら応用できるだろ
222 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:34:13.80 ] まあでもはっきり言えばリストモナドは実用上そこまで重要じゃないと思う Maybeの方が10000倍大事
223 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:35:36.79 ] カードをプレイするためのコストが比較的複雑なTCGで、 手札のカードが場に出せるかどうかを判定するのにStateT a [] bを使ったような記憶はある
224 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:48:05.17 ] >>219 いや、だってさ 実用的なシーンではたいして使えない仕組みなんて、 あっても意味は無くないか? 何のためにプログラムしてるかと言えば、 アプリを作るためにしてる、というのが まぁ一般の大半のプログラマの意見だと思うし
225 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:50:01.24 ] あと、俺の言う仕組みって、リスト以外のモナド内包表記のことね
226 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:55:28.18 ] >>224 いや、>>208 に答えてリストモナドがどんな感じで動くかという話をしてるんであって、 リストモナドの存在意義を示すための例じゃないよ
227 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:56:42.71 ] >>225 お前は誰だよw文脈依存な書き込みするならコテつけろw
228 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 21:59:12.10 ] モナドの出番だな
229 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 22:18:45.82 ] >>226 だったらアンカーを適切に付けろ こっちはモナドを勉強中なんだから何に対しての何の意見なのか全く分かんねーよ で本題だが、すいませんでした、>>216 は参考になります これから他の言語と比較して理解を深めようと思います
230 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 22:32:03.03 ] リストがモナドである意味が分からないのか、 内包表記がリスト以外のモナドで使える意味が分からないのか、 それとも他に難癖付けてるのか レスが錯綜してて分からん
231 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 22:37:52.14 ] 非リストのモナド内包表記の活用例というのは俺も見てみたい 実際使ったことがない
232 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 22:43:10.02 ] >>230 > リストがモナドである意味が分からないのか、 これはとても難しい問題だと直感したから、ひとまず置いておく。 > 内包表記がリスト以外のモナドで使える意味が分からないのか、 まずはこれを知りたい。 しかも、意味は難しいそうだから、まずは例を。 遊びにしか使えない例なら、そんなもので意味を探るのは無理だから、要らない。
233 名前:デフォルトの名無しさん [2012/11/04(日) 23:02:36.40 ] >>222 >Maybeの方が10000倍大事 Maybeが?ほんまかいな
234 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 23:07:02.43 ] > ほんまかいな メイビー(キリッ
235 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 23:09:02.03 ] センスNothing
236 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 23:17:29.69 ] 好きな書き方で書けば良いよ if y /= 0 then Just (x / y) else Nothing do { guard (y /= 0); return (x / y) } guard (y /= 0) >> return (x / y) [x / y | y /= 0]
237 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 23:37:47.36 ] いろんなライブラリ内で Maybe が使われているのを見るが、 [x / y | y /= 0] のような書き方を見ないのは何故だ?
238 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 23:38:52.87 ] モナド内包表記が復活したのって最近でしょ?
239 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 23:43:08.50 ] 可読性もありそう
240 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 23:50:31.34 ] そんなキモい書き方するのなんてゴルファー()ぐらいたろ
241 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 23:51:42.79 ] モナドのインターフェースを持ってるから、>>211 みたいに do形式や内包表記さらにはアプリカティブファンクターの式なんかの好きな書き方ができるんだよね
242 名前:デフォルトの名無しさん mailto:sage [2012/11/04(日) 23:53:14.08 ] >238 復活といっても GHC の言語拡張ですよ。 if y /= 0 then Just (x / y) else Nothing [x / y | y /= 0] どちらがプログラムの意味を理解しやすいかは読み手の経験によるでしょうが、 私は前者の方を使いたいですね。
243 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 00:01:01.45 ] 内包表記をリスト以外に使うのがキモいのなら > 内包表記がリスト以外のモナドで使える意味が分からないのか なんて訊くまでもないよね。 だって使えるかどうかに関わらずキモいから使わないんでしょ?
244 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 00:26:31.37 ] >>243 >>323 > 遊びにしか使えない例なら、そんなもので意味を探るのは無理だから、要らない。 [x / y | y /= 0] これが遊びでないと言うのなら、>>237 はどう説明する? なぜ書籍ではこのような書き方が紹介されない? 俺は内包表記がリスト以外のモナドで使えるのは、意味なんて何も無いと思う。 最初は、モナドだとどんなものでも内包表記ができちゃう事を発見したから、 プログラマがなんか役立つ使い方をしてくれるだろうという安直な考えで、 リスト以外にも使えるモナド内包表記が作られたんじゃないかな。 設計者自身に明確な目的なんてきっと無いでしょ。 その後、たいして上手い使い方も無いまま復活した理由が不明だが。
245 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 00:43:08.53 ] 結論ありきなら議論する意味なんて無いってだけだよ。 ていうか、書籍に書いてあるかどうかで判断したいなら こんなとこで他人に聞く必要もないだろ?
246 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 00:49:09.20 ] >>244 なんでリストで内包表記が使えるのは意味があるの? do構文があれば要らないよね?
247 名前:デフォルトの名無しさん [2012/11/05(月) 00:49:49.28 ] >なぜ書籍ではこのような書き方が紹介されない? そりゃ自分で書いてる通り、最近復活したからでしょ そのうちリスト以外でもイディオムが生まれてくるよ
248 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 04:01:00.46 ] >>236 :(;゙゚'ω゚'):内包表記って[と]で括られてるからリスト専用だと思ってた…… 今までは偽りの人生だった……
249 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 04:08:25.37 ] 本に書いてあって現場で使われているものにしか興味ないなら スレ間違えてるよな
250 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 04:19:05.02 ] エロゲの攻略法わかんなくてゲームの意義を問う というかZIPでくれと言い出す奴
251 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 05:35:28.68 ] サワーグレープセオリー
252 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 06:23:16.95 ] ghciだと:set -XMonadComprehensionsでモナド内包表記が有効になるのか これはなかなかおもしろいな
253 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 06:36:23.36 ] >>252 詳しい解説サンクス それならPerl忍者が荒らすのも分かる気がする(´・ω・`)
254 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 07:21:11.08 ] >>249 じゃあ、本は無しにしようか。 現場に限ってもいいし、 何なら HackageDB に登録されているライブラリ内に限定してもいいが、 それでもスレ違いか? プログラム言語において機能を実装するというのは、 使うことによってメリットがあると想定されるからだろう。 Haskell は実用もしっかりできる関数型言語を目指して生まれたのだから、 なおさらだ。 Haskell98 で言語仕様から消えたモナド内包表記が、 最近になってGHCの言語拡張として復活したのは、どういう意図があって? モナド内包表記が欲しいと思っていた人たちは、 どういうシーンでそれが活用できると考えていたの? その辺りが知りたい。 正直言って、>>236 の例では恩恵が実感できない。 「好きな書き方で書けば良い」という理由だけで復活したとも思えん。 それでは Perl みたいじゃないか。
255 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 07:28:03.96 ] 内包表記なんて長いコードに使うもんじゃない (長くなるならmapなりfilterなりdoなり使うべき) だから短いコードだから内包表記で書く意義が 分からないってワケじゃないだろう ってことは、こっちは>>254 様が納得する理由をエスパーしてやらなきゃ ダメってことなワケだが、なんでそんなことしてやる必要あるの?
256 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 07:28:37.24 ] >>254 >>247
257 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 07:49:04.08 ] >>254 hackage.haskell.org/trac/ghc/ticket/4370 hackage.haskell.org/trac/ghc/wiki/MonadComprehensions
258 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 12:01:23.74 ] サーセン Data.Vectorで組んで動いたコードをData.Vector.Unboxedに切り替えようと思ったんすよ そしたら急にVectorはファンクタじゃないからfmap使えないよ Probable fix 云々ってクレーム来たんすけど どゆことっすか?ファンクタでしょ?
259 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 15:54:09.94 ] >>258 メッセージ全文うpらないのは甘え
260 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:08:43.11 ] >>257 ありがと。 前者は単にモナド内包表記と同等の do 表記をいくつか例示してるだけじゃん。 誤解を恐れずに言えば、モナド内包表記の操作的意味論っぽいものを示してるだけ。 ただ、そのページに論文「Bringing Back Monad Comprehensions」へのリンクがあった。 こっちはざっと見たところ「現実的な問題提起 --> モナド内包表記による解決」 という感じで語っているような気がするから、実用的なことが書かれていそうだ。 これからじっくり読んでみるよ。 後者の方はこの論文と同名なんだが、同じもの? 至る所に訂正の跡があるのだが、最新版ってことかな? どちらにしても、「Bringing Back Monad Comprehensions」 こういう情報が欲しかったんだ。
261 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:12:58.71 ] >>258 unboxed vectorは関手じゃないよ(腹が立つのは分かる) 関手なら fmap :: (a -> b) -> Vector a -> Vector b が定義できなきゃならんけど、unboxed vectorだとb=Integerとかにできない (Unbox制約を満たさないといけないから)
262 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:21:08.08 ] 最近流行ってる関手って、そもそも何?
263 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:24:41.98 ] www.haskell.org/ghc/docs/latest/html/libraries/base-4.6.0.0/Prelude.html#t:Functor Haskellでいう関手はこれ 圏論の関手は他を当たってね!
264 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:29:59.09 ] >>261 マジすか 複雑な事情っすね 実践よりもHaskell型システムの理解に的を絞ったサイトないっすか?
265 名前:デフォルトの名無しさん [2012/11/05(月) 19:30:38.26 ] >>262 map を関手の一つと考えると、関手から自然変換まで簡単に理解できる 簡単に理解できる = 毎日30分定義とにらめっこして1週間ぐらい悩むと分かる
266 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:41:26.25 ] >>263 Functor クラスが関手のことなら、なにも漢字で書かなくてもよくない? unboxed vector は Functor クラスのインスタンスじゃないから、 と言う方がはるかに分かりやすいというか、ストレートだと思うんだが と感じるのは私だけ?
267 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:44:20.77 ] 知らんがな
268 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:52:07.99 ] >>266 定着してる訳語があるのに横文字や片仮名を使うのは宗教上の理由でできんのです、ごめんなさい
269 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 19:55:12.71 ] >>268 ギャグとしてはあまり面白くない
270 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:02:00.78 ] 女だ! このスレに女が紛れ込んでるぞぉーっ! 魔女を焼き払えーっ!
271 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:04:44.17 ] 一人称を私にすると賢そうに見えるの法則
272 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:14:25.77 ] ん? Functor クラスそのものは関手なの? Functor クラスがたまたま持つ性質(種数やfmap関数など)を持つものが関手なの? たとえば Applicative なども関手? Functor クラス自身とそのインスタンスのみが関手? Functor クラスそのもののみが関手で、そのインスタンスは集合の要素みたいなもの? わけが分からなくなった・・・ >>271 一人称「私」なんて誰でも使うから、賢そうに見える要素にならないでしょ
273 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:20:11.08 ] >>272 二番目が一番近いと思う
274 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:24:02.72 ] >>273 そうだとすると、>>268 の言う「定着してる訳語」っておかしくないか? >>268 の言い方だと Functor の日本語訳が関手である、 と言っているように聞こえる
275 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:29:18.54 ] >>274 圏論でFunctorの訳語が関手だから、それ以外に訳しようがない
276 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:33:04.72 ] 圏論でFunctorと、haskellのFunctorクラスは同じもの?
277 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:38:18.43 ] わかった 今後Haskellのファンクタの意味で関手といいたい場合 いわゆる関手 と書くことにしよう
278 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:39:30.80 ] >>276 HaskellのFunctorクラスのインスタンスはある種の(圏論的な意味の)関手(の対象部分)になってる 具体的にはHask圏からHask圏への関手 逆に、ある型構築子が(圏論的な意味の)関手になっていてもFunctorのインスタンスとは限らない たとえば>>258 のunboxed vectorがそう
279 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:48:17.32 ] >>278 じゃあ、HaskellのFunctorクラスを安易に関手と言うのは、 文脈によっては危険じゃないか? どの文脈だと危険か正しく理解してる奴しか使えない訳語な感じがするが
280 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:53:08.78 ] >>279 もちろん混乱の原因になることはあるけど、 *Functorのインスタンスを関手と呼ぶ のをその論法で禁止したら、 *Monadのインスタンスをモナドと呼ぶ *Monoidのインスタンスをモノイドと呼ぶ *Numのインスタンスを数値型と呼ぶ あたりも言えなくなって不便じゃないか
281 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:53:32.47 ] 単位元と結合律を保存する高階関数は関手 という理解は正しいでしょうか?
282 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 20:59:21.14 ] >>281 「恒等関数と関数結合を保存する高階関数」と言った方が良さそう
283 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 21:09:19.73 ] 関手はFunctorではなくfmapじゃないのん?
284 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 21:12:51.87 ] >>280 なるほど、そう言われると、たしかに不便だな。 Haskell の話をしていると判りきっている時には Monad のインスタンスはモナドと言いたい。 (個人的にはFunctorのインスタンスはファンクタと言いたいが) でも、Haskell の話をしてるときに、いきなり圏論が姿を現し、 そのまま議論が進んでいくと、ややこしくならない? そういうシーンをこのスレでよく見かける
285 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 22:05:15.91 ] 271 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/05(月) 20:04:44.17 一人称を私にすると賢そうに見えるの法則 賢くみられたいからHaskellやるという法則
286 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 22:11:23.06 ] 賢く見られたいからHaskellって・・・ 賢く見られたいんならMITで博士号取るだろ普通
287 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 22:47:19.80 ] >>286 ギャグとしてはあまりおもしろくない
288 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 22:51:06.92 ] >>287 一度目はいいけど、二度やると冷める もう止めた方がいいと思うよ
289 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 23:09:11.87 ] GHC 7.6.1 の ghci 上で Conduit が動かない ghci 上で Data.Conduit系モジュールがロード処理されると、 エラーが出る。 Loading package conduit-0.5.2.7 ... linking ... <interactive>: internal error: R _X86_64_PC32: High bits are set in 7fefb411866 for _close (GHC version 7.6.1 for x86_64_unknown_mingw32) Please report this as a GHC bug: www.haskell.org/ghc/reportabug これはバグ? 俺英語書けなくてバグ報告できないんだが、詰んだかな
290 名前:289 mailto:sage [2012/11/05(月) 23:10:49.65 ] あ、ちなみに ghc でコンパイルすれば問題なく実行できるから、詰んではないか でも色々実験して勉強しようと思ってたんだが、ghci 使えないとなると、 かなり面倒になるなぁ・・・
291 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 23:12:17.93 ] >>281-283 関手とはある圏の対象と射をもう一つの圏(自己関手の場合は同じ圏)に移すものだから、 Functorのインスタンスとfmapセットで関手と言うのが一番近い
292 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 23:37:08.23 ] >>286 =こいつ図星 こいつ>>285 のレスに図星しすぎれレスしてやがる だいたいのやつは必死に悔しくても反応したら負けっていう考え持ってるから食いつかない こいつは食いついた正直者
293 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 23:41:21.48 ] >>290 たぶんWindows固有の問題 LinuxかMacを使うとか、Windowsなら仮想マシン上でLinux使えば、問題が出ない可能性が高い この手の開発はUnix系メインでやっててWindowsはオマケのことが多いから、 細かいとこで目の行き届かない不具合があったりする
294 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 23:41:35.04 ] 俺、Haskellぐらいしかまともに書ける言語ないんだが、 正直それはそれで非常に恥ずかしい思いをしている
295 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 23:41:49.81 ] ○○をしたら負けとか偉いやつが言ったらすぐ真似をして ○○をしなくなるのが情弱 Matzみたいなのが「これから来る言語」 Haskellとか言ったら すぐ真似して Haskellしだすやつが情弱 >>286 =こいつ最高に図星
296 名前:デフォルトの名無しさん mailto:sage [2012/11/05(月) 23:44:42.21 ] Haskellの話しようぜ
297 名前:289 mailto:sage [2012/11/05(月) 23:45:16.42 ] >>293 ありがと とりあえず勉強だけなら処理速度は要らないから、 vm player に linux 入れて、そっちでやってみるよ
298 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 00:53:45.21 ] 実用度外視なんだから、偉いやつが言ったことをすぐ真似してHaskellやるのが正解 どうせネットで偉い人のマネする以上の教育課程が揃ってないんだから
299 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 07:18:02.31 ] 教育してもらわなきゃプログラミングすら出来ないアホは まったく向いてないからリアル土方に転向したほうが良いよ?
300 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 07:31:54.96 ] 侮辱がただの賛意表明になっているような 元からそのつもりだったのか? いや、そういう文体には見えないなあ 要するに>>299 はアホなんだろう
301 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 07:33:11.89 ] え?まじで教育が必要なの? 大学でも別にプログラミングなんて独学だっただろ? え?大学行ってないの?
302 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 07:34:45.38 ] 俺が言いたいのは>>298 と>>299 って同じ主張じゃね? ってこと ほんとに大学行ってるの?
303 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 07:36:37.37 ] >>298 は「教育環境揃ってない = 実用度外視」 と書いてるようにしか読めんのだが 教育されなきゃ実用的なプログラミングも出来ないアホは向いてないよ
304 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 07:41:52.94 ] 話通じてないなあ・・・ 自分の発言にあとから留保つけちゃってるし まあ俺は>>298 じゃないからいいんだけどさ
305 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 07:44:55.65 ] アホが偉い人のマネすべきってのはその通りだな 自分で考える脳みそ無いし
306 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 07:48:21.06 ] GHCはRuby以下の安定性
307 名前:デフォルトの名無しさん [2012/11/06(火) 09:29:03.76 ] ∧_∧ ( ´Д`) <みなさーん、お茶が入りましたよ〜 / \ | l l | ..,. ., ., | | | _|。.:_::゜。-.;.:゜。:.:;。 ヽ \_ .。'゚/ `。:、`;゜:;.::.。:.:。 /\_ン∩ソ\ ::..゜:: ゚。:.:.::.。.。:. . / /`ー'ー'\ \ ゜: ::..゜:: ゚。:.:.:,。:.:. 〈 く / / ::..゜:: ゚。:.:.:,.:.:.:。:.:, . \ L ./ / _::..゜:: ゚。:.:.:,.:.:,.:.:.:, 〉 ) ( .::旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦. (_,ノ .`ー'旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦.
308 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 10:19:19.89 ] 298 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/06(火) 00:53:45.21 実用度外視なんだから、偉いやつが言ったことをすぐ真似してHaskellやるのが正解 どうせネットで偉い人のマネする以上の教育課程が揃ってないんだから 305 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/06(火) 07:44:55.65 アホが偉い人のマネすべきってのはその通りだな 自分で考える脳みそ無いし
309 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 10:58:32.92 ] Matzってそれほど「偉いやつ」だっけ
310 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 14:23:00.82 ] Perl忍者最近見ないな
311 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 17:31:28.63 ] >>261 じゃあfmap的なことはどう実現したらいいんですか!?
312 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 18:24:59.42 ] >>311 Data.Vector.Unboxed.map
313 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 19:07:44.24 ] >>312 (////)
314 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 19:14:05.47 ] (////) ::
315 名前:デフォルトの名無しさん mailto:sage [2012/11/06(火) 23:10:36.99 ] (////) :: Answer -> Shame
316 名前:デフォルトの名無しさん mailto:sage [2012/11/08(木) 19:52:02.96 ] 質問です。Writerモナドというものを知ったので、前から知りたかった 遅延評価される場合のたらいまわし関数の呼び出され回数というものが知りたくて以下のように書きました。 import Control.Monad.Writer tak :: Int -> Int -> Int -> Writer (Sum Int) Int tak x y z | x <= y = do tell(Sum 1) return z | otherwise = do tell(Sum 1) tak (fst(runWriter(tak (x - 1) y z))) (fst(runWriter(tak (y - 1) z x))) (fst(runWriter(tak (z - 1) x y))) これで動くは動くんですが、引数を色々変えてもカウントが高々3でした。 少し考えてみて、再帰で呼んだ結果のカウントを捨ててるせいだろうというのは分かったのですが 改善策が思いつきません。上手い書き方があったら教えてもらえないでしょうか。 また、もしWriterでカウントするのが無理だとしたらどうするのが定石でしょうか?
317 名前:デフォルトの名無しさん mailto:sage [2012/11/08(木) 20:03:07.81 ] 入門書のリスト内包表記にガードが使えるという下りを読んで、凄い衝撃を受けた。 もしかしてHaskellって、Prologよりも抽象度が高いのかも。 実際にプログラムを作るまでになれば、泥臭いこともいろいろあるんだろうけど。
318 名前:デフォルトの名無しさん mailto:sage [2012/11/08(木) 21:19:45.25 ] >>316 関数の評価回数を知りたいだけでしたら、プロファイリングすれば簡単にわかりますよ。 コンパイル時に3つのオプション "-rtsopts -prof -auto-all" を付けて、 実行ファイルの起動時にRTSオプション "+RTS -p" を付ければ、 *.prof ファイルができるんで、それを読めばいいです。 prof ファイルの一番下の表を見てください。 1列目に関数名(変数も関数)、2列目にモジュール名とあって、 4列目の "entries" の項目が評価回数です。 例えば z を返すバージョンの tak 関数を使って、 main :: IO main = do let z = tak 3 2 1 print z を上記のようにコンパイルして実行してできた prof ファイルを見ると、 tak の評価回数は 5 と表記されています。 (実際に手計算で let z = tak 3 2 1 を簡約すると、 確かに5回 tak 関数が評価されていることが確認できます) プロファイリングの詳細は「本物のプログラマはHaskellを使う」 の第45回の記事を参考にしてください。 こういうことではなく、プログラムの中でカウントする仕組みを作るには、 という趣旨の質問でしょうか?
319 名前:デフォルトの名無しさん mailto:sage [2012/11/08(木) 21:33:42.67 ] >>316 こうすればok tak x y z | x <= y = do tell(Sum 1) return z | otherwise = do tell(Sum 1) x' <- tak (x - 1) y z ;変えた y' <- tak (y - 1) z x ;変えた z' <- tak (z - 1) x y ;変えた tak x' y' z' ;変えた
320 名前:デフォルトの名無しさん mailto:sage [2012/11/08(木) 21:46:20.04 ] >>316 がやりたいのは"遅延評価された場合"だからWriterだとマズイかも
321 名前:デフォルトの名無しさん mailto:sage [2012/11/08(木) 21:46:32.28 ] >>318 すみません、書き忘れました。 仰る通りプログラムの中でカウントする仕組みを作るには、という趣旨です。 >>319 それをやると遅延評価の場合と結果変わっちゃいませんかね?
322 名前:319 mailto:sage [2012/11/08(木) 21:57:07.69 ] すいませんでした。orz snd(runWriter(tak 100 50 0))とかやると糞時間かかりますね。 あとここちょっと違ってます。 | x <= y = do tell(Sum 1) return y; 変えた
323 名前:319 mailto:sage [2012/11/08(木) 21:59:19.20 ] ああごめん。>>322 の最後は無視して。orz
324 名前:デフォルトの名無しさん mailto:sage [2012/11/08(木) 22:33:46.28 ] >>316 Haskellは純粋だから、評価順序によって違う値を返す関数は書けない。遅延評価を前提とした呼び出し回数を数えるには、明示的に遅延評価をエミュレートする必要がある import Control.Applicative import Control.Monad.ST import Data.STRef thunk :: ST s a -> ST s (ST s a) thunk action = do ref <- newSTRef Nothing return $ do cache <- readSTRef ref case cache of Just val -> return val Nothing -> do val <- action; writeSTRef ref (Just val); return val tak :: STRef s Int -> ST s Int -> ST s Int -> ST s Int -> ST s Int tak counter ex ey ez = do modifySTRef counter (+1) x <- ex; y <- ey if x <= y then ey else do a <- thunk $ tak counter (pred <$> ex) ey ez b <- thunk $ tak counter (pred <$> ey) ez ex c <- thunk $ tak counter (pred <$> ez) ex ey tak counter a b c takCount :: Int -> Int -> Int -> Int takCount x y z = runST (do counter <- newSTRef 0 _ <- tak counter (return x) (return y) (return z) readSTRef counter)
325 名前:324 mailto:sage [2012/11/08(木) 22:35:38.37 ] あれ2chの仕様変わったの… 実体参照は適当に戻してね!
326 名前:デフォルトの名無しさん mailto:sage [2012/11/08(木) 22:36:17.95 ] >< (//)
327 名前:デフォルトの名無しさん mailto:sage [2012/11/08(木) 22:53:32.55 ] >>324 ありがとうございます、言い切ってもらえると参考になります。 今すごいH本をやっと読み終わろうかという段階なので正直難しいですが、 そのうち理解できるように精進します。
328 名前:デフォルトの名無しさん mailto:sage [2012/11/08(木) 23:43:06.04 ] >>325 インデントは全角空白派が大勝利で悔しい 仕様変更の経緯のわかるスレとかあればどなたかプリーズ
329 名前:デフォルトの名無しさん mailto:sage [2012/11/09(金) 13:58:18.49 ] ランタイムのGCっていつ行われるの? アイドル時にやってくれる?
330 名前:デフォルトの名無しさん mailto:sage [2012/11/09(金) 18:56:23.67 ] >>329 メモリが足りなくなったら
331 名前:デフォルトの名無しさん mailto:sage [2012/11/09(金) 19:22:04.75 ] -threaded付けてるならアイドル時にもやる
332 名前:デフォルトの名無しさん mailto:sage [2012/11/09(金) 19:22:21.31 ] >>330 今入力待ちで暇だなー…… あ、もう要らない領域あんじゃん スカベンジスカベンジ…… こうはならないの?
333 名前:デフォルトの名無しさん mailto:sage [2012/11/09(金) 19:23:42.68 ] >>331 あり^^
334 名前:デフォルトの名無しさん mailto:sage [2012/11/09(金) 21:15:13.21 ] 今日 -XTransformListComp なるものの存在を知ったんだけど これって需要あるの? {-# LANGUAGE TransformListComp #-} import GHC.Exts (groupWith) xs = [1,3,4,5,7,9,10,11,13] ys = [x | (x,y) <- zip xs [1..], then group by x-y using groupWith]
335 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 15:48:20.65 ] conduit-0.5.2.7 を使っています。 ライブラリドキュメントの Data.Conduit にチュートリアルがありますが、 sourceList [1..10] $$ fold (+) 0 これの結果がどうなるか調べる方法を探しています。 チュートリアルでは、恐らく ghci 上で上記の式を評価して、 55 という数字が標準出力に出力されている様子が描かれていると思いますが、 私は Windows で GHC 7.6.1 を使っているため、ghci で conduit が使えません。 試しに次のようにしてみても、コンパイルエラーが出ます。 a :: GSink Int IO Int a = sourceList [1..10] $$ fold (+) 0 main :: IO () main = print a -------------------------------- No instance for (Show (Pipe l0 Int o0 u0 IO Int)) arising from a use of `print' -------------------------------- どうすればチュートリアルのように sourceList [1..10] $$ fold (+) 0 の評価結果を数値または数字で得る、 あるいは標準出力へ出力することができるでしょうか。
336 名前:355 mailto:sage [2012/11/11(日) 16:02:03.19 ] >>355 これでできました。 a :: GSink () IO Int a = sourceList [1..10] $$ fold (+) 0 main :: IO () main = do a <- runPipe a print a なんか不親切なチュートリアルですね。 最初の sourceFile の例ではちゃんと runResourceT があるのに。
337 名前:335 mailto:sage [2012/11/11(日) 16:02:48.97 ] すいません、レス番間違っていました。 >>335 です。
338 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 18:20:04.17 ] 皆さんの思うハスケルの他の言語に対する優位性はなんですか?
339 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 18:25:43.15 ] conduit-0.5.4ならsourceList [1..10] $$ fold (+) 0で大丈夫だった それよりWindowsのghc7.6.1ではghci上でconduitが使えないというのが気になる
340 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 18:53:17.01 ] >>339 >>289 >>290 >>293 辺り
341 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 19:02:24.58 ] >>339 7日に 0.5.4 が公開されていたんですね(その前日にDLしてました) 今 0.5.4.1 にアップデートして、 sourceList [1..10] $$ fold (+) 0 の値を print してみましたが、 コンパイルエラーでした。 大丈夫だったというのは、どのようにやったのでしょうか。
342 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 19:07:49.53 ] >>338 普段感じる利点はこのあたり 大域的な型推論 直和型が簡単に表現できる(CのunionやOOPLのsubtypeと比べて) パターンマッチ(網羅性チェック、分岐と値の取り出しを同時に行える、など) 副作用のある箇所が型により分離される (LLとかよりは)実行速度が速い
343 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 19:10:49.18 ] ほむほむ。
344 名前:341 mailto:sage [2012/11/11(日) 19:11:52.88 ] >>339 あぁ、分かりました。 (sourceList [1..10] $$ fold (+) 0) >> print こういう事ですね。 これならできました。 もしかして、これならアップデートしなくてもできていたかも知れません。 ところで、conduit を 0.5.2.7 から 0.5.4.1 へ "cabal install conduit" でアップデートしたのですが、 ライブラリドキュメントの方はこれでは更新されないのでしょうか。 (デフォルトなら ・・・/AppData/Roaming/cabal/doc/index.html にインストールされるものです) ドキュメントの表記の方は 0.5.2.7 のままなんです。
345 名前:341 mailto:sage [2012/11/11(日) 19:18:31.91 ] >>344 誤 (sourceList [1..10] $$ fold (+) 0) >> print 正 (sourceList [1..10] $$ fold (+) 0) >>= print ライブラリドキュメントの方はトップの目次のところだけでなく、 内容も、例えば Data.Conduit のページの上部にも "conduit-0.5.2.7: Streaming data processing library." と書かれていて、更新されていません。 こういうものなのでしょうか。 Cabal のパッケージのバージョンは、 (規則に従うなら)4つ目の番号の変更は、 互換性は保っているがAPIが変更されている事になるので、 ドキュメントも変更しないとまずいような気がするのですが・・・
346 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 20:02:42.53 ] ghciで λ> sourceList [1..10] $$ fold (+) 0 って入力しただけだけど 省略 >>= printと同じ事か ドキュメンテーションが更新されないのは多分haddockのバージョンとghcのバージョンが違うから生成に失敗してるとかが考えられる
347 名前:341 mailto:sage [2012/11/11(日) 20:46:24.73 ] >>346 > 省略 >>= printと同じ事か なるほど、たしかに。 > 多分haddockのバージョンとghcのバージョンが違うから haddock.exe は ghc 7.6.1 に元々入っているのですが、 これが違うという事でしょうか。 ちなみに、ghc の bin ディレクトリには haddock.exe とは別に、 haddock-7.6.1 という名前の謎のファイルもあります。 (バイナリエディタで見てみると、形は実行ファイルの様ですが) どうも、ghc 7.6.1 は謎の挙動かちらほらとありますね・・・
348 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 22:43:59.93 ] インストールした直後にcabalでconduit入れた時になんかhaddockのバージョンがおかしいって警告出たから cabal install haddockで入れなおしたらconduitのドキュメント作ってくれるようになった これはcabal/binにhaddockがあるからそっちが優先されるのが原因だけど
349 名前:デフォルトの名無しさん mailto:sage [2012/11/12(月) 02:11:31.23 ] >>342 Javaのような言語で書かれた業務アプリ、ドカタの世界にもこれから進出してきたりしますかね
350 名前:デフォルトの名無しさん mailto:sage [2012/11/12(月) 06:17:52.78 ] >>349 早くて20年後ぐらいじゃね?
351 名前:デフォルトの名無しさん mailto:sage [2012/11/12(月) 20:15:17.94 ] Javaで書かれた商用ソフト見たことがない ハードについてるドライバは何度かある
352 名前:デフォルトの名無しさん mailto:sage [2012/11/12(月) 20:22:24.00 ] >>351 俺はひとつだけ知ってる astah* Haskell で書かれた商用ソフトってあるんかな うちは社内ツールではあるけど
353 名前:デフォルトの名無しさん mailto:sage [2012/11/12(月) 20:29:59.56 ] そういえばperlやjavascriptで書かれた商用ソフトも見たこと無いな。
354 名前:デフォルトの名無しさん mailto:sage [2012/11/12(月) 20:33:15.19 ] コンパイルできない言語ってソースをそのまま売ることになると思うけど、それって商売になるのだろうか
355 名前:デフォルトの名無しさん mailto:sage [2012/11/12(月) 20:37:06.13 ] ソースを売れっていうのは普通にあるでしょ
356 名前:デフォルトの名無しさん mailto:sage [2012/11/12(月) 20:43:17.14 ] Android 用有料アプリは Java で書かれた商用ソフトである という認識でいいのか?
357 名前:341 mailto:sage [2012/11/12(月) 22:44:21.87 ] >>348 Haddock を cabal install で入れてから、 cabal install --reinstall Conduit してもダメでした。 (ghc\bin ディレクトリより cabal\bin ディレクトリの方が 優先的に検索されるように設定しましたが・・・) cabal\bin の Haddock.exe を ghc\bin へコピーしてみましたがダメでした。 よく見たら、cabal\doc 内には conduit-0.5.2.7 と conduit-0.5.4.1 があったので、 conduit-0.5.2.7 の方を適当にリネームして、index.html もリネームし、 この状態で cabal install --reinstall Conduit してみたら、 ドキュメントの目次やコンテンツの Conduit のバージョンが ちゃんと 0.5.2.7 に更新されました。 Haddock の更新は必要条件だったのかよく分かりませんが、 とりかくドキュメントが正しく更新できて良かったです。 お騒がせしました。
358 名前:デフォルトの名無しさん mailto:sage [2012/11/13(火) 20:32:21.56 ] >>351 Minecraft
359 名前:デフォルトの名無しさん mailto:sage [2012/11/14(水) 13:53:30.81 ] 何だよ type family Mutable v :: * -> * -> * Mutable v s a is the mutable version of the pure vector type v a with the state token s って リワハじゃ習わなかったぞ
360 名前:デフォルトの名無しさん mailto:sage [2012/11/14(水) 15:21:27.75 ] トップレベルの関数の型宣言で Unbox a => ……としたとして letやwhereと続けた内部関数にも型宣言をつけるとします このとき、その宣言でもトップレベルの a と同じ型を指定する為にはどうしますか?
361 名前:デフォルトの名無しさん mailto:sage [2012/11/14(水) 18:30:25.04 ] 関数を生成する関数 :: Unbox a => 内部関数の型 -> トップレベル関数の型 トップレベル関数 = 関数を生成する関数 内部関数 where 内部関数 = …
362 名前:デフォルトの名無しさん mailto:sage [2012/11/14(水) 19:30:01.00 ] >>360 Lexically scoped type variables の事かな
363 名前:デフォルトの名無しさん mailto:sage [2012/11/19(月) 07:06:57.78 ] 関数内使わないほうが読みやすく感じる whereって必要ですか?
364 名前:デフォルトの名無しさん mailto:sage [2012/11/19(月) 07:07:41.13 ] s/関数内/関数内の関数定義/
365 名前:デフォルトの名無しさん mailto:sage [2012/11/19(月) 07:37:36.32 ] さすがに一時束縛なしはハードモードでないの? letのほうが読みやすいということもあまりないでしょう
366 名前:デフォルトの名無しさん mailto:sage [2012/11/19(月) 08:06:27.68 ] 関数内関数は自由変数が多くて理解するのが難しいです トップレベルの関数に持ち上げてしまって、モジュールの機能で外部からは隠して、 自由変数になっていたところは明示的に引数として渡すほうが良いのではないかと
367 名前:デフォルトの名無しさん mailto:sage [2012/11/19(月) 08:09:12.81 ] ケースバイケースなんで whereが要る要らないの話にはならないと思う
368 名前:デフォルトの名無しさん mailto:sage [2012/11/19(月) 08:13:31.56 ] それはね、長い関数が読み難いだけなんだよ
369 名前:デフォルトの名無しさん mailto:sage [2012/11/19(月) 18:06:19.91 ] 自由変数の追いにくさと引数渡しの煩雑さを天秤に掛けた結果、 多くの人はwhereを大量に使うことを選択している 何を読み難いと感じるかは個人差が大きいから、 多数派と違う感性を持ってると生きづらいね という結論が嫌なら、「読みやすく感じる」よりも客観的な論拠を挙げてください
370 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 00:03:10.08 ] プログラムは書くことより読むことのほうが難しいし読むことの方が多い whereはプログラムを書きやすくできるが読みにくくする whereを使うのは甘え
371 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 06:58:26.14 ] >>366 関数内のスコープに限定するより モジュール内スコープに広げた方が読みやすい? 頭大丈夫?
372 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 07:07:32.45 ] >>370 頭の中で、読みにくいコードを読みやすいコードに書きかえればいいだろ それができる人は読むことより書くことが多い
373 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 07:38:40.46 ] >>363 末尾再帰覚えてない人かな? where使わず書いたら、引数の数が違うだけで同じ機能の関数が沢山出来上がってしまう sum ns = sum' ns 0 where sum' [] v = v sum' (n:ns) v = sum' ns (n + v) whereが無ければsum関数とsum'関数の両方が関数を使う側に公開されるか、末尾再帰関数作る度にモジュール書き換えが必要になる
374 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 08:10:24.50 ] sum ns = let sum' [] v = v sum' (n:ns) v = sum' ns (n + v) in sum' ns 0
375 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 09:16:11.00 ] >>372 君、仕事でプログラム書いたことないでしょ?
376 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 09:29:43.91 ] どっちも同じだと思えば両方読めるようになるのに、ノイズが気になって読めない ノイズが少ない方が優れているといってノイズばかり見ている 雑音を無視したら優劣の概念がなくなってしまう 優劣を気にするとデジタルが読めなくなる
377 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 09:57:34.35 ] 仕事でHaskell使った事ないわーw
378 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 14:25:22.30 ] そもそも、お前がいう「仕事」って、受注開発(の賃金労働)のことだろ? 自分で作ったサービスで始める仕事(ビジネス)だったら、言語はなんだっていいんだよ。 ドヤ顔で「仕事でhaskell使ったことないわ」とか恥ずかしすぎるわw
379 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 14:26:08.12 ] 会社に小遣いもらってる分際が偉そうに、と思うね。
380 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 14:45:50.00 ] 仕事で戦車使ったことないわ
381 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 15:35:16.08 ] ああ、Haskellerってこういうのばっかなのね
382 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 16:26:57.23 ] まだ平和な方のスレですよ
383 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 18:16:34.72 ] >>366 トップレベルにリフトすれば自由変数が減るかのような錯覚はどこからきた?
384 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 18:21:28.91 ] さすがに>>378-379 は引くわ
385 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 18:30:03.16 ] 関西型プログラミング言語
386 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 18:49:25.20 ] なんでやねん
387 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 22:50:08.77 ] Haskell使う案件ってどこに行けばあるんだろうな。
388 名前:デフォルトの名無しさん mailto:sage [2012/11/20(火) 23:02:02.53 ] Haskell を使う事案が発生しました
389 名前:デフォルトの名無しさん mailto:sage [2012/11/21(水) 01:14:53.06 ] >>387 大学
390 名前:デフォルトの名無しさん mailto:sage [2012/11/21(水) 07:23:50.52 ] >>387 実際にどのような仕事があるか知らんが、 君には "haskell commercial OR industry" でググる知恵はないのか
391 名前:デフォルトの名無しさん mailto:sage [2012/11/21(水) 09:17:06.66 ] ちえをくれ
392 名前:デフォルトの名無しさん mailto:sage [2012/11/22(木) 02:43:01.30 ] おいおい、haskell使った仕事が貰えないなら、 自分で始めればいいだけだろ。 仕事を作るのも仕事のうち。
393 名前:デフォルトの名無しさん mailto:sage [2012/11/22(木) 06:04:12.01 ] ま、自分が知らないからって無いで押し切るのは 一つの生き方ではあるわな
394 名前:デフォルトの名無しさん mailto:sage [2012/11/22(木) 07:38:46.45 ] >>392 いや、維持保守を引き継ぐ人たちがHaskell使えないのに Haskellのソースを残すわけには行かないだろ。
395 名前:デフォルトの名無しさん mailto:sage [2012/11/22(木) 09:54:55.62 ] Cに変換して納品