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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
2デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2012/10/17(水) 08:32:15.59
おつ
5デフォルトの名無しさん:2012/10/17(水) 09:31:32.10
前スレの流れで一言。

関数型の考え方はExcelのおかげで充分社会に浸透していると思う。

Excelシートを使って統計や簡単な計算が出来る人は大勢いるが、同じことを
同じような時間で手続き型言語で出来る人が同程度いるとは思えない。

よって、前スレの>>988に同意
6デフォルトの名無しさん:2012/10/17(水) 09:54:00.21
>>5
>>988には同意だが、年寄り向きではないね。記号を使い過ぎで忘れてしまう。
Smalltalk や Prolog とはちょっと違う。
7デフォルトの名無しさん: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デフォルトの名無しさん:2012/10/17(水) 11:36:23.05
てか、プログラミング学ぶときって、そんなに学校の勉強や日常生活のアナロジーで考えるかなあ
たしかにそういう入門書は多いけどさ
9デフォルトの名無しさん:2012/10/17(水) 13:03:44.79
それより学校の国語はふつうに宣言的だし日常で使う言葉も宣言的
宣言的な考え方は認識や言葉の基本。身近すぎて>>990が気づいてないだけでは
10デフォルトの名無しさん:2012/10/17(水) 18:04:45.34
宣言的、の意味を理解してないのかも
11デフォルトの名無しさん: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デフォルトの名無しさん:2012/10/17(水) 20:39:30.53
>>8
アナロジーで考えるという事ではなく、染みついた思考法・問題解決法
13デフォルトの名無しさん:2012/10/17(水) 21:09:16.38
>>9
宣言的の意味が違う。
出くわした問題や課題を解決しようとする時に、
素直に頭に思い浮かぶ解決方法としての宣言的な考え方の話。

問題や周辺環境を宣言的に表現して解を導く子どもはあまりいない。
たいていの子は問題解決への(直接の)手続き・手順を考える。
14デフォルトの名無しさん:2012/10/17(水) 22:58:27.86
新スレおめでとうございます:(;゙゚'ω゚'):
15デフォルトの名無しさん:2012/10/18(木) 00:05:08.05
>>13
えーそんなことないでしょ。推論は宣言的な方法で問題解決してるじゃない
解決方法としての宣言的な考え方が日常的でないなんていうのはおかしい
16デフォルトの名無しさん:2012/10/18(木) 00:56:42.35
後出しの独自定義の相手すんなよ

「関数型言語は自然な人間の思考に反する」とか言うために
子供がどう考えるかとか話を拡げて泥沼化したいだけだろ
変な脳科学みたいに
17デフォルトの名無しさん:2012/10/18(木) 04:28:28.67
茂木は今関係ないだろ!
18デフォルトの名無しさん:2012/10/18(木) 04:31:04.26
宣言的ってMakefileのトップレベルの部分書くときみたいなのですか?
19デフォルトの名無しさん:2012/10/18(木) 07:53:24.86
>>16
「関数型言語は自然な人間の思考に反する」と言ったことは一度もない。
人間の思考は柔軟なので、訓練すれば誰でも色々な考え方が自然にできるようになる。

先のは問題や課題を解決しようとする時、かつ、子どもの話だ。

子どもは思考をする訓練をまだそれほど受けない。
大人に向けて成長していくうちに、授業や生活の中で自然に
宣言的な考え方をする訓練を徐々に受ける。
(教師側も宣言的な考え方を学ばせようと意図しているわけではない)

社会人になる頃には、たいていは宣言的な考え方も、
手続き的な考え方もやろうと思えば普通にできるようになってる。

しかし、意識してやっているわけではないので、
そのままでは Haskell でプログラムするのにたいして役には立たない。
問題や環境を意識して宣言的にとらえたり翻訳する練習を重ねないと、
プログラムは難しい。

ただ、考え方自体はすでに慣れているので、
宣言的な記述を見たときにそれを解釈するのはそれほど苦ではない。
また、そのために、問題を宣言的にとらえるのも、
ある問題で合点がいけば他の問題もスルスルと合点がいく事も起こり得る。

Haskell を初めた頃は難しかったが、
ある日突然視界が開けたという経験をする人が多いのは、
そのことも少なからず関係しているのではないかと私は思う。
20デフォルトの名無しさん:2012/10/18(木) 08:30:28.87
>>19
あなたが>>990なら、言っていることがずいぶん変わってるが。
21デフォルトの名無しさん:2012/10/18(木) 10:17:49.42
Haskell である日突然視界が開けるようになるためには型システムを理解しないとね。

宣言的とか関係ないんじゃね?
22デフォルトの名無しさん:2012/10/18(木) 12:43:21.69
>>21
型システムを理解しないとね、は自分も経験してるから簡単に同意できる。

宣言的とか関係ないんじゃね? は、根拠を示してくれ。
関係ないと感じた経験がないから、じゃね?と言われても
このままでは同意も反対もできん。
23デフォルトの名無しさん:2012/10/18(木) 12:53:49.19
>>20
指摘はもっともだ。

>>990
> 静的な、宣言的な考え方なんて、手続き的な考え方に比べれば、
> 学校教育の現場でほとんど出くわすことはないだろう。
> たとえ出くわしても、意識しなければ素通りしていくだけで、身にならない。

これは言い過ぎた。

出くわすし、成長と供に授業の中でそれとなく訓練を受けてはいる。
しかし、いかんせん、そうだとは意識していないのだから、
そのままでは Haskell のプログラムをする事に関してはたいして役に立たない。

宣言的な考え方に触れた時にそれを理解できる体勢にはなるが、
そういう考え方を自分から進んでするまでには至らないだろう。
そして、自分から進んで宣言的に考える事に慣れなければ、
Haskell でのプログラムが C や Java より簡単とは思えないのではないだろうか。

自分で宣言的に考える事ができなければ
Haskell のプログラムはいつまで経ってもしっくりこないと思う。
24デフォルトの名無しさん:2012/10/18(木) 14:21:05.06
三行以内にまとめろ
25デフォルトの名無しさん:2012/10/18(木) 15:47:09.90
諸君、議論したまえ
26デフォルトの名無しさん:2012/10/18(木) 16:01:15.25
>>24
今回の件では3行以内でレスするのは今の私には無理だ。

どうしても3行以内にしてほしいのなら、
もうレスをやめざるを得ない。
27デフォルトの名無しさん:2012/10/18(木) 18:24:22.89
>>25
議題なに?
28デフォルトの名無しさん:2012/10/18(木) 20:14:57.13
本日の議題: 「宣言的」とはどういう意味か
29デフォルトの名無しさん:2012/10/18(木) 21:08:07.74
>>26
3行とか関係なしに、もうレスやめていいよ
30デフォルトの名無しさん:2012/10/18(木) 21:39:11.88
>>29
了解した
31デフォルトの名無しさん:2012/10/18(木) 21:49:12.21
やると言ったらやるのが宣言的
できるならやる、できないならやらない、は宣言的ではない
何ができるかよりも何をするべきかを重視する
32デフォルトの名無しさん:2012/10/18(木) 21:57:13.27
たとえば連立方程式の解を求めよ、という問題に対して
どう解くのが宣言的なのよ?
33デフォルトの名無しさん:2012/10/18(木) 22:04:42.11
>>32
宣言的には解けない
34デフォルトの名無しさん:2012/10/18(木) 22:30:06.88
とにかく解いたと仮定する
矛盾するまで仮定するのをやめない
35デフォルトの名無しさん: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デフォルトの名無しさん:2012/10/19(金) 02:43:31.15
囲碁では千日手は簡単に作れる
これは宣言じゃなくて発見
37デフォルトの名無しさん:2012/10/19(金) 05:07:03.70
…?
38デフォルトの名無しさん:2012/10/19(金) 07:49:38.95
もしかしたら最新の GHC では取り除かれているかも知れませんが、
下記のようにパターンの中で簡単な計算をするのは
どういう名前の言語拡張でしたっけ?

f :: Int -> Int -> Int
f (n + 1) x = ・・・
39デフォルトの名無しさん:2012/10/19(金) 08:05:08.19
宣言:その分野のプロでも知らない用語を定義する
発見:定義しなくてもそのうちわかる
40デフォルトの名無しさん:2012/10/19(金) 08:43:31.84
>>34
つまり、アルゴリズムというものは、宣言的ではあり得ない?
41デフォルトの名無しさん:2012/10/19(金) 10:07:40.36
例えば、宣言してもしなくてもアルゴリズムが存在する場合
それは宣言とは全く関係ないから宣言的ではない

黙っていても存在感があるものは宣言的ではない
言い続けなければ消えてしまいそうなものは宣言的
42デフォルトの名無しさん:2012/10/19(金) 12:51:29.73
ワロタww
43デフォルトの名無しさん:2012/10/19(金) 16:01:54.12
Haskellで実用的なもの作ってみろよ
ほかの言語でもできるから
44デフォルトの名無しさん:2012/10/19(金) 16:09:48.32
>>40
「アルゴリズムとはチューリングマシンの計算表のことだと考えよう!」
45デフォルトの名無しさん:2012/10/19(金) 18:14:26.77
宣言的っていうのやめて静的っていえばいいんじゃね
現に宣言的型とはいわないだろ 静的型だろ
46デフォルトの名無しさん:2012/10/19(金) 18:50:18.22
終動負荷的な静的筋力トレーニング
47デフォルトの名無しさん:2012/10/19(金) 19:02:30.34
今ここで議論の真似事をしている間だけの限定でいいから、
宣言的という言葉の意味をはっきり定義してくれ

じゃないとまじめな議論にならんだろ
48デフォルトの名無しさん:2012/10/19(金) 19:32:35.75
A とは B のことだ。
というような文言の羅列になるのが宣言的なのでは。
49デフォルトの名無しさん:2012/10/19(金) 20:21:24.49
オブジェクトなどの羅列ではなく文言の羅列なのか
50デフォルトの名無しさん:2012/10/19(金) 20:25:54.43
>>49
この文脈で言うオブジェクトってなにを指す?
51デフォルトの名無しさん:2012/10/19(金) 20:46:27.43
>>50
メモリ領域などを抽象化したものかな
52デフォルトの名無しさん:2012/10/19(金) 20:49:32.89
メモリ領域などを抽象化ものの羅列って、意味が分からん

ちなみに、Haskell の変数は特定のメモリ領域に付けられたラベル(名前)じゃないよね
53デフォルトの名無しさん:2012/10/19(金) 21:02:41.02
>第1の定義によれば、ある出力を得るにあたってそれを作成する方法ではなく、出力の性質を記述することを「宣言型」と称する。
>別の定義では、純粋関数型言語/論理プログラミング言語/制約プログラミング言語で書かれたプログラムを「宣言型」と称する。
54デフォルトの名無しさん:2012/10/19(金) 21:04:29.55
>>52
そうだよね
特定したくないから抽象化したんだよね
55デフォルトの名無しさん:2012/10/19(金) 21:10:43.86
>>54
特定したくないから抽象化したって、何か勘違いしてないか?

Haskell の変数は、値が格納されたメモリ領域に付けられたラベルではなく、
「値に付けられたラベル」だぞ。

let a = 17

というのは、17 という値の別名が a ということだ
56デフォルトの名無しさん:2012/10/19(金) 21:17:19.21
>>53
これはPrologの簡単なプログラムですが、
http://nojiriko.asia/prolog/olympic.html
A とは B のことだ。ではなく例えば、
1888とアテネは夏期オリンピック関係にある。
という文言に相当するものの羅列と見做すことができる。
これも全体として宣言的と言える。
57デフォルトの名無しさん:2012/10/19(金) 21:19:42.83
>>55
特定の値ではなく抽象的な値にラベルをつけるよ
まだ値がわからない段階でもラベルをつける
58デフォルトの名無しさん:2012/10/19(金) 21:21:39.22
おー、ごめん。

夏期オリンピック(1996,アテネ).

1988ではなくて、1996だった。さっきjavaの宿題スレにも
同じテーマのことを書き込んでその時点から勘違いをしていた。
5958:2012/10/19(金) 21:23:52.62
さらに間違い。1996年ではなくて、1896年です。すみません。
60デフォルトの名無しさん:2012/10/19(金) 21:32:04.79
>>52 は「変数は特定のメモリ領域に付けられたラベルではない」と言ってる

>>54 は「そうだよね}と同意し「特定したくないから抽象化したんだよね」と言ってる

>>54 の言う「特定したくない」というのは、メモリ領域を特定したくないから、
と読み取れないか?
61デフォルトの名無しさん:2012/10/19(金) 21:39:35.17
もっとオリンピックに詳しい人に聞けばいいのに
プログラマーがオリンピックを宣言するのはなぜなのか
62デフォルトの名無しさん:2012/10/19(金) 22:01:43.64
>>61 この問題の解答の一部を切り取っただけだから。
http://nojiriko.asia/prolog/j72_387.html
63デフォルトの名無しさん:2012/10/20(土) 01:33:24.66
RWH 読んでて型構成子って何かと思ったら、型コンストラクタかよ。
64デフォルトの名無しさん:2012/10/20(土) 08:13:40.39
>>38
n+kパターンはHaskell98の仕様にあったが、Haskell2010で取り除かれた。
GHCのフラグには (No)NPlusKPatterns がそれかね。
65デフォルトの名無しさん: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デフォルトの名無しさん:2012/10/20(土) 23:57:24.35
単相性制限はその後どうなりましたか?

望まれない子の将来が気になります
67デフォルトの名無しさん:2012/10/21(日) 00:16:08.21
>>64
ありがとうございます。
68デフォルトの名無しさん:2012/10/21(日) 00:58:21.17
RWH、Maybe の箇所、唐突に Just 使って、しかも結局 Just の説明皆無かよ。
69デフォルトの名無しさん:2012/10/21(日) 03:29:09.78
RWHって文章の構成悪いよね
説明なしにいきなり初出の単語が出てくるし話はあっちこっちに逸れまくり
Haskellとかコンピュータとかの枠に限らず一般的な書籍としてかなり悪いほうだと思う
70デフォルトの名無しさん:2012/10/21(日) 09:04:40.35
でも他の書籍やネットで基礎をしっかり学んでおけば、
それほど苦にならないと思うが
71デフォルトの名無しさん:2012/10/21(日) 10:15:13.08
これから学ぶ範囲の知識について他で学習しておかないと理解に苦しむような本だったら
学習のための本としての役割を果たしていないと思うけどね
72デフォルトの名無しさん:2012/10/21(日) 10:44:10.30
「理解に苦しむ」って、今回の件ってそれほど大げさなことかな。

あれ? 何だろ? って思ったら、まずは調べてみればいいいじゃん。
Just なんてその本にしか載っていない特別に物でもないんだし。

他の本でもそういうの色々あるよ。
とくに説明もなく新しい単語や概念が出てくるのなんてしょっちゅうだ。
そんなところでいちいち躓いて憤ってたらきりがないよ。

それに改善点を指摘するなら、ここにじゃなくて、出版社や著者にでしょ。
73デフォルトの名無しさん:2012/10/21(日) 11:07:04.27
Haskellを本格的に使いこなそうと思ったらRWHのレベルまでは知っておく必要があるからね
他の入門書はとりあえずHaskellを知る程度のものでしかない
RWHに代わるものが現れるまではとりあえず必要なものだ
74デフォルトの名無しさん:2012/10/21(日) 16:13:17.47
GHC 7.6.1 って、もしかして32bitアプリは作れない?
75 [―{}@{}@{}-] デフォルトの名無しさん:2012/10/21(日) 16:58:14.86
>>66
何も変わってないよ。Haskell2010に入ってる
ただしGHC 7.8からghciではデフォルトで外されることになった
http://hackage.haskell.org/trac/ghc/ticket/3202
76デフォルトの名無しさん:2012/10/23(火) 18:13:04.53
>>75
遂に白河の清きに魚の住み兼ねて
元の濁りの田沼に戻るのですね!
77デフォルトの名無しさん:2012/10/23(火) 18:37:19.71
MonomorphismRestrictionのどのへんに白河の清き要素があるのか気になる
78デフォルトの名無しさん:2012/10/24(水) 04:47:19.04
どなたか! この中にMonomorphismRestrictionを擁護してくださる方はいらっしゃいませんか!?
79デフォルトの名無しさん:2012/10/24(水) 18:37:32.62
型システムわからん

良かれと思って型宣言したらコンパイル通らなくなる

rigid type variable bound by 云々言い出して
俺の善意を踏みにじりやがる

80デフォルトの名無しさん:2012/10/24(水) 19:00:08.28
>>79
どんなコードでそのエラーが出た?
そのエラーには「Could not deduce 〜」というのもあった?


ちなみに型は、元々コンパイルが通っていたコードに
良かれと思って後から書き加えるものではないよ。

テスト駆動がまずテストを書くのと同じように、まず型を書くんだよ。
それから本体を「型に合わせて」書くんだ。
81デフォルトの名無しさん:2012/10/24(水) 19:10:04.15
>>79
もしかしてローカル変数に多相型の宣言付けてエラーもらってる?
それなら、ローカル変数の型宣言の中では、外の型変数を(ScopedTypeVariable拡張なしでは)
使えないということを覚えておけばいいよ
82デフォルトの名無しさん:2012/10/24(水) 19:12:00.93
>>80
>テスト駆動がまずテストを書くのと同じように、まず型を書くんだよ。
そんなの場合によるだろ。糞どうでもいい
83デフォルトの名無しさん:2012/10/24(水) 19:14:58.53
>>82
どのような場合に先の型を書き、
どのような場合に後に型を書くと良いのでしょうか?

何か簡単な事例を挙げていただけると助かります。
84デフォルトの名無しさん:2012/10/24(水) 19:17:54.50
どんな場合によるのか興味ある
85デフォルトの名無しさん:2012/10/24(水) 19:25:28.55
じゃあ俺も興味ある
86デフォルトの名無しさん:2012/10/24(水) 19:26:10.20
me too
87デフォルトの名無しさん:2012/10/24(水) 19:38:04.48
母さんビール
88デフォルトの名無しさん:2012/10/24(水) 19:52:22.72
>>87 ← 意味判らない
89デフォルトの名無しさん:2012/10/24(水) 19:59:05.00
haskellには(式以外の)文がない・・・って嘘じゃね?
90デフォルトの名無しさん:2012/10/24(水) 20:09:30.95
>>89
そう思う根拠は?
91デフォルトの名無しさん:2012/10/24(水) 20:40:10.35
>>87
そう思う根拠は?
92デフォルトの名無しさん:2012/10/24(水) 20:45:05.32
ifも式、letも式。ではwhereは式?
93デフォルトの名無しさん:2012/10/24(水) 20:53:26.27
そもそも式以外の文がないってどこ情報よー
94デフォルトの名無しさん:2012/10/24(水) 20:57:36.06
>>83
ただちに書かなくていいことは後で書く

テスト駆動も、制約に合わせて書くというより
関係ないコードを書かないことで間違いを減らしている気がする
95デフォルトの名無しさん: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デフォルトの名無しさん:2012/10/24(水) 21:06:43.98
>>92
そもそも、「式」とは何?

それをはっきり定義しないと、where が式なのかどうか判断できないだろ
97デフォルトの名無しさん:2012/10/24(水) 21:10:37.15
Haskell Reportの言葉遣いに従うなら簡単

・whereは式じゃない。宣言やcase選択肢の一部
・Haskellに「文」は存在する。do式の中に並んでいるのがそれ
98デフォルトの名無しさん:2012/10/24(水) 21:14:38.02
俺はグローバルでもローカルでも型から先に考えるな。

書くかどうかは気分(ローカルで型推論がうまく働かなきゃ書く)。

>>80 の型から先に書くというのは、そういう意味で俺は無意識に拡大解釈したけど、
例に出したテスト駆動の方は実際に書かなきゃ意味ないなぁ、どうなんだろ。
(テスト駆動の方も、コードの内容よりテストから先に「考える」と言えばそうだろうが)
99デフォルトの名無しさん:2012/10/24(水) 22:07:48.31
where は節


SQLなら
100デフォルトの名無しさん:2012/10/24(水) 23:39:27.46
tail は確かに List にも Vector にもあるから Ambiguous かも知らんけどさ
渡してるのが Vector なんだから Vector の方の tail だって推測してくれても良いんじゃないの?
分からず屋!
101デフォルトの名無しさん: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デフォルトの名無しさん:2012/10/26(金) 16:32:06.34
日記
103デフォルトの名無しさん:2012/10/26(金) 18:12:19.85
>>100
その機能をうまく(型推論の便利さをあまり犠牲にしないで)実装できたらすごい
俺は尊敬するし、論文も書ける
104デフォルトの名無しさん:2012/10/26(金) 18:48:34.11
MSがはやく Visual Haskel/CLI 出してくれればいいのに
105デフォルトの名無しさん:2012/10/26(金) 18:55:32.06
関数型はF#とpythonが既にあるからねぇ。
106デフォルトの名無しさん:2012/10/27(土) 00:05:49.70
MSRにGHCメイン開発者いるけど学者としての活躍が使命でMS製品に反映させなくていい人たちだったとおもうので、
IronPythonみたいに外部か開発部署に物好きがいないとむずかしいかもね。
どちらかというとF#の人たちがどういうポジションなのか気になる。
107デフォルトの名無しさん:2012/10/27(土) 08:22:56.10
これ、買いですか?

関数プログラミング入門 Haskellで学ぶ原理と技法|Ohmsha
http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=978-4-274-06896-6
108デフォルトの名無しさん:2012/10/27(土) 15:32:25.90
>>103
どうしてだよ!
手続き型言語によくあるオーバーロードだろ
できないのかよ!
109デフォルトの名無しさん:2012/10/27(土) 15:51:33.66
>>107
特徴

・コンピュータサイエンスっぽいノリ。関数型プログラミングを
 数学の一分野として位置づけて証明をつけたりするような議論がある。

 副題に「原理と技法」とあるのは適切だと思う。Haskellってリスト内包表記で
 無限リストがあっさり扱えたりする反面、自分が書いたコードが本当に効率が良いのか
 わかりにくいところがある。この本では、コードの効率を手で分析してみせてる箇所があり、
 そのような議論を丁寧に追って自らの血肉にできれば有益だと思われる。

・モナドの説明は想像していたよりあっさりしていた。
 コンピュータサイエンス寄りの本とは言え、突如領域理論や圏論で読者を打ちのめす心配は一切ない。

・Haskellという言語自体の入門書にもなっているが、この本をHaskell入門書として紹介するのは
 SICPをScheme入門書として紹介するのと同じぐらいには間違っていると思う。

・すでに訳出されている fun of programming (関数プログラミングの楽しみ) はこのBirdの本の
 「続編」という位置づけであり、その本の中でIFPHでは〜のような言及がしばしばあるので
 「関数プログラミングの楽しみ」を楽しむためにはこの本も持っていたほうが良い。

まとめ
 「関数プログラミング入門 Haskellで学ぶ原理と技法」はHaskellをとりあえず使ってみたいという
 人には向かない。そのような向きには「すごいHaskell〜」を勧める。この本は、ある程度Haskellで
 自分が書きたい関数を書けるようになり、効率の問題に直面しはじめた人にこそ向いていると思う。
 どのようにデータ構造を工夫し、アルゴリズムを解析し、改良するかについての実例が載っており、
 これらの技法を身につければ --- 簡単ではないだろうが --- より整然とした、そして効率の良い
 Haskellコーディングができるようになるだろう。
110デフォルトの名無しさん:2012/10/27(土) 17:00:48.36
自分もその本、気になってた。くわしい解説ありがとう!
「関数プログラミングの楽しみ」の前に読むといいのか、なるほど
111デフォルトの名無しさん:2012/10/27(土) 17:04:25.82
以前原著買おうとしたけどいいお値段しててやめちゃったな
オーム社さんいい仕事してくれるぜまったく
112デフォルトの名無しさん:2012/10/27(土) 17:07:22.18
大武者
113デフォルトの名無しさん:2012/10/27(土) 17:11:44.56
pdfで出してくれー
114デフォルトの名無しさん:2012/10/27(土) 17:28:23.24
http://tanakh.jp/pub/fp-tudoi-2012/tudoi.html
すごい本のPRスライドがあった。
115デフォルトの名無しさん:2012/10/27(土) 17:32:35.34
みんなhaskellでなにかいてるの?
116デフォルトの名無しさん:2012/10/27(土) 17:49:22.15
続編を買って読んでいて、前編を欲してる人に是非おすすめ、という感じか
117デフォルトの名無しさん:2012/10/27(土) 18:24:16.32
なんせ「関数プログラミングの楽しみ」ではモナドの話はIFPHの11章を見てもらうことにしてここではArrowの説明するぜ!
というノリだからね。

