1read 100read
2013年01月プログラム28: 関数型プログラミング言語Haskell Part20 (926) TOP カテ一覧 スレ一覧 2ch元 削除依頼
★★Java質問・相談スレッド158★★ (743)
C言語なら俺に聞け(入門編)Part 111 (1001)
Eclipse統合M33【Java/C++/Ruby/Python/Scala】 (717)
ゲームプログラムなら俺に聞け27 (296)
OpenGLスレ Part19 (206)
Java低速GUI Swing & JavaFX 10 (579)

関数型プログラミング言語Haskell Part20


1 :2012/10/17 〜 最終レス :2013/01/16
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 :
関連書籍
・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 :
関連リンク
・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 :
おつ

5 :
前スレの流れで一言。
関数型の考え方はExcelのおかげで充分社会に浸透していると思う。
Excelシートを使って統計や簡単な計算が出来る人は大勢いるが、同じことを
同じような時間で手続き型言語で出来る人が同程度いるとは思えない。
よって、前スレの>>988に同意

6 :
>>5
>>988には同意だが、年寄り向きではないね。記号を使い過ぎで忘れてしまう。
Smalltalk や Prolog とはちょっと違う。

7 :
■ 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 :
てか、プログラミング学ぶときって、そんなに学校の勉強や日常生活のアナロジーで考えるかなあ
たしかにそういう入門書は多いけどさ

9 :
それより学校の国語はふつうに宣言的だし日常で使う言葉も宣言的
宣言的な考え方は認識や言葉の基本。身近すぎて>>990が気づいてないだけでは

10 :
宣言的、の意味を理解してないのかも

11 :
c#だと
Enumrator.Range(1,5).Where(x => 2 < x && x < 5).Select(x => x*2);
だよ。
1から5までぐらいだったら文字数増えちゃうけどね。

12 :
>>8
アナロジーで考えるという事ではなく、染みついた思考法・問題解決法

13 :
>>9
宣言的の意味が違う。
出くわした問題や課題を解決しようとする時に、
素直に頭に思い浮かぶ解決方法としての宣言的な考え方の話。
問題や周辺環境を宣言的に表現して解を導く子どもはあまりいない。
たいていの子は問題解決への(直接の)手続き・手順を考える。

14 :
新スレおめでとうございます:(;゙゚'ω゚'):

15 :
>>13
えーそんなことないでしょ。推論は宣言的な方法で問題解決してるじゃない
解決方法としての宣言的な考え方が日常的でないなんていうのはおかしい

16 :
後出しの独自定義の相手すんなよ
「関数型言語は自然な人間の思考に反する」とか言うために
子供がどう考えるかとか話を拡げて泥沼化したいだけだろ
変な脳科学みたいに

17 :
茂木は今関係ないだろ!

18 :
宣言的ってMakefileのトップレベルの部分書くときみたいなのですか?

19 :
>>16
「関数型言語は自然な人間の思考に反する」と言ったことは一度もない。
人間の思考は柔軟なので、訓練すれば誰でも色々な考え方が自然にできるようになる。
先のは問題や課題を解決しようとする時、かつ、子どもの話だ。
子どもは思考をする訓練をまだそれほど受けない。
大人に向けて成長していくうちに、授業や生活の中で自然に
宣言的な考え方をする訓練を徐々に受ける。
(教師側も宣言的な考え方を学ばせようと意図しているわけではない)
社会人になる頃には、たいていは宣言的な考え方も、
手続き的な考え方もやろうと思えば普通にできるようになってる。
しかし、意識してやっているわけではないので、
そのままでは Haskell でプログラムするのにたいして役には立たない。
問題や環境を意識して宣言的にとらえたり翻訳する練習を重ねないと、
プログラムは難しい。
ただ、考え方自体はすでに慣れているので、
宣言的な記述を見たときにそれを解釈するのはそれほど苦ではない。
また、そのために、問題を宣言的にとらえるのも、
ある問題で合点がいけば他の問題もスルスルと合点がいく事も起こり得る。
Haskell を初めた頃は難しかったが、
ある日突然視界が開けたという経験をする人が多いのは、
そのことも少なからず関係しているのではないかと私は思う。

20 :
>>19
あなたが>>990なら、言っていることがずいぶん変わってるが。

21 :
Haskell である日突然視界が開けるようになるためには型システムを理解しないとね。
宣言的とか関係ないんじゃね?

22 :
>>21
型システムを理解しないとね、は自分も経験してるから簡単に同意できる。
宣言的とか関係ないんじゃね? は、根拠を示してくれ。
関係ないと感じた経験がないから、じゃね?と言われても
このままでは同意も反対もできん。

