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 ] 日記