続編というか、IFPHを前提というかそういう感じかな。
118デフォルトの名無しさん:2012/10/27(土) 18:31:34.04
こういう本ってすぐ絶版になったりするから
すぐ読まないにしても確保しといたほうが良さそうだな
119デフォルトの名無しさん:2012/10/27(土) 20:24:43.91
>>118
そsそうなの!?
関数プログラミングの楽しみとセットですぐ買おうかな
120デフォルトの名無しさん: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デフォルトの名無しさん:2012/10/27(土) 21:00:58.85
>>107って目次を見ると、どっかで読んだような話ばっかだよな
もうこの手の本はお腹いっぱいだわ
122デフォルトの名無しさん: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.
http://en.wikipedia.org/wiki/X86_calling_conventions#x86-64_calling_conventions
123デフォルトの名無しさん:2012/10/27(土) 23:35:53.71
>>122
なるほど。
x64 & Windows では呼び出し規約は1種類に統一されたのか。

外部ライブラリを呼ぶ時も、呼び出し規約は何だろうと
ヘッダファイルを調べたりする必要がなくなるわけだ。
こりゃ便利。

ありがと。
124デフォルトの名無しさん:2012/10/28(日) 09:29:26.53
>>109
d
すごく参考になった。
125デフォルトの名無しさん:2012/10/28(日) 10:06:10.47
IFPHは完全にコンピュータサイエンスの本だから、プログラミングの本だと思って買うとがっかりするぞ
126デフォルトの名無しさん:2012/10/28(日) 10:17:23.02
SICPをScheme入門書として紹介するのと同じぐらい〜って表現がぴったりだな
127デフォルトの名無しさん:2012/10/29(月) 03:17:32.09
Vectorの変更不可の方は
sliceなんかするとC++でいうところの参照のベクタになるってことでいいすか?

中身のコピーはしないんですよね?
128デフォルトの名無しさん: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.

もしコピーされているようなら、それはバグですね。
129Perl忍者 ◆M5ZWRnXOj6 :2012/10/29(月) 09:47:53.39
http://pbh.jp/wiz/

これ解けないやつは真骨頂にクズ
ハッカーをを名乗る価値無し

海外からNinjaレベルと言われるほどの者なら簡単に解くことができる
解いてみてみ?
合ってるか確認してやるから

SHA-1とか総当りとかほざいてるようじゃ脳味噌足りてないよ
ホワイトハット気取りのお前らクズじゃJarlsbergすら解けないんだろうな
130デフォルトの名無しさん:2012/10/29(月) 12:36:11.29
>>128
ですおね^^
131デフォルトの名無しさん:2012/10/30(火) 11:10:57.70
政治学習
132デフォルトの名無しさん:2012/10/31(水) 21:36:04.82
噂の『関数プログラミング入門』を買った
カバーデザインがポップでありながら品があって良い
組版もプログラミングHaskellと同じものなのですっきりしていて気が散らない
Haskellのコードに使われる等幅フォントが縦長窮屈でなく読みやすい
製本は流行りのlay-flatタイプの綴じ込みでこのへんもぬかりない
なかみはむつかしくてよくわからなかった
133デフォルトの名無しさん:2012/10/31(水) 22:45:09.39
>>132
> なかみはむつかしくてよくわからなかった

一番感じなところだが・・・
134デフォルトの名無しさん:2012/10/31(水) 22:46:57.40
肝心なところ
135デフォルトの名無しさん:2012/10/31(水) 22:58:59.04
カバーデザインが非常に洗練されている「関数プログラミングの楽しみ」の前編に相当するとのことなので、
やはりデザインはいいんだな
136デフォルトの名無しさん:2012/10/31(水) 23:54:48.87
この本開きやすいよな
フルフラット製本って言うらしいけど
137デフォルトの名無しさん:2012/11/01(木) 05:42:51.18
フルスロットル製本に空目した
138デフォルトの名無しさん:2012/11/02(金) 02:24:17.75
RWHより簡単かどうかだけ知りたい
139デフォルトの名無しさん:2012/11/02(金) 12:11:09.02
諸君、議論がお留守だ
140デフォルトの名無しさん:2012/11/02(金) 13:45:46.44
>>7
ほんとにjsやpythonってそんなひどいん?
141デフォルトの名無しさん: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デフォルトの名無しさん:2012/11/02(金) 14:17:55.79
Pythonでリスト内包表記使ってないのは不公平だな
■Python
[x*2 for x in range(1,6) if 2<x<5]
143デフォルトの名無しさん:2012/11/02(金) 15:31:54.92
>>7て一番酷いのはHaskellだろ
こんな阿呆なコード書くやつ居ないよ
144デフォルトの名無しさん:2012/11/02(金) 15:33:46.22
畜生、Vectorにnub無いのかよ
145デフォルトの名無しさん:2012/11/02(金) 19:20:30.90
nub って何?
146デフォルトの名無しさん:2012/11/02(金) 19:20:48.30
>>7って [1, 2, 3, 4, 5] みたいなリストを用意するのがルールじゃないの?
range とか 1..5 はだめだろ
147デフォルトの名無しさん:2012/11/02(金) 20:48:54.42
Conal Elliott のブログの写真って、最近変わった?
つい最近まで正面を見てなかったっけ

まぁ、どうでもいいが

この素敵なおっさん、いつになったらブログ更新するんだろ
148デフォルトの名無しさん:2012/11/03(土) 00:05:40.15
>>138
RWHは泥臭く実例を追う実用主義。BirdのIFPHは、理論的な側面を強調している。
無限リストの挙動がなんでそーなるの的な数学的原理なんかはIFPHが優れてるし
画像を扱ってバーコードリーダー作るぜ⇒大量のボイラープレート⇒それモナドでまとめられるよ
なんて話はRWHの優れたところだ。

コンピュータサイエンス(数学寄り)の素養があるならIFPHが簡単だろうし
CとかPerlは実戦でつかえるけど理論には興味ないしそれでも関数型使ってみたいならRWHが向いてる。
149デフォルトの名無しさん:2012/11/03(土) 00:11:37.14
モナド変換子を解説してる日本語書籍がRWHしか無くないかね?
現実的にHaskellを使いこなすにはモナド変換子の理解が必須だと思うのだけど
150デフォルトの名無しさん:2012/11/03(土) 00:27:58.18
>>149
IFPHの10.4でモナド変換子の説明が載ってますぞ〜 
例外の複合、状態の複合を例として説明し、最後にそれらを応用してますぞ〜
151デフォルトの名無しさん:2012/11/03(土) 00:38:59.61
それならちょっとIFPH立ち読みしてくるかなあ
よさそうなら関数プログラミングの楽しみと一緒に買ってしまうか
関数プログラミングの楽しみの方は、いつかじっくり読みたいなとは思ってたんだ
152デフォルトの名無しさん:2012/11/03(土) 00:48:45.35
丁度昨日IFPHと関数プログラミングの楽しみ併せて買ってきたわ
読みたい時に手に入らないとかありがちだからなー
153デフォルトの名無しさん:2012/11/03(土) 04:55:02.03
>>145
リストの重複要素を省く
154デフォルトの名無しさん:2012/11/03(土) 12:08:13.58
>>153
ありがと
155デフォルトの名無しさん:2012/11/03(土) 18:50:29.18
モナドって、IO、継続、Stateなどの副作用系から、LISTや冪集合などの
数学系に至るまで、適用範囲がすごく幅広いのだが、これはどうしてだろうか?
これだけ幅広くても、モナドとは何かを言えるものだろうか?
156デフォルトの名無しさん:2012/11/03(土) 18:53:32.65
またモンゴロイドが疑問を抱いてるようです
157デフォルトの名無しさん:2012/11/03(土) 18:57:39.06
>>155
関数ほどは幅広くはないよ
でも関数とは何かを言えるものだろうかなんて誰も疑問に思わないな
158デフォルトの名無しさん:2012/11/03(土) 19:22:34.41
>>157
関数。たしかにそうだけどね。
モナドは中途半端に幅広い、と言うとどうかな。
関数の場合は、モナドのような分類(IO、State、...)はしないよね。
しかもこの分類はアドホックな分類にも見えるし。
159デフォルトの名無しさん:2012/11/03(土) 19:45:48.97
>146
>7のClojureはrange使ってるよ
160デフォルトの名無しさん: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デフォルトの名無しさん:2012/11/03(土) 20:58:35.33
>>159
前スレのテンプレを見てもらえばわかるがrangeとか1..5とか使ってないのよ
だから元々そういう縛りがあったんだろう
163デフォルトの名無しさん:2012/11/03(土) 21:01:56.52
あれはテンプレじゃなく前スレで勝手にぶっこまれただぞ
164デフォルトの名無しさん:2012/11/03(土) 21:09:19.21
>>163
それは失敬
でもテンプレ化するならそれなりにルールを決めないとだめだよね
165デフォルトの名無しさん:2012/11/03(土) 21:10:54.68
>>161
お前には感じ取れなくてもListとIOには共通性があって
その共通性に基づいてるのがモナドなんだな
166デフォルトの名無しさん:2012/11/03(土) 21:11:34.99
え聞こえないとかありがちだからなー
167デフォルトの名無しさん:2012/11/03(土) 21:15:23.85
「感じる」とはまた曖昧で主観的な・・・
168デフォルトの名無しさん:2012/11/03(土) 21:28:01.97
>>165
>ListとIOには共通性があって
どういう共通性?
169デフォルトの名無しさん:2012/11/03(土) 21:29:04.57
モナドとは、モナド則を満たすような(>>=)とreturnを定義できる型構築子のこと
逆に、ある型構築子に対してモナド則を満たすような(>>=)とreturnを定義できるならそれはモナド
170デフォルトの名無しさん:2012/11/03(土) 21:35:43.05
IOとかListとかが実際に果たす役割はどうでもよくて、共通する構造によって表現可能ってことだから 関数よりむしろモナドのほうが広いとも言える
171デフォルトの名無しさん:2012/11/03(土) 21:43:13.59
>>169
むしろ、IOとListとが同類にみえるようなモナド則は実はナンセンスなのじゃ
ないかという疑問なのだが?
>>170
さすがにそんなことはないだろう。
172デフォルトの名無しさん:2012/11/03(土) 22:04:53.50
>>169
そのような性質を持つものにモナドという名前を与えた背景の方が興味あるな
173デフォルトの名無しさん:2012/11/03(土) 22:05:36.02
>>171
モナド則なんてなくても、Prologでは副作用と非決定性は同類に見えていた
174デフォルトの名無しさん:2012/11/03(土) 22:15:51.32
>>172
お察しの通り、モノイドとの類似性から
>>173
非決定性が副作用の一部というなら分かるが、同類というのは分からん。
Prologの何のことを言ってる?
175デフォルトの名無しさん:2012/11/03(土) 22:22:16.53
非決定性と副作用を同類に扱う手法のひとつがモナドだよね?Prologには何かそれに代わる物がある?
176デフォルトの名無しさん:2012/11/03(土) 22:23:16.60
>>171
ナンセンスとか言っても現実にリストとIOは同じモナドの概念でまとめられるので、
まとめられる以上それを別のものにする理由が無い
177デフォルトの名無しさん:2012/11/03(土) 22:29:00.77
IOはRealWorldを状態に持つStateモナドのようなものだってことは理解してる?
178デフォルトの名無しさん:2012/11/03(土) 22:36:14.23
Prolog:
非決定性は副作用の一部 (>>174)

Haskell:
非決定性はモナドの一部 + 副作用はモナドの一部
179デフォルトの名無しさん:2012/11/03(土) 22:37:13.01
まとめられるから、というだけでモナドにまとめている訳でもなさそうだけどな

まとめられるのに、諸事情でまとまっていないものもあるし
180デフォルトの名無しさん:2012/11/03(土) 22:40:44.12
でも、非決定性、状態、継続、例外、入出力等、
かなり多くのものがまとめられるからモナドを選んだんじゃないのかね?
181デフォルトの名無しさん:2012/11/03(土) 22:49:35.35
色々やってるうちに便利なことに気付いたって印象だな
IOとか昔はモナドじゃなかったんでしょ
182デフォルトの名無しさん:2012/11/03(土) 22:54:29.24
流体は非粘性(粘度効果は無視できる)、ポリトロープな状態方程式で記述される熱的な理想気体とし、断熱過程の下で作用する。
183デフォルトの名無しさん:2012/11/03(土) 23:01:50.05
応用範囲が広くて便利なものを「ナンセンス」と言う意味が分からんな
独自の言葉の使い方をしてるならちゃんと最初に定義してくれ
184デフォルトの名無しさん:2012/11/04(日) 00:05:52.82
>>155
Moggiの論文に説明があるよ。でもまあ確かに判ってる人が
判ってる人向けに書いてる感がある。
185デフォルトの名無しさん:2012/11/04(日) 00:09:40.59
>>171
さすがにそんなことはないだろう、なんてことはないのだ。
恒等関手もモナドなのでモナドによって定まるKleisli圏の中に元の圏も
含まれている。形式的な話ではあるが。勿論モナドごとに一つのKleisli圏があり、異なる
モナドをつなぐためにはめんどうな事をしないといけないが
(この辺は自分もまだ未把握。モナドトランスファーが関係してるのかなぁ)
186デフォルトの名無しさん:2012/11/04(日) 00:41:32.78
コアンダ効果を通常の翼の速度分布の説明に使うのは不適切であると
187デフォルトの名無しさん:2012/11/04(日) 04:30:56.21
駄目だ! このスレ頭良い人達でいっぱいだ!
188デフォルトの名無しさん:2012/11/04(日) 07:59:40.61
>>185
そういう言いかたなら、関数は射なのだから,やっぱりそんなことはないのだ。
189デフォルトの名無しさん:2012/11/04(日) 09:31:56.97
>>188
射は関数とは限らないから、それは反論になってないよ(ただ185の議論が強引なのは確か)
190デフォルトの名無しさん: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デフォルトの名無しさん:2012/11/04(日) 10:36:35.07
諸君、議論しているね
194デフォルトの名無しさん:2012/11/04(日) 10:56:48.43
>>192
>米田の補題より、関数=射。
ちょっと意味が解らないんだけど、
米田の補題からどうやって関数=射(ここで言うイコールって何?)が導かれるのか説明してくれない?
195デフォルトの名無しさん:2012/11/04(日) 13:53:18.43
むしろ、カルテジアン閉のような気がする
196デフォルトの名無しさん:2012/11/04(日) 15:51:14.41
>>189
強引?
間違ってるっていうんだよw
197デフォルトの名無しさん:2012/11/04(日) 16:08:25.97
Q. 何でIOと[]の共通部分をわざわざ括り出して名前を付けるの?
A. 便利だから

で済む話だろ
198デフォルトの名無しさん:2012/11/04(日) 16:21:23.88
Moggiの論文読めば済む話なのに、何をごちゃごちゃ言ってるのんだよ
199デフォルトの名無しさん:2012/11/04(日) 16:59:49.49
英語を読んだら死ぬという噂だし…
200デフォルトの名無しさん:2012/11/04(日) 17:41:22.96
>>197
IOをモナドで扱うのが便利なのは分かるが、
リストまで同じようにモナドで扱うのが便利な理由がいまいち分からん
201デフォルトの名無しさん:2012/11/04(日) 17:43:30.65
>>198
だからあMoggi論文が納得できないって言ってるんだろ
それはそれでありだな
202デフォルトの名無しさん:2012/11/04(日) 17:43:44.71
>>200
内包表記便利じゃん
あれってモナドだからだよ
203デフォルトの名無しさん:2012/11/04(日) 18:03:37.92
>>195
:(;゙゚'ω゚'):カルテジアンなの? カルテシアンだと思ってた
204デフォルトの名無しさん:2012/11/04(日) 18:09:09.26
コードも書かずにモナドがどうやら大して理解もしてない圏論がどうやら、
実にHaskellerらしいスレですね
205デフォルトの名無しさん:2012/11/04(日) 18:12:53.23
圏論を深く理解したHaskellerでもなさそうなあなた様が
このような場末に何の御用で
206デフォルトの名無しさん:2012/11/04(日) 18:23:29.00
>>200
リストモナドは総当たり(深さ優先探索)するときに使う
問題によってはStateT s []がすごく便利
207デフォルトの名無しさん:2012/11/04(日) 18:48:07.95
>>202
リスト以外で内包表記が役に立つ(適している)シーンが思い浮かばない

リストもモナドで括る利点が内包表記ができるってだけなら、
内包表記はリスト専用構文でもいいような気がするのだが
208デフォルトの名無しさん:2012/11/04(日) 18:51:07.34
>>206
すまん、総当たり(深さ優先探索)する簡単な具体例は何か無いだろうか
(俺、ここでいう総当たりの意味がよく分かっていない)

リストがモナドになっていない他の言語と比較してみたい
209デフォルトの名無しさん:2012/11/04(日) 18:57:56.15
つうかモナド内包表記っていつのまにか復活してたのか
210デフォルトの名無しさん:2012/11/04(日) 19:07:30.55
Listモナドが何なのかもわかってなくて煽ってたのかこいつは
Listの各要素に関数を適用するmap程度のものだとか思ってたのか?
211デフォルトの名無しさん:2012/11/04(日) 19:12:23.22
いろんな書き方が出来て楽しいのう

do { x <- xs; y <- ys; return $ x + y }

[x + y | x <- xs, y <- ys]

(+) <$> xs <*> ys
212デフォルトの名無しさん:2012/11/04(日) 20:02:05.01
>>211
一番下の知的な書き方に憧れます
213デフォルトの名無しさん:2012/11/04(日) 20:51:41.09
>>210
それ以外に効果的だと感じる内包表記の使い方を見たことがない
214デフォルトの名無しさん:2012/11/04(日) 21:03:01.89
わかってるじゃないか
お前が見たことないだけだよ
215デフォルトの名無しさん:2012/11/04(日) 21:12:11.35
>>211みたいなの見てるとリストの要素から別のひとつの要素作ってるだけだから、
あんま効果的に見えないんだな

リストモナドの場合、
要素からリストをつくる操作(リストが入れ子になるわけじゃないよ)とか
要素を排除する操作とか(途中ですべての要素が排除されたら処理は止まる)を混ぜることができて、
最終的に結果をひとつのリストとして得ることができる
216デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2012/11/04(日) 21:24:26.05
君らがやってるのはトイプログラムとか頭の体操の類いだけじゃん

たとえばゲーム製作の**の部分での利用とか、
会計ソフト製作での**の部分での利用とか、
Webサービス製作での**の部分での利用とか
そういう実用的な部分での使い方はねーの?
219デフォルトの名無しさん:2012/11/04(日) 21:26:14.32
いつからそんな話になったんだよww
220デフォルトの名無しさん:2012/11/04(日) 21:30:31.40
jQueryなんかはListモナド的なものをうまく活用してるいい例かね
Listモナドのアルゴリズムはわりと広範囲に応用可能だと思う
状態モナド的なものと比べて
221デフォルトの名無しさん:2012/11/04(日) 21:30:39.00
>>218
なんで総当たりの実演をするのにそんな分野依存の知識を要求する例が欲しいんだ?
リストモナドは総当たりが必要な時にはいつでも使える、ということさえ知ってれば
プログラマなら応用できるだろ
222デフォルトの名無しさん:2012/11/04(日) 21:34:13.80
まあでもはっきり言えばリストモナドは実用上そこまで重要じゃないと思う
Maybeの方が10000倍大事
223デフォルトの名無しさん:2012/11/04(日) 21:35:36.79
カードをプレイするためのコストが比較的複雑なTCGで、
手札のカードが場に出せるかどうかを判定するのにStateT a [] bを使ったような記憶はある
224デフォルトの名無しさん:2012/11/04(日) 21:48:05.17
>>219
いや、だってさ
実用的なシーンではたいして使えない仕組みなんて、
あっても意味は無くないか?

何のためにプログラムしてるかと言えば、
アプリを作るためにしてる、というのが
まぁ一般の大半のプログラマの意見だと思うし
225デフォルトの名無しさん:2012/11/04(日) 21:50:01.24
あと、俺の言う仕組みって、リスト以外のモナド内包表記のことね
226デフォルトの名無しさん:2012/11/04(日) 21:55:28.18
>>224
いや、>>208に答えてリストモナドがどんな感じで動くかという話をしてるんであって、
リストモナドの存在意義を示すための例じゃないよ
227デフォルトの名無しさん:2012/11/04(日) 21:56:42.71
>>225
お前は誰だよw文脈依存な書き込みするならコテつけろw
228デフォルトの名無しさん:2012/11/04(日) 21:59:12.10
モナドの出番だな
229デフォルトの名無しさん:2012/11/04(日) 22:18:45.82
>>226
だったらアンカーを適切に付けろ
こっちはモナドを勉強中なんだから何に対しての何の意見なのか全く分かんねーよ

で本題だが、すいませんでした、>>216 は参考になります
これから他の言語と比較して理解を深めようと思います
230デフォルトの名無しさん:2012/11/04(日) 22:32:03.03
リストがモナドである意味が分からないのか、
内包表記がリスト以外のモナドで使える意味が分からないのか、
それとも他に難癖付けてるのか
レスが錯綜してて分からん
231デフォルトの名無しさん:2012/11/04(日) 22:37:52.14
非リストのモナド内包表記の活用例というのは俺も見てみたい
実際使ったことがない
232デフォルトの名無しさん:2012/11/04(日) 22:43:10.02
>>230
> リストがモナドである意味が分からないのか、

これはとても難しい問題だと直感したから、ひとまず置いておく。

> 内包表記がリスト以外のモナドで使える意味が分からないのか、

まずはこれを知りたい。
しかも、意味は難しいそうだから、まずは例を。