23 :
>>20
指摘はもっともだ。
>>990
> 静的な、宣言的な考え方なんて、手続き的な考え方に比べれば、
> 学校教育の現場でほとんど出くわすことはないだろう。
> たとえ出くわしても、意識しなければ素通りしていくだけで、身にならない。
これは言い過ぎた。
出くわすし、成長と供に授業の中でそれとなく訓練を受けてはいる。
しかし、いかんせん、そうだとは意識していないのだから、
そのままでは Haskell のプログラムをする事に関してはたいして役に立たない。
宣言的な考え方に触れた時にそれを理解できる体勢にはなるが、
そういう考え方を自分から進んでするまでには至らないだろう。
そして、自分から進んで宣言的に考える事に慣れなければ、
Haskell でのプログラムが C や Java より簡単とは思えないのではないだろうか。
自分で宣言的に考える事ができなければ
Haskell のプログラムはいつまで経ってもしっくりこないと思う。

24 :
三行以内にまとめろ

25 :
諸君、議論したまえ

26 :
>>24
今回の件では3行以内でレスするのは今の私には無理だ。
どうしても3行以内にしてほしいのなら、
もうレスをやめざるを得ない。

27 :
>>25
議題なに?

28 :
本日の議題: 「宣言的」とはどういう意味か

29 :
>>26
3行とか関係なしに、もうレスやめていいよ

30 :
>>29
了解した

31 :
やると言ったらやるのが宣言的
できるならやる、できないならやらない、は宣言的ではない
何ができるかよりも何をするべきかを重視する

32 :
たとえば連立方程式の解を求めよ、という問題に対して
どう解くのが宣言的なのよ?

33 :
>>32
宣言的には解けない

34 :
とにかく解いたと仮定する
矛盾するまで仮定するのをやめない

35 :
こういうのは宣言的っぽいと思うんだが、どう?
囲碁を例に極簡単に示すと
iterateF :: a -> [a -> a] -> [a]
iterateF = scanl (flip ($))
-- ゲームの進行状態とは、初期状態から交互に着手したものである
progressStatuses = iterateF initialStatus (cycle [blackMove, whiteMove])
-- 終局状態とは、ゲームの進行中に投了するか、着手できなくなるか、千日手になった時である
eventualStatus = find (isResigned || isFinished || isRepeated) progressStatuses

ほぼ自己説明的だから本当はコメントなんて要らんと思うが一応書いておいた。
***Status 系は今の盤の状態の他に、一つ前の盤の状態とか、
終局理由の情報も含まれてる代数データ型。
あと、ユーザー入力はどうすんの? とかいう話はとりあえず無し。


36 :
囲碁では千日手は簡単に作れる
これは宣言じゃなくて発見

37 :
…?

38 :
もしかしたら最新の GHC では取り除かれているかも知れませんが、
下記のようにパターンの中で簡単な計算をするのは
どういう名前の言語拡張でしたっけ?
f :: Int -> Int -> Int
f (n + 1) x = ・・・

39 :
宣言:その分野のプロでも知らない用語を定義する
発見:定義しなくてもそのうちわかる

40 :
>>34
つまり、アルゴリズムというものは、宣言的ではあり得ない?

41 :
例えば、宣言してもしなくてもアルゴリズムが存在する場合
それは宣言とは全く関係ないから宣言的ではない
黙っていても存在感があるものは宣言的ではない
言い続けなければ消えてしまいそうなものは宣言的

42 :
ワロタww

43 :
Haskellで実用的なもの作ってみろよ
ほかの言語でもできるから

44 :
>>40
「アルゴリズムとはチューリングマシンの計算表のことだと考えよう!」

45 :
宣言的っていうのやめて静的っていえばいいんじゃね
現に宣言的型とはいわないだろ 静的型だろ

46 :
終動負荷的な静的筋力トレーニング

47 :
今ここで議論の真似事をしている間だけの限定でいいから、
宣言的という言葉の意味をはっきり定義してくれ
じゃないとまじめな議論にならんだろ

48 :
A とは B のことだ。
というような文言の羅列になるのが宣言的なのでは。

49 :
オブジェクトなどの羅列ではなく文言の羅列なのか

50 :
>>49
この文脈で言うオブジェクトってなにを指す?

51 :
>>50
メモリ領域などを抽象化したものかな

52 :
メモリ領域などを抽象化ものの羅列って、意味が分からん
ちなみに、Haskell の変数は特定のメモリ領域に付けられたラベル(名前)じゃないよね

53 :
>第1の定義によれば、ある出力を得るにあたってそれを作成する方法ではなく、出力の性質を記述することを「宣言型」と称する。
>別の定義では、純粋関数型言語/論理プログラミング言語/制約プログラミング言語で書かれたプログラムを「宣言型」と称する。

54 :
>>52
そうだよね
特定したくないから抽象化したんだよね

55 :
>>54
特定したくないから抽象化したって、何か勘違いしてないか?
Haskell の変数は、値が格納されたメモリ領域に付けられたラベルではなく、
「値に付けられたラベル」だぞ。
let a = 17
というのは、17 という値の別名が a ということだ

56 :
>>53
これはPrologの簡単なプログラムですが、
http://nojiriko.asia/prolog/olympic.html
A とは B のことだ。ではなく例えば、
1888とアテネは夏期オリンピック関係にある。
という文言に相当するものの羅列と見做すことができる。
これも全体として宣言的と言える。

57 :
>>55
特定の値ではなく抽象的な値にラベルをつけるよ
まだ値がわからない段階でもラベルをつける

58 :
おー、ごめん。
夏期オリンピック(1996,アテネ).
1988ではなくて、1996だった。さっきjavaの宿題スレにも
同じテーマのことを書き込んでその時点から勘違いをしていた。

59 :
さらに間違い。1996年ではなくて、1896年です。すみません。

60 :
>>52 は「変数は特定のメモリ領域に付けられたラベルではない」と言ってる
>>54 は「そうだよね}と同意し「特定したくないから抽象化したんだよね」と言ってる
>>54 の言う「特定したくない」というのは、メモリ領域を特定したくないから、
と読み取れないか?

61 :
もっとオリンピックに詳しい人に聞けばいいのに
プログラマーがオリンピックを宣言するのはなぜなのか

62 :
>>61 この問題の解答の一部を切り取っただけだから。
http://nojiriko.asia/prolog/j72_387.html

63 :
RWH 読んでて型構成子って何かと思ったら、型コンストラクタかよ。

64 :
>>38
n+kパターンはHaskell98の仕様にあったが、Haskell2010で取り除かれた。
GHCのフラグには (No)NPlusKPatterns がそれかね。

65 :
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 :
単相性制限はその後どうなりましたか?
望まれない子の将来が気になります

67 :
>>64
ありがとうございます。

68 :
RWH、Maybe の箇所、唐突に Just 使って、しかも結局 Just の説明皆無かよ。

69 :
RWHって文章の構成悪いよね
説明なしにいきなり初出の単語が出てくるし話はあっちこっちに逸れまくり
Haskellとかコンピュータとかの枠に限らず一般的な書籍としてかなり悪いほうだと思う

70 :
でも他の書籍やネットで基礎をしっかり学んでおけば、
それほど苦にならないと思うが

71 :
これから学ぶ範囲の知識について他で学習しておかないと理解に苦しむような本だったら
学習のための本としての役割を果たしていないと思うけどね

72 :
「理解に苦しむ」って、今回の件ってそれほど大げさなことかな。
あれ? 何だろ? って思ったら、まずは調べてみればいいいじゃん。
Just なんてその本にしか載っていない特別に物でもないんだし。
他の本でもそういうの色々あるよ。
とくに説明もなく新しい単語や概念が出てくるのなんてしょっちゅうだ。
そんなところでいちいち躓いて憤ってたらきりがないよ。
それに改善点を指摘するなら、ここにじゃなくて、出版社や著者にでしょ。

73 :
Haskellを本格的に使いこなそうと思ったらRWHのレベルまでは知っておく必要があるからね
他の入門書はとりあえずHaskellを知る程度のものでしかない
RWHに代わるものが現れるまではとりあえず必要なものだ

74 :
GHC 7.6.1 って、もしかして32bitアプリは作れない?

75 :
>>66
何も変わってないよ。Haskell2010に入ってる
ただしGHC 7.8からghciではデフォルトで外されることになった
http://hackage.haskell.org/trac/ghc/ticket/3202

76 :
>>75
遂に白河の清きに魚の住み兼ねて
元の濁りの田沼に戻るのですね!

77 :
MonomorphismRestrictionのどのへんに白河の清き要素があるのか気になる

78 :
どなたか! この中にMonomorphismRestrictionを擁護してくださる方はいらっしゃいませんか!?

79 :
型システムわからん
良かれと思って型宣言したらコンパイル通らなくなる
rigid type variable bound by 云々言い出して
俺の善意を踏みにじりやがる


80 :
>>79
どんなコードでそのエラーが出た?
そのエラーには「Could not deduce 〜」というのもあった?