遊びにしか使えない例なら、そんなもので意味を探るのは無理だから、要らない。
233デフォルトの名無しさん:2012/11/04(日) 23:02:36.40
>>222
>Maybeの方が10000倍大事
Maybeが?ほんまかいな
234デフォルトの名無しさん:2012/11/04(日) 23:07:02.43
> ほんまかいな
メイビー(キリッ
235デフォルトの名無しさん:2012/11/04(日) 23:09:02.03
センスNothing
236デフォルトの名無しさん: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デフォルトの名無しさん:2012/11/04(日) 23:37:47.36
いろんなライブラリ内で Maybe が使われているのを見るが、
[x / y | y /= 0] のような書き方を見ないのは何故だ?
238デフォルトの名無しさん:2012/11/04(日) 23:38:52.87
モナド内包表記が復活したのって最近でしょ?
239デフォルトの名無しさん:2012/11/04(日) 23:43:08.50
可読性もありそう
240デフォルトの名無しさん:2012/11/04(日) 23:50:31.34
そんなキモい書き方するのなんてゴルファー()ぐらいたろ
241デフォルトの名無しさん:2012/11/04(日) 23:51:42.79
モナドのインターフェースを持ってるから、>>211みたいに
do形式や内包表記さらにはアプリカティブファンクターの式なんかの好きな書き方ができるんだよね
242デフォルトの名無しさん:2012/11/04(日) 23:53:14.08
>238
復活といっても GHC の言語拡張ですよ。


if y /= 0 then Just (x / y) else Nothing
[x / y | y /= 0]

どちらがプログラムの意味を理解しやすいかは読み手の経験によるでしょうが、
私は前者の方を使いたいですね。
243デフォルトの名無しさん:2012/11/05(月) 00:01:01.45
内包表記をリスト以外に使うのがキモいのなら

> 内包表記がリスト以外のモナドで使える意味が分からないのか

なんて訊くまでもないよね。
だって使えるかどうかに関わらずキモいから使わないんでしょ?
244デフォルトの名無しさん:2012/11/05(月) 00:26:31.37
>>243

>>323
> 遊びにしか使えない例なら、そんなもので意味を探るのは無理だから、要らない。

[x / y | y /= 0] これが遊びでないと言うのなら、>>237 はどう説明する?
なぜ書籍ではこのような書き方が紹介されない?


俺は内包表記がリスト以外のモナドで使えるのは、意味なんて何も無いと思う。

最初は、モナドだとどんなものでも内包表記ができちゃう事を発見したから、
プログラマがなんか役立つ使い方をしてくれるだろうという安直な考えで、
リスト以外にも使えるモナド内包表記が作られたんじゃないかな。
設計者自身に明確な目的なんてきっと無いでしょ。

その後、たいして上手い使い方も無いまま復活した理由が不明だが。
245デフォルトの名無しさん:2012/11/05(月) 00:43:08.53
結論ありきなら議論する意味なんて無いってだけだよ。
ていうか、書籍に書いてあるかどうかで判断したいなら
こんなとこで他人に聞く必要もないだろ?
246デフォルトの名無しさん:2012/11/05(月) 00:49:09.20
>>244
なんでリストで内包表記が使えるのは意味があるの?
do構文があれば要らないよね?
247デフォルトの名無しさん:2012/11/05(月) 00:49:49.28
>なぜ書籍ではこのような書き方が紹介されない?
そりゃ自分で書いてる通り、最近復活したからでしょ
そのうちリスト以外でもイディオムが生まれてくるよ
248デフォルトの名無しさん:2012/11/05(月) 04:01:00.46
>>236
:(;゙゚'ω゚'):内包表記って[と]で括られてるからリスト専用だと思ってた……
       今までは偽りの人生だった……
249デフォルトの名無しさん:2012/11/05(月) 04:08:25.37
本に書いてあって現場で使われているものにしか興味ないなら
スレ間違えてるよな
250デフォルトの名無しさん:2012/11/05(月) 04:19:05.02
エロゲの攻略法わかんなくてゲームの意義を問う
というかZIPでくれと言い出す奴
251デフォルトの名無しさん:2012/11/05(月) 05:35:28.68
サワーグレープセオリー
252デフォルトの名無しさん:2012/11/05(月) 06:23:16.95
ghciだと:set -XMonadComprehensionsでモナド内包表記が有効になるのか
これはなかなかおもしろいな
253デフォルトの名無しさん:2012/11/05(月) 06:36:23.36
>>252
詳しい解説サンクス
それならPerl忍者が荒らすのも分かる気がする(´・ω・`)
254デフォルトの名無しさん:2012/11/05(月) 07:21:11.08
>>249
じゃあ、本は無しにしようか。

現場に限ってもいいし、
何なら HackageDB に登録されているライブラリ内に限定してもいいが、
それでもスレ違いか?

プログラム言語において機能を実装するというのは、
使うことによってメリットがあると想定されるからだろう。

Haskell は実用もしっかりできる関数型言語を目指して生まれたのだから、
なおさらだ。

Haskell98 で言語仕様から消えたモナド内包表記が、
最近になってGHCの言語拡張として復活したのは、どういう意図があって?
モナド内包表記が欲しいと思っていた人たちは、
どういうシーンでそれが活用できると考えていたの?
その辺りが知りたい。

正直言って、>>236 の例では恩恵が実感できない。
「好きな書き方で書けば良い」という理由だけで復活したとも思えん。
それでは Perl みたいじゃないか。
255デフォルトの名無しさん:2012/11/05(月) 07:28:03.96
内包表記なんて長いコードに使うもんじゃない
(長くなるならmapなりfilterなりdoなり使うべき)
だから短いコードだから内包表記で書く意義が
分からないってワケじゃないだろう

ってことは、こっちは>>254様が納得する理由をエスパーしてやらなきゃ
ダメってことなワケだが、なんでそんなことしてやる必要あるの?
256デフォルトの名無しさん:2012/11/05(月) 07:28:37.24
257デフォルトの名無しさん:2012/11/05(月) 07:49:04.08
258デフォルトの名無しさん:2012/11/05(月) 12:01:23.74
サーセン
Data.Vectorで組んで動いたコードをData.Vector.Unboxedに切り替えようと思ったんすよ

そしたら急にVectorはファンクタじゃないからfmap使えないよ Probable fix 云々ってクレーム来たんすけど

どゆことっすか?ファンクタでしょ?
259デフォルトの名無しさん:2012/11/05(月) 15:54:09.94
>>258
メッセージ全文うpらないのは甘え
260デフォルトの名無しさん:2012/11/05(月) 19:08:43.11
>>257
ありがと。

前者は単にモナド内包表記と同等の do 表記をいくつか例示してるだけじゃん。
誤解を恐れずに言えば、モナド内包表記の操作的意味論っぽいものを示してるだけ。

ただ、そのページに論文「Bringing Back Monad Comprehensions」へのリンクがあった。
こっちはざっと見たところ「現実的な問題提起 --> モナド内包表記による解決」
という感じで語っているような気がするから、実用的なことが書かれていそうだ。
これからじっくり読んでみるよ。

後者の方はこの論文と同名なんだが、同じもの?
至る所に訂正の跡があるのだが、最新版ってことかな?

どちらにしても、「Bringing Back Monad Comprehensions」
こういう情報が欲しかったんだ。
261デフォルトの名無しさん:2012/11/05(月) 19:12:58.71
>>258
unboxed vectorは関手じゃないよ(腹が立つのは分かる)
関手なら fmap :: (a -> b) -> Vector a -> Vector b
が定義できなきゃならんけど、unboxed vectorだとb=Integerとかにできない
(Unbox制約を満たさないといけないから)
262デフォルトの名無しさん:2012/11/05(月) 19:21:08.08
最近流行ってる関手って、そもそも何?
263デフォルトの名無しさん:2012/11/05(月) 19:24:41.98
http://www.haskell.org/ghc/docs/latest/html/libraries/base-4.6.0.0/Prelude.html#t:Functor
Haskellでいう関手はこれ
圏論の関手は他を当たってね!
264デフォルトの名無しさん:2012/11/05(月) 19:29:59.09
>>261
マジすか
複雑な事情っすね
実践よりもHaskell型システムの理解に的を絞ったサイトないっすか?
265デフォルトの名無しさん:2012/11/05(月) 19:30:38.26
>>262
map を関手の一つと考えると、関手から自然変換まで簡単に理解できる

簡単に理解できる = 毎日30分定義とにらめっこして1週間ぐらい悩むと分かる
266デフォルトの名無しさん:2012/11/05(月) 19:41:26.25
>>263
Functor クラスが関手のことなら、なにも漢字で書かなくてもよくない?

unboxed vector は Functor クラスのインスタンスじゃないから、
と言う方がはるかに分かりやすいというか、ストレートだと思うんだが

と感じるのは私だけ?
267デフォルトの名無しさん:2012/11/05(月) 19:44:20.77
知らんがな
268デフォルトの名無しさん:2012/11/05(月) 19:52:07.99
>>266
定着してる訳語があるのに横文字や片仮名を使うのは宗教上の理由でできんのです、ごめんなさい
269デフォルトの名無しさん:2012/11/05(月) 19:55:12.71
>>268
ギャグとしてはあまり面白くない
270デフォルトの名無しさん:2012/11/05(月) 20:02:00.78
女だ! このスレに女が紛れ込んでるぞぉーっ!
魔女を焼き払えーっ!
271デフォルトの名無しさん:2012/11/05(月) 20:04:44.17
一人称を私にすると賢そうに見えるの法則
272デフォルトの名無しさん:2012/11/05(月) 20:14:25.77
ん?

Functor クラスそのものは関手なの?

Functor クラスがたまたま持つ性質(種数やfmap関数など)を持つものが関手なの?
たとえば Applicative なども関手?

Functor クラス自身とそのインスタンスのみが関手?

Functor クラスそのもののみが関手で、そのインスタンスは集合の要素みたいなもの?

わけが分からなくなった・・・


>>271
一人称「私」なんて誰でも使うから、賢そうに見える要素にならないでしょ
273デフォルトの名無しさん:2012/11/05(月) 20:20:11.08
>>272
二番目が一番近いと思う
274デフォルトの名無しさん:2012/11/05(月) 20:24:02.72
>>273
そうだとすると、>>268 の言う「定着してる訳語」っておかしくないか?

>>268 の言い方だと Functor の日本語訳が関手である、
と言っているように聞こえる
275デフォルトの名無しさん:2012/11/05(月) 20:29:18.54
>>274
圏論でFunctorの訳語が関手だから、それ以外に訳しようがない
276デフォルトの名無しさん:2012/11/05(月) 20:33:04.72
圏論でFunctorと、haskellのFunctorクラスは同じもの?
277デフォルトの名無しさん:2012/11/05(月) 20:38:18.43
わかった
今後Haskellのファンクタの意味で関手といいたい場合
いわゆる関手
と書くことにしよう
278デフォルトの名無しさん:2012/11/05(月) 20:39:30.80
>>276
HaskellのFunctorクラスのインスタンスはある種の(圏論的な意味の)関手(の対象部分)になってる
具体的にはHask圏からHask圏への関手
逆に、ある型構築子が(圏論的な意味の)関手になっていてもFunctorのインスタンスとは限らない
たとえば>>258のunboxed vectorがそう
279デフォルトの名無しさん:2012/11/05(月) 20:48:17.32
>>278
じゃあ、HaskellのFunctorクラスを安易に関手と言うのは、
文脈によっては危険じゃないか?

どの文脈だと危険か正しく理解してる奴しか使えない訳語な感じがするが
280デフォルトの名無しさん:2012/11/05(月) 20:53:08.78
>>279
もちろん混乱の原因になることはあるけど、
*Functorのインスタンスを関手と呼ぶ
のをその論法で禁止したら、
*Monadのインスタンスをモナドと呼ぶ
*Monoidのインスタンスをモノイドと呼ぶ
*Numのインスタンスを数値型と呼ぶ
あたりも言えなくなって不便じゃないか
281デフォルトの名無しさん:2012/11/05(月) 20:53:32.47
単位元と結合律を保存する高階関数は関手
という理解は正しいでしょうか?
282デフォルトの名無しさん:2012/11/05(月) 20:59:21.14
>>281
「恒等関数と関数結合を保存する高階関数」と言った方が良さそう
283デフォルトの名無しさん:2012/11/05(月) 21:09:19.73
関手はFunctorではなくfmapじゃないのん?
284デフォルトの名無しさん:2012/11/05(月) 21:12:51.87
>>280
なるほど、そう言われると、たしかに不便だな。
Haskell の話をしていると判りきっている時には
Monad のインスタンスはモナドと言いたい。
(個人的にはFunctorのインスタンスはファンクタと言いたいが)

でも、Haskell の話をしてるときに、いきなり圏論が姿を現し、
そのまま議論が進んでいくと、ややこしくならない?

そういうシーンをこのスレでよく見かける
285デフォルトの名無しさん:2012/11/05(月) 22:05:15.91
271 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/05(月) 20:04:44.17
一人称を私にすると賢そうに見えるの法則



賢くみられたいからHaskellやるという法則
286デフォルトの名無しさん:2012/11/05(月) 22:11:23.06
賢く見られたいからHaskellって・・・

賢く見られたいんならMITで博士号取るだろ普通
287デフォルトの名無しさん:2012/11/05(月) 22:47:19.80
>>286
ギャグとしてはあまりおもしろくない
288デフォルトの名無しさん:2012/11/05(月) 22:51:06.92
>>287
一度目はいいけど、二度やると冷める

もう止めた方がいいと思うよ
289デフォルトの名無しさん: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: http://www.haskell.org/ghc/reportabug

これはバグ?

俺英語書けなくてバグ報告できないんだが、詰んだかな
290289:2012/11/05(月) 23:10:49.65
あ、ちなみに ghc でコンパイルすれば問題なく実行できるから、詰んではないか

でも色々実験して勉強しようと思ってたんだが、ghci 使えないとなると、
かなり面倒になるなぁ・・・
291デフォルトの名無しさん:2012/11/05(月) 23:12:17.93
>>281-283
関手とはある圏の対象と射をもう一つの圏(自己関手の場合は同じ圏)に移すものだから、
Functorのインスタンスとfmapセットで関手と言うのが一番近い
292デフォルトの名無しさん:2012/11/05(月) 23:37:08.23
>>286=こいつ図星

こいつ>>285のレスに図星しすぎれレスしてやがる
だいたいのやつは必死に悔しくても反応したら負けっていう考え持ってるから食いつかない
こいつは食いついた正直者
293デフォルトの名無しさん:2012/11/05(月) 23:41:21.48
>>290
たぶんWindows固有の問題
LinuxかMacを使うとか、Windowsなら仮想マシン上でLinux使えば、問題が出ない可能性が高い
この手の開発はUnix系メインでやっててWindowsはオマケのことが多いから、
細かいとこで目の行き届かない不具合があったりする
294デフォルトの名無しさん:2012/11/05(月) 23:41:35.04
俺、Haskellぐらいしかまともに書ける言語ないんだが、
正直それはそれで非常に恥ずかしい思いをしている
295デフォルトの名無しさん:2012/11/05(月) 23:41:49.81
○○をしたら負けとか偉いやつが言ったらすぐ真似をして
○○をしなくなるのが情弱

Matzみたいなのが「これから来る言語」 Haskellとか言ったら
すぐ真似して
Haskellしだすやつが情弱

>>286=こいつ最高に図星
296デフォルトの名無しさん:2012/11/05(月) 23:44:42.21
Haskellの話しようぜ
297289:2012/11/05(月) 23:45:16.42
>>293
ありがと

とりあえず勉強だけなら処理速度は要らないから、
vm player に linux 入れて、そっちでやってみるよ
298デフォルトの名無しさん:2012/11/06(火) 00:53:45.21
実用度外視なんだから、偉いやつが言ったことをすぐ真似してHaskellやるのが正解
どうせネットで偉い人のマネする以上の教育課程が揃ってないんだから
299デフォルトの名無しさん:2012/11/06(火) 07:18:02.31
教育してもらわなきゃプログラミングすら出来ないアホは
まったく向いてないからリアル土方に転向したほうが良いよ?
300デフォルトの名無しさん:2012/11/06(火) 07:31:54.96
侮辱がただの賛意表明になっているような
元からそのつもりだったのか?
いや、そういう文体には見えないなあ
要するに>>299はアホなんだろう
301デフォルトの名無しさん:2012/11/06(火) 07:33:11.89
え?まじで教育が必要なの?
大学でも別にプログラミングなんて独学だっただろ?

え?大学行ってないの?
302デフォルトの名無しさん:2012/11/06(火) 07:34:45.38
俺が言いたいのは>>298>>299って同じ主張じゃね?
ってこと
ほんとに大学行ってるの?
303デフォルトの名無しさん:2012/11/06(火) 07:36:37.37
>>298は「教育環境揃ってない = 実用度外視」
と書いてるようにしか読めんのだが
教育されなきゃ実用的なプログラミングも出来ないアホは向いてないよ
304デフォルトの名無しさん:2012/11/06(火) 07:41:52.94
話通じてないなあ・・・
自分の発言にあとから留保つけちゃってるし
まあ俺は>>298じゃないからいいんだけどさ
305デフォルトの名無しさん:2012/11/06(火) 07:44:55.65
アホが偉い人のマネすべきってのはその通りだな
自分で考える脳みそ無いし
306デフォルトの名無しさん:2012/11/06(火) 07:48:21.06
GHCはRuby以下の安定性
307デフォルトの名無しさん:2012/11/06(火) 09:29:03.76
   ∧_∧
   ( ´Д`) <みなさーん、お茶が入りましたよ〜
  /    \
  | l    l |     ..,. ., .,
  | |    | _|。.:_::゜。-.;.:゜。:.:;。
  ヽ \_ .。'゚/   `。:、`;゜:;.::.。:.:。
   /\_ン∩ソ\    ::..゜:: ゚。:.:.::.。.。:.
.  /  /`ー'ー'\ \  ゜: ::..゜:: ゚。:.:.:,。:.:.
 〈  く     / / ::..゜:: ゚。:.:.:,.:.:.:。:.:,
.  \ L   ./ / _::..゜:: ゚。:.:.:,.:.:,.:.:.:,
    〉 )  ( .::旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦.
   (_,ノ    .`ー'旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦.
308デフォルトの名無しさん: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デフォルトの名無しさん:2012/11/06(火) 10:58:32.92
Matzってそれほど「偉いやつ」だっけ
310デフォルトの名無しさん:2012/11/06(火) 14:23:00.82
Perl忍者最近見ないな
311デフォルトの名無しさん:2012/11/06(火) 17:31:28.63
>>261
じゃあfmap的なことはどう実現したらいいんですか!?
312デフォルトの名無しさん:2012/11/06(火) 18:24:59.42
>>311
Data.Vector.Unboxed.map
313デフォルトの名無しさん:2012/11/06(火) 19:07:44.24
>>312
(////)
314デフォルトの名無しさん:2012/11/06(火) 19:14:05.47
(////) ::
315デフォルトの名無しさん:2012/11/06(火) 23:10:36.99
(////) :: Answer -> Shame
316デフォルトの名無しさん: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デフォルトの名無しさん:2012/11/08(木) 20:03:07.81
入門書のリスト内包表記にガードが使えるという下りを読んで、凄い衝撃を受けた。
もしかしてHaskellって、Prologよりも抽象度が高いのかも。

実際にプログラムを作るまでになれば、泥臭いこともいろいろあるんだろうけど。
318デフォルトの名無しさん: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
&nbsp;&nbsp;let z = tak 3 2 1
&nbsp;&nbsp;print z

を上記のようにコンパイルして実行してできた prof ファイルを見ると、
tak の評価回数は 5 と表記されています。
(実際に手計算で let z = tak 3 2 1 を簡約すると、
確かに5回 tak 関数が評価されていることが確認できます)

プロファイリングの詳細は「本物のプログラマはHaskellを使う」
の第45回の記事を参考にしてください。

こういうことではなく、プログラムの中でカウントする仕組みを作るには、
という趣旨の質問でしょうか?
319デフォルトの名無しさん: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デフォルトの名無しさん:2012/11/08(木) 21:46:20.04
>>316がやりたいのは"遅延評価された場合"だからWriterだとマズイかも
321デフォルトの名無しさん:2012/11/08(木) 21:46:32.28
>>318
すみません、書き忘れました。
仰る通りプログラムの中でカウントする仕組みを作るには、という趣旨です。
>>319
それをやると遅延評価の場合と結果変わっちゃいませんかね?
322319:2012/11/08(木) 21:57:07.69
すいませんでした。orz
snd(runWriter(tak 100 50 0))とかやると糞時間かかりますね。
あとここちょっと違ってます。
 | x <= y = do
   tell(Sum 1)
   return y; 変えた
323319:2012/11/08(木) 21:59:19.20
ああごめん。>>322の最後は無視して。orz
324デフォルトの名無しさん:2012/11/08(木) 22:33:46.28
>>316
Haskellは純粋だから、評価順序によって違う値を返す関数は書けない。遅延評価を前提とした呼び出し回数を数えるには、明示的に遅延評価をエミュレートする必要がある
import Control.Applicative
import Control.Monad.ST
import Data.STRef

thunk :: ST s a -&gt; ST s (ST s a)
thunk action = do
&nbsp; ref &lt;- newSTRef Nothing
&nbsp; return $ do
&nbsp; &nbsp; cache &lt;- readSTRef ref
&nbsp; &nbsp; case cache of
&nbsp; &nbsp; &nbsp; Just val -&gt; return val
&nbsp; &nbsp; &nbsp; Nothing -&gt; do val &lt;- action; writeSTRef ref (Just val); return val

tak :: STRef s Int -&gt; ST s Int -&gt; ST s Int -&gt; ST s Int -&gt; ST s Int
tak counter ex ey ez = do
&nbsp; modifySTRef counter (+1)
&nbsp; x &lt;- ex; y &lt;- ey
&nbsp; if x &lt;= y
&nbsp; &nbsp; then ey
&nbsp; &nbsp; else do
&nbsp; &nbsp; &nbsp; a &lt;- thunk $ tak counter (pred &lt;$&gt; ex) ey ez
&nbsp; &nbsp; &nbsp; b &lt;- thunk $ tak counter (pred &lt;$&gt; ey) ez ex
&nbsp; &nbsp; &nbsp; c &lt;- thunk $ tak counter (pred &lt;$&gt; ez) ex ey
&nbsp; &nbsp; &nbsp; tak counter a b c

takCount :: Int -&gt; Int -&gt; Int -&gt; Int
takCount x y z = runST (do
&nbsp; counter &lt;- newSTRef 0
&nbsp; _ &lt;- tak counter (return x) (return y) (return z)
&nbsp; readSTRef counter)
325324:2012/11/08(木) 22:35:38.37
あれ2chの仕様変わったの…
実体参照は適当に戻してね!
326デフォルトの名無しさん:2012/11/08(木) 22:36:17.95
>< (//)
327デフォルトの名無しさん:2012/11/08(木) 22:53:32.55
>>324
ありがとうございます、言い切ってもらえると参考になります。
今すごいH本をやっと読み終わろうかという段階なので正直難しいですが、
そのうち理解できるように精進します。
328デフォルトの名無しさん:2012/11/08(木) 23:43:06.04
>>325
インデントは全角空白派が大勝利で悔しい
仕様変更の経緯のわかるスレとかあればどなたかプリーズ
329デフォルトの名無しさん:2012/11/09(金) 13:58:18.49
ランタイムのGCっていつ行われるの?

アイドル時にやってくれる?
330デフォルトの名無しさん:2012/11/09(金) 18:56:23.67
>>329
メモリが足りなくなったら
331デフォルトの名無しさん:2012/11/09(金) 19:22:04.75
-threaded付けてるならアイドル時にもやる
332デフォルトの名無しさん:2012/11/09(金) 19:22:21.31
>>330
今入力待ちで暇だなー……
あ、もう要らない領域あんじゃん
スカベンジスカベンジ……

こうはならないの?
333デフォルトの名無しさん:2012/11/09(金) 19:23:42.68
>>331
あり^^
334デフォルトの名無しさん: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デフォルトの名無しさん: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 の評価結果を数値または数字で得る、
あるいは標準出力へ出力することができるでしょうか。
336355: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 があるのに。
337335:2012/11/11(日) 16:02:48.97
すいません、レス番間違っていました。

>>335 です。
338デフォルトの名無しさん:2012/11/11(日) 18:20:04.17
皆さんの思うハスケルの他の言語に対する優位性はなんですか?
339デフォルトの名無しさん:2012/11/11(日) 18:25:43.15
conduit-0.5.4ならsourceList [1..10] $$ fold (+) 0で大丈夫だった
それよりWindowsのghc7.6.1ではghci上でconduitが使えないというのが気になる
340デフォルトの名無しさん:2012/11/11(日) 18:53:17.01
341デフォルトの名無しさん:2012/11/11(日) 19:02:24.58
>>339
7日に 0.5.4 が公開されていたんですね(その前日にDLしてました)

今 0.5.4.1 にアップデートして、
sourceList [1..10] $$ fold (+) 0 の値を print してみましたが、
コンパイルエラーでした。

大丈夫だったというのは、どのようにやったのでしょうか。
342デフォルトの名無しさん:2012/11/11(日) 19:07:49.53
>>338 普段感じる利点はこのあたり
大域的な型推論
直和型が簡単に表現できる(CのunionやOOPLのsubtypeと比べて)
パターンマッチ(網羅性チェック、分岐と値の取り出しを同時に行える、など)
副作用のある箇所が型により分離される
(LLとかよりは)実行速度が速い
343デフォルトの名無しさん:2012/11/11(日) 19:10:49.18
ほむほむ。
344341: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 のままなんです。
345341: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デフォルトの名無しさん:2012/11/11(日) 20:02:42.53
ghciで
λ> sourceList [1..10] $$ fold (+) 0
って入力しただけだけど 省略 >>= printと同じ事か

ドキュメンテーションが更新されないのは多分haddockのバージョンとghcのバージョンが違うから生成に失敗してるとかが考えられる
347341: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デフォルトの名無しさん:2012/11/11(日) 22:43:59.93
インストールした直後にcabalでconduit入れた時になんかhaddockのバージョンがおかしいって警告出たから
cabal install haddockで入れなおしたらconduitのドキュメント作ってくれるようになった
これはcabal/binにhaddockがあるからそっちが優先されるのが原因だけど
349デフォルトの名無しさん:2012/11/12(月) 02:11:31.23
>>342
Javaのような言語で書かれた業務アプリ、ドカタの世界にもこれから進出してきたりしますかね
350デフォルトの名無しさん:2012/11/12(月) 06:17:52.78
>>349
早くて20年後ぐらいじゃね?
351デフォルトの名無しさん:2012/11/12(月) 20:15:17.94
Javaで書かれた商用ソフト見たことがない
ハードについてるドライバは何度かある
352デフォルトの名無しさん:2012/11/12(月) 20:22:24.00
>>351
俺はひとつだけ知ってる
astah*

Haskell で書かれた商用ソフトってあるんかな
うちは社内ツールではあるけど
353デフォルトの名無しさん:2012/11/12(月) 20:29:59.56
そういえばperlやjavascriptで書かれた商用ソフトも見たこと無いな。
354デフォルトの名無しさん:2012/11/12(月) 20:33:15.19
コンパイルできない言語ってソースをそのまま売ることになると思うけど、それって商売になるのだろうか
355デフォルトの名無しさん:2012/11/12(月) 20:37:06.13
ソースを売れっていうのは普通にあるでしょ
356デフォルトの名無しさん:2012/11/12(月) 20:43:17.14
Android 用有料アプリは Java で書かれた商用ソフトである
という認識でいいのか?
357341: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デフォルトの名無しさん:2012/11/13(火) 20:32:21.56
>>351
Minecraft
359デフォルトの名無しさん: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デフォルトの名無しさん:2012/11/14(水) 15:21:27.75
トップレベルの関数の型宣言で
Unbox a => ……としたとして
letやwhereと続けた内部関数にも型宣言をつけるとします

このとき、その宣言でもトップレベルの a と同じ型を指定する為にはどうしますか?
361デフォルトの名無しさん:2012/11/14(水) 18:30:25.04
関数を生成する関数 :: Unbox a => 内部関数の型 -> トップレベル関数の型
トップレベル関数 = 関数を生成する関数 内部関数 where 内部関数 = …
362デフォルトの名無しさん:2012/11/14(水) 19:30:01.00
>>360
Lexically scoped type variables の事かな
363デフォルトの名無しさん:2012/11/19(月) 07:06:57.78
関数内使わないほうが読みやすく感じる
whereって必要ですか?
364デフォルトの名無しさん:2012/11/19(月) 07:07:41.13
s/関数内/関数内の関数定義/
365デフォルトの名無しさん:2012/11/19(月) 07:37:36.32
さすがに一時束縛なしはハードモードでないの? letのほうが読みやすいということもあまりないでしょう
366デフォルトの名無しさん:2012/11/19(月) 08:06:27.68
関数内関数は自由変数が多くて理解するのが難しいです
トップレベルの関数に持ち上げてしまって、モジュールの機能で外部からは隠して、
自由変数になっていたところは明示的に引数として渡すほうが良いのではないかと
367デフォルトの名無しさん:2012/11/19(月) 08:09:12.81
ケースバイケースなんで
whereが要る要らないの話にはならないと思う
368デフォルトの名無しさん:2012/11/19(月) 08:13:31.56
それはね、長い関数が読み難いだけなんだよ
369デフォルトの名無しさん:2012/11/19(月) 18:06:19.91
自由変数の追いにくさと引数渡しの煩雑さを天秤に掛けた結果、
多くの人はwhereを大量に使うことを選択している
何を読み難いと感じるかは個人差が大きいから、
多数派と違う感性を持ってると生きづらいね

という結論が嫌なら、「読みやすく感じる」よりも客観的な論拠を挙げてください
370デフォルトの名無しさん:2012/11/20(火) 00:03:10.08
プログラムは書くことより読むことのほうが難しいし読むことの方が多い
whereはプログラムを書きやすくできるが読みにくくする
whereを使うのは甘え
371デフォルトの名無しさん:2012/11/20(火) 06:58:26.14
>>366
関数内のスコープに限定するより
モジュール内スコープに広げた方が読みやすい?
頭大丈夫?
372デフォルトの名無しさん:2012/11/20(火) 07:07:32.45
>>370
頭の中で、読みにくいコードを読みやすいコードに書きかえればいいだろ
それができる人は読むことより書くことが多い
373デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2012/11/20(火) 09:16:11.00
>>372
君、仕事でプログラム書いたことないでしょ?
376デフォルトの名無しさん:2012/11/20(火) 09:29:43.91
どっちも同じだと思えば両方読めるようになるのに、ノイズが気になって読めない
ノイズが少ない方が優れているといってノイズばかり見ている

雑音を無視したら優劣の概念がなくなってしまう
優劣を気にするとデジタルが読めなくなる
377デフォルトの名無しさん:2012/11/20(火) 09:57:34.35
仕事でHaskell使った事ないわーw
378デフォルトの名無しさん:2012/11/20(火) 14:25:22.30
そもそも、お前がいう「仕事」って、受注開発(の賃金労働)のことだろ?
自分で作ったサービスで始める仕事(ビジネス)だったら、言語はなんだっていいんだよ。
ドヤ顔で「仕事でhaskell使ったことないわ」とか恥ずかしすぎるわw
379デフォルトの名無しさん:2012/11/20(火) 14:26:08.12
会社に小遣いもらってる分際が偉そうに、と思うね。
380デフォルトの名無しさん:2012/11/20(火) 14:45:50.00
仕事で戦車使ったことないわ
381デフォルトの名無しさん:2012/11/20(火) 15:35:16.08
ああ、Haskellerってこういうのばっかなのね
382デフォルトの名無しさん:2012/11/20(火) 16:26:57.23
まだ平和な方のスレですよ
383デフォルトの名無しさん:2012/11/20(火) 18:16:34.72
>>366
トップレベルにリフトすれば自由変数が減るかのような錯覚はどこからきた?
384デフォルトの名無しさん:2012/11/20(火) 18:21:28.91
さすがに>>378-379は引くわ
385デフォルトの名無しさん:2012/11/20(火) 18:30:03.16
関西型プログラミング言語
386デフォルトの名無しさん:2012/11/20(火) 18:49:25.20
なんでやねん
387デフォルトの名無しさん:2012/11/20(火) 22:50:08.77
Haskell使う案件ってどこに行けばあるんだろうな。
388デフォルトの名無しさん:2012/11/20(火) 23:02:02.53
Haskell を使う事案が発生しました
389デフォルトの名無しさん:2012/11/21(水) 01:14:53.06
>>387
大学
390デフォルトの名無しさん:2012/11/21(水) 07:23:50.52
>>387
実際にどのような仕事があるか知らんが、
君には "haskell commercial OR industry" でググる知恵はないのか
391デフォルトの名無しさん:2012/11/21(水) 09:17:06.66
ちえをくれ
392デフォルトの名無しさん:2012/11/22(木) 02:43:01.30
おいおい、haskell使った仕事が貰えないなら、
自分で始めればいいだけだろ。
仕事を作るのも仕事のうち。
393デフォルトの名無しさん:2012/11/22(木) 06:04:12.01
ま、自分が知らないからって無いで押し切るのは
一つの生き方ではあるわな
394デフォルトの名無しさん:2012/11/22(木) 07:38:46.45
>>392
いや、維持保守を引き継ぐ人たちがHaskell使えないのに
Haskellのソースを残すわけには行かないだろ。
395デフォルトの名無しさん:2012/11/22(木) 09:54:55.62
Cに変換して納品
396デフォルトの名無しさん:2012/11/22(木) 13:58:22.73
>>393
本当に知らなくていい事なのかを考えもしない手合いは厄介だけどな。
397デフォルトの名無しさん:2012/11/22(木) 13:59:26.23
>>395
いやそこはPHPで。
398デフォルトの名無しさん:2012/11/22(木) 14:55:22.06
>>393は誰に向かって書いてるんだ?
399デフォルトの名無しさん:2012/11/22(木) 16:17:40.42
>>394
仕事にHaskellを使う事の利点を、アピール出来なけれぱそうなるな。
400デフォルトの名無しさん:2012/11/22(木) 17:23:28.24
>>387
あるよ。金融系で実稼働している。
401デフォルトの名無しさん:2012/11/22(木) 17:29:09.33
データマイニングでHaskell使ってる人なら知ってるけど零細だからなー…
402デフォルトの名無しさん:2012/11/22(木) 21:09:50.14
仕事があるかとかどうでもいいわ
そんなに仕事がしたけりゃJavaでも書いてればいいじゃん
403デフォルトの名無しさん:2012/11/22(木) 21:32:01.16
黒板言語未満がここに立証されました
404デフォルトの名無しさん:2012/11/22(木) 21:35:32.48
すどーさいえんてぃふぃっくめそっど
405デフォルトの名無しさん:2012/11/22(木) 21:49:49.04
今 Haskell でデータベースを操作するプログラムを書くのに
最も洗練されているライブラリは何でしょう?

やはり今も昔も haskelldb が一歩先を行く感じでしょうか。
406デフォルトの名無しさん:2012/11/22(木) 23:28:04.06
Data.List.partition :: (a -> Bool) -> [a] -> ([a], [a])

これを次のいずれかのような型にしたい

f : (Monad m) => (a -> m Bool) -> [a] -> m ([a], [a])
f : (Monad m) => (a -> m Bool) -> m [a] -> m ([a], [a])

どちらでもいいのですが、スクラッチビルドすることなく、
どうにか元の partition を使って f を作れないでしょうか。

[FilePath] を System.Directory.doesDirectoryExist と partition を使って
ディレクトリとそれ以外のものに分けたい、というのが動機です。

ちなみに、Control.Monad.liftM2 partition だと、
Monad m => m (a -> Bool) -> m [a] -> m ([a], [a]) という型になって、
これでは目的を果たせませんでした。
407デフォルトの名無しさん:2012/11/23(金) 00:12:37.96
無理やりっぽいやり方だけど

f pred xs = do{
rs <- mapM pred xs;
let (ys, zs) = partition snd (zip xs rs);
return (map fst ys, map fst zs);
}

なら目的は果たせそう
408デフォルトの名無しさん:2012/11/23(金) 00:16:47.55
paritionM で検索すると同じようなことを考えてる人がいる
filterM なら存在するけど partitionM はないんだよな
409デフォルトの名無しさん:2012/11/23(金) 01:03:35.06
Haskellで求人募集してphp組んでもらいます
410デフォルトの名無しさん:2012/11/23(金) 02:09:12.09
Haskellでphpのコード自動生成してたのを思い出した
411デフォルトの名無しさん:2012/11/23(金) 03:47:23.41
>>394
保守?
お前の仕事はそれしかないのか?
>>395
納品?
twitterやfacebookあるいはwindowsみたいに
自分でアイデアを実現して商売始めてやろうという気概や野望はないのか?
412デフォルトの名無しさん:2012/11/23(金) 03:48:46.49
人に言われたことしかやらないような雑魚はhaskellやらなくていいよ。
haskellは受注開発向きじゃないんだから。
413デフォルトの名無しさん:2012/11/23(金) 03:51:13.24
受注開発のソフトハウスなんて指示待ち君の会社バージョンじゃんw
414デフォルトの名無しさん:2012/11/23(金) 06:10:46.56
うわぁ…。
415デフォルトの名無しさん:2012/11/23(金) 07:01:49.96
Haskellは>>411-413みたいな人に向いてるらしい
416デフォルトの名無しさん:2012/11/23(金) 07:02:55.06
何に感化されたのやら。
417デフォルトの名無しさん:2012/11/23(金) 07:05:51.48
なんか、>>411-413が無職の妄想野郎に見える。
418デフォルトの名無しさん:2012/11/23(金) 07:24:06.23
Twitter,Facebook,Windows。どれも、既に類似品があったのに成功した例だな。アイデアと言うよりは、マーケティングの上手さ。
419デフォルトの名無しさん:2012/11/23(金) 07:27:39.44
Simon MarlowがGHCのフルタイム開発を離れる
http://www.haskell.org/pipermail/haskell/2012-November/023566.html
Haskell終わったな
420デフォルトの名無しさん:2012/11/23(金) 07:50:59.95
何も終わっちゃいない
始まってすらない
421デフォルトの名無しさん:2012/11/23(金) 08:10:32.64
いつになったら妄想野郎以外にも使ってもらえるようになるんですか?
422デフォルトの名無しさん:2012/11/23(金) 08:50:34.46
バカが張り付いてるな
423デフォルトの名無しさん:2012/11/23(金) 09:07:05.42
>>411-413
いかにも○○(言語)が最強とか言っちゃいそうなタイプだな
学生に多い
424デフォルトの名無しさん:2012/11/23(金) 09:10:58.51
受注開発してる奴は底辺ドカタ。

底辺ドカタが言語を語るなんて滑稽。君達に選択権は無い。
425デフォルトの名無しさん:2012/11/23(金) 09:27:27.86
どうせ学生ならHaskellみたいなものよりもAgdaとかCoqみたいなものに傾倒して欲しい
426デフォルトの名無しさん:2012/11/23(金) 09:40:17.12
モノで優越感を得る事にはまり込んだヒトの末路
427デフォルトの名無しさん:2012/11/23(金) 09:45:53.79
安全性に傾倒するヒトは、利益の多さではなく損害の少なさを評価する
社畜よ、これが安全だ
428デフォルトの名無しさん:2012/11/23(金) 09:55:47.01
赤字やん
429デフォルトの名無しさん:2012/11/23(金) 10:02:35.08
>>424
残念。趣味では好きな言語を選択して楽しんじゃってまーすw
ベロベロバーw
430デフォルトの名無しさん:2012/11/23(金) 10:04:06.15
ベロベロバーっておっさんっぽい
431デフォルトの名無しさん:2012/11/23(金) 10:06:22.66
安全性が本当に信じられるならバグ出したら自分の死体が東京湾に沈むような仕事でも請けられる筈
432デフォルトの名無しさん:2012/11/23(金) 10:08:47.01
28歳のおっさんでスマソ
433デフォルトの名無しさん:2012/11/23(金) 10:13:08.07
巷の関数型言語を安全とか言う人達ってJavaや動的言語のやりすぎで危険という感覚が麻痺してるんだろうな
ハードウェア関係の人から見たらHaskellすら危なくて触る気しないぐらいなんだろう
434デフォルトの名無しさん:2012/11/23(金) 10:24:07.34
安全じゃないのはプログラムを作る人間の方
実行もテストもしないやつとか
435デフォルトの名無しさん:2012/11/23(金) 10:36:28.12
    どうでもいい
436デフォルトの名無しさん:2012/11/23(金) 11:02:04.58
haskellは全力で普及を拒否する。
理由は>>394みたいな雑魚がよってくるから。
437デフォルトの名無しさん:2012/11/23(金) 11:20:18.06
本物のプログラマはhaskellを使う
438デフォルトの名無しさん:2012/11/23(金) 11:34:25.33
Haskellの意志?
439デフォルトの名無しさん:2012/11/23(金) 11:48:18.59
遺志?
440デフォルトの名無しさん:2012/11/23(金) 13:48:08.19
>>436
関数型言語が普及するためにお前みたいなのが絶滅するべきなんだな。
日本のSI業界において受注開発を否定するわけには行かない。
441デフォルトの名無しさん:2012/11/23(金) 13:51:45.66
受託
442デフォルトの名無しさん:2012/11/23(金) 15:21:24.51
複数のプログラミング言語を日常的に使いこなしてる者は、地球人口の1%も居ないだろうに、その中での普及率を気にする人って、皆と同じでないと不安なだけ?
443デフォルトの名無しさん:2012/11/23(金) 15:25:08.90
Haskell作ってる連中は、安全なんて言ってないんだが、誰かが作った煽り文句に踊らされるのは常に居るからな。
444デフォルトの名無しさん:2012/11/23(金) 15:26:40.05
>>427
大企業は、ヘマを減らす事で成長するんだぜ?
445406:2012/11/23(金) 15:52:31.69
>>407 >>408
アドバイス、あれがとうございます。

どうも、zipWithM みたいに標準ライブラリ内の高階関数を
partition に適用するだけでは作れないみたいですね。

諦めて、partition のソースをそのまま拡張して自作することにしました。

import Control.Conditional (ifM)

partitionM :: (Monad m) => (a -> m Bool) -> [a] -> m ([a], [a])
partitionM p xs = foldM f ([], []) xs
 where f ~(ts, fs) x = ifM (p x) (return (x:ts, fs)) (return (ts, x:fs))
446デフォルトの名無しさん:2012/11/23(金) 17:54:10.19
というか、諦めてないから自作するんだよね
本当に諦めたらfilterを使う
447デフォルトの名無しさん:2012/11/23(金) 17:58:32.39
>>442
1%でも7000万人やぞ
448デフォルトの名無しさん:2012/11/23(金) 18:08:41.96
プログラマーは世界に二千万人
449デフォルトの名無しさん:2012/11/23(金) 18:28:14.73
シェルスクリプトとC言語の両刀使いは普通にいると思う。

あと、C言語にインラインアセンブラとか。
450デフォルトの名無しさん:2012/11/23(金) 18:37:42.98
新入社員の中にJavaは習ったけどC言語をやったことがないという人がいてビビッた
本屋で情報処理の試験の本をよくよく読んでみたらもC言語が必須じゃなくてビビッた
451デフォルトの名無しさん:2012/11/23(金) 19:33:58.80
それは当たり前だよ
もう今の時代javaの方が手軽だし
452デフォルトの名無しさん:2012/11/23(金) 20:07:51.26
Cは速すぎるからCの上に更に別の言語を作る余裕があるんよ
Javaには余裕が足りない
453デフォルトの名無しさん:2012/11/23(金) 20:26:11.39
お前Scala知らないだろ
454デフォルトの名無しさん:2012/11/23(金) 22:00:25.13
インタプリタしか作れないバカを許容する手軽さがほしい
455デフォルトの名無しさん:2012/11/24(土) 00:12:57.66
>>447
1%も居ない <> 1%くらい
456デフォルトの名無しさん:2012/11/24(土) 00:17:44.91
>>452
まともなJavaエンジンなら、充分早い。
問題は、未熟なJavaプログラマーが書いたコードは大抵遅い、ということ。
この問題を避け、尚且つJava資産を活かすために、Java以外の言語で書いたソースを
Javaソースに変換・コンパイルする手法も使われている。
457デフォルトの名無しさん:2012/11/24(土) 00:49:58.53
処理系の速度を気にする職場って何作ってるんだろ
保守が1.5倍楽になるなら、速度半分になってもいい職場がほとんどだと思う
速度っつっても、ディスクアクセスとネットのボトルネックから見ればもう処理系の差なんて無視できる

速度を基準に言語を選ぶのは、画像処理屋と組み込み屋だけではなかろうか
458デフォルトの名無しさん:2012/11/24(土) 00:57:18.66
>>457
シミュレーション(数値計算)屋も入れろよ
459デフォルトの名無しさん:2012/11/24(土) 01:27:52.99
>>458
数値計算屋さんは速度ではなく、ボスがFortranかCのどっちで教育を受けたかで言語が決まる
460デフォルトの名無しさん:2012/11/24(土) 02:05:48.82
>>440
SI業界自体オワコンじゃん
461デフォルトの名無しさん:2012/11/24(土) 02:07:55.47
企業SNSはFacebook使いましょう
業務システムはパッケージを買いましょう
ネット通販サイトは楽天を使いましょう

こんな時代ですよ
462デフォルトの名無しさん:2012/11/24(土) 02:10:44.24
SIは先細り。
ITの行く先は、今度はサービスを作り出す側だ。
463デフォルトの名無しさん:2012/11/24(土) 02:29:03.30
企業も不景気でカネが無いから、
「現在の業務プロセスがこうなので、それに合わせてシステムを作ってください」
から
「システムが新しくなったので、業務プロセスを変更します」
という風に変わっていくだろうね。
464デフォルトの名無しさん:2012/11/24(土) 08:38:10.91
どうだろうなあ
社内のシステム作ったり、政府のシステム作ったりしてたが、
到底WebアプリやExcelマクロなどが無くなるとは思えないが
465デフォルトの名無しさん:2012/11/24(土) 08:55:27.70
こういうスレで妄想述べてる奴はなぜか知らないが
海外のWebサービス企業と日本のSIerを比較するからな。
グーグルと富士通ではビジネスモデルが違いすぎるだろう。
比べるならオラクルやHPを出さないと。

そして、googleやamazonに対抗するWebサービス企業は楽天()などなんだが、
日本もこっちを主流にするって?
466デフォルトの名無しさん:2012/11/24(土) 12:08:19.05
本物のサムライは、忍者や戦艦と比較されても文句を言わない
妄想だけど
467デフォルトの名無しさん:2012/11/24(土) 12:09:37.54
>>465
Oracleはパッケージ系で、富士通は受託開発系。
468デフォルトの名無しさん:2012/11/24(土) 12:28:23.42
>>464
お前の仕事は似たような大企業ばっかり相手にしてないか?

最近では各社毎のシステム開発がいかに無駄か知れ渡ってきている。
それに加え、不景気のせいでリストラや構造改革が強いられるようになった。
そこで、フットワークの軽い中小企業では、
実用レベルになってきた既製のWEBサービスやパッケージを利用することで、
汎用的な人材確保やシステム開発コストの削減等ができるようになった。
システムを組織に合わせるのをやめて、
組織がシステムに合わせるようになったんだよ。
469デフォルトの名無しさん:2012/11/24(土) 12:51:08.71
>>465
>そして、googleやamazonに対抗するWebサービス企業は楽天()などなんだが、
>日本もこっちを主流にするって?

google、amazon、楽天が並んでたら、普通はamazonを選ぶだろ。
470デフォルトの名無しさん:2012/11/24(土) 13:07:58.30
官公庁では、差し押さえ物件の販売なんかはヤフオクを利用してる。
流れはガラパゴス的な独自仕様のシステム開発から既存のサービスを利用する方に流れが変わってきてるんだよ。
471デフォルトの名無しさん:2012/11/24(土) 13:31:09.01
>>469
俺はそのどれかに就職していいと言われたらgoogle選ぶけど
472デフォルトの名無しさん:2012/11/24(土) 13:33:42.96
>>470
官公庁の利用してるサービスはヤフオクだけなのかよw
そもそも官公庁自体のHPが数限りなくあるわけだがw
473デフォルトの名無しさん:2012/11/24(土) 13:38:48.59
確かにWEBページを作る仕事はなくならないと思うよ。
でも、それはバックグラウンドで動く複雑なシステム抜きなら簡単な仕事だし、
どう考えても今より需要が伸びる余地は無いと思うよ。
474デフォルトの名無しさん:2012/11/24(土) 13:43:02.38
「今よりは伸びない」かもね
法律は毎年増えてるわけで、減りもしないけどw
475デフォルトの名無しさん:2012/11/24(土) 13:46:00.08
勘違いしないように言っとくけど、
「バックグラウンドで動く複雑なシステム」
を作る仕事は確実になくなっていくと思うけどね。
476デフォルトの名無しさん:2012/11/24(土) 13:46:37.08
え?
477デフォルトの名無しさん:2012/11/24(土) 13:47:05.28
ごめん、修正。
× を作る仕事
◯ を作らされる仕事
478デフォルトの名無しさん:2012/11/24(土) 13:48:53.18
世の中の流れはガラパゴスから共通仕様に変わる。
受注開発からパッケージに変わる。
479デフォルトの名無しさん:2012/11/24(土) 13:49:43.53
>>475
むしろそういう仕事こそ、汎用パッケージではどうにもならないので
無くなるとは思えない
特殊な法律やら仕組みにあわせてシステムをカスタマイズする仕事は最後まで無くならないよ
480デフォルトの名無しさん:2012/11/24(土) 13:51:58.39
まあそういう話は表計算ソフトやらワープロソフトが現れた頃から言われてるよな
これからはbasicでプログラムを組む時代じゃないとかw
しかし、結果はご覧の通り、basicでマクロを組んでいます。
481デフォルトの名無しさん:2012/11/24(土) 13:58:18.64
>>479
法律って日本全国統一だよね。
パッケージなら修正してアップデートすれば対応できるわけで、
個々のガラパゴスシステムを修正して回るより遥かに低コストでできるよね。
482デフォルトの名無しさん:2012/11/24(土) 13:59:33.42
>>481
その日本全国統一のパッケージを作る仕事がまずなくならないなw
さて、法律ってどのくらいの量あるでしょうか?
483デフォルトの名無しさん:2012/11/24(土) 14:01:39.76
そもそもシステムが気持ち悪いぐらい複雑怪奇に成長してコストもうなぎのぼりになって、
それが命取りになって逆に利益や業務を圧迫するのは、
システムを業務プロセスに合わせようとするからなんだよ。
484デフォルトの名無しさん:2012/11/24(土) 14:02:47.19
>>482
何を言ってるんだ?
485デフォルトの名無しさん:2012/11/24(土) 14:03:56.06
でもそれも限界あるよね
国会で法律が決まったらシステムがあわせるよりしょうがないしね
「システム簡単だからこういう法律にします」でなんでもかんでも決められれば良いけどw
486デフォルトの名無しさん:2012/11/24(土) 14:05:14.08
487デフォルトの名無しさん:2012/11/24(土) 14:05:44.74
>>484
わからない?まず、全国統一の法律にあわせて
カスタマイズする必要があるわけで
488デフォルトの名無しさん:2012/11/24(土) 14:06:18.02
>>486
話が噛み合ってないな
パッケージでどうやって法律に対応するの?
489デフォルトの名無しさん:2012/11/24(土) 14:07:17.46
ちなみに法律は地方によって異なります。
490デフォルトの名無しさん:2012/11/24(土) 14:07:38.76
>>488
俺も噛み合ってないと思う。
パッケージを修正してアップデートすればいいだけだろ?
491デフォルトの名無しさん:2012/11/24(土) 14:08:51.84
>>489
地域設定で対応可能だろ。
492デフォルトの名無しさん:2012/11/24(土) 14:08:55.72
>>490
「パッケージを修正する」仕事が無くならない
そもそもパッケージでは対応できない
アップデートしたらしたで、互換性の問題とかいろいろ出るから
それを修正する必要も出てくるし
493デフォルトの名無しさん:2012/11/24(土) 14:09:29.99
>>491
無理無理w
if文使わなきゃ複雑な条件設定できないよw
494デフォルトの名無しさん:2012/11/24(土) 14:10:58.23
そもそも、システムで地域ごとに違う部分ってそんなに多くは無いぞ。
細かい部分をカスタマイズできる余地を残したパッケージにすれば良い。
カスタマイズはSIerがやればいい。
495デフォルトの名無しさん:2012/11/24(土) 14:12:28.00
>>492
パッケージを作ったり修正する仕事をなくす必要がない。
俺はそれを批判したことは一度も無いし、むしろ受託開発より伸びしろが大きいと思ってる。
496デフォルトの名無しさん:2012/11/24(土) 14:15:27.67
>>494-495
そういうパッケージを受託開発で作る仕事があるだろw
で、細かいことに対応するとなると汎用性は犠牲になり、
新たなシステムがまた必要になる
既存のパッケージではもちろん無理
あるというのなら「あらゆる法律に基づいたシステムに対応するパッケージ」とやらの具体名を教えてくれよ
国会、裁判所、大蔵省から財務省、県庁やら市役所やらなんやら、あらゆる省庁の
システムに対応したパッケージがあるとでも?
なんのことだよマジでw
497デフォルトの名無しさん:2012/11/24(土) 14:15:49.44
>>493
if文?
もちろんどんなソフトでもif文は使うと思うが、
それがどうした?
498デフォルトの名無しさん:2012/11/24(土) 14:16:24.33
>>497
そうかそうか、どんなソフトでもプログラミングの仕事はあると
そういうことでよろしいか?w
499デフォルトの名無しさん:2012/11/24(土) 14:17:19.94
>>496
>そういうパッケージを受託開発で作る仕事があるだろw
さらに層が分厚くなってないか?w
500デフォルトの名無しさん:2012/11/24(土) 14:18:45.56
>>499
まあ、今でもSIerの仕事はそういう仕事なんだけど
ある程度特化してるから「パッケージ」と呼ぶかどうかは微妙だが
結局、パッケージと呼ぼうが呼ぶまいが、汎用性を工夫しようがしまいが
限界があるので似たような仕事は絶対無くならない
501デフォルトの名無しさん:2012/11/24(土) 14:24:46.26
>>498
そうだが、無くなると言った覚えはないがw
502デフォルトの名無しさん:2012/11/24(土) 14:49:27.75
Hask…いや、何でもないです
503デフォルトの名無しさん:2012/11/24(土) 14:54:07.57
>>500
一部のコアシステムでは各社毎のチューニングが必要だからその通りだが、
簡単なところから汎用品を積極的に利用しようという動きがあるのは確か。
受託開発はさらに低い層の仕事になって、利益も成果物の質も下がるだろう。

知っての通り、受託開発では自由がない。
Haskell使いたくても使えないんだよ。
だったら、先細りでこれからどんどん薄利多忙になる受託開発なんか辞めて
思い切って自分で事業始めちまえばいいんだよ。
504デフォルトの名無しさん:2012/11/24(土) 15:33:12.01
どんなに粋がってもここでSIer見下してるHaskell基地外がニートであることに変わりないわけで。

Hasukell自体はいい言語なので良識あるエンジニアの下で
もっと普及してほしいね。
505デフォルトの名無しさん:2012/11/24(土) 15:38:32.65
>>504
ニートほどよく他人をニート認定するよね。
自分がニートだっていうことにコンプレックスがあるから?
506デフォルトの名無しさん:2012/11/24(土) 15:39:51.49
Haskellは実験場だから普及しないほうが良い。

普及させるならocamlとかで良い。
507デフォルトの名無しさん:2012/11/24(土) 15:43:40.13
>>505
なんかぼろ糞に叩かれてるSIerの元受だからだよ。
508デフォルトの名無しさん:2012/11/24(土) 15:44:51.47
>>506
HaskellっぽいシンタックスのOCamlがあれば
絶対それ使うわ
509デフォルトの名無しさん:2012/11/24(土) 15:49:38.60
>>505
そのレス、自分がニートだって主張になってませんか。
510デフォルトの名無しさん:2012/11/24(土) 16:04:04.04
>>509
ニートの話なんかしてないのに、唐突にニート認定とか、
自分がニートであることがコンプレックスで、
「ニート」という言葉が普段から頭にこびり付いている人間としか考えられないわ。
511 ◆QZaw55cn4c :2012/11/24(土) 16:04:35.83
つまりF#最強ってことですかね?
512デフォルトの名無しさん:2012/11/24(土) 16:04:52.21
>>507
SIerの元請けだからなんだって?
513デフォルトの名無しさん:2012/11/24(土) 16:05:09.90
それはOCamlっぽいC#だろうが > F#
514デフォルトの名無しさん:2012/11/24(土) 16:05:42.69
MS言語はお断り
515デフォルトの名無しさん:2012/11/24(土) 16:06:21.65
完全にクリーンなアカデミックオープンソース土壌で育った言語でないと信用しない
516デフォルトの名無しさん:2012/11/24(土) 16:10:21.23
客観的に見て、SIerは下り坂まっしぐらだろ。
517デフォルトの名無しさん:2012/11/24(土) 16:16:59.89
スルガ銀行の一件をみてもね
518デフォルトの名無しさん:2012/11/24(土) 16:24:43.38
どうでもいいからここでやんな
519デフォルトの名無しさん:2012/11/24(土) 16:31:31.38
元はといえば受託開発でHaskellが使えないっていう話だったよな?
Haskellの使い道について語るのにHaskellスレを使って何が悪い。
520デフォルトの名無しさん:2012/11/24(土) 16:32:58.48
思ったんだけど、
なんで勘定系
521デフォルトの名無しさん:2012/11/24(土) 16:34:10.63
>>517
なんで勘定系システムって、各行毎に独自に作ってるの?
どの銀行も窓口があって、ATMがあって、ネットで取引できて、
っていうインターフェース部分はほとんど同じなのに。
522デフォルトの名無しさん:2012/11/24(土) 16:37:05.60
全銀協
523デフォルトの名無しさん:2012/11/24(土) 16:57:01.12
>>521
サーバセンターがアメリカの同じ場所にあるというオチまでついてる
524デフォルトの名無しさん:2012/11/24(土) 18:07:09.42
>>508
LISPUSER Qi - Lisp for 21 Century
Lisp isn't a language, it's a building material.

http://lispuser.net/commonlisp/qi.html
525デフォルトの名無しさん:2012/11/24(土) 21:27:40.16
Haskell使いって、このスレにいるような奴ばっかなの?
きんもーっ☆
526デフォルトの名無しさん:2012/11/24(土) 22:44:07.03
>>525
2chで世界が判ったような気になり始めたら、色んな意味でヤバい。
527デフォルトの名無しさん:2012/11/24(土) 22:51:30.68
>>521
勘定系のうち、預金勘定元帳については銀行間で大差はない(はず。以前関わったがブラックボックスが多かった。)
金融商品関連まで含んだ部分については、当然、外部に教えたくない所がある。
問題は、銀行合併の時。
”どこに合わせるか”が政治的に決まるので、現場泣かせ。
528デフォルトの名無しさん:2012/11/24(土) 23:54:22.43
>>524
面白そうだ。
529デフォルトの名無しさん:2012/11/25(日) 03:09:08.47
>>526
世界のことを知っている人なんてこの世に一人もいないw
世界を知った気になっている人はネラーに関係なくすべてやばいw
530511:2012/11/25(日) 04:59:01.06
じゃあ俺まじやばい「世界が崩壊して再建に尽力する神託を得る」夢ばかりみている零場弐の世界観だよく利く薬はないものか
531デフォルトの名無しさん:2012/11/25(日) 10:47:53.56
     (´・ω・`)
   /     `ヽ.   お薬増やしておきますねー
  __/  ┃)) __i |
/ ヽ,,⌒)___(,,ノ\
532デフォルトの名無しさん:2012/11/25(日) 12:43:14.64
2chに限らず、ネット上のhaskellerは大抵キモいよ
533デフォルトの名無しさん:2012/11/25(日) 12:48:15.27
ネット上で活動していないHaskellerなんているんだろうか
534デフォルトの名無しさん:2012/11/25(日) 13:08:15.13
本気でそう思ってるのか
535デフォルトの名無しさん:2012/11/25(日) 13:22:26.33
きもい言われて動揺する情弱はすぐ消えるし
べつにきもくていいんじゃね?と思ってるやつしか残らない
536デフォルトの名無しさん:2012/11/25(日) 14:51:24.15
豆腐メンタルも情弱扱いなのかおっとろしい世の中だ
537デフォルトの名無しさん:2012/11/25(日) 15:20:22.26
>>527
銀行系はまだCobolを使ってるのだろうか…
538デフォルトの名無しさん:2012/11/25(日) 16:24:26.45
自分がわからない言語のスレにいつまでも粘着するキチガイはヤバいよ
539デフォルトの名無しさん:2012/11/25(日) 17:29:24.90
そういう妄想するようになったら終わりだな
540デフォルトの名無しさん:2012/11/25(日) 17:30:27.60
>>537
窓口業務にデータを提供するシステムの一部は、ObjectCOBOL系に移行。
年次処理などの、めったに使わない&過去遡及処理しないものは、前年のをコピー後、修正したりするから、昔のCOBOLが健在。
聞いた話では、欧米の金融系の一部で、商品開発・メンテナンスにHaskellを使ってるそうだ。
何に使うというと、既存商品のルール整合性チェック(商品内、商品間、規制・法律との照合)、新商品開発(既存と同様)。
ただ開発途中で、既存商品中にルール矛盾がみつかって、回避策(万一、訴訟で矛盾を突かれると困る)が出せなくて例外処理を入れたりするとHaskellでやるメリットが薄れるので、Haskell適用前にビジネスルールとして整理する方が合理的かも。
まあこれは他言語でシステム組むときも似たようなもの。
顧客にヒアリングしていったら、客自身も意識していなかった未整理・矛盾点が出て来て、作業担当に聞いたら、”自前のExcel計算結果と都度差し替えてました”なんて事もあるから。
541デフォルトの名無しさん:2012/11/25(日) 23:28:14.44
くそ! 騙された!
<$> って $ みたいに 『以降右側全部を括弧で括る』みたいに扱えないのか!

f <$> (…)

こうしないと駄目なのかよ!
驚き最小の原則に反してるじゃないか!
542デフォルトの名無しさん:2012/11/26(月) 00:01:25.33
f <$> mx <*> my <*> mz

f <$> (mx <*> my <*> mz)
と解釈されるよりはマシ
543デフォルトの名無しさん:2012/11/26(月) 01:13:26.36
<●> <●>
544デフォルトの名無しさん:2012/11/26(月) 02:51:39.68
<^o^>
545デフォルトの名無しさん:2012/11/26(月) 03:05:11.49
>>540
会計計算と飛行機のソフトウェアだけはHaskell使わないでほしいです
546デフォルトの名無しさん:2012/11/26(月) 07:44:21.03
C++やJavaよりマシ
547デフォルトの名無しさん:2012/11/26(月) 07:59:05.66
飛行機は知らんけど会計計算なんて得意分野だろう
548デフォルトの名無しさん:2012/11/26(月) 08:03:20.58
ここはひどいインターネッツですね
549デフォルトの名無しさん:2012/11/26(月) 08:33:18.76
飛行機は緊急事態の一瞬にGC稼働とかは困るよね
550デフォルトの名無しさん:2012/11/26(月) 09:00:30.86
CVR/FDRの保存領域が減ったときにGC発動か
胸熱
551デフォルトの名無しさん:2012/11/27(火) 14:59:43.45
リアルタイムシステム向けのgcレスな実装とかもあるんだろう多分
552デフォルトの名無しさん:2012/11/27(火) 19:09:02.78
クロージャが包んでる環境から参照されてるメモリ領域は
寿命が確定できないからGCで管理するしかないんじゃね?

というか、関数型言語の処理系がほぼどれもGCを持ってるのは、
高階関数とレキシカルスコープを認めると
自然とそういうクロージャが出現してしまうからだと思ってるんだが、そうでもない?
553デフォルトの名無しさん:2012/11/27(火) 19:14:20.56
そこは線形型とかリージョンとか色々使って何とか頑張って欲しい
554デフォルトの名無しさん:2012/11/27(火) 19:17:31.67
クロージャを含むナニカを取得したスコープの寿命と同じでいいんじゃないか
555デフォルトの名無しさん:2012/11/27(火) 19:40:47.42
最初に大きめの領域確保しといて、その領域に読み書きすればGC発生しないだろ。
556デフォルトの名無しさん:2012/11/27(火) 19:52:42.71
無限にリソースがあればGC不要
557デフォルトの名無しさん:2012/11/27(火) 20:22:32.70
そりゃあ確かに、1+1=3ならばのりピーはアメリカの大統領だけどさ。
558デフォルトの名無しさん:2012/11/27(火) 20:36:28.87
だか待って欲しい。
559デフォルトの名無しさん:2012/11/27(火) 23:55:18.02
>>557
なんか奥田民生の歌の歌詞みたいだな
560デフォルトの名無しさん:2012/11/28(水) 02:25:24.89
x+y=xy と定義するなら 1+1=11 で 3 になる
561デフォルトの名無しさん:2012/11/28(水) 03:19:42.85
>>556
そういう意味じゃない。
Javaじゃ普通の技術なんだがな。
562デフォルトの名無しさん:2012/11/28(水) 07:44:32.21
RTSJとかあるもんな
5年前はPRECが来る!とか言われてたけどその後どうなったかしらん
563デフォルトの名無しさん:2012/11/28(水) 23:15:32.90
Javaでプログラミングしてる飛行機にも乗りたくない
564デフォルトの名無しさん:2012/11/28(水) 23:48:29.76
このスレレベル低っ
565デフォルトの名無しさん:2012/11/29(木) 02:10:09.62
命に関わるような社会インフラで高品質を要求されるプログラムは、未だにアセンブラでコーディングされているという圧倒的現実
566デフォルトの名無しさん:2012/11/29(木) 02:12:10.79
しったかすんじゃねえよ
大多数はラダー言語だよ
567デフォルトの名無しさん:2012/11/29(木) 02:15:28.67
>>565
想像で書いてるんだろ?

レベル低いわぁ
568デフォルトの名無しさん:2012/11/29(木) 02:24:00.35
>>567
継続性と互換性重視だから、ずっと同じ言語(つまりアセンブラ)でソフトを更新し続けてる
少しマシな場合だと、高級言語のコードの中にいきなりアセンブラのコードの羅列が登場したりする
団塊の世代が退職すると同時にアセンブラ技術者が職場からいなくなって、マジで危機的状況になってる

日本に限らずインフラのソフトは先進国ほど危険な状態
569デフォルトの名無しさん:2012/11/29(木) 02:34:30.39
>>568
そんな話は聞かねえな。
あったとしても、よっぽどローカルすぎる話。
570デフォルトの名無しさん:2012/11/29(木) 02:39:45.36
現役でソースファイルの中身がアセンブラなのは鉄道と交通と航空とATMくらいだから気にしなくていい
571デフォルトの名無しさん:2012/11/29(木) 02:53:22.73
2000年問題のときにアセンブラコードの海から2桁の数字を検索しまくったのはいい思い出
Haskellだったら一瞬で終わったか、発狂してたか、どっちかだな
572デフォルトの名無しさん:2012/11/29(木) 07:33:16.06
>>570
衝撃のあまり‥‥‥
573デフォルトの名無しさん:2012/11/29(木) 11:04:53.67
>566
死んどらーですね判ります
574デフォルトの名無しさん:2012/11/29(木) 11:04:53.72
一周回ってHaskellでアセンブリエミュレータ作ってる
575デフォルトの名無しさん:2012/11/29(木) 11:09:33.61
複雑なことをしにくく、余計な機能を追加しにくく、文字通りコードと状態をワンステップごとに追ってデバッグできるので、アセンブリ言語は信頼性が高い
むしろ、信頼性が高すぎる
そのため、一度完成してしまったら、容易に置き換えることができない
576デフォルトの名無しさん:2012/11/29(木) 11:17:26.69
>>570
鉄道のシステム開発やってた知り合いがいたが、
Prolog使ってるって言ってたぞ。
577デフォルトの名無しさん:2012/11/29(木) 11:20:01.09
時刻表やスジ屋の開発ならともかく、少なくともPrologで電子制御されてる電車には乗りたくない
578デフォルトの名無しさん:2012/11/29(木) 11:51:39.83
駅すぱーとの開発か
579デフォルトの名無しさん:2012/11/29(木) 12:12:17.01
アセンブリ言語だけで全部作ってデバッグ完壁にできるだけの労力が投入できるなら
他の言語使っても同等以上の信頼性得られるよね
アセンブリ言語で速度じゃなくて信頼性を売りにするとかありえないよね
580デフォルトの名無しさん:2012/11/29(木) 12:20:15.28
>>579
ヒント: 高級言語は処理系と言語仕様にも重大なバグがある
581デフォルトの名無しさん:2012/11/29(木) 12:34:19.52
工作機械とかのマイコンやOSを独自開発してHaskellでシステムをプログラミングしたいときは、Haskellのコンパイラを作るのだろうか
だとしたら、せめてTRONのHaskellくらい誰か作ってほしい
582デフォルトの名無しさん:2012/11/29(木) 13:02:21.33
>>580
そうかも知れないし、
一方で、長ったらしいアセンブリコードにも重大なバグがある(かも知れない)。
どこにバグがあるのかテストしてみないとわからない。

Haskellみたいなオープンソースの処理系なら、
処理系にバグがあるなら処理系のコードを書きなおせばいいだけのこと。
583デフォルトの名無しさん:2012/11/29(木) 13:04:07.63
そして、そのフィードバックがコミュニティにとっても有益だし、
Haskellを使う人や組織が、お互いがフィードバックし合えば、
すべて自社開発するよりはるかに効率的に利益が享受できる。
584デフォルトの名無しさん:2012/11/29(木) 13:16:05.64
300万円もらって我々が選んだ高級言語でプログラミングしたけど、我々が変更不可能なハード(アセンブラ)ではなく高級言語の仕様にバグがあったため、プロジェクトが頓挫しております
しかし言語のコミュニティにとっては有益なので我慢してください
585デフォルトの名無しさん:2012/11/29(木) 13:23:08.53
脳内お花畑っすなあ
586デフォルトの名無しさん:2012/11/29(木) 13:23:09.69
組み込み屋から見れば、コアダンプしたときに、ダンプファイルの一辺がコードのどの部分に対応しているか分かれば言語は何でもいい
587デフォルトの名無しさん:2012/11/29(木) 13:41:50.78
本物のプログラマはコアダンプを読める
588デフォルトの名無しさん:2012/11/29(木) 13:44:31.60
むしろ、組み込み屋さんは高級言語でプログラミングしようとし続けてきた
しかし、ハードが不統一なため(特異なハードだから売り物になる)、その不統一な部分を言語の独自拡張でカバーしてきた
その一番簡単な拡張方法が、アセンブリ言語の埋め込み

別の見方をすれば、世界規模のコミュニティで共有する高級言語で統一的にシステム開発できるということは、ハードがすべて統一さてれいるということ
つまり、そういうハードそのものとそれにくっついてるシステムソフトは差別化がないという意味で根本的には売り物になるようなモノではなく、無償労働が当然の連中と競合していくことになる

ゆえに、システムの収入源はアセンブリコードである
589デフォルトの名無しさん:2012/11/29(木) 14:09:50.11
>>584
言語仕様のバグっていうのがあったとしても、
普通は別のやり方で回避できると思うけどなぁ。
590デフォルトの名無しさん:2012/11/29(木) 14:15:33.04
GCCなんかはバックエンドの部分を書くだけで特殊なハードに対応できるように設計されてる。
ちょこっと書くだけならともかく、
特殊なハードだからって長ったらしいアセンブラを書く必要は無いんだよ。
591デフォルトの名無しさん:2012/11/29(木) 16:17:18.39
process `map` container

processの定義で
一度計算したら以降、mapを通して持ち回す変数があるとします(例えば平均値や標準偏差)

この変数は、processの定義のwhere以下では定義しない方が良いですか?

processと同レベル以上のスコープに置くべきですか?

危惧しているのは、processのwhere以下に書くと
適用毎に再利用しないで計算し直してしまうのではないかという事です
592デフォルトの名無しさん:2012/11/29(木) 16:29:02.87
Haskellだから同じ計算が何度もされることはないと思うけど、状況がよくわからない
「平均値」がcontainerの要素の平均値なら、processにはそれを知る術はないだろうし
processが定義される場所からcontainerが見えているなら問題ないけど
593デフォルトの名無しさん:2012/11/29(木) 16:46:48.69
Haskellでも同じ計算はされてしまう。GHCは共通部分式除去も自動メモ化もしない
call-by-needで同じ計算が防げるのは関数内部で関数の引数を複数回使ったときだけ
>>591はprocessと同レベル以上のスコープに置いたほうがいい
594デフォルトの名無しさん:2012/11/29(木) 18:11:53.18
深いコピーを防ぐために浅いコピーをするのと同じ

なぜかEqを定義しなくても深い(==)と浅い(==)が当たり前のように存在している
595デフォルトの名無しさん:2012/11/29(木) 18:24:27.94
import qualified Data.Vector.Unboxed as Ubx
import Statistics.Sample
import qualified Statistics.function as Sta

ラベルと点数のペアのベクタをとって、ラベルと偏差値のペアのベクタを返す

sortBySS :: Unbox a
     => Ubx.Vector (a,Double)
     -> Ubx.Vector (a,Double)
sortBySS vec = let
    standardScore score = 50 + 10*(score-mean)/stddev
     where
      stddev       = sqrt variance
      (mean, variance)  = meanVarianceUnb scores
      scores       = snd . Ubx.unzip $ vec
in Sta.sortBy (comparing snd) $ (standardScore <$>)) `Ubx.map` vec


このコードで、mean、variance、stddevが一度の計算で済むかが気懸かりです
596デフォルトの名無しさん:2012/12/01(土) 17:44:40.86
>>566
ラダーって正規言語ですよね。
597デフォルトの名無しさん:2012/12/01(土) 19:35:23.02
正気かよお前。
598デフォルトの名無しさん:2012/12/02(日) 00:03:09.85
ほとんどのパッケージがベータリリース状態(0.xx.yy.zzなのはそういうことだよね?)だけど互いに依存しまくってて、
開発の活発なプログラムとそうでもないプログラムは一緒に使うことができない、っていう状態はどうすればいいんだろうね。
みんなどうしてるんだろう。他人のライブラリ/アプリケーションなんて一切使わねえぜ!とかやってるのかな。

ghc7.6.1だとxmonad0.10とpandoc1.9.4.5は最新のものが一緒に使える。leksahはインストールできない。yesodはトライ中。
599デフォルトの名無しさん:2012/12/02(日) 07:28:15.85
>ほとんどのパッケージがベータリリース状態(0.xx.yy.zzなのはそういうことだよね?)

ちょっとよくわからないです
600デフォルトの名無しさん:2012/12/02(日) 09:30:25.95
>>599
バージョンが 1.0.0.0 になって初めて正式リリースとなる、
と言いたいんだろうことは分かると思うが。

>>598
同じ名前のパッケージの2つのバージョンあるとき、
互いのバージョン番号の最初の2つ同士で比較して少なくとも一方が異なると、
その2つのパッケージの間に互換性は保証されない。
最初の番号が0だろうが、これは変わらない。

よって君が、開発の活発なプログラムとそうでもないプログラムは
一緒に使うことができない、と思っているのなら、
最初の番号が0であっても、1以上であっても状況は変わらないはず。
1以上であっても、活発なら2番目の番号はよく変わるはずだから。

つまり君が抱えている問題はベータリリース状態であることとは関係ないと言える。
601デフォルトの名無しさん:2012/12/02(日) 10:02:01.83
>>598
具体的にはleksahがghc7.6.1に対応してないのが問題ってこと?
それはパッチを送る以外にどうしようもないんじゃね

それからhackageだと正式リリースで1.0を付けるって習慣はそこまで浸透してないと思う
bytestringやcontainersがベータだというのは実感に合わないし
602デフォルトの名無しさん:2012/12/02(日) 11:21:35.25
完成したら開発終了、とかじゃ無い限りベータ版はバージョンの進み具合と関係ないのでは?
603デフォルトの名無しさん:2012/12/02(日) 20:10:26.68
おいおまえら
型理論の取り合えずこれ買って何章と何章よめばおk
みたいなイカす入門書を教えてください
出来れば日本語で
604デフォルトの名無しさん:2012/12/02(日) 20:16:16.41
605デフォルトの名無しさん:2012/12/02(日) 20:25:16.93
>>603
こっちの方が入門だ
とりあえず第一章を理解すれば、型理論が何かは多少分かる
http://www.amazon.co.jp/dp/4844372106/
606603:2012/12/02(日) 20:28:32.77
>>604,605
おおありがとうございます
早速読んでみます
607デフォルトの名無しさん:2012/12/02(日) 21:42:55.98
>>596
状態が増えない言語です。
608デフォルトの名無しさん:2012/12/02(日) 23:18:11.65
HDBC

fetchAllRows' すれば disconnect していい?

というのは、データ貰った後で超重い処理させる時って
計算始める前に接続切っておいた方がエコでしょ?
でも全部読み終わる前に接続切ったら危険だっていうじゃない

fetchAllRows' でリストとして全部よっこできるんでしょ?
609デフォルトの名無しさん:2012/12/02(日) 23:57:32.46
型推論ってそんな意味深のモンなのか?
俺は、言葉そのままと思ってるんだが。
610デフォルトの名無しさん:2012/12/03(月) 00:06:10.76
>>609
このスレ的には、Haskellの専門家(言語設計者とか)と意見が合えばいいんじゃないか?
611デフォルトの名無しさん:2012/12/03(月) 07:10:46.31
>>609
なんでいきなり型推論の話か出てくる?
612デフォルトの名無しさん:2012/12/03(月) 23:13:10.80
Haskeline の getPassword なんですが
これ Nothing の考慮要るんですか?

何も入力しなかったら Just "" になります

Nothing になるケースあるんですか?
613デフォルトの名無しさん:2012/12/03(月) 23:35:03.60
Ctrl-D
614デフォルトの名無しさん:2012/12/04(火) 00:08:41.99
>>613
あざっす^^
615608:2012/12/04(火) 16:00:21.16
やっぱりエラー起こりました
遅延評価はよく判らない

ストリクトにしても読み終えてるとは限らないようで、勝手に接続切っちゃいけないようです

でも解決法に気づきました
接続するルーチンと演算のルーチンを分けて
前者から値を束縛して後者に引き渡すようにすれば良かったんです

そうすりゃスコープ抜ける時に自動でやってくれるので
dissconnectは結局不要でエコも両立というわけです

ですがそこで新しい問題が起きました

接続ルーチンをIO () から IO a に替えなければならないのですが
それに伴い、エラーハンドラなどもIO aにしなきゃならない

しかし、変な入力にはprintで文句を出力しなきゃならないと思っていましたものですから
printはIO ()なので、()とaで型が合わなくなる

ダミーの値でも返すようにするか?……いや明らかにスマートじゃない

数時間悩んで遂にfailという結論に達しました

fail::String -> IO a
なんとfailはIO aなんですね!
()じゃなくてa!
これは救世主です

これで遂に型が合い、コンパイルに成功したというわけです

有難う、failのお陰で成功しました
616デフォルトの名無しさん:2012/12/04(火) 18:01:34.10
失敗は成功の素
617デフォルトの名無しさん:2012/12/04(火) 20:57:39.51
そういうのって、Conduit は活用できんの?
618デフォルトの名無しさん:2012/12/05(水) 22:09:24.36
Conal Elliott のブログが更新された

ご存命でなにより
619デフォルトの名無しさん:2012/12/06(木) 01:23:33.39
9月からHaskellの連載が始まってるみたい。
http://pragprog.com/magazines

Rails/Erlang/Clojureの有名な本を出してる出版社の無料誌。
連載の方は最近Scalaが多かったんだけどHaskellは初めてかも。
620デフォルトの名無しさん:2012/12/06(木) 01:30:26.64
8月だよ!全員集合
ごめん、9月じゃないや。
621デフォルトの名無しさん:2012/12/06(木) 01:37:01.67
数値計算の特集があったら買うんだけどな…
622デフォルトの名無しさん:2012/12/06(木) 02:00:22.85
623デフォルトの名無しさん:2012/12/06(木) 14:12:24.94
Control.Arrowって何に使うものなんですか?
624デフォルトの名無しさん:2012/12/06(木) 15:01:01.68
Arrowのインスタンスって関数とKleisliぐらいしか使ったことないや
関数合成と2タプル操作関数の為のユーティリティぐらいとしてしか使ってないし
625デフォルトの名無しさん:2012/12/06(木) 15:27:35.91
(´・ω・`)はい
626デフォルトの名無しさん:2012/12/06(木) 23:25:38.01
プラットホームインストール後は追加インストールゼロでやってるチュートリアルが欲しいです
627デフォルトの名無しさん:2012/12/06(木) 23:59:50.86
機械学習ライブラリ無いですよねhaskellに
628デフォルトの名無しさん:2012/12/07(金) 00:15:22.33
>>627
大学の研究室には腐るほどあると思う
独自のHaskellウンコライブラリが
629デフォルトの名無しさん:2012/12/07(金) 23:07:15.03
ねぇねぇ、HaskellってUTF-8だけ扱えばよい世界なら
日本語もAll OK ?
630デフォルトの名無しさん:2012/12/07(金) 23:36:05.66
結局Shift_JISとUTFの変換に起因する問題に苦しむことになる
631デフォルトの名無しさん:2012/12/08(土) 04:11:40.54
集中治療室に頼れ
632デフォルトの名無しさん:2012/12/08(土) 04:47:09.52
ドライバやRDBMS自身が日本語使えないとかいうオチも潜んでるから困る
MSのコマンドプロンプトもUTF表示が怪しい
633デフォルトの名無しさん:2012/12/08(土) 12:37:18.63
僕のコンソールはSJIS専用なので結局変換しなきゃなりません
634デフォルトの名無しさん:2012/12/08(土) 13:25:14.36
新たなコマンドプロンプトを自作できない理由
GUIの中の人が主にシングルスレッドやプロポーショナルフォントを想定しているから
635デフォルトの名無しさん:2012/12/08(土) 13:29:54.92
型推論って「型書かなくていいから便利だよね」くらいの説明しか見たことない
636デフォルトの名無しさん:2012/12/08(土) 13:48:16.97
minttyいいよね
637デフォルトの名無しさん:2012/12/08(土) 16:33:51.92
>>635
それでは不十分ですか?
638デフォルトの名無しさん:2012/12/08(土) 17:37:32.69
便利なのはいいことだ
639デフォルトの名無しさん:2012/12/08(土) 17:44:15.68
書き捨ての場合には超便利
コードの断片だけ見せられて、孫引きしながらデバッグしていく場合には不便
640デフォルトの名無しさん:2012/12/08(土) 18:05:09.32
トップレベルの型は書く文化だろHaskell
型推論でデバッグが難しくなるなら一つの関数が長過ぎだ
641デフォルトの名無しさん:2012/12/08(土) 18:09:55.88
そうそう
文化で解決しようとする姿勢が
まだまだ未熟な技術という感じなんだよね
型に関する他の技術に比べて型推論はイマイチ
642デフォルトの名無しさん:2012/12/08(土) 18:12:10.76
OCamlみたいにトップレベル関数のシグネチャ出力する機能はよ
643デフォルトの名無しさん:2012/12/08(土) 18:12:14.31
弘法、プログラミング言語を選ばず
644デフォルトの名無しさん:2012/12/08(土) 18:23:54.82
>>642
-fwarn-missing-signatures
645デフォルトの名無しさん:2012/12/08(土) 18:38:37.50
>>642
Emacsでもvimでも出来るだろ
646デフォルトの名無しさん:2012/12/08(土) 18:53:52.63
>>641
イマイチってなんだよ
中途半端な警告は無視する人もいるんだぞ
完璧じゃないなら全否定でいいだろ?
647デフォルトの名無しさん:2012/12/08(土) 19:00:04.61
>>646
警告を無視ってなんだよ
型が推論できなかったらコンパイルエラーになるだけだろ
648デフォルトの名無しさん:2012/12/08(土) 21:38:22.03
だろだろだろ
649デフォルトの名無しさん:2012/12/08(土) 22:16:16.24
>>646
幾らなんでもアホ過ぎ
650デフォルトの名無しさん:2012/12/08(土) 23:44:44.90
いくら型を書いても
ヘッダファイル的なものがなければコード全体を一気にコンパイルする文化になる
分割したいならヘッダを書く言語か動的言語を使えばいい
651デフォルトの名無しさん:2012/12/09(日) 03:02:30.45
putStrでログは役に立たないのか

最終的順序を保証するだけでいつやるかはイレギュラーなんだな

計算前の始まり報告と
計算終了報告を
正しくタイムリーに表示させるには
seq使えばいいのか?
652デフォルトの名無しさん:2012/12/09(日) 16:55:09.08
putTraceMsgってなんで改行すんだよ
勝手にすんなよ

Calculation ... done.
とかやりたいのに
653デフォルトの名無しさん:2012/12/11(火) 00:40:21.14
https://www.google.co.jp/search?hl=ja&q=haskell%20%E6%B8%AC%E5%AE%9A%20itpro
測定系のツール紹介しているが、目的にかなうかな?
654デフォルトの名無しさん:2012/12/11(火) 00:43:30.95
655デフォルトの名無しさん:2012/12/11(火) 11:51:36.85
メモリ1Gでスワップ領域無しのeeepcでWindows XP環境下でwxHaskell使えるようにする方法教えろ
656デフォルトの名無しさん:2012/12/11(火) 12:36:42.55
>>655
それをするために何をしたのか、その結果どうできなかったのか、
という事を詳細に書いてくれないと、アドバイスするのは難しいと思う。

wxHaskellの前にwxは動くの?
コンパイルはできる?
実行するとエラーが出るの?
657デフォルトの名無しさん:2012/12/11(火) 18:35:32.39
WHNFやNFのお勉強させてください!
658デフォルトの名無しさん:2012/12/11(火) 18:43:03.33
自己解決しました
659デフォルトの名無しさん:2012/12/13(木) 02:08:51.89
GUIよりもコンソールへの整形出力(日本語含む)を簡単にする方法を用意してほしいです
660デフォルトの名無しさん:2012/12/13(木) 07:25:54.59
>>659
ここでそんな事を言って待っていても誰も作りません。
661デフォルトの名無しさん:2012/12/13(木) 14:31:57.55
さあ立ち上がろう
662デフォルトの名無しさん:2012/12/13(木) 19:47:54.50
なんだかんだ言って、C言語のprintf文最強
663デフォルトの名無しさん:2012/12/13(木) 20:40:48.18
import Text.Printf
664デフォルトの名無しさん:2012/12/14(金) 13:47:08.11
モナドを理解するにはハスケルを理解した後モナドを理解する。
あるいはモナドを先に理解する。
どちらが得策ですか?
665デフォルトの名無しさん:2012/12/14(金) 15:09:43.32
言語は、単語や文法を創ってから話し始めるとでも?
666デフォルトの名無しさん:2012/12/14(金) 15:22:59.66
>>664
釣りっぽいが、併行してやるのがお薦め。

>>665 はもうちょっと練ろうな。
進化上のトライ&エラーは、全員が何時までも繰り返しやるべき事じゃない。
俺は先人の成果を感謝しながら使わせて貰うけど、それが嫌らしいから、全部独力でやってくれ。
667デフォルトの名無しさん:2012/12/14(金) 15:29:04.45
トライアル&エラー
668デフォルトの名無しさん:2012/12/14(金) 15:35:20.57
そんなに向かっ腹を立てるほどの釣りかなあ。
669デフォルトの名無しさん:2012/12/14(金) 16:50:33.05
HDBC.PostgreSQL の withPostgreSQL' にはドキュメントがありません

これは正格版ということでしょうか?
670デフォルトの名無しさん:2012/12/14(金) 17:51:50.24
たぶんsrc見るとすぐに分かる
671デフォルトの名無しさん:2012/12/14(金) 18:04:45.77
トランザクションの連鎖モードと非連鎖モードの違いやね
'付きはBEGIN無しの非連鎖モード
672デフォルトの名無しさん:2012/12/14(金) 21:21:59.74
>>671
あり^^
673デフォルトの名無しさん:2012/12/17(月) 23:58:29.41
関数型言語はHaskellが初めてなんだけど、関数型言語で真っ先に理解すべき概念て何?
言語の経験はCだけでどこからかじったらいいかわからないっす
スレ違いならゴメン
674デフォルトの名無しさん:2012/12/18(火) 00:16:42.49
代入できないよ
675デフォルトの名無しさん:2012/12/18(火) 00:25:43.35
>>673
ビビらせて喜んでるのは、ニワカだから無視していい。
ttp://www.sampou.org/haskell/tutorial-j/index.html
を読んでみて。
676デフォルトの名無しさん:2012/12/18(火) 00:38:44.50
複雑なデータ構造があって
それがリストに並んでるとします
deepseqすると全部のリストを洗って全部の要素をNF化するんですよね?

リストは全部タッチ(e:?で止めないでe1:e2:e3:…en:[]まで)して欲しいけどけど
個々の要素をNF化する必要は無いときはどうしますか?
677デフォルトの名無しさん:2012/12/18(火) 01:36:59.76
>>675
あんがと
Cつっても組み込み実装の用途だったから関数言語のアカデミックな思考とは今まであんまり縁がなかったなあ・・
関数言語使えるようになったらシステム制御とかすごい効率的に書けそう
678デフォルトの名無しさん:2012/12/18(火) 02:31:09.17
fprintf文が使えなくてイライラする
C言語の入出力は実は悪くないとあらためて実感できる
679デフォルトの名無しさん:2012/12/18(火) 03:24:25.21
いやあれは悪いだろ
680デフォルトの名無しさん:2012/12/18(火) 08:10:21.22
>>678
sprintfがあれば十分だろ
681デフォルトの名無しさん:2012/12/18(火) 10:31:21.64
>>677
こんなのもあるよ。
Haskellで作る超コンパクト音声認識システム:Husky
ttp://www.furui.cs.titech.ac.jp/~shinot/husky/
682デフォルトの名無しさん:2012/12/18(火) 16:04:02.18
>>681
Sugeeeeeee!と思ってライブラリアーカイブ漁ったらコマンドライン簡易計算機が出てきたでござるの巻
683デフォルトの名無しさん:2012/12/18(火) 18:54:45.46
>>676
import Control.Seq
r = seqList r0
でどうだろうか
684デフォルトの名無しさん:2012/12/18(火) 19:08:30.54
returnが不適切だというなら、じゃあ何が良かったんだよ?

monadize
685デフォルトの名無しさん:2012/12/18(火) 19:26:12.84
unitやetaあたりだけどdo記法内で手続き型っぽく書く事を主眼に入れたとしたらreturnが適切なんじゃね?
っていう議論が大昔にあった筈だからその辺の歴史も知った上で考えたいのだけどそんな資料ありませんかね
686デフォルトの名無しさん:2012/12/18(火) 22:30:23.06
return の代わりに eta
join の代わりに  hinin

ってのがいいと思う
687デフォルトの名無しさん:2012/12/19(水) 20:44:44.19
bindが記号?(>>=)があるのに対して
returnにはないのは何故ですか?
688デフォルトの名無しさん:2012/12/19(水) 20:56:29.95
>>687
記号だとプログラムが読みにくいから
689デフォルトの名無しさん:2012/12/19(水) 20:59:39.61
メリットがないんじゃないか
そもそも単項演算子なんて(-)ぐらいのもの
命令型言語とのアナロジーも考えればreturnでいいでしょう
690デフォルトの名無しさん:2012/12/19(水) 20:59:56.08
記号が読みにくいのは同感なんですが
じゃあ何故bindは>>=なのかが疑問なんです
統一感がないっていうか・・
691デフォルトの名無しさん:2012/12/19(水) 21:01:43.29
>>690
bindな>>=なのはプログラムが読みやすいから
692デフォルトの名無しさん:2012/12/19(水) 21:03:25.98
>>690
統一感がないという理由なら、fail にも記号が必要になる

あるいは、(>>=) と (>>) も演算子ではなく関数名を定義するか
693デフォルトの名無しさん:2012/12/19(水) 21:03:34.64
m >>= k >>= l
m `bind` k `bind` l
では前者のほうが読みやすいでしょう
中置記法は優先度も決められないしね
694デフォルトの名無しさん:2012/12/19(水) 21:12:23.99
なんかこう包みこんだり持ち上げたりするようなイメージの
ぐっとくる記号があったら採用されてたかもしれんな
695デフォルトの名無しさん:2012/12/19(水) 21:16:37.02
>>693
> 中置記法は優先度も決められないしね

関数 f も infixr 5 `f` で中置記法としての優先度や結合の向きを定義できる
696デフォルトの名無しさん:2012/12/19(水) 21:17:56.38
>>695
15へぇ
697デフォルトの名無しさん:2012/12/19(水) 21:18:25.23
なるほど。bindはイメージがしやすい記号が合ったけど
returnにはそれがなかった。と言う事ですか
698デフォルトの名無しさん:2012/12/19(水) 21:20:03.95
記号は二項演算子のように挟まれるか、括弧のように挟むために使う
699デフォルトの名無しさん:2012/12/20(木) 00:15:39.97
return じゃなくて inject にすべきだったのではなかろうか
700デフォルトの名無しさん:2012/12/20(木) 10:36:24.58
>>699
モナド=コンテナ 的な発想だとそうなるんだけどね。
Maybe はコンテナか?とか
701デフォルトの名無しさん:2012/12/20(木) 10:38:12.62
流石に今更returnをinjectに変えるのはなあ
702デフォルトの名無しさん:2012/12/20(木) 11:42:45.44
書きやすさで言えば inject = return とすればいいだけだから平和だ
争いは読むレベルで発生する
703デフォルトの名無しさん:2012/12/20(木) 11:53:27.05
そろそろコモナド入門誰か書いてよ
704デフォルトの名無しさん:2012/12/20(木) 12:17:42.00
コモナドって何に使うの?
705デフォルトの名無しさん:2012/12/20(木) 12:21:46.79
arrowがコモナドとか思ってるんじゃね?
ちなみにarrowはコモナドじゃねーぞ
706デフォルトの名無しさん:2012/12/20(木) 12:27:03.75
コモナドはarrowになれる
707デフォルトの名無しさん:2012/12/20(木) 12:45:59.17
「こどもでもわかるコモナド入門」
708デフォルトの名無しさん:2012/12/20(木) 13:14:51.42
co-monadとarrowは全く違う
709デフォルトの名無しさん:2012/12/20(木) 14:11:29.17
そんなの知ってるからコモナドの応用例出せ
710デフォルトの名無しさん:2012/12/20(木) 14:15:09.36
例: Coreader (a.k.a Env)
localの使えないReaderMonad
つまりゴミ
711デフォルトの名無しさん:2012/12/20(木) 15:07:04.74
Identityコモナド
712デフォルトの名無しさん:2012/12/20(木) 17:02:39.67
お前ら難しい概念は一杯知ってるのに実用できてないよね
713デフォルトの名無しさん:2012/12/20(木) 17:28:05.58
だから実用例出せって言ってる
714デフォルトの名無しさん:2012/12/20(木) 19:30:38.86
>>713
俺は全く分からんが、このじーさんがその手の実用を惜しみなく公開しているっぽい
http://conal.net/blog/
715デフォルトの名無しさん:2012/12/20(木) 22:54:32.75
分散並列処理フレームワークありませんか?
716デフォルトの名無しさん:2012/12/20(木) 23:20:37.62
>>715
どういう事ができる分散並列処理フレームワークが欲しいの?
717デフォルトの名無しさん:2012/12/20(木) 23:31:12.67
世界征服
718デフォルトの名無しさん:2012/12/20(木) 23:34:34.78
>>717
その程度で良いのなら自分で作れ
719デフォルトの名無しさん:2012/12/21(金) 04:52:06.99
哲学は結構です
Haskellの話をお願いします
720デフォルトの名無しさん:2012/12/21(金) 12:21:13.87
これからのHaskellはどうあるべきか
721デフォルトの名無しさん:2012/12/21(金) 12:46:25.70
兎に角実用例を増やす
必要なのは信頼と実績のみ
理論方面は証明支援系に任せましょう
722デフォルトの名無しさん:2012/12/21(金) 13:11:28.86
まとなIDEだな
emacsとかはもう嫌
723デフォルトの名無しさん:2012/12/21(金) 16:19:53.42
haskellはビジュアルプログラミングに向いてると思うね。
Yahoo! pipes的なの誰か作ってよ。
724デフォルトの名無しさん:2012/12/21(金) 16:41:55.99
ログ取ろうとする初心者が必ず陥るであろう罠
モナドで順序保証といえど遅延であるという事実
これが意図に反する挙動を招く事について解説するべきだ
725デフォルトの名無しさん:2012/12/21(金) 18:13:48.40
「やりたいこと」ではなく「できること」をプログラムしましょう
やりたいけどできない挙動はあっても、できるけどできない挙動というのはありえません
726デフォルトの名無しさん:2012/12/21(金) 19:15:07.14
>>723
Haskellのどの辺りがビジュアルプログラミングに向いてるのでしょうか。
727デフォルトの名無しさん:2012/12/22(土) 00:11:16.33
>>726
イベントドリブンの実装のしやすさ
728デフォルトの名無しさん:2012/12/22(土) 06:43:37.72
イベリコブタの調理のしやすさ
729デフォルトの名無しさん:2012/12/22(土) 14:29:59.23
>>728
プロシュートいいよね
730デフォルトの名無しさん:2012/12/27(木) 03:50:17.10
諸君、議論がお留守だよ
731デフォルトの名無しさん:2012/12/27(木) 16:16:16.13
結合リスト
data Tree a = Single a | App (Tree a) (Tree a)

を普通のリストに変換する関数

toList :: Tree a -> [a]
toList (Single a) = [a]
toList (App (Single a) xs) = a:toList xs
toList (App (App xs ys) zs) = toList $ App xs $ App ys zs

この関数の2つ目の式では呼び出しの度に要素数が減ってるけど
でも3つ目の式では要素数が減ってない
でも有限リスト与えた時にちゃんと止まる
じゃあ3つ目の式と2つ目の式でに共通の呼び出し毎に減っているものは何ですか?
整礎帰納法の例で探してもマージソートとか割り算ばっかりで木の平坦化とか全然出てきません
732デフォルトの名無しさん:2012/12/27(木) 16:31:39.00
>>731
単に止まることを証明したいという意味?
俺なら
1. どの操作でもAppが増えることはない
2. 左側の木の高さが1以上の場合は左側の木の高さが減る、0の場合はAppが減る
というあたりから攻める
との操作でも減るような上手い値を定義したいということなら分からん
733デフォルトの名無しさん:2012/12/27(木) 19:02:10.89
>>731
App xs ys が xs に減ってるじゃん
734デフォルトの名無しさん:2012/12/27(木) 19:17:07.39
えっ……
735デフォルトの名無しさん:2012/12/27(木) 20:17:19.95
参照的な構造(動的に変更される有向グラフ)を表すにはどうしたらいい?

グラフの形状は、環状構造とか、分断されてるとか、そういうのもあって仮定できないとして

addNode :: a -> Graph a -> (Graph a, Node a)
deleteNode :: Node a -> Graph a -> Graph a
getValue :: Node a -> Graph a -> a
putValue :: Node a -> a -> Graph a -> Graph a
connect :: Node a -> Node a -> Graph a -> Graph a
disconnect :: Node a -> Node a -> Graph a -> Graph a
connections :: Node a -> Graph a -> [Node a]

こういう関数を純粋に定義するにはどうしたらいい?
特に、ノードやエッジ、グラフを表す型はどういうものにすべき?
「純粋に」というのは、関数の引数や返り値にIOやSTの類が現れないということ unsafePerformIO みたいな「抜け穴」の使用はナシで
736デフォルトの名無しさん:2012/12/27(木) 20:33:11.53
>>375
君は、任意のグラフではなく、ツリー構造なら問題なく >>375(の様なもの)を実現できる?
もっと言うと、一列のリスト構造なら問題なく実現できる?

それなら実現できると言うのなら、グラフ構造だと何故できない?
グラフ構造とそれ以外の構造との >>375 を実現する上での本質的な違いは何?
737デフォルトの名無しさん:2012/12/27(木) 21:43:08.04
>>735
頂点、辺をそれぞれ整数で表わす
data Graph a = Graph
 { nodes :: IntMap (a, [Int]) -- [Int]はここから出る辺のリスト
 , edges :: IntMap (Int, Int) -- 出発頂点と行き先頂点
 , nextInt :: Int -- 次に頂点や辺を作ったときに割り当てる整数
 }
738デフォルトの名無しさん:2012/12/27(木) 22:04:12.36
問題の一つは、循環があると構造が再帰的にならないこと

data List a = List a (List a) | Nil
とか
data Tree a = Tree a [Tree a]
と定義するのと同じような感じで
data Node a = Node a [Node a]
と定義してしまうと、Eqのインスタンスにすることさえできない (有限なグラフに対しても(==)が停止しない可能性がある)

循環構造を考えないとしても、グラフには、リストの頭や木の根みたいな「どこからも参照されていない唯一の基準点」がない
仮に木構造の参照の向きを全部逆にしたような構造があったとき、その根が変更されたら、それをどうやって全てのノードに伝えたらいいのだろうか
唯一のエントリーポイントが存在するなら、そこから変更点までの、影響を受ける全てのノードを(陰にせよ陽にせよ)記憶しておけばいいけど、グラフだとそうはいかなくなってしまう
739デフォルトの名無しさん:2012/12/27(木) 22:56:29.51
>>738
>有限なグラフに対しても(==)が停止しない可能性がある

ん? 必ず停止する同値判定プログラムは書けるが、
複雑で面倒と言うことだよね?
(循環を検知できないわけがない)

>>737 の方法でも、同値判定をする必要があるのなら、
循環を検知する同じような仕組みが必要だぞ。
740デフォルトの名無しさん:2012/12/27(木) 23:19:51.93
data Node a = Node a [Node a]
というだけの構造でも循環は検知できるんでしょうか?

x = Node 0 [Node 1 [x]]
y = Node 0 [Node 1 [y]]

に対して
x == y
が停止してTrueを返す(==)って定義できるんでしょうか
741デフォルトの名無しさん:2012/12/27(木) 23:30:16.00
出そうと思えば(unsafeCoerce)
742デフォルトの名無しさん:2012/12/28(金) 06:07:19.07
>>735
単に隣接行列を持てばいいだけだと思うけど
743デフォルトの名無しさん:2012/12/28(金) 06:11:44.81
>>739
循環は検知できないだろ
たとえば[Int]を与えられたときに、それが
・普通の無限リストなのか
・単にやたらと長いリストなのか
・let a = 0:a in aのように作られた循環リストなのか
判別することはできない

>>738の構造ではグラフの頂点数を数えることすらできないし、
辺の追加や削除もできない
どうしても>>737みたいなグローバルなテーブルを持つを持つ必要がある
744デフォルトの名無しさん:2012/12/28(金) 06:39:32.04
>>740はノードが二個のグラフのつもりなんだろうけど、

x = Node 0 [Node 1 [x]]
z = Node 0 [Node 1 [Node 0 [Node 1 [z]]]]

この二つが全く同じデータになっちゃうんだからおかしいよね
最低でもノードの同一性判定は必要(ノードの持つ値が同一というのではなく)
745デフォルトの名無しさん:2012/12/28(金) 07:08:57.06
>>742
隣接行列を2次元配列で表現するとノードの追加や削除が非効率
また、辺が無いところが無駄になる

検索の効率は良いけどね
746デフォルトの名無しさん:2012/12/28(金) 07:14:42.62
>>744
今まで比較した全てのものを記録しておいて、
[x] と [Node 0 [Node 1 [z]] を比較すれば判定できると思うけど。

判定処理の中で随時別のグラフ表現にフォーマットし直しながら判定すれば、
非常に馬鹿で無駄で非効率で面倒で阿保だけど、不可能ではないような気がする。

ダメかな・・・
747デフォルトの名無しさん:2012/12/28(金) 07:26:54.43
>>746
いやできないって
xとzを定義した時の式が後から取り出せるわけじゃないんだぞ
748デフォルトの名無しさん:2012/12/28(金) 08:13:27.86
ポインタをモナッドでエミュレート出来ないんですか
749デフォルトの名無しさん:2012/12/28(金) 08:53:49.77
>>747
data Node a = Node a ID [Node a]

というように、各ノードを区別できる全体で一意のノードIDを持たせても無理?
750デフォルトの名無しさん:2012/12/29(土) 02:07:43.84
>>749

それだと同一性判定は可能といえば可能だけど
n > 1のn部グラフは表現できない
という問題がありそう。

一例を挙げれば、点が二つで辺が一つもないグラフと、点が二つで辺が一つだけのグラフをどうやって区別するの、ってこと。

なお、オレは>>747とは別人ね。
751デフォルトの名無しさん:2012/12/29(土) 09:51:22.04
>>750
Data Graph a = Graph [Node a]
data Node a = Node a ID [Node a]
752751:2012/12/29(土) 09:53:16.93
>>750
すまん、>>751 は変だな

まぁ、こんな感じでリストを組んでおけばn部グラフも表現できるでしょ

検索処理とか面倒そうなんで、俺はやらんが
753デフォルトの名無しさん:2012/12/29(土) 10:28:35.98
なんかGC実装したときみたいに物凄く難しくなる気がするのだが
754デフォルトの名無しさん:2012/12/29(土) 10:50:10.35
いや、だから「同値判定は不可能」というのは違うよね
と言いたかっただけだ

実際にプログラムするなら >>737 の方法がシンプルでいいと思うぞ
755デフォルトの名無しさん:2012/12/29(土) 11:00:02.95
むしろ、同値判定は簡単だけど、独立した循環参照の検出と抽象構造の同一視が難しい気がする
756デフォルトの名無しさん:2012/12/29(土) 11:07:38.80
programming in haskellとかいうpdfを読んでみたけど
稚拙な英語で書いてあったから日本人でもよく分かると思ったよ。
とりあえず7章までは問題なく読めたからオススメしておく。
757デフォルトの名無しさん:2012/12/29(土) 11:09:26.96
稚拙ってけなしてるようにしか聞こえんなw
758デフォルトの名無しさん:2012/12/29(土) 11:35:07.48
平易と言え
759デフォルトの名無しさん:2012/12/29(土) 11:42:31.40
稚拙 -> Unskilful
平易 -> Plain
760731:2012/12/29(土) 13:09:04.38
渡された木の頂点から各要素への左向きの辺の数の総和を見ればいけました
総和なのである左向きの要素の階層が減った場合でも要素数が減ってもいけるわけですね
直近のグラフに関する話題が良いヒントになりました

numLEdge' :: Int -> Tree a -> Int
numLEdge' n (Single _) = n
numLEdge' n (App x y) = numLEdge (succ n) x + numLEdge n y

numLEdge = numLEdge' 0
761デフォルトの名無しさん:2012/12/30(日) 01:40:11.45
Integer型で何桁でも整数取り扱えるじゃん?
小数点何位でも取り扱える小数型ってないん?
762デフォルトの名無しさん:2012/12/30(日) 08:27:53.97
>>761
Data.Ratio
763デフォルトの名無しさん:2012/12/31(月) 18:50:13.91
あれがそうなのか
764デフォルトの名無しさん:2012/12/31(月) 22:28:49.72
上に出てきたグラフ構造もそうだけど
データ構造内の異なる複数の個所から
あるデータを参照するにはどうすればいい?
やっぱり整数値をポインタに見立ててIntMapでごにょごにょするしかない?
765デフォルトの名無しさん:2012/12/31(月) 22:29:59.12
emacsでhaskellのソースコードを書いているときに、C-c C-l と入力すると
ghciが起動してそのソースコードを読み込んでくれるのですが、
その方法で起動したghciの中で補完機能(termの中でTabを押すことで使えるやつ)
が使えるようにするにはどんな設定/elispを使ったらいいんでしょうか。
766デフォルトの名無しさん:2013/01/01(火) 15:43:07.01
>>764
データを複数回参照するには変数を定義する
実行時に複雑なデータを入力する場合は、文字列を変数に見立てる
もちろん整数をポインタに見立ててもよい
767デフォルトの名無しさん:2013/01/01(火) 15:50:06.04
ガーベッジコレクションの実装の解説見たら参考になると思う
768デフォルトの名無しさん:2013/01/03(木) 23:10:24.48
HaskellDB で新しいテーブルを作成するには、どうすればいいの?

ネット上のサンプルとかチュートリアル見ても、
すでにあるテーブルの参照はあっても、新規作成の例が見当たらない。

もしかして、テーブル作るには
Database.HDBC.run 関数に SQL 文を適用するの?
769デフォルトの名無しさん:2013/01/03(木) 23:26:03.15
SQLで作るんじゃない?
確かRWHでは普通にSQL使ってた
770デフォルトの名無しさん:2013/01/03(木) 23:37:20.91
マジですか

HaskellDB is a Haskell library for expressing database queries and operations
in a type safe and declarative way.

と言うのは、レコードに対するクエリや操作に関してのことで、
テーブル作成や削除は勝手にやってくれってことか・・・

何という片手落ち
771デフォルトの名無しさん:2013/01/04(金) 00:07:32.39
RWHにあるのはHaskellDBじゃなくてHDBCだった
てへぺろ(・ω<)
772デフォルトの名無しさん:2013/01/05(土) 16:59:33.14
HDBCってショボいの?
773デフォルトの名無しさん:2013/01/05(土) 17:27:10.22
HDBCって、SQL文を文字列にしてRDBMSに飛ばすだけだよね?
遅延評価を使うと、RDBMSが対応してないと、メモリがどえらいことになると思うけど、どうなんだろ
774デフォルトの名無しさん:2013/01/06(日) 02:56:26.25
データは遅延で受け取りたくて
尚且つ最後まで受け取ったら
その瞬間に自動的にデータベースとの接続を切って欲しいんですが
そういう巧い話ありません?
775デフォルトの名無しさん:2013/01/06(日) 03:36:24.69
conduit と組み合わせるとか
776デフォルトの名無しさん:2013/01/06(日) 04:10:12.11
conduitってそんなに凄い奴なのか
777775:2013/01/06(日) 13:30:19.07
>>776
conduit はストリームの下流にあるものから上流にあるものへシグナルを発信できる。
それによって、上流にあるものは下流に提供しているリソースをもう解放して良いのか、
それともまだダメなのかを判断できる、という代物だ。

下流で、データを最後まで受け取ったと判断したら上流へシグナルを送る仕組みを作れば良い。

と予想したんだが、どうだろうな。

couchdb-conduit パッケージを使ってみれば、もう少し分かるかも知れん。
俺は使ったことないから分からんが。
778デフォルトの名無しさん:2013/01/06(日) 13:56:47.19
勉強してみるよ
779デフォルトの名無しさん:2013/01/06(日) 17:45:50.34
モナドの実行順序と実際の評価の順序は必ずしも一致しないじゃないですか

putStr "begin..."
value <- heavyProcess
putStr "done."
print value

これはbegin...done.と表示した後にようやくheavyProcessが動き出すじゃないですか

もう何を信じていいのかわからないじゃないですか
780デフォルトの名無しさん:2013/01/06(日) 18:36:09.49
遅延IO死すべし
781デフォルトの名無しさん:2013/01/06(日) 18:37:14.29
seq?
782デフォルトの名無しさん:2013/01/06(日) 18:54:46.45
そこで評価する必要ないから評価しないのに馬鹿なの?
783デフォルトの名無しさん:2013/01/06(日) 18:58:26.75
怒られた>_<
784デフォルトの名無しさん:2013/01/06(日) 19:18:17.78
>>779
それだと"done."が表示される時点ではheavyProcessは実行終了してるよ
done.の後で時間が掛かってるなら、それはheavyProcessが重いサンクを返してるのが原因
785デフォルトの名無しさん:2013/01/06(日) 20:22:38.70
valueの文字列化が重いと見た
786デフォルトの名無しさん:2013/01/07(月) 00:00:19.71
>>784
実行の定義が判らなくなった。。。
787デフォルトの名無しさん:2013/01/07(月) 00:05:25.77
サンクが膨大に残ってるのに実行は済んだっていうんですか

NFにして初めて実行したというんだと思ってました

「実行は済んだ。結果はまだだ」

「手術は成功だ。患者は死んだ」
788デフォルトの名無しさん:2013/01/07(月) 07:23:17.88
>>787
そういう言語だから仕方ない
[Int]は、Intの値かサンクを持つリスト
IO Intは、Intの値かサンクを返すアクション
789デフォルトの名無しさん:2013/01/07(月) 07:27:47.04
>>786
heavyProcess内で行われるI/OはheavyProcessが返る前に完了するよ
返り値をNFまで評価するのは実行のうちに入らないってだけ
790デフォルトの名無しさん:2013/01/07(月) 15:28:41.89
I/Oは直感通り即処理されるんですか?

他に即処理されることを判断する為の指針は?
791デフォルトの名無しさん:2013/01/07(月) 16:00:29.15
何のために処理の順番なんか知りたいの?
そんなの気にしなくていいってのが関数型言語のいい所だと思うんだけど。
792デフォルトの名無しさん:2013/01/07(月) 16:17:50.10
(´・ω・`)判らないことを知ろうとするのが科学ではないですか
793デフォルトの名無しさん:2013/01/07(月) 18:18:28.26
先生!、技術は科学に含まれますか?
794デフォルトの名無しさん:2013/01/07(月) 18:23:35.28
(´・ω・`)修辞疑問氏ね
795デフォルトの名無しさん:2013/01/07(月) 20:48:54.35
>>790
おおざっぱに、どういうI/Oをするのか(あるいはしないのか)を決めるのに必要な式だけ評価される
たとえば、
putStrLn (f x)
を実行するには、f xを評価しないと何を表示していいか分からないので評価する
when (f x) $ putStrLn "Hello"
も、Helloを出力するかどうかを決めるのにf xの評価が必要だから評価する
return (f x)
は、f xの値が必要ないのでサンクをそのまま返す
let v = f x
in return v
も同じで、サンクを返す
return $! f x
は、このIOの正体がreturnであることを確定するために$!を評価する必要があって、
$!がf xの評価を発生させるので、サンクでなく値を返す
796デフォルトの名無しさん:2013/01/07(月) 21:44:18.68
>>795
なるほど、キーポイントはI/Oなんですね(´・ェ・`)
797デフォルトの名無しさん:2013/01/07(月) 22:37:39.08
>>795
> when (f x) $ putStrLn "Hello"
> も、Helloを出力するかどうかを決めるのにf xの評価が必要だから評価する

このケースで、本当に f x が評価されてるのかどうか、確認する方法はある?
(まぁこのケースだけの話じゃないけど)

ghc のソースを覗く以外なら手段は問わない
798デフォルトの名無しさん:2013/01/08(火) 00:01:22.41
>>797
fを書き換えていいのなら、
・評価されたらerrorで死ぬようにする
・評価されたらDebug.Trace.traceで画面になんか出力
799デフォルトの名無しさん:2013/01/09(水) 20:38:20.37
>>790
期待通りの順序で動かない時も有るけど、そういう時の為の関数が大抵有る

自分はhFlush,DeepSeqぐらいしかまだ使ってないけど
800デフォルトの名無しさん:2013/01/10(木) 00:54:16.28
サンクってどういう意味ですか?
801デフォルトの名無しさん:2013/01/10(木) 14:41:59.89
>>800
drinkdrankdrunk
みたいに
think thank thunk
と変化するんだよ。そう思ったときの thunk 。
802デフォルトの名無しさん:2013/01/10(木) 15:14:29.46
>>801
thunkってthinkの完了形だったのか…。でも、遅延評価だから完了してなくね?
803デフォルトの名無しさん:2013/01/10(木) 18:08:08.09
値を求めるのに必要なものは既に全て揃っている、みたいな意味らしい
804デフォルトの名無しさん:2013/01/11(金) 01:11:28.76
和田本に遅延評価とサンクの実装が載ってるよ〜
805デフォルトの名無しさん:2013/01/11(金) 07:15:59.40
実装じゃなくて意味を知りたいのだと思うが
806デフォルトの名無しさん:2013/01/11(金) 13:23:17.20
和田本てどれ?
807デフォルトの名無しさん:2013/01/11(金) 13:26:19.24
スーフリ和田
808デフォルトの名無しさん:2013/01/11(金) 22:11:17.76
>>806
計算機プログラムの構造と解釈
実装はschemeだけど

>>805
自分の手で実装してはじめて意味が理解できる
レッツトライ!
809デフォルトの名無しさん:2013/01/11(金) 23:07:05.99
>>808
いや、言葉の意味、なんでthunkなの? という趣旨の質問かと思ってた
810デフォルトの名無しさん:2013/01/11(金) 23:16:51.00
>>809
なんでthunkという単語にしたかという経緯は、algolの教科書に書いてある
algolスレへGo!
811デフォルトの名無しさん:2013/01/11(金) 23:48:37.48
>>810
thunks
812デフォルトの名無しさん:2013/01/12(土) 02:46:50.40
いつ評価されるのか、私気になります!
813デフォルトの名無しさん:2013/01/12(土) 02:54:12.19
forceが評価されるときに実行されちゃいます
814デフォルトの名無しさん:2013/01/12(土) 03:17:28.07
>>812
えるちゃんじゃなくて、えばるちゃん!
815デフォルトの名無しさん:2013/01/12(土) 12:29:18.06
>>808
> >>806 
> 計算機プログラムの構造と解釈
> 実装はschemeだけど
それ和田本じゃなくてSICPと呼ぶのが普通。
訳が独特だから、あえて和田本なのかも知れないけど。
816デフォルトの名無しさん:2013/01/12(土) 13:56:53.28
おれ子供ができたら

えばる
あぷらい
らむだ

って名前付ける。
817デフォルトの名無しさん:2013/01/12(土) 14:47:46.84
>>816
子供、できるといいな
818デフォルトの名無しさん:2013/01/12(土) 15:26:35.34
SICP…
たぶん俺なんかが読んでも速攻で挫折するんだろうな
819デフォルトの名無しさん:2013/01/12(土) 15:29:58.95
SICPは古いし読む価値ないと思うよ。
820デフォルトの名無しさん:2013/01/12(土) 15:30:57.49
今はSICPよりJavascriptの本読んだほうがいいね。
821デフォルトの名無しさん:2013/01/12(土) 15:31:44.78
まだ生きてたの?
822デフォルトの名無しさん:2013/01/12(土) 15:31:59.02
Haskellスレ的にはSICPよかAlgebra of Programming
823デフォルトの名無しさん:2013/01/13(日) 01:38:46.38
>>818
RWH通読した根性があれば、その1/4の時間で読み終わると思う
824デフォルトの名無しさん:2013/01/13(日) 03:31:35.01
>>814
そこは『氷菓だけにぃいいいいい?』だろ
825デフォルトの名無しさん:2013/01/13(日) 04:02:56.20
わたし、(評価されると)木になります!
826デフォルトの名無しさん:2013/01/13(日) 10:03:39.60
SICPに古いかどうかなんて関係あるか?
827デフォルトの名無しさん:2013/01/13(日) 10:20:00.59
ここ20年における計算機科学の進歩を無視するというなら関係無いな
SICPが書かれた時分なんて計算機科学の専門家ですらモナドなにそれおいしいの?ってレベルだぞ
828デフォルトの名無しさん:2013/01/13(日) 11:19:30.21
ぶっちゃけSICPのどこがどう古いと言われてるのか知らない…
829デフォルトの名無しさん:2013/01/13(日) 11:31:23.25
一般に教科書は古い
学部でやる線型代数の教科書も古い
830デフォルトの名無しさん:2013/01/13(日) 11:33:30.35
線形代数は枯れてるけど計算機科学は滅茶苦茶若い学問っていう差はあるから同じようにはできないと思うよ
831デフォルトの名無しさん:2013/01/13(日) 11:42:44.76
計算機科学に新しい要素は加わったが、SICPは古くなってないと思うぞ。
ニュートン力学が古くならないのと同じ意味で。
832デフォルトの名無しさん:2013/01/13(日) 11:54:41.27
PascalよりSchemeが良いっていうコメントを入れてしまったのが古い
でもここでSchemeよりHaskellが良いと言うのは進歩がないよね
833デフォルトの名無しさん:2013/01/13(日) 11:59:53.76
計算機科学って、どのあたりが「科学」っぽい?
834デフォルトの名無しさん:2013/01/13(日) 12:01:20.27
等式推論と静的型検査の要素が入ったSICPがあれば嬉しい
835デフォルトの名無しさん:2013/01/13(日) 12:08:39.18
ではまず科学の定義から始めよう
836デフォルトの名無しさん:2013/01/13(日) 12:18:50.54
>>833
何が正しいか議論するよりも実験する方が早いところが科学
837デフォルトの名無しさん:2013/01/13(日) 14:53:17.71
計算機科学って、今でも「科学として」発展し続けてる?
838デフォルトの名無しさん:2013/01/13(日) 15:20:28.33
学科としてみたら就職率のいい数学科
839デフォルトの名無しさん:2013/01/13(日) 15:34:05.63
就職率なんて当てにならんだろ。
だって企業は学生がどの学科かなんて全く見てないんだから。
840デフォルトの名無しさん:2013/01/13(日) 15:42:35.49
Haskellアプリってどれくらいメモリ食うの?
64MBで普段スワップ起こしてる環境だから判んないけど
32GBとか積んだ環境だと一杯になるまで無尽蔵に使い続けるわけ?
841デフォルトの名無しさん:2013/01/13(日) 15:48:38.94
64Mじゃhaskell-src-extsのビルドもできない
842デフォルトの名無しさん:2013/01/13(日) 16:19:38.25
>>840
RTSオプション付けてプロファイリングしてみれば良い

それくらいは自分でできるだろ
843デフォルトの名無しさん:2013/01/13(日) 17:42:29.07
計算機の構造が根本的に変わらない限り、
SICPが古くなる(読んでもあまり意味がなくなる)ことは無いよ
844デフォルトの名無しさん:2013/01/13(日) 17:48:12.12
SICP信者多すぎて困るw
あんなもんただのScheme解説書じゃん。
計算機科学分もネットで出回っている情報レベルの本w
845デフォルトの名無しさん:2013/01/13(日) 17:55:29.51
そのネット情報のソースがSICPだったりしてなw
ま、そんなことはどうでもいいけど、
お前ら本の名前ばっかり論ってないで議論しろw
846デフォルトの名無しさん:2013/01/13(日) 17:58:10.86
じゃあお前が議論のネタ出せよ!!!
847デフォルトの名無しさん:2013/01/13(日) 17:59:57.41
qt-haskellのhaddockが最強
6Gあっても足りない
848デフォルトの名無しさん:2013/01/13(日) 18:06:18.28
> あんなもんただのScheme解説書じゃん。

どこがだよ。Schemeの教科書として読むのは勧められない、というのが定評なのに。
おまえが何もわかってないことだけが明らかw
849デフォルトの名無しさん:2013/01/13(日) 18:11:55.06
>>844
有志によるPython版すらあるというのに何を言っているのか
850デフォルトの名無しさん:2013/01/13(日) 18:13:04.44
TAOCPはどうなのよ
851デフォルトの名無しさん:2013/01/13(日) 18:15:48.44
大学1年の時にSICPを読んで、初めて言語処理系なる物を自作したなぁ。
あの頃はコンピュータ技術者の地位はそこそこ高かったw
852デフォルトの名無しさん:2013/01/13(日) 18:18:08.65
>>837
生物学のようなものが発展したら数学者はガッカリするだろうか
853デフォルトの名無しさん:2013/01/13(日) 18:18:55.36
>>845
みんなHaskellで語ることないんだよ
854デフォルトの名無しさん:2013/01/13(日) 18:32:35.58
すばらしい!
語る事が無いほど明快な言語というわけか!
855デフォルトの名無しさん:2013/01/13(日) 18:45:50.40
ビルドツールとか CI ツールとか、UML ツールとか、
そういうのって C や Python、Java などでよく作られるけど、
Haskell で作るって話が出ないのはなんで?

Haskell はその手のツールを作るの苦手なの?

こういうツールも初めは個人の趣味で、
一人で必要最小限の小さなアプリから作って育ったんだから、
Haskell で作って公開してる人が居てもおかしくないと思うんだが。
856デフォルトの名無しさん:2013/01/13(日) 19:04:51.44
時代じゃないかな。
そういうのが量産された時代ってせいぜい10〜20年ほど前だろ?
857デフォルトの名無しさん:2013/01/13(日) 19:09:11.54
今はWEBかスマホアプリの時代。
注目されている分野が違うんだよ。
858デフォルトの名無しさん:2013/01/13(日) 19:28:01.62
じゃあ、今ふだん Haskell でプログラムしてる人たちは、何作ってるの?
859デフォルトの名無しさん:2013/01/13(日) 19:34:52.42
サーバ関係じゃね
860デフォルトの名無しさん:2013/01/13(日) 19:35:27.26
>>858
論文
861デフォルトの名無しさん:2013/01/13(日) 19:35:51.74
>>860
イイネ!!
862デフォルトの名無しさん:2013/01/13(日) 19:36:10.48
Haskell…かな
863デフォルトの名無しさん:2013/01/13(日) 20:07:28.76
>>860
論文を書くのに必要な資料や文献を管理するツールとか?
論文の構想を錬るのに使うビジュアルツールみたいなのとか?

一部の特別な人間が使うサーバー関係よりも、こっちの方が興味あるな。
こういうのなら、改良して一般の人たちが普段使うツールにできそうな可能性ある。

なんでフリーウェアで公開しないの?
公開すればいろんな人たちが改造するかも知れんのに。
864デフォルトの名無しさん:2013/01/13(日) 20:09:50.93
shake
865デフォルトの名無しさん:2013/01/13(日) 20:34:30.44
>>863
定理を論文に書く → haskellで確認する
アルゴリズムを論文に書く → 実証用の簡易実装をhaskellで作って公開する
数値実験 → haskell環境で実験

haskellのコードに限りなく近い形で論文に掛けるからhaskellを使ってる
866デフォルトの名無しさん:2013/01/13(日) 20:38:25.44
俺は実験の生データをHaskellで読んで整形してchartとか適当なライブラリでグラフまで落すってのに使ってる
867デフォルトの名無しさん:2013/01/13(日) 20:52:45.82
javaのスケルトンをHaskellで作ってる
868デフォルトの名無しさん:2013/01/13(日) 21:12:57.13
>>865
論文に書く定理をhaskellでどうやって確認するの?
Haskellで確認できるというのは、例えばどういう定理?
869デフォルトの名無しさん:2013/01/14(月) 01:35:28.87
グラフ系とベイズ系と数値計算系と型理論系とデータベース系くらいか
870デフォルトの名無しさん:2013/01/14(月) 08:55:56.09
何とか伝えようとしても、かえって隠している印象が強くなるよね
871デフォルトの名無しさん:2013/01/14(月) 10:31:42.37
型理論系をHaskellで書く?アホだろ。
872デフォルトの名無しさん:2013/01/14(月) 12:21:32.06
http://blogs.wankuma.com/yaju/archive/2010/04/01/187628.aspx

これ、Haskell導入促進支援事業のページのリンクが切れてるんだけど、
結局どうなったの? 頓挫?

公式のサイト内でHaskellを検索してもページ無いし
873デフォルトの名無しさん:2013/01/14(月) 12:35:21.54
日付
874デフォルトの名無しさん:2013/01/14(月) 12:43:07.80
Haskell では昔からお約束w
ttp://www.dcs.gla.ac.uk/mail-www/haskell/msg00394.html
875デフォルトの名無しさん:2013/01/14(月) 13:26:11.79
>>870
個人が特定できちゃうからな…
876デフォルトの名無しさん:2013/01/14(月) 13:32:56.76
>>871
π計算、Chameleon system、単一型パラメータコンストラクタからの拡張法、…
877デフォルトの名無しさん:2013/01/14(月) 14:19:54.71
>>873
そういう事か

なんか悪意を感じるな
878デフォルトの名無しさん:2013/01/14(月) 14:22:15.78
日本で Haskell の事業って何かないの?

もちろんオープンソースのプロジェクトでもOKだけど
879デフォルトの名無しさん:2013/01/14(月) 15:18:11.54
880デフォルトの名無しさん:2013/01/14(月) 16:09:52.52
>>879
すまん、Haskellを使って具体的に何をするのか、
その事業はなんで他言語じゃなくHaskellなのか、
とかその辺りが知りたかった。

Haskellでこんな狙い(ビジョン)でこんなことやってます、
というのが分かるといいんだけどなぁ。
881デフォルトの名無しさん:2013/01/14(月) 16:26:48.72
>>857
その次はウェアラブルコンピューティングの時代
ますます富豪的プログラミングの日の目は遠ざかりますなあ
882デフォルトの名無しさん:2013/01/14(月) 17:03:03.44
haskellは静的型付けであり実行時型チェックしないので速い
http://benchmarksgame.alioth.debian.org/u64/which-programs-are-fastest.php
富豪的プログラミングから遠ざかりLLが滅びる中、haskellだけは生き残る!
883デフォルトの名無しさん:2013/01/14(月) 18:52:05.94
もう速度で言語を選ぶのはやめにしませんか?
884デフォルトの名無しさん:2013/01/14(月) 20:09:00.18
用途によって言語を使い分けたりしないのね
885デフォルトの名無しさん:2013/01/14(月) 21:07:04.60
その、用途と言語との関係がいまいち分からん。

コンソール用のゲームならC/C++が適してるし、
Webのクライアント側のシステムならJavaScriptが適してるが、
その他の用途って、言語は何使っても大して違いないような気がする。
好きな言語選べばいいんじゃね。

Haskellが適してる用途って何よ。

Haskellの特長を生かした、学習曲線が穏やかなGUIライブラリが無いという時点で、
適してる分野がかなり狭められているような気がするが。

Haskellの適した分野の集合 ⊂ その他の言語の適した分野の集合

今こんな感じだろ
886デフォルトの名無しさん:2013/01/14(月) 21:27:07.84
俺様言語処理系を書くこと
887デフォルトの名無しさん:2013/01/14(月) 21:48:19.53
>>883
学習速度、アプリ構築速度、メンテナンス速度、投資回収速度、いろいろ有るから無意味ではない。
888デフォルトの名無しさん:2013/01/14(月) 21:58:30.32
環境負荷と経済効率で測るべき
889デフォルトの名無しさん:2013/01/14(月) 22:05:18.33
アセスメント手法確立できないくせに〜
890デフォルトの名無しさん:2013/01/15(火) 00:38:01.96
>>885
言語は選ぶモノではない
押し付けられるモノだ
計算可能性が同じである以上、分野が適していないなんて言い訳は通用しない

我々にできることは、インターネット上の間違った知識を理由に言語を押し付けられないよう、間違いを見付けたら逐一指摘していくことのみ
891デフォルトの名無しさん:2013/01/15(火) 00:53:54.35
>>887
それ、結局は人間がボトルネックになってる。
ハードが進化して実行速度を無視してよくなったように、5年以内に自動コーディングが進んで人間のボトルネックも無視する風潮になるような気がする。
コンピュータ言語はガチの専門家さえ理解できればいい代物になってしまうのではなかろうか。
892デフォルトの名無しさん:2013/01/15(火) 00:56:52.99
じゃあガチの専門家になろう
893 ◆QZaw55cn4c :2013/01/15(火) 02:34:30.64
自動コーディングはどの程度まで進んでいるのであろうか?
また自動コーディング系になんらかの「仕様が記述されたもの」を入力しなければならないであろうが、それはどのように記述されるのであろうか?

haskell 風に記述するのか?まさか?
894デフォルトの名無しさん:2013/01/15(火) 02:40:54.78
抜け目ない仕様の記述という問題が残る以上
言語が一段高級になるだけにしか思えない
895デフォルトの名無しさん:2013/01/15(火) 08:12:45.76
キモい書きこみばっかだな
896デフォルトの名無しさん:2013/01/15(火) 08:35:24.36
>>891
>ハードが進化して実行速度を無視してよくなったように、

この認識が通用するのは、元々数桁の改善で済む程度の単純な問題についてだけ。
あと投資は技術のすじ以外の部分が大きい。
897デフォルトの名無しさん:2013/01/15(火) 10:14:14.82
『本物のプログラマはHaskellを使う』って読みにくいな
すごいHはあんなに分かりやすかったのに…
898デフォルトの名無しさん:2013/01/15(火) 18:13:13.36
そりゃ、あれは初心者に分かった気にさせる本だから
本物の〜の方が内容はしっかりしてる
899デフォルトの名無しさん:2013/01/15(火) 19:00:45.86
まあちょっと説明不足気味なのは分かる気がする>本物の〜
900デフォルトの名無しさん:2013/01/15(火) 20:36:26.80
>>897
例えばどこがどう読みにくい?
901デフォルトの名無しさん:2013/01/15(火) 21:30:08.31
>>900
端的に言えば読む側が理解しやすいように順序立てて説明してる感じがしない
筆者が思いついた順に説明してる感じ
各段落で読者が何を知っていて何を知らないかに注意を配ってないし
段落でされている説明が章全体の中でどういう位置にあるのかを読んでいて見失いやすい
知りたかったこと(定義)をズバリと教えてくれず例示とあいまいな日本語で済ませてる

あと「前回では〜」みたいな別の章の参照が不必要に多くて各章の独立性が低い

Haskellはどのような時にメモ化を行うのかを調べていて
「第8回 遅延評価の仕組み」に行き当たったけれど
「名前呼び出し」の説明に量を割きすぎていて
肝であろう「必要呼び出し」の説明が段落ひとつ分しか書かれてない
902デフォルトの名無しさん:2013/01/15(火) 22:25:09.23
必要になるまで、必要な分しか説明しないのだろう
903デフォルトの名無しさん:2013/01/15(火) 22:28:45.20
書籍にするつもりがない連載にそんな批判されましても
904デフォルトの名無しさん:2013/01/15(火) 22:33:38.14
そうは言っても、個人のブログなどとも違うからなぁ
905デフォルトの名無しさん:2013/01/15(火) 22:34:11.10
日本で批評の対象になる価値があるのはそのコラムだけだからな
難しすぎてスルーされてるけど。
君が10行も語ってるのがその証拠だな

俺的には彼にIOモナドを3年くらい解説してほしいマジで
State#って何なんだよ
906デフォルトの名無しさん:2013/01/15(火) 23:45:44.27
>>905
何だよっていうか、概念的には State Monad と同じだから State って書いてるだけで、
その辺は外部世界をどう記述するかっていう処理系依存の話だし別に気にせんでもいいのでは。
907デフォルトの名無しさん:2013/01/15(火) 23:58:53.61
Haskellでワープロを作る場合
一文字書く度に全てのデータを作り直す必要があるんですか?
908デフォルトの名無しさん:2013/01/16(水) 00:03:48.56
ないです
909デフォルトの名無しさん:2013/01/16(水) 00:11:02.27
referential transparencyなのにlet x = [1] in (x, x)と([1], [1])では効率が異なるので
結局referenceを意識しないとプログラムが書けないという罠
910デフォルトの名無しさん:2013/01/16(水) 00:13:56.61
効率が異なるという話とプログラムが書けないという話の間に飛躍がある
なぜ効率が異なるとプログラムが書けないのかを説明するべき
911デフォルトの名無しさん:2013/01/16(水) 01:12:59.45
空間効率が異なると片方は実行できて片方はオーバーフローする場合があって停止性が異なるので、同じアルゴリズムを実装したつもりでも、両者が同値であると言えない
912デフォルトの名無しさん:2013/01/16(水) 01:32:03.16
変数一個だけの式を除くすべての部分式に対して一時変数を定義するような形式
に変換したとき、同じ式に二個以上の一時変数が定義されるならば効率が良くない。
913デフォルトの名無しさん:2013/01/16(水) 16:53:19.40
女ってレジ待ちしてる間に財布用意できないの?
女は遅延評価
914デフォルトの名無しさん:2013/01/16(水) 16:56:26.76
女はプロセスを組み立てるのが下手。
女がプログラミング向いてるなんてのは迷信。
915デフォルトの名無しさん:2013/01/16(水) 17:09:26.02
ストレス貯める器ちっさ
鼠並み
916デフォルトの名無しさん:2013/01/16(水) 19:03:21.97
昔はプログラミングと言えば女性の仕事だったんだけどな
917デフォルトの名無しさん:2013/01/16(水) 19:06:33.59
:(;゙゚'ω゚'):マジで……?
918デフォルトの名無しさん:2013/01/16(水) 19:31:51.37
Adaは女性だし、ENIAC時代は女性がプログラミング担当やってたはず
919デフォルトの名無しさん:2013/01/16(水) 19:42:39.67
>>918
そんなことは知ってる。
当時はプログラミングは大した仕事ではなかった。
戦時中の米軍でコンピュータが導入された時、
プログラミングは数学者や工学者ではなく、
普通の高校生を何人か連れてきてやらせていた。
920デフォルトの名無しさん:2013/01/16(水) 19:44:32.25
初期の頃はハードウェアが重要で
ソフトウェアはオマケ程度にしか思われていなかったんだよ。
それこそ、プログラミングはティッシュ配り程度の仕事だと思われていた。
921デフォルトの名無しさん:2013/01/16(水) 20:47:09.85
「Coders at Work」のフラン・アレンの章を読むと、
女性も普通に高度なプログラミングに従事していた様子が窺える。

少なくとも、ティッシュ配り程度の仕事という認識では、
とてもではないけどあんなシステムを構築する仕事はできないと思う。
それも、フラン・アレンが特別優秀だったわけではなく、他の女性達もね。
922921:2013/01/16(水) 20:49:45.62
>>920
すまん、ティッシュ配り程度と君が言う時代よりも、
>>921 はもっと後の話だな。

混同してしまった。
923デフォルトの名無しさん:2013/01/16(水) 20:50:11.04
ティッシュ配りはあれはあれで難しいと聞く
924デフォルトの名無しさん:2013/01/16(水) 21:14:36.47
勉強していて詰まった。

APLだとすべての演算子が右結合だったので、
foldrが簡約演算子'/'を一般化したものだと考えることができた。

でも左結合のfoldlがピンと来ない。

foldl f v [x0,x1,...,xn]=(...((v `f` x0) `f` x1) `f`...) `f` xn

とのことだけど、リストの先頭に空リストがあるわけでもないのに、vがx0より前に現れる。
不思議。
925デフォルトの名無しさん:2013/01/16(水) 21:37:19.20
>>924
俺は不思議さを共有できないからアドバイスできんのだが、
foldl のソースを見てみると、もしかしたら疑問が解消されるかも。

ライブラリドキュメントの Data.List のページの
foldl の項の右端にある Source というリンクを辿れば、ソースが見れる。
926デフォルトの名無しさん:2013/01/16(水) 22:20:58.55
>>925
どうもありがとう。

ライブラリ関数のソースの調べ方も分かりました。

リストの先頭から要素を一つづつ取り出して二項演算子で評価していますね。

BASIC風に書くと

result=v
FOR i=0 TO n
LET result=result `f` x(i)
NEXT i
PRINT result

みたいな動きで、foldlの第2引数はループの最初に与える初期値のようですね。
(foldrの第2引数は再帰の終端の値。)

手続き型言語によるアナロジーで、関数型言語を理解したことになるのか不明ですが。
927デフォルトの名無しさん:2013/01/17(木) 01:45:46.62
指定した関数のソースを標準出力する関数ってないでしょうか?
ghci 環境で :load で読み込んだファイルにある関数ならできそうな気がするのですが
928デフォルトの名無しさん:2013/01/17(木) 03:11:29.67
なんかこのスレ、ノネナール臭がする
929デフォルトの名無しさん:2013/01/17(木) 07:22:06.47
>>927
そのような関数が GHC の標準ライブラリに存在するかという質問でしたら、
存在しません。

haskell-src パッケージ(およびその拡張機能パッケージ)を使って、
その関数が定義されているソースファイルを解析してください。
930デフォルトの名無しさん:2013/01/17(木) 10:21:16.94
>>927
:list 関数
じゃあかんの?
931デフォルトの名無しさん:2013/01/17(木) 10:23:05.55
>>924
自分は、foldrは普通の再帰を一般化したもの
foldlは末尾再帰を一般化したものって理解
932デフォルトの名無しさん:2013/01/17(木) 10:27:37.47
>>891
5年以内はちと難しいだろうが、まさにあなたの読み通りになるだろう。
>>893
最近の日本人の論文を検索してみるとよい。ひそかにすごいのがある。
>どのように記述されるのであろうか?
もちろんhaskell 風ではない。
933デフォルトの名無しさん:2013/01/17(木) 11:13:16.15
自動コーディングなんて妄言吐いてる人まだ居るんだね
934デフォルトの名無しさん:2013/01/17(木) 11:41:39.73
自動プログラミングw
Fortran時代の人ですかねw
935デフォルトの名無しさん:2013/01/17(木) 12:37:48.21
コンパイラは、自動プログラミングの成果なんだが、使った事ない人に説明するのは難しいね。
936デフォルトの名無しさん:2013/01/17(木) 12:56:18.38
で?としか言いようがない
937デフォルトの名無しさん:2013/01/17(木) 13:08:11.53
>>935
で?
938デフォルトの名無しさん:2013/01/17(木) 13:29:52.95
フォーム入力とか帳票とか土方仕事程度なら
エクセルで仕様書書くだけでプログラム自動生成の時代なんだぜ
939デフォルトの名無しさん:2013/01/17(木) 13:47:58.38
>>938
それとかプログラムソース->実行モジュールは、アセンブラのレベル。
コンパイラでないものを、高級?に見せるためにコンパイラと称してるのが多いけどね。
940デフォルトの名無しさん:2013/01/17(木) 13:49:23.13
仕様書を突き詰めるとプログラムになる。
書かなくてもわかるようなところは汎用的だから
すでにライブラリ化されているはずだし
結局は自分でプログラム書いたほうが早いわけ。

自然言語でしか仕様書を書けない人は無駄な余剰人員だと思う。
941デフォルトの名無しさん:2013/01/17(木) 13:56:37.86
まーたまともにコード書きもしないやつがぐだぐだ言ってんのか
942デフォルトの名無しさん:2013/01/17(木) 14:16:18.19
えっ、ここってそういうスレじゃないの?
943デフォルトの名無しさん:2013/01/17(木) 14:38:15.19
法学部の学生にはプログラミング必修にした方が良い
944デフォルトの名無しさん:2013/01/17(木) 14:39:05.81
人間相手なら駄々こねるだけで何か作ってくれるから
便利さでいえば人間が最強だ
機械化、自動化の魅力は便利さではなく正確で馬鹿正直なところ
945デフォルトの名無しさん:2013/01/17(木) 15:06:12.84
多数のフィールドを持つデータの一カ所だけ変更したものを作る場合
新しい部分だけ新設されて既存箇所はポインタで繋げるだけで済む?
946デフォルトの名無しさん:2013/01/17(木) 17:28:55.29
>>933
職人芸として自動プログラミングを利用するプログラマがすでに存在するから、同じ給料でもプログラマによって生産量が1000倍違う
947デフォルトの名無しさん:2013/01/17(木) 17:44:56.14
はあ、そうですか
948デフォルトの名無しさん:2013/01/17(木) 17:49:52.66
たしかに、出社して30分でその日のノルマを終わらせて、会社でずっと2ch見てる人が必ずひとりはいる
949デフォルトの名無しさん:2013/01/17(木) 17:54:23.08
1000倍になるのに30分もかかるのかw
950デフォルトの名無しさん:2013/01/17(木) 18:09:14.09
>>948
瞬間生産量が1000倍あっても
集中力持続時間が1000分の1しかないなら
総生産量は変わらん
951デフォルトの名無しさん:2013/01/17(木) 18:09:56.87
1000倍だとか30分だとか、小学生の喧嘩レベルだな
952デフォルトの名無しさん:2013/01/17(木) 19:04:24.65
Haskell の話しろ
953デフォルトの名無しさん:2013/01/17(木) 19:20:57.44
最近は質問とみせかけて
スレ違いの話題を延々と引っ張る
自演荒らしが流行ってるのか
954デフォルトの名無しさん:2013/01/17(木) 20:06:23.17
>>950
総生産量が1000倍違う
10年前は100倍だった
955デフォルトの名無しさん:2013/01/17(木) 20:12:50.36
>>952
Haskellの使い道が自動コーディング
というか、日本の会社の実務でのHaskellの使い道なんてそれしかない

昔はlispでDSLからスケルトンとテストケース作ってたけど、parsecがあるからhaskellに移行中
956デフォルトの名無しさん:2013/01/17(木) 20:24:47.44
>>955
海外だとどうなの?
957デフォルトの名無しさん:2013/01/17(木) 20:29:35.23
自動コーディングは、どう考えても無理だろ。
958デフォルトの名無しさん:2013/01/17(木) 20:38:07.96
>>957
部分的にはできてる
(100歩譲って全部できてる分野があったとしても、自動でやるからもう表に出ない)

実際に使ってるのを見たことがあるのは、領域を限定してコーディングするのと、コードの断片だけ生成するのと、自動でリファクタリングしてAPIを出力するのだけ
あと作曲
959デフォルトの名無しさん:2013/01/17(木) 20:48:03.60
ひな形を作るのは自動コーディングとは別物?

例えばクラス図を元にC++のファイルを生成するとか。
960デフォルトの名無しさん:2013/01/17(木) 20:59:37.72
>>958
「自動コーディング」するために、なんらかの仕様書を食わせる必要があるっしょ。
結果、その仕様書を作る作業が必要になる。

その仕様書も独特の文法があるはずで、結果としてプログラミング言語の一種になってしまう。
961デフォルトの名無しさん:2013/01/17(木) 21:04:40.55
>>960
自動プログラミングの最終目標は、仕様書=自然言語
962デフォルトの名無しさん:2013/01/17(木) 21:08:40.13
双方向化や総称データプログラミングも広義の自動化
963デフォルトの名無しさん:2013/01/17(木) 21:10:06.88
大抵のことは自動化と言えるな
964デフォルトの名無しさん:2013/01/17(木) 21:19:55.45
>>945
うん
965デフォルトの名無しさん:2013/01/17(木) 21:24:54.20
大抵はコードの量を圧縮するだけだね
それ以上を目指すのはオカルト
966デフォルトの名無しさん:2013/01/17(木) 21:28:08.90
高度に発達した科学は魔術と変わらない
967デフォルトの名無しさん:2013/01/17(木) 22:27:23.81
赤ん坊は言葉を話せなくても泣き叫ぶだけで大抵の事は伝わるだろ
そこで、泣き声に魔術のような力があると思い込んだ奴は科学的な発達が止まる
968デフォルトの名無しさん:2013/01/17(木) 22:37:29.47
魔術のような神の力に対抗できるのは「論理」しかないと悟って科学は発達した
969デフォルトの名無しさん:2013/01/17(木) 22:44:47.40
はぁ。
970デフォルトの名無しさん:2013/01/17(木) 22:55:37.00
論理は実験をさぼるノウハウであってあくまで実験が基本だぜ
971デフォルトの名無しさん:2013/01/17(木) 23:06:44.61
>>970
計算機の中は論理だけでよい
972デフォルトの名無しさん:2013/01/17(木) 23:08:49.11
計算科学はどこに分類されるのだろう?
973デフォルトの名無しさん:2013/01/17(木) 23:09:53.44
hoge= trace "hoge eval" 1
foo= trace "foo eval"
fibs= (trace "0 eval" 0):1:(zipWith (+) fibs (tail fibs))
main = print $ [hoge,hoge,foo 1, foo 1] ++ take 5 fibs2

実行結果
hoge eval
foo eval
foo eval
0 eval
[1,1,1,1,0,1,1,2,3]

メモ化の基準が分からない…
974デフォルトの名無しさん:2013/01/17(木) 23:10:58.94
> main = print $ [hoge,hoge,foo 1, foo 1] ++ take 5 fibs
間違えた
975デフォルトの名無しさん:2013/01/18(金) 00:10:17.88
>>973
こう考えると良い(説明を簡単にするために少し端折ってる)。

f :: Int の文脈で let x = f in x + x

この場合、最初は x は関数 f を指している。
1回目に x を評価しようとすると、f が評価され、
x は f ではなく f の評価結果の値を指すようになる。
だから2回目に x を評価する時、f を再評価することはせず、
先ほど f から指し換えた値を直接使う。
これが(GHC の)グラフ簡約によって実現するメモ化だ。

g :: Int -> Int の文脈で let y = g in y 3 + y 3

この場合、最初に y は関数 g を指している。
1 回目に y を評価しようとすると、g が評価され、
g は1引数関数なので、さらに第1引数を評価しようとする。
第1引数は値(3)なので g 3 が評価される。

ここで、g は y によって指されているが、
y 3 や g 3 という関数(結果として値だが)を指しているものは、
どこにも無いことに注意。

よって、2回目に y を評価する時、g を再評価することはしないが、
g 3 はもう一度評価されることになる。
1回目の g 3 はどこからも指されていないのだから、
どこにもメモ化されていない。

let y = g 3 in y + y とすれば g 3 の評価結果が y にメモ化される。

>>973 で hoge が1回しかトレースされず、
foo が2回トレースされているのはこういうこと。
976デフォルトの名無しさん:2013/01/18(金) 00:52:06.10
なるほど
ポインタのようにプログラム中に書かれた項が簡約途中の結果を指していると考えればいいのですね
memorized_fib = (map fib [0 ..] !!)
where
fib 0 = trace "0 eval" 0
fib 1 = 1
fib n = memorized_fib (n-1) + memorized_fib (n-2)
main = print $ memorized_fib 10 + memorized_fib 20
実行結果
0 eval
6820
この例では明示的に特定の変数が何かを指しているわけではありませんが
"map fib [0 ..]"の部分が0:1:1:2: ...という(途中の)評価結果を指していると考えていいのかな…
977デフォルトの名無しさん:2013/01/18(金) 01:35:49.34
(動的型なら) クロージャ (\ x y f -> f x y) でリスト構造が作れる
これならリストの中も変数 x か y に指されるのでポインタなどいらん
978デフォルトの名無しさん:2013/01/18(金) 07:38:00.33
単なるコード生成の事を自動コーディングって呼んでるだけかよ
それこそ「で?」としか言いようがないな
979デフォルトの名無しさん:2013/01/18(金) 08:44:09.51
なにをどう考えたら>>932みたいな妄言吐くようになるんだろうね
980デフォルトの名無しさん:2013/01/18(金) 09:01:45.78
継ぎスレ居る?
981デフォルトの名無しさん:2013/01/18(金) 09:52:25.70
要らないでしょ
982デフォルトの名無しさん:2013/01/18(金) 10:09:05.30
居るか居ないかを聞いている訳だから
「居ない」と答えるべき
983デフォルトの名無しさん:2013/01/18(金) 11:18:10.83
日本語が不自由なようで
984デフォルトの名無しさん:2013/01/18(金) 11:46:52.98
居る? という質問に対して、要らないと返すのが自由な日本語だそうだ。

確かに自由だなw
985デフォルトの名無しさん:2013/01/18(金) 11:47:58.51
replibでgeneric zipper書いてくれ
986デフォルトの名無しさん:2013/01/18(金) 11:53:31.20
「居る?」に対して「要らない」と返って来たら、
それは、居ないし要らないって意味だと推論できない奴は無能だな
Javaみたいな面倒な言語を平気で愛用してそう
987デフォルトの名無しさん:2013/01/18(金) 11:53:35.22
ああ、想像力が無いのね
988デフォルトの名無しさん
いいぞもっとやれ