ちなみに型は、元々コンパイルが通っていたコードに
良かれと思って後から書き加えるものではないよ。
テスト駆動がまずテストを書くのと同じように、まず型を書くんだよ。
それから本体を「型に合わせて」書くんだ。

81 :
>>79
もしかしてローカル変数に多相型の宣言付けてエラーもらってる?
それなら、ローカル変数の型宣言の中では、外の型変数を(ScopedTypeVariable拡張なしでは)
使えないということを覚えておけばいいよ

82 :
>>80
>テスト駆動がまずテストを書くのと同じように、まず型を書くんだよ。
そんなの場合によるだろ。糞どうでもいい

83 :
>>82
どのような場合に先の型を書き、
どのような場合に後に型を書くと良いのでしょうか?
何か簡単な事例を挙げていただけると助かります。

84 :
どんな場合によるのか興味ある

85 :
じゃあ俺も興味ある

86 :
me too

87 :
母さんビール

88 :
>>87 ← 意味判らない

89 :
haskellには(式以外の)文がない・・・って嘘じゃね?

90 :
>>89
そう思う根拠は?

91 :
>>87
そう思う根拠は?

92 :
ifも式、letも式。ではwhereは式?

93 :
そもそも式以外の文がないってどこ情報よー

94 :
>>83
ただちに書かなくていいことは後で書く
テスト駆動も、制約に合わせて書くというより
関係ないコードを書かないことで間違いを減らしている気がする

95 :
>>83
好きにすればいいと思うけど、俺の基準を挙げるなら、
トップレベルの定義は先に思い付いた方から書く
・普通は型の方が簡単なので型から書くことが多い
-- | 標準正規分布に従う乱数を生成する
randomNormal :: StdGen -> (Double, StdGen)
・定義が頭にあるのに型がすぐに思い付かないor面倒なら定義から
forceTell x = rnf x `seq` tell x
forceTell :: (MonadWriter w m, NFData w) => w -> m ()
ローカル変数は定義から書く。型は必要なときだけ後から書く

96 :
>>92
そもそも、「式」とは何?
それをはっきり定義しないと、where が式なのかどうか判断できないだろ

97 :
Haskell Reportの言葉遣いに従うなら簡単
・whereは式じゃない。宣言やcase選択肢の一部
・Haskellに「文」は存在する。do式の中に並んでいるのがそれ

98 :
俺はグローバルでもローカルでも型から先に考えるな。
書くかどうかは気分(ローカルで型推論がうまく働かなきゃ書く)。
>>80 の型から先に書くというのは、そういう意味で俺は無意識に拡大解釈したけど、
例に出したテスト駆動の方は実際に書かなきゃ意味ないなぁ、どうなんだろ。
(テスト駆動の方も、コードの内容よりテストから先に「考える」と言えばそうだろうが)

99 :
where は節

SQLなら

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
OpenWatcom C++ (741)
JavaScriptスレ2 (623)
GARMIN社のGPSのプログラム (652)
バージョン管理システムについて語るスレ9 (312)
【Intel】OpenCV総合スレ 4画素目【画像処理】 (551)
【.NET】F#について語れ2【OCAML】 (360)
--log9.info------------------
消えたコテを偲ぶスレ (207)
【計略】あなたが企む天下三分の計【謀略】 (662)
☆心に残る三戦名言集 (858)
【歴史編纂】 三戦板正史 【正しい歴史】 (813)
中国中央電視台の三国志について語れ 7 (411)
【馬氏の五常】馬謖と姜維【天水の麒麟児】 (214)
一部の信者がうざい武将 (228)
三戦板住人が選ぶ懐メロ邦楽名盤1000選 (229)
【第二次黄巾の乱】 官職市場4 【鎮圧後の諸侯会談】 (497)
三戦住人で戦国時代を運営するスレ (641)
諸葛瞻と閻宇は何をしたかったのか? (491)
みんなで決める武将能力(正史三国志編)5 (589)
NHK人形劇三国志 第五回 (703)
福島正則って最低のクズだよね (473)
泣いて馬超を斬る (291)
趙雲最強説 (815)
--log55.com------------------
【リステップ】Re:ステージ!プリズムステップ part1
【SNKAS】 SNKオールスター part8
【ガルパン】ガールズ&パンツァー あつまれ!みんなの戦車道!! Part27
【アズレン】アズールレーン Part3702
【FEH】ファイアーエムブレム ヒーローズのんびりスレ part341
2chブラウザ「ChMate」質問スレ Part61
【FEH】ファイアーエムブレムヒーローズ アンチスレ Part26【クソ】
【キュアぱず】 プリキュア つながるぱずるん part59【隠蔽体質不誠実糞運営】