関数型プログラミング言語Haskell Part20
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2012/10/17(水) 08:08:28.97ttp://www.haskell.org/
日本語サイト
ttp://www.sampou.org/cgi-bin/haskell.cgi
ttp://www.shido.info/hs/
過去ログ
関数型プログラミング言語Haskell
Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html
Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/
Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/
Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/
Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/
Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/
Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/
Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/
Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/
Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/
Part17 ttp://toro.2ch.net/test/read.cgi/tech/1325510368/
Part18 ttp://toro.2ch.net/test/read.cgi/tech/1331902463/
Part19 ttp://toro.2ch.net/test/read.cgi/tech/1340760070/
0002デフォルトの名無しさん
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
0003デフォルトの名無しさん
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
0004デフォルトの名無しさん
2012/10/17(水) 08:32:15.590005デフォルトの名無しさん
2012/10/17(水) 09:31:32.10関数型の考え方はExcelのおかげで充分社会に浸透していると思う。
Excelシートを使って統計や簡単な計算が出来る人は大勢いるが、同じことを
同じような時間で手続き型言語で出来る人が同程度いるとは思えない。
よって、前スレの>>988に同意
0006デフォルトの名無しさん
2012/10/17(水) 09:54:00.21>>988には同意だが、年寄り向きではないね。記号を使い過ぎで忘れてしまう。
Smalltalk や Prolog とはちょっと違う。
0007デフォルトの名無しさん
2012/10/17(水) 11:34:17.99for( 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))
0008デフォルトの名無しさん
2012/10/17(水) 11:36:23.05たしかにそういう入門書は多いけどさ
0009デフォルトの名無しさん
2012/10/17(水) 13:03:44.79宣言的な考え方は認識や言葉の基本。身近すぎて>>990が気づいてないだけでは
0010デフォルトの名無しさん
2012/10/17(水) 18:04:45.340011デフォルトの名無しさん
2012/10/17(水) 19:13:00.41Enumrator.Range(1,5).Where(x => 2 < x && x < 5).Select(x => x*2);
だよ。
1から5までぐらいだったら文字数増えちゃうけどね。
0012デフォルトの名無しさん
2012/10/17(水) 20:39:30.53アナロジーで考えるという事ではなく、染みついた思考法・問題解決法
0013デフォルトの名無しさん
2012/10/17(水) 21:09:16.38宣言的の意味が違う。
出くわした問題や課題を解決しようとする時に、
素直に頭に思い浮かぶ解決方法としての宣言的な考え方の話。
問題や周辺環境を宣言的に表現して解を導く子どもはあまりいない。
たいていの子は問題解決への(直接の)手続き・手順を考える。
0014デフォルトの名無しさん
2012/10/17(水) 22:58:27.860015デフォルトの名無しさん
2012/10/18(木) 00:05:08.05えーそんなことないでしょ。推論は宣言的な方法で問題解決してるじゃない
解決方法としての宣言的な考え方が日常的でないなんていうのはおかしい
0016デフォルトの名無しさん
2012/10/18(木) 00:56:42.35「関数型言語は自然な人間の思考に反する」とか言うために
子供がどう考えるかとか話を拡げて泥沼化したいだけだろ
変な脳科学みたいに
0017デフォルトの名無しさん
2012/10/18(木) 04:28:28.670018デフォルトの名無しさん
2012/10/18(木) 04:31:04.260019デフォルトの名無しさん
2012/10/18(木) 07:53:24.86「関数型言語は自然な人間の思考に反する」と言ったことは一度もない。
人間の思考は柔軟なので、訓練すれば誰でも色々な考え方が自然にできるようになる。
先のは問題や課題を解決しようとする時、かつ、子どもの話だ。
子どもは思考をする訓練をまだそれほど受けない。
大人に向けて成長していくうちに、授業や生活の中で自然に
宣言的な考え方をする訓練を徐々に受ける。
(教師側も宣言的な考え方を学ばせようと意図しているわけではない)
社会人になる頃には、たいていは宣言的な考え方も、
手続き的な考え方もやろうと思えば普通にできるようになってる。
しかし、意識してやっているわけではないので、
そのままでは Haskell でプログラムするのにたいして役には立たない。
問題や環境を意識して宣言的にとらえたり翻訳する練習を重ねないと、
プログラムは難しい。
ただ、考え方自体はすでに慣れているので、
宣言的な記述を見たときにそれを解釈するのはそれほど苦ではない。
また、そのために、問題を宣言的にとらえるのも、
ある問題で合点がいけば他の問題もスルスルと合点がいく事も起こり得る。
Haskell を初めた頃は難しかったが、
ある日突然視界が開けたという経験をする人が多いのは、
そのことも少なからず関係しているのではないかと私は思う。
0020デフォルトの名無しさん
2012/10/18(木) 08:30:28.87あなたが>>990なら、言っていることがずいぶん変わってるが。
0021デフォルトの名無しさん
2012/10/18(木) 10:17:49.42宣言的とか関係ないんじゃね?
0022デフォルトの名無しさん
2012/10/18(木) 12:43:21.69型システムを理解しないとね、は自分も経験してるから簡単に同意できる。
宣言的とか関係ないんじゃね? は、根拠を示してくれ。
関係ないと感じた経験がないから、じゃね?と言われても
このままでは同意も反対もできん。
0023デフォルトの名無しさん
2012/10/18(木) 12:53:49.19指摘はもっともだ。
>>990
> 静的な、宣言的な考え方なんて、手続き的な考え方に比べれば、
> 学校教育の現場でほとんど出くわすことはないだろう。
> たとえ出くわしても、意識しなければ素通りしていくだけで、身にならない。
これは言い過ぎた。
出くわすし、成長と供に授業の中でそれとなく訓練を受けてはいる。
しかし、いかんせん、そうだとは意識していないのだから、
そのままでは Haskell のプログラムをする事に関してはたいして役に立たない。
宣言的な考え方に触れた時にそれを理解できる体勢にはなるが、
そういう考え方を自分から進んでするまでには至らないだろう。
そして、自分から進んで宣言的に考える事に慣れなければ、
Haskell でのプログラムが C や Java より簡単とは思えないのではないだろうか。
自分で宣言的に考える事ができなければ
Haskell のプログラムはいつまで経ってもしっくりこないと思う。
0024デフォルトの名無しさん
2012/10/18(木) 14:21:05.060025デフォルトの名無しさん
2012/10/18(木) 15:47:09.900026デフォルトの名無しさん
2012/10/18(木) 16:01:15.25今回の件では3行以内でレスするのは今の私には無理だ。
どうしても3行以内にしてほしいのなら、
もうレスをやめざるを得ない。
0027デフォルトの名無しさん
2012/10/18(木) 18:24:22.89議題なに?
0028デフォルトの名無しさん
2012/10/18(木) 20:14:57.130029デフォルトの名無しさん
2012/10/18(木) 21:08:07.743行とか関係なしに、もうレスやめていいよ
0030デフォルトの名無しさん
2012/10/18(木) 21:39:11.88了解した
0031デフォルトの名無しさん
2012/10/18(木) 21:49:12.21できるならやる、できないならやらない、は宣言的ではない
何ができるかよりも何をするべきかを重視する
0032デフォルトの名無しさん
2012/10/18(木) 21:57:13.27どう解くのが宣言的なのよ?
0033デフォルトの名無しさん
2012/10/18(木) 22:04:42.11宣言的には解けない
0034デフォルトの名無しさん
2012/10/18(木) 22:30:06.88矛盾するまで仮定するのをやめない
0035デフォルトの名無しさん
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 系は今の盤の状態の他に、一つ前の盤の状態とか、
終局理由の情報も含まれてる代数データ型。
あと、ユーザー入力はどうすんの? とかいう話はとりあえず無し。
0036デフォルトの名無しさん
2012/10/19(金) 02:43:31.15これは宣言じゃなくて発見
0037デフォルトの名無しさん
2012/10/19(金) 05:07:03.700038デフォルトの名無しさん
2012/10/19(金) 07:49:38.95下記のようにパターンの中で簡単な計算をするのは
どういう名前の言語拡張でしたっけ?
f :: Int -> Int -> Int
f (n + 1) x = ・・・
0039デフォルトの名無しさん
2012/10/19(金) 08:05:08.19発見:定義しなくてもそのうちわかる
0040デフォルトの名無しさん
2012/10/19(金) 08:43:31.84つまり、アルゴリズムというものは、宣言的ではあり得ない?
0041デフォルトの名無しさん
2012/10/19(金) 10:07:40.36それは宣言とは全く関係ないから宣言的ではない
黙っていても存在感があるものは宣言的ではない
言い続けなければ消えてしまいそうなものは宣言的
0042デフォルトの名無しさん
2012/10/19(金) 12:51:29.730043デフォルトの名無しさん
2012/10/19(金) 16:01:54.12ほかの言語でもできるから
0044デフォルトの名無しさん
2012/10/19(金) 16:09:48.32「アルゴリズムとはチューリングマシンの計算表のことだと考えよう!」
0045デフォルトの名無しさん
2012/10/19(金) 18:14:26.77現に宣言的型とはいわないだろ 静的型だろ
0046デフォルトの名無しさん
2012/10/19(金) 18:50:18.220047デフォルトの名無しさん
2012/10/19(金) 19:02:30.34宣言的という言葉の意味をはっきり定義してくれ
じゃないとまじめな議論にならんだろ
0048デフォルトの名無しさん
2012/10/19(金) 19:32:35.75というような文言の羅列になるのが宣言的なのでは。
0049デフォルトの名無しさん
2012/10/19(金) 20:21:24.490050デフォルトの名無しさん
2012/10/19(金) 20:25:54.43この文脈で言うオブジェクトってなにを指す?
0051デフォルトの名無しさん
2012/10/19(金) 20:46:27.43メモリ領域などを抽象化したものかな
0052デフォルトの名無しさん
2012/10/19(金) 20:49:32.89ちなみに、Haskell の変数は特定のメモリ領域に付けられたラベル(名前)じゃないよね
0053デフォルトの名無しさん
2012/10/19(金) 21:02:41.02>別の定義では、純粋関数型言語/論理プログラミング言語/制約プログラミング言語で書かれたプログラムを「宣言型」と称する。
0054デフォルトの名無しさん
2012/10/19(金) 21:04:29.55そうだよね
特定したくないから抽象化したんだよね
0055デフォルトの名無しさん
2012/10/19(金) 21:10:43.86特定したくないから抽象化したって、何か勘違いしてないか?
Haskell の変数は、値が格納されたメモリ領域に付けられたラベルではなく、
「値に付けられたラベル」だぞ。
let a = 17
というのは、17 という値の別名が a ということだ
0056デフォルトの名無しさん
2012/10/19(金) 21:17:19.21これはPrologの簡単なプログラムですが、
http://nojiriko.asia/prolog/olympic.html
A とは B のことだ。ではなく例えば、
1888とアテネは夏期オリンピック関係にある。
という文言に相当するものの羅列と見做すことができる。
これも全体として宣言的と言える。
0057デフォルトの名無しさん
2012/10/19(金) 21:19:42.83特定の値ではなく抽象的な値にラベルをつけるよ
まだ値がわからない段階でもラベルをつける
0058デフォルトの名無しさん
2012/10/19(金) 21:21:39.22夏期オリンピック(1996,アテネ).
1988ではなくて、1996だった。さっきjavaの宿題スレにも
同じテーマのことを書き込んでその時点から勘違いをしていた。
005958
2012/10/19(金) 21:23:52.620060デフォルトの名無しさん
2012/10/19(金) 21:32:04.79>>54 は「そうだよね}と同意し「特定したくないから抽象化したんだよね」と言ってる
>>54 の言う「特定したくない」というのは、メモリ領域を特定したくないから、
と読み取れないか?
0061デフォルトの名無しさん
2012/10/19(金) 21:39:35.17プログラマーがオリンピックを宣言するのはなぜなのか
0062デフォルトの名無しさん
2012/10/19(金) 22:01:43.64http://nojiriko.asia/prolog/j72_387.html
0063デフォルトの名無しさん
2012/10/20(土) 01:33:24.660064デフォルトの名無しさん
2012/10/20(土) 08:13:40.39n+kパターンはHaskell98の仕様にあったが、Haskell2010で取り除かれた。
GHCのフラグには (No)NPlusKPatterns がそれかね。
0065デフォルトの名無しさん
2012/10/20(土) 21:28:24.10Graphics.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
0066デフォルトの名無しさん
2012/10/20(土) 23:57:24.35望まれない子の将来が気になります
0067デフォルトの名無しさん
2012/10/21(日) 00:16:08.21ありがとうございます。
0068デフォルトの名無しさん
2012/10/21(日) 00:58:21.170069デフォルトの名無しさん
2012/10/21(日) 03:29:09.78説明なしにいきなり初出の単語が出てくるし話はあっちこっちに逸れまくり
Haskellとかコンピュータとかの枠に限らず一般的な書籍としてかなり悪いほうだと思う
0070デフォルトの名無しさん
2012/10/21(日) 09:04:40.35それほど苦にならないと思うが
0071デフォルトの名無しさん
2012/10/21(日) 10:15:13.08学習のための本としての役割を果たしていないと思うけどね
0072デフォルトの名無しさん
2012/10/21(日) 10:44:10.30あれ? 何だろ? って思ったら、まずは調べてみればいいいじゃん。
Just なんてその本にしか載っていない特別に物でもないんだし。
他の本でもそういうの色々あるよ。
とくに説明もなく新しい単語や概念が出てくるのなんてしょっちゅうだ。
そんなところでいちいち躓いて憤ってたらきりがないよ。
それに改善点を指摘するなら、ここにじゃなくて、出版社や著者にでしょ。
0073デフォルトの名無しさん
2012/10/21(日) 11:07:04.27他の入門書はとりあえずHaskellを知る程度のものでしかない
RWHに代わるものが現れるまではとりあえず必要なものだ
0074デフォルトの名無しさん
2012/10/21(日) 16:13:17.47何も変わってないよ。Haskell2010に入ってる
ただしGHC 7.8からghciではデフォルトで外されることになった
http://hackage.haskell.org/trac/ghc/ticket/3202
0076デフォルトの名無しさん
2012/10/23(火) 18:13:04.53遂に白河の清きに魚の住み兼ねて
元の濁りの田沼に戻るのですね!
0077デフォルトの名無しさん
2012/10/23(火) 18:37:19.710078デフォルトの名無しさん
2012/10/24(水) 04:47:19.040079デフォルトの名無しさん
2012/10/24(水) 18:37:32.62良かれと思って型宣言したらコンパイル通らなくなる
rigid type variable bound by 云々言い出して
俺の善意を踏みにじりやがる
0080デフォルトの名無しさん
2012/10/24(水) 19:00:08.28どんなコードでそのエラーが出た?
そのエラーには「Could not deduce 〜」というのもあった?
ちなみに型は、元々コンパイルが通っていたコードに
良かれと思って後から書き加えるものではないよ。
テスト駆動がまずテストを書くのと同じように、まず型を書くんだよ。
それから本体を「型に合わせて」書くんだ。
0081デフォルトの名無しさん
2012/10/24(水) 19:10:04.15もしかしてローカル変数に多相型の宣言付けてエラーもらってる?
それなら、ローカル変数の型宣言の中では、外の型変数を(ScopedTypeVariable拡張なしでは)
使えないということを覚えておけばいいよ
0082デフォルトの名無しさん
2012/10/24(水) 19:12:00.93>テスト駆動がまずテストを書くのと同じように、まず型を書くんだよ。
そんなの場合によるだろ。糞どうでもいい
0083デフォルトの名無しさん
2012/10/24(水) 19:14:58.53どのような場合に先の型を書き、
どのような場合に後に型を書くと良いのでしょうか?
何か簡単な事例を挙げていただけると助かります。
0084デフォルトの名無しさん
2012/10/24(水) 19:17:54.500085デフォルトの名無しさん
2012/10/24(水) 19:25:28.550086デフォルトの名無しさん
2012/10/24(水) 19:26:10.200087デフォルトの名無しさん
2012/10/24(水) 19:38:04.480088デフォルトの名無しさん
2012/10/24(水) 19:52:22.720089デフォルトの名無しさん
2012/10/24(水) 19:59:05.000090デフォルトの名無しさん
2012/10/24(水) 20:09:30.95そう思う根拠は?
0091デフォルトの名無しさん
2012/10/24(水) 20:40:10.35そう思う根拠は?
0092デフォルトの名無しさん
2012/10/24(水) 20:45:05.320093デフォルトの名無しさん
2012/10/24(水) 20:53:26.270094デフォルトの名無しさん
2012/10/24(水) 20:57:36.06ただちに書かなくていいことは後で書く
テスト駆動も、制約に合わせて書くというより
関係ないコードを書かないことで間違いを減らしている気がする
0095デフォルトの名無しさん
2012/10/24(水) 21:04:30.70好きにすればいいと思うけど、俺の基準を挙げるなら、
トップレベルの定義は先に思い付いた方から書く
・普通は型の方が簡単なので型から書くことが多い
-- | 標準正規分布に従う乱数を生成する
randomNormal :: StdGen -> (Double, StdGen)
・定義が頭にあるのに型がすぐに思い付かないor面倒なら定義から
forceTell x = rnf x `seq` tell x
forceTell :: (MonadWriter w m, NFData w) => w -> m ()
ローカル変数は定義から書く。型は必要なときだけ後から書く
0096デフォルトの名無しさん
2012/10/24(水) 21:06:43.98そもそも、「式」とは何?
それをはっきり定義しないと、where が式なのかどうか判断できないだろ
0097デフォルトの名無しさん
2012/10/24(水) 21:10:37.15・whereは式じゃない。宣言やcase選択肢の一部
・Haskellに「文」は存在する。do式の中に並んでいるのがそれ
0098デフォルトの名無しさん
2012/10/24(水) 21:14:38.02書くかどうかは気分(ローカルで型推論がうまく働かなきゃ書く)。
>>80 の型から先に書くというのは、そういう意味で俺は無意識に拡大解釈したけど、
例に出したテスト駆動の方は実際に書かなきゃ意味ないなぁ、どうなんだろ。
(テスト駆動の方も、コードの内容よりテストから先に「考える」と言えばそうだろうが)
0099デフォルトの名無しさん
2012/10/24(水) 22:07:48.31SQLなら
0100デフォルトの名無しさん
2012/10/24(水) 23:39:27.46渡してるのが Vector なんだから Vector の方の tail だって推測してくれても良いんじゃないの?
分からず屋!
0101デフォルトの名無しさん
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))))
0102デフォルトの名無しさん
2012/10/26(金) 16:32:06.340103デフォルトの名無しさん
2012/10/26(金) 18:12:19.85その機能をうまく(型推論の便利さをあまり犠牲にしないで)実装できたらすごい
俺は尊敬するし、論文も書ける
0104デフォルトの名無しさん
2012/10/26(金) 18:48:34.110105デフォルトの名無しさん
2012/10/26(金) 18:55:32.060106デフォルトの名無しさん
2012/10/27(土) 00:05:49.70IronPythonみたいに外部か開発部署に物好きがいないとむずかしいかもね。
どちらかというとF#の人たちがどういうポジションなのか気になる。
0107デフォルトの名無しさん
2012/10/27(土) 08:22:56.10関数プログラミング入門 Haskellで学ぶ原理と技法|Ohmsha
http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=978-4-274-06896-6
0108デフォルトの名無しさん
2012/10/27(土) 15:32:25.90どうしてだよ!
手続き型言語によくあるオーバーロードだろ
できないのかよ!
0109デフォルトの名無しさん
2012/10/27(土) 15:51:33.66特徴
・コンピュータサイエンスっぽいノリ。関数型プログラミングを
数学の一分野として位置づけて証明をつけたりするような議論がある。
副題に「原理と技法」とあるのは適切だと思う。Haskellってリスト内包表記で
無限リストがあっさり扱えたりする反面、自分が書いたコードが本当に効率が良いのか
わかりにくいところがある。この本では、コードの効率を手で分析してみせてる箇所があり、
そのような議論を丁寧に追って自らの血肉にできれば有益だと思われる。
・モナドの説明は想像していたよりあっさりしていた。
コンピュータサイエンス寄りの本とは言え、突如領域理論や圏論で読者を打ちのめす心配は一切ない。
・Haskellという言語自体の入門書にもなっているが、この本をHaskell入門書として紹介するのは
SICPをScheme入門書として紹介するのと同じぐらいには間違っていると思う。
・すでに訳出されている fun of programming (関数プログラミングの楽しみ) はこのBirdの本の
「続編」という位置づけであり、その本の中でIFPHでは〜のような言及がしばしばあるので
「関数プログラミングの楽しみ」を楽しむためにはこの本も持っていたほうが良い。
まとめ
「関数プログラミング入門 Haskellで学ぶ原理と技法」はHaskellをとりあえず使ってみたいという
人には向かない。そのような向きには「すごいHaskell〜」を勧める。この本は、ある程度Haskellで
自分が書きたい関数を書けるようになり、効率の問題に直面しはじめた人にこそ向いていると思う。
どのようにデータ構造を工夫し、アルゴリズムを解析し、改良するかについての実例が載っており、
これらの技法を身につければ --- 簡単ではないだろうが --- より整然とした、そして効率の良い
Haskellコーディングができるようになるだろう。
0110デフォルトの名無しさん
2012/10/27(土) 17:00:48.36「関数プログラミングの楽しみ」の前に読むといいのか、なるほど
0111デフォルトの名無しさん
2012/10/27(土) 17:04:25.82オーム社さんいい仕事してくれるぜまったく
0112デフォルトの名無しさん
2012/10/27(土) 17:07:22.180113デフォルトの名無しさん
2012/10/27(土) 17:11:44.560114デフォルトの名無しさん
2012/10/27(土) 17:28:23.24すごい本のPRスライドがあった。
0115デフォルトの名無しさん
2012/10/27(土) 17:32:35.340116デフォルトの名無しさん
2012/10/27(土) 17:49:22.150117デフォルトの名無しさん
2012/10/27(土) 18:24:16.32というノリだからね。
続編というか、IFPHを前提というかそういう感じかな。
0118デフォルトの名無しさん
2012/10/27(土) 18:31:34.04すぐ読まないにしても確保しといたほうが良さそうだな
0119デフォルトの名無しさん
2012/10/27(土) 20:24:43.91そsそうなの!?
関数プログラミングの楽しみとセットですぐ買おうかな
0120デフォルトの名無しさん
2012/10/27(土) 20:53:45.01the 'stdcall' calling convention is unsupported on this platform,
treating as ccall
これはどういう事?
ccall が実際にどういう規約なのかよく分からんけど、
もし ccall == cdecl なら、ccall /= stdcall だよね。
0121デフォルトの名無しさん
2012/10/27(土) 21:00:58.85もうこの手の本はお腹いっぱいだわ
0122デフォルトの名無しさん
2012/10/27(土) 22:57:24.33これじゃね
> 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
0123デフォルトの名無しさん
2012/10/27(土) 23:35:53.71なるほど。
x64 & Windows では呼び出し規約は1種類に統一されたのか。
外部ライブラリを呼ぶ時も、呼び出し規約は何だろうと
ヘッダファイルを調べたりする必要がなくなるわけだ。
こりゃ便利。
ありがと。
0124デフォルトの名無しさん
2012/10/28(日) 09:29:26.53d
すごく参考になった。
0125デフォルトの名無しさん
2012/10/28(日) 10:06:10.470126デフォルトの名無しさん
2012/10/28(日) 10:17:23.020127デフォルトの名無しさん
2012/10/29(月) 03:17:32.09sliceなんかするとC++でいうところの参照のベクタになるってことでいいすか?
中身のコピーはしないんですよね?
0128デフォルトの名無しさん
2012/10/29(月) 07:28:07.96vector パッケージのドキュメントには、
Data.Vector.slice の項に次のように書かれています。
O(1) Yield a slice of the vector without copying it.
The vector must contain at least i+n elements.
もしコピーされているようなら、それはバグですね。
0129Perl忍者 ◆M5ZWRnXOj6
2012/10/29(月) 09:47:53.39↑
これ解けないやつは真骨頂にクズ
ハッカーをを名乗る価値無し
海外からNinjaレベルと言われるほどの者なら簡単に解くことができる
解いてみてみ?
合ってるか確認してやるから
SHA-1とか総当りとかほざいてるようじゃ脳味噌足りてないよ
ホワイトハット気取りのお前らクズじゃJarlsbergすら解けないんだろうな
0130デフォルトの名無しさん
2012/10/29(月) 12:36:11.29ですおね^^
0131デフォルトの名無しさん
2012/10/30(火) 11:10:57.700132デフォルトの名無しさん
2012/10/31(水) 21:36:04.82カバーデザインがポップでありながら品があって良い
組版もプログラミングHaskellと同じものなのですっきりしていて気が散らない
Haskellのコードに使われる等幅フォントが縦長窮屈でなく読みやすい
製本は流行りのlay-flatタイプの綴じ込みでこのへんもぬかりない
なかみはむつかしくてよくわからなかった
0133デフォルトの名無しさん
2012/10/31(水) 22:45:09.39> なかみはむつかしくてよくわからなかった
一番感じなところだが・・・
0134デフォルトの名無しさん
2012/10/31(水) 22:46:57.400135デフォルトの名無しさん
2012/10/31(水) 22:58:59.04やはりデザインはいいんだな
0136デフォルトの名無しさん
2012/10/31(水) 23:54:48.87フルフラット製本って言うらしいけど
0137デフォルトの名無しさん
2012/11/01(木) 05:42:51.180138デフォルトの名無しさん
2012/11/02(金) 02:24:17.750139デフォルトの名無しさん
2012/11/02(金) 12:11:09.020140デフォルトの名無しさん
2012/11/02(金) 13:45:46.44ほんとにjsやpythonってそんなひどいん?
0141デフォルトの名無しさん
2012/11/02(金) 14:04:31.23■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);
0142デフォルトの名無しさん
2012/11/02(金) 14:17:55.79■Python
[x*2 for x in range(1,6) if 2<x<5]
0143デフォルトの名無しさん
2012/11/02(金) 15:31:54.92こんな阿呆なコード書くやつ居ないよ
0144デフォルトの名無しさん
2012/11/02(金) 15:33:46.220145デフォルトの名無しさん
2012/11/02(金) 19:20:30.900146デフォルトの名無しさん
2012/11/02(金) 19:20:48.30range とか 1..5 はだめだろ
0147デフォルトの名無しさん
2012/11/02(金) 20:48:54.42つい最近まで正面を見てなかったっけ
まぁ、どうでもいいが
この素敵なおっさん、いつになったらブログ更新するんだろ
0148デフォルトの名無しさん
2012/11/03(土) 00:05:40.15RWHは泥臭く実例を追う実用主義。BirdのIFPHは、理論的な側面を強調している。
無限リストの挙動がなんでそーなるの的な数学的原理なんかはIFPHが優れてるし
画像を扱ってバーコードリーダー作るぜ⇒大量のボイラープレート⇒それモナドでまとめられるよ
なんて話はRWHの優れたところだ。
コンピュータサイエンス(数学寄り)の素養があるならIFPHが簡単だろうし
CとかPerlは実戦でつかえるけど理論には興味ないしそれでも関数型使ってみたいならRWHが向いてる。
0149デフォルトの名無しさん
2012/11/03(土) 00:11:37.14現実的にHaskellを使いこなすにはモナド変換子の理解が必須だと思うのだけど
0150デフォルトの名無しさん
2012/11/03(土) 00:27:58.18IFPHの10.4でモナド変換子の説明が載ってますぞ〜
例外の複合、状態の複合を例として説明し、最後にそれらを応用してますぞ〜
0151デフォルトの名無しさん
2012/11/03(土) 00:38:59.61よさそうなら関数プログラミングの楽しみと一緒に買ってしまうか
関数プログラミングの楽しみの方は、いつかじっくり読みたいなとは思ってたんだ
0152デフォルトの名無しさん
2012/11/03(土) 00:48:45.35読みたい時に手に入らないとかありがちだからなー
0153デフォルトの名無しさん
2012/11/03(土) 04:55:02.03リストの重複要素を省く
0154デフォルトの名無しさん
2012/11/03(土) 12:08:13.58ありがと
0155デフォルトの名無しさん
2012/11/03(土) 18:50:29.18数学系に至るまで、適用範囲がすごく幅広いのだが、これはどうしてだろうか?
これだけ幅広くても、モナドとは何かを言えるものだろうか?
0156デフォルトの名無しさん
2012/11/03(土) 18:53:32.650157デフォルトの名無しさん
2012/11/03(土) 18:57:39.06関数ほどは幅広くはないよ
でも関数とは何かを言えるものだろうかなんて誰も疑問に思わないな
0158デフォルトの名無しさん
2012/11/03(土) 19:22:34.41関数。たしかにそうだけどね。
モナドは中途半端に幅広い、と言うとどうかな。
関数の場合は、モナドのような分類(IO、State、...)はしないよね。
しかもこの分類はアドホックな分類にも見えるし。
0159デフォルトの名無しさん
2012/11/03(土) 19:45:48.97>7のClojureはrange使ってるよ
0160デフォルトの名無しさん
2012/11/03(土) 19:51:21.33Prologは副作用系と数学系を区別してなかったのだが
Haskellはいったん副作用系と数学系を対立させ、再び統一するためにモナドを発明した
0161デフォルトの名無しさん
2012/11/03(土) 20:43:47.80うん。そのとき、たとえば、IO a とList a における IOとListには、
どちらも型構成子であるという共通性はあるが、それ以外の共通性は
感じ取れないんだ。さらにいうと、List aの方はaの自然な拡張だと
すんなり納得できるが、IO aの方は、aとIOの強引な組合せとしか
見えないんだ。
0162デフォルトの名無しさん
2012/11/03(土) 20:58:35.33前スレのテンプレを見てもらえばわかるがrangeとか1..5とか使ってないのよ
だから元々そういう縛りがあったんだろう
0163デフォルトの名無しさん
2012/11/03(土) 21:01:56.520164デフォルトの名無しさん
2012/11/03(土) 21:09:19.21それは失敬
でもテンプレ化するならそれなりにルールを決めないとだめだよね
0165デフォルトの名無しさん
2012/11/03(土) 21:10:54.68お前には感じ取れなくてもListとIOには共通性があって
その共通性に基づいてるのがモナドなんだな
0166デフォルトの名無しさん
2012/11/03(土) 21:11:34.990167デフォルトの名無しさん
2012/11/03(土) 21:15:23.850168デフォルトの名無しさん
2012/11/03(土) 21:28:01.97>ListとIOには共通性があって
どういう共通性?
0169デフォルトの名無しさん
2012/11/03(土) 21:29:04.57逆に、ある型構築子に対してモナド則を満たすような(>>=)とreturnを定義できるならそれはモナド
0170デフォルトの名無しさん
2012/11/03(土) 21:35:43.050171デフォルトの名無しさん
2012/11/03(土) 21:43:13.59むしろ、IOとListとが同類にみえるようなモナド則は実はナンセンスなのじゃ
ないかという疑問なのだが?
>>170
さすがにそんなことはないだろう。
0172デフォルトの名無しさん
2012/11/03(土) 22:04:53.50そのような性質を持つものにモナドという名前を与えた背景の方が興味あるな
0173デフォルトの名無しさん
2012/11/03(土) 22:05:36.02モナド則なんてなくても、Prologでは副作用と非決定性は同類に見えていた
0174デフォルトの名無しさん
2012/11/03(土) 22:15:51.32お察しの通り、モノイドとの類似性から
>>173
非決定性が副作用の一部というなら分かるが、同類というのは分からん。
Prologの何のことを言ってる?
0175デフォルトの名無しさん
2012/11/03(土) 22:22:16.530176デフォルトの名無しさん
2012/11/03(土) 22:23:16.60ナンセンスとか言っても現実にリストとIOは同じモナドの概念でまとめられるので、
まとめられる以上それを別のものにする理由が無い
0177デフォルトの名無しさん
2012/11/03(土) 22:29:00.770178デフォルトの名無しさん
2012/11/03(土) 22:36:14.23非決定性は副作用の一部 (>>174)
Haskell:
非決定性はモナドの一部 + 副作用はモナドの一部
0179デフォルトの名無しさん
2012/11/03(土) 22:37:13.01まとめられるのに、諸事情でまとまっていないものもあるし
0180デフォルトの名無しさん
2012/11/03(土) 22:40:44.12かなり多くのものがまとめられるからモナドを選んだんじゃないのかね?
0181デフォルトの名無しさん
2012/11/03(土) 22:49:35.35IOとか昔はモナドじゃなかったんでしょ
0182デフォルトの名無しさん
2012/11/03(土) 22:54:29.240183デフォルトの名無しさん
2012/11/03(土) 23:01:50.05独自の言葉の使い方をしてるならちゃんと最初に定義してくれ
0184デフォルトの名無しさん
2012/11/04(日) 00:05:52.82Moggiの論文に説明があるよ。でもまあ確かに判ってる人が
判ってる人向けに書いてる感がある。
0185デフォルトの名無しさん
2012/11/04(日) 00:09:40.59さすがにそんなことはないだろう、なんてことはないのだ。
恒等関手もモナドなのでモナドによって定まるKleisli圏の中に元の圏も
含まれている。形式的な話ではあるが。勿論モナドごとに一つのKleisli圏があり、異なる
モナドをつなぐためにはめんどうな事をしないといけないが
(この辺は自分もまだ未把握。モナドトランスファーが関係してるのかなぁ)
0186デフォルトの名無しさん
2012/11/04(日) 00:41:32.780187デフォルトの名無しさん
2012/11/04(日) 04:30:56.210188デフォルトの名無しさん
2012/11/04(日) 07:59:40.61そういう言いかたなら、関数は射なのだから,やっぱりそんなことはないのだ。
0189デフォルトの名無しさん
2012/11/04(日) 09:31:56.97射は関数とは限らないから、それは反論になってないよ(ただ185の議論が強引なのは確か)
0190デフォルトの名無しさん
2012/11/04(日) 09:59:30.19関数よりモナドの方が広いと言うのはある意味正しい
0191デフォルトの名無しさん
2012/11/04(日) 10:13:46.42いまここではそもそもそのKleisli圏がどれだけ意味があるのかを聞かれているんじゃないかな
0192デフォルトの名無しさん
2012/11/04(日) 10:22:17.47米田の補題より、関数=射。
190より、モナド⊂プログラム=Kleisli圏の射⊂射。
したがって、モナド⊂関数。
これでOK?
0193デフォルトの名無しさん
2012/11/04(日) 10:36:35.070194デフォルトの名無しさん
2012/11/04(日) 10:56:48.43>米田の補題より、関数=射。
ちょっと意味が解らないんだけど、
米田の補題からどうやって関数=射(ここで言うイコールって何?)が導かれるのか説明してくれない?
0195デフォルトの名無しさん
2012/11/04(日) 13:53:18.430196デフォルトの名無しさん
2012/11/04(日) 15:51:14.41強引?
間違ってるっていうんだよw
0197デフォルトの名無しさん
2012/11/04(日) 16:08:25.97A. 便利だから
で済む話だろ
0198デフォルトの名無しさん
2012/11/04(日) 16:21:23.880199デフォルトの名無しさん
2012/11/04(日) 16:59:49.490200デフォルトの名無しさん
2012/11/04(日) 17:41:22.96IOをモナドで扱うのが便利なのは分かるが、
リストまで同じようにモナドで扱うのが便利な理由がいまいち分からん
0201デフォルトの名無しさん
2012/11/04(日) 17:43:30.65だからあMoggi論文が納得できないって言ってるんだろ
それはそれでありだな
0202デフォルトの名無しさん
2012/11/04(日) 17:43:44.71内包表記便利じゃん
あれってモナドだからだよ
0203デフォルトの名無しさん
2012/11/04(日) 18:03:37.92:(;゙゚'ω゚'):カルテジアンなの? カルテシアンだと思ってた
0204デフォルトの名無しさん
2012/11/04(日) 18:09:09.26実にHaskellerらしいスレですね
0205デフォルトの名無しさん
2012/11/04(日) 18:12:53.23このような場末に何の御用で
0206デフォルトの名無しさん
2012/11/04(日) 18:23:29.00リストモナドは総当たり(深さ優先探索)するときに使う
問題によってはStateT s []がすごく便利
0207デフォルトの名無しさん
2012/11/04(日) 18:48:07.95リスト以外で内包表記が役に立つ(適している)シーンが思い浮かばない
リストもモナドで括る利点が内包表記ができるってだけなら、
内包表記はリスト専用構文でもいいような気がするのだが
0208デフォルトの名無しさん
2012/11/04(日) 18:51:07.34すまん、総当たり(深さ優先探索)する簡単な具体例は何か無いだろうか
(俺、ここでいう総当たりの意味がよく分かっていない)
リストがモナドになっていない他の言語と比較してみたい
0209デフォルトの名無しさん
2012/11/04(日) 18:57:56.150210デフォルトの名無しさん
2012/11/04(日) 19:07:30.55Listの各要素に関数を適用するmap程度のものだとか思ってたのか?
0211デフォルトの名無しさん
2012/11/04(日) 19:12:23.22do { x <- xs; y <- ys; return $ x + y }
[x + y | x <- xs, y <- ys]
(+) <$> xs <*> ys
0212デフォルトの名無しさん
2012/11/04(日) 20:02:05.01一番下の知的な書き方に憧れます
0213デフォルトの名無しさん
2012/11/04(日) 20:51:41.09それ以外に効果的だと感じる内包表記の使い方を見たことがない
0214デフォルトの名無しさん
2012/11/04(日) 21:03:01.89お前が見たことないだけだよ
0215デフォルトの名無しさん
2012/11/04(日) 21:12:11.35あんま効果的に見えないんだな
リストモナドの場合、
要素からリストをつくる操作(リストが入れ子になるわけじゃないよ)とか
要素を排除する操作とか(途中ですべての要素が排除されたら処理は止まる)を混ぜることができて、
最終的に結果をひとつのリストとして得ることができる
0216デフォルトの名無しさん
2012/11/04(日) 21:13:48.86nQueen :: 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]
0217デフォルトの名無しさん
2012/11/04(日) 21:14:33.43import 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 ++ ")")
0218デフォルトの名無しさん
2012/11/04(日) 21:24:26.05たとえばゲーム製作の**の部分での利用とか、
会計ソフト製作での**の部分での利用とか、
Webサービス製作での**の部分での利用とか
そういう実用的な部分での使い方はねーの?
0219デフォルトの名無しさん
2012/11/04(日) 21:26:14.320220デフォルトの名無しさん
2012/11/04(日) 21:30:31.40Listモナドのアルゴリズムはわりと広範囲に応用可能だと思う
状態モナド的なものと比べて
0221デフォルトの名無しさん
2012/11/04(日) 21:30:39.00なんで総当たりの実演をするのにそんな分野依存の知識を要求する例が欲しいんだ?
リストモナドは総当たりが必要な時にはいつでも使える、ということさえ知ってれば
プログラマなら応用できるだろ
0222デフォルトの名無しさん
2012/11/04(日) 21:34:13.80Maybeの方が10000倍大事
0223デフォルトの名無しさん
2012/11/04(日) 21:35:36.79手札のカードが場に出せるかどうかを判定するのにStateT a [] bを使ったような記憶はある
0224デフォルトの名無しさん
2012/11/04(日) 21:48:05.17いや、だってさ
実用的なシーンではたいして使えない仕組みなんて、
あっても意味は無くないか?
何のためにプログラムしてるかと言えば、
アプリを作るためにしてる、というのが
まぁ一般の大半のプログラマの意見だと思うし
0225デフォルトの名無しさん
2012/11/04(日) 21:50:01.240226デフォルトの名無しさん
2012/11/04(日) 21:55:28.18いや、>>208に答えてリストモナドがどんな感じで動くかという話をしてるんであって、
リストモナドの存在意義を示すための例じゃないよ
0227デフォルトの名無しさん
2012/11/04(日) 21:56:42.71お前は誰だよw文脈依存な書き込みするならコテつけろw
0228デフォルトの名無しさん
2012/11/04(日) 21:59:12.100229デフォルトの名無しさん
2012/11/04(日) 22:18:45.82だったらアンカーを適切に付けろ
こっちはモナドを勉強中なんだから何に対しての何の意見なのか全く分かんねーよ
で本題だが、すいませんでした、>>216 は参考になります
これから他の言語と比較して理解を深めようと思います
0230デフォルトの名無しさん
2012/11/04(日) 22:32:03.03内包表記がリスト以外のモナドで使える意味が分からないのか、
それとも他に難癖付けてるのか
レスが錯綜してて分からん
0231デフォルトの名無しさん
2012/11/04(日) 22:37:52.14実際使ったことがない
0232デフォルトの名無しさん
2012/11/04(日) 22:43:10.02> リストがモナドである意味が分からないのか、
これはとても難しい問題だと直感したから、ひとまず置いておく。
> 内包表記がリスト以外のモナドで使える意味が分からないのか、
まずはこれを知りたい。
しかも、意味は難しいそうだから、まずは例を。
遊びにしか使えない例なら、そんなもので意味を探るのは無理だから、要らない。
0233デフォルトの名無しさん
2012/11/04(日) 23:02:36.40>Maybeの方が10000倍大事
Maybeが?ほんまかいな
0234デフォルトの名無しさん
2012/11/04(日) 23:07:02.43メイビー(キリッ
0235デフォルトの名無しさん
2012/11/04(日) 23:09:02.030236デフォルトの名無しさん
2012/11/04(日) 23:17:29.69if 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]
0237デフォルトの名無しさん
2012/11/04(日) 23:37:47.36[x / y | y /= 0] のような書き方を見ないのは何故だ?
0238デフォルトの名無しさん
2012/11/04(日) 23:38:52.870239デフォルトの名無しさん
2012/11/04(日) 23:43:08.500240デフォルトの名無しさん
2012/11/04(日) 23:50:31.340241デフォルトの名無しさん
2012/11/04(日) 23:51:42.79do形式や内包表記さらにはアプリカティブファンクターの式なんかの好きな書き方ができるんだよね
0242デフォルトの名無しさん
2012/11/04(日) 23:53:14.08復活といっても GHC の言語拡張ですよ。
if y /= 0 then Just (x / y) else Nothing
[x / y | y /= 0]
どちらがプログラムの意味を理解しやすいかは読み手の経験によるでしょうが、
私は前者の方を使いたいですね。
0243デフォルトの名無しさん
2012/11/05(月) 00:01:01.45> 内包表記がリスト以外のモナドで使える意味が分からないのか
なんて訊くまでもないよね。
だって使えるかどうかに関わらずキモいから使わないんでしょ?
0244デフォルトの名無しさん
2012/11/05(月) 00:26:31.37>>323
> 遊びにしか使えない例なら、そんなもので意味を探るのは無理だから、要らない。
[x / y | y /= 0] これが遊びでないと言うのなら、>>237 はどう説明する?
なぜ書籍ではこのような書き方が紹介されない?
俺は内包表記がリスト以外のモナドで使えるのは、意味なんて何も無いと思う。
最初は、モナドだとどんなものでも内包表記ができちゃう事を発見したから、
プログラマがなんか役立つ使い方をしてくれるだろうという安直な考えで、
リスト以外にも使えるモナド内包表記が作られたんじゃないかな。
設計者自身に明確な目的なんてきっと無いでしょ。
その後、たいして上手い使い方も無いまま復活した理由が不明だが。
0245デフォルトの名無しさん
2012/11/05(月) 00:43:08.53ていうか、書籍に書いてあるかどうかで判断したいなら
こんなとこで他人に聞く必要もないだろ?
0246デフォルトの名無しさん
2012/11/05(月) 00:49:09.20なんでリストで内包表記が使えるのは意味があるの?
do構文があれば要らないよね?
0247デフォルトの名無しさん
2012/11/05(月) 00:49:49.28そりゃ自分で書いてる通り、最近復活したからでしょ
そのうちリスト以外でもイディオムが生まれてくるよ
0248デフォルトの名無しさん
2012/11/05(月) 04:01:00.46:(;゙゚'ω゚'):内包表記って[と]で括られてるからリスト専用だと思ってた……
今までは偽りの人生だった……
0249デフォルトの名無しさん
2012/11/05(月) 04:08:25.37スレ間違えてるよな
0250デフォルトの名無しさん
2012/11/05(月) 04:19:05.02というかZIPでくれと言い出す奴
0251デフォルトの名無しさん
2012/11/05(月) 05:35:28.680252デフォルトの名無しさん
2012/11/05(月) 06:23:16.95これはなかなかおもしろいな
0253デフォルトの名無しさん
2012/11/05(月) 06:36:23.36詳しい解説サンクス
それならPerl忍者が荒らすのも分かる気がする(´・ω・`)
0254デフォルトの名無しさん
2012/11/05(月) 07:21:11.08じゃあ、本は無しにしようか。
現場に限ってもいいし、
何なら HackageDB に登録されているライブラリ内に限定してもいいが、
それでもスレ違いか?
プログラム言語において機能を実装するというのは、
使うことによってメリットがあると想定されるからだろう。
Haskell は実用もしっかりできる関数型言語を目指して生まれたのだから、
なおさらだ。
Haskell98 で言語仕様から消えたモナド内包表記が、
最近になってGHCの言語拡張として復活したのは、どういう意図があって?
モナド内包表記が欲しいと思っていた人たちは、
どういうシーンでそれが活用できると考えていたの?
その辺りが知りたい。
正直言って、>>236 の例では恩恵が実感できない。
「好きな書き方で書けば良い」という理由だけで復活したとも思えん。
それでは Perl みたいじゃないか。
0255デフォルトの名無しさん
2012/11/05(月) 07:28:03.96(長くなるならmapなりfilterなりdoなり使うべき)
だから短いコードだから内包表記で書く意義が
分からないってワケじゃないだろう
ってことは、こっちは>>254様が納得する理由をエスパーしてやらなきゃ
ダメってことなワケだが、なんでそんなことしてやる必要あるの?
0256デフォルトの名無しさん
2012/11/05(月) 07:28:37.24>>247
0257デフォルトの名無しさん
2012/11/05(月) 07:49:04.08http://hackage.haskell.org/trac/ghc/ticket/4370
http://hackage.haskell.org/trac/ghc/wiki/MonadComprehensions
0258デフォルトの名無しさん
2012/11/05(月) 12:01:23.74Data.Vectorで組んで動いたコードをData.Vector.Unboxedに切り替えようと思ったんすよ
そしたら急にVectorはファンクタじゃないからfmap使えないよ Probable fix 云々ってクレーム来たんすけど
どゆことっすか?ファンクタでしょ?
0259デフォルトの名無しさん
2012/11/05(月) 15:54:09.94メッセージ全文うpらないのは甘え
0260デフォルトの名無しさん
2012/11/05(月) 19:08:43.11ありがと。
前者は単にモナド内包表記と同等の do 表記をいくつか例示してるだけじゃん。
誤解を恐れずに言えば、モナド内包表記の操作的意味論っぽいものを示してるだけ。
ただ、そのページに論文「Bringing Back Monad Comprehensions」へのリンクがあった。
こっちはざっと見たところ「現実的な問題提起 --> モナド内包表記による解決」
という感じで語っているような気がするから、実用的なことが書かれていそうだ。
これからじっくり読んでみるよ。
後者の方はこの論文と同名なんだが、同じもの?
至る所に訂正の跡があるのだが、最新版ってことかな?
どちらにしても、「Bringing Back Monad Comprehensions」
こういう情報が欲しかったんだ。
0261デフォルトの名無しさん
2012/11/05(月) 19:12:58.71unboxed vectorは関手じゃないよ(腹が立つのは分かる)
関手なら fmap :: (a -> b) -> Vector a -> Vector b
が定義できなきゃならんけど、unboxed vectorだとb=Integerとかにできない
(Unbox制約を満たさないといけないから)
0262デフォルトの名無しさん
2012/11/05(月) 19:21:08.080263デフォルトの名無しさん
2012/11/05(月) 19:24:41.98Haskellでいう関手はこれ
圏論の関手は他を当たってね!
0264デフォルトの名無しさん
2012/11/05(月) 19:29:59.09マジすか
複雑な事情っすね
実践よりもHaskell型システムの理解に的を絞ったサイトないっすか?
0265デフォルトの名無しさん
2012/11/05(月) 19:30:38.26map を関手の一つと考えると、関手から自然変換まで簡単に理解できる
簡単に理解できる = 毎日30分定義とにらめっこして1週間ぐらい悩むと分かる
0266デフォルトの名無しさん
2012/11/05(月) 19:41:26.25Functor クラスが関手のことなら、なにも漢字で書かなくてもよくない?
unboxed vector は Functor クラスのインスタンスじゃないから、
と言う方がはるかに分かりやすいというか、ストレートだと思うんだが
と感じるのは私だけ?
0267デフォルトの名無しさん
2012/11/05(月) 19:44:20.770268デフォルトの名無しさん
2012/11/05(月) 19:52:07.99定着してる訳語があるのに横文字や片仮名を使うのは宗教上の理由でできんのです、ごめんなさい
0269デフォルトの名無しさん
2012/11/05(月) 19:55:12.71ギャグとしてはあまり面白くない
0270デフォルトの名無しさん
2012/11/05(月) 20:02:00.78魔女を焼き払えーっ!
0271デフォルトの名無しさん
2012/11/05(月) 20:04:44.170272デフォルトの名無しさん
2012/11/05(月) 20:14:25.77Functor クラスそのものは関手なの?
Functor クラスがたまたま持つ性質(種数やfmap関数など)を持つものが関手なの?
たとえば Applicative なども関手?
Functor クラス自身とそのインスタンスのみが関手?
Functor クラスそのもののみが関手で、そのインスタンスは集合の要素みたいなもの?
わけが分からなくなった・・・
>>271
一人称「私」なんて誰でも使うから、賢そうに見える要素にならないでしょ
0273デフォルトの名無しさん
2012/11/05(月) 20:20:11.08二番目が一番近いと思う
0274デフォルトの名無しさん
2012/11/05(月) 20:24:02.72そうだとすると、>>268 の言う「定着してる訳語」っておかしくないか?
>>268 の言い方だと Functor の日本語訳が関手である、
と言っているように聞こえる
0275デフォルトの名無しさん
2012/11/05(月) 20:29:18.54圏論でFunctorの訳語が関手だから、それ以外に訳しようがない
0276デフォルトの名無しさん
2012/11/05(月) 20:33:04.720277デフォルトの名無しさん
2012/11/05(月) 20:38:18.43今後Haskellのファンクタの意味で関手といいたい場合
いわゆる関手
と書くことにしよう
0278デフォルトの名無しさん
2012/11/05(月) 20:39:30.80HaskellのFunctorクラスのインスタンスはある種の(圏論的な意味の)関手(の対象部分)になってる
具体的にはHask圏からHask圏への関手
逆に、ある型構築子が(圏論的な意味の)関手になっていてもFunctorのインスタンスとは限らない
たとえば>>258のunboxed vectorがそう
0279デフォルトの名無しさん
2012/11/05(月) 20:48:17.32じゃあ、HaskellのFunctorクラスを安易に関手と言うのは、
文脈によっては危険じゃないか?
どの文脈だと危険か正しく理解してる奴しか使えない訳語な感じがするが
0280デフォルトの名無しさん
2012/11/05(月) 20:53:08.78もちろん混乱の原因になることはあるけど、
*Functorのインスタンスを関手と呼ぶ
のをその論法で禁止したら、
*Monadのインスタンスをモナドと呼ぶ
*Monoidのインスタンスをモノイドと呼ぶ
*Numのインスタンスを数値型と呼ぶ
あたりも言えなくなって不便じゃないか
0281デフォルトの名無しさん
2012/11/05(月) 20:53:32.47という理解は正しいでしょうか?
0282デフォルトの名無しさん
2012/11/05(月) 20:59:21.14「恒等関数と関数結合を保存する高階関数」と言った方が良さそう
0283デフォルトの名無しさん
2012/11/05(月) 21:09:19.730284デフォルトの名無しさん
2012/11/05(月) 21:12:51.87なるほど、そう言われると、たしかに不便だな。
Haskell の話をしていると判りきっている時には
Monad のインスタンスはモナドと言いたい。
(個人的にはFunctorのインスタンスはファンクタと言いたいが)
でも、Haskell の話をしてるときに、いきなり圏論が姿を現し、
そのまま議論が進んでいくと、ややこしくならない?
そういうシーンをこのスレでよく見かける
0285デフォルトの名無しさん
2012/11/05(月) 22:05:15.91一人称を私にすると賢そうに見えるの法則
賢くみられたいからHaskellやるという法則
0286デフォルトの名無しさん
2012/11/05(月) 22:11:23.06賢く見られたいんならMITで博士号取るだろ普通
0287デフォルトの名無しさん
2012/11/05(月) 22:47:19.80ギャグとしてはあまりおもしろくない
0288デフォルトの名無しさん
2012/11/05(月) 22:51:06.92一度目はいいけど、二度やると冷める
もう止めた方がいいと思うよ
0289デフォルトの名無しさん
2012/11/05(月) 23:09:11.87ghci 上で 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
これはバグ?
俺英語書けなくてバグ報告できないんだが、詰んだかな
0290289
2012/11/05(月) 23:10:49.65でも色々実験して勉強しようと思ってたんだが、ghci 使えないとなると、
かなり面倒になるなぁ・・・
0291デフォルトの名無しさん
2012/11/05(月) 23:12:17.93関手とはある圏の対象と射をもう一つの圏(自己関手の場合は同じ圏)に移すものだから、
Functorのインスタンスとfmapセットで関手と言うのが一番近い
0292デフォルトの名無しさん
2012/11/05(月) 23:37:08.23こいつ>>285のレスに図星しすぎれレスしてやがる
だいたいのやつは必死に悔しくても反応したら負けっていう考え持ってるから食いつかない
こいつは食いついた正直者
0293デフォルトの名無しさん
2012/11/05(月) 23:41:21.48たぶんWindows固有の問題
LinuxかMacを使うとか、Windowsなら仮想マシン上でLinux使えば、問題が出ない可能性が高い
この手の開発はUnix系メインでやっててWindowsはオマケのことが多いから、
細かいとこで目の行き届かない不具合があったりする
0294デフォルトの名無しさん
2012/11/05(月) 23:41:35.04正直それはそれで非常に恥ずかしい思いをしている
0295デフォルトの名無しさん
2012/11/05(月) 23:41:49.81○○をしなくなるのが情弱
Matzみたいなのが「これから来る言語」 Haskellとか言ったら
すぐ真似して
Haskellしだすやつが情弱
>>286=こいつ最高に図星
0296デフォルトの名無しさん
2012/11/05(月) 23:44:42.210297289
2012/11/05(月) 23:45:16.42ありがと
とりあえず勉強だけなら処理速度は要らないから、
vm player に linux 入れて、そっちでやってみるよ
0298デフォルトの名無しさん
2012/11/06(火) 00:53:45.21どうせネットで偉い人のマネする以上の教育課程が揃ってないんだから
0299デフォルトの名無しさん
2012/11/06(火) 07:18:02.31まったく向いてないからリアル土方に転向したほうが良いよ?
0300デフォルトの名無しさん
2012/11/06(火) 07:31:54.96元からそのつもりだったのか?
いや、そういう文体には見えないなあ
要するに>>299はアホなんだろう
0301デフォルトの名無しさん
2012/11/06(火) 07:33:11.89大学でも別にプログラミングなんて独学だっただろ?
え?大学行ってないの?
0302デフォルトの名無しさん
2012/11/06(火) 07:34:45.38ってこと
ほんとに大学行ってるの?
0303デフォルトの名無しさん
2012/11/06(火) 07:36:37.37と書いてるようにしか読めんのだが
教育されなきゃ実用的なプログラミングも出来ないアホは向いてないよ
0304デフォルトの名無しさん
2012/11/06(火) 07:41:52.94自分の発言にあとから留保つけちゃってるし
まあ俺は>>298じゃないからいいんだけどさ
0305デフォルトの名無しさん
2012/11/06(火) 07:44:55.65自分で考える脳みそ無いし
0306デフォルトの名無しさん
2012/11/06(火) 07:48:21.060307デフォルトの名無しさん
2012/11/06(火) 09:29:03.76( ´Д`) <みなさーん、お茶が入りましたよ〜
/ \
| l l | ..,. ., .,
| | | _|。.:_::゜。-.;.:゜。:.:;。
ヽ \_ .。'゚/ `。:、`;゜:;.::.。:.:。
/\_ン∩ソ\ ::..゜:: ゚。:.:.::.。.。:.
. / /`ー'ー'\ \ ゜: ::..゜:: ゚。:.:.:,。:.:.
〈 く / / ::..゜:: ゚。:.:.:,.:.:.:。:.:,
. \ L ./ / _::..゜:: ゚。:.:.:,.:.:,.:.:.:,
〉 ) ( .::旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦.
(_,ノ .`ー'旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦旦.
0308デフォルトの名無しさん
2012/11/06(火) 10:19:19.89実用度外視なんだから、偉いやつが言ったことをすぐ真似してHaskellやるのが正解
どうせネットで偉い人のマネする以上の教育課程が揃ってないんだから
305 名前:デフォルトの名無しさん[sage] 投稿日:2012/11/06(火) 07:44:55.65
アホが偉い人のマネすべきってのはその通りだな
自分で考える脳みそ無いし
0309デフォルトの名無しさん
2012/11/06(火) 10:58:32.920310デフォルトの名無しさん
2012/11/06(火) 14:23:00.820311デフォルトの名無しさん
2012/11/06(火) 17:31:28.63じゃあfmap的なことはどう実現したらいいんですか!?
0312デフォルトの名無しさん
2012/11/06(火) 18:24:59.42Data.Vector.Unboxed.map
0313デフォルトの名無しさん
2012/11/06(火) 19:07:44.24(////)
0314デフォルトの名無しさん
2012/11/06(火) 19:14:05.470315デフォルトの名無しさん
2012/11/06(火) 23:10:36.990316デフォルトの名無しさん
2012/11/08(木) 19:52:02.96遅延評価される場合のたらいまわし関数の呼び出され回数というものが知りたくて以下のように書きました。
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でカウントするのが無理だとしたらどうするのが定石でしょうか?
0317デフォルトの名無しさん
2012/11/08(木) 20:03:07.81もしかしてHaskellって、Prologよりも抽象度が高いのかも。
実際にプログラムを作るまでになれば、泥臭いこともいろいろあるんだろうけど。
0318デフォルトの名無しさん
2012/11/08(木) 21:19:45.25関数の評価回数を知りたいだけでしたら、プロファイリングすれば簡単にわかりますよ。
コンパイル時に3つのオプション "-rtsopts -prof -auto-all" を付けて、
実行ファイルの起動時にRTSオプション "+RTS -p" を付ければ、
*.prof ファイルができるんで、それを読めばいいです。
prof ファイルの一番下の表を見てください。
1列目に関数名(変数も関数)、2列目にモジュール名とあって、
4列目の "entries" の項目が評価回数です。
例えば z を返すバージョンの tak 関数を使って、
main :: IO
main = do
let z = tak 3 2 1
print z
を上記のようにコンパイルして実行してできた prof ファイルを見ると、
tak の評価回数は 5 と表記されています。
(実際に手計算で let z = tak 3 2 1 を簡約すると、
確かに5回 tak 関数が評価されていることが確認できます)
プロファイリングの詳細は「本物のプログラマはHaskellを使う」
の第45回の記事を参考にしてください。
こういうことではなく、プログラムの中でカウントする仕組みを作るには、
という趣旨の質問でしょうか?
0319デフォルトの名無しさん
2012/11/08(木) 21:33:42.67tak 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' ;変えた
0320デフォルトの名無しさん
2012/11/08(木) 21:46:20.040321デフォルトの名無しさん
2012/11/08(木) 21:46:32.28すみません、書き忘れました。
仰る通りプログラムの中でカウントする仕組みを作るには、という趣旨です。
>>319
それをやると遅延評価の場合と結果変わっちゃいませんかね?
0322319
2012/11/08(木) 21:57:07.69snd(runWriter(tak 100 50 0))とかやると糞時間かかりますね。
あとここちょっと違ってます。
| x <= y = do
tell(Sum 1)
return y; 変えた
0324デフォルトの名無しさん
2012/11/08(木) 22:33:46.28Haskellは純粋だから、評価順序によって違う値を返す関数は書けない。遅延評価を前提とした呼び出し回数を数えるには、明示的に遅延評価をエミュレートする必要がある
import Control.Applicative
import Control.Monad.ST
import Data.STRef
thunk :: ST s a -> ST s (ST s a)
thunk action = do
ref <- newSTRef Nothing
return $ do
cache <- readSTRef ref
case cache of
Just val -> return val
Nothing -> do val <- action; writeSTRef ref (Just val); return val
tak :: STRef s Int -> ST s Int -> ST s Int -> ST s Int -> ST s Int
tak counter ex ey ez = do
modifySTRef counter (+1)
x <- ex; y <- ey
if x <= y
then ey
else do
a <- thunk $ tak counter (pred <$> ex) ey ez
b <- thunk $ tak counter (pred <$> ey) ez ex
c <- thunk $ tak counter (pred <$> ez) ex ey
tak counter a b c
takCount :: Int -> Int -> Int -> Int
takCount x y z = runST (do
counter <- newSTRef 0
_ <- tak counter (return x) (return y) (return z)
readSTRef counter)
0325324
2012/11/08(木) 22:35:38.37実体参照は適当に戻してね!
0326デフォルトの名無しさん
2012/11/08(木) 22:36:17.950327デフォルトの名無しさん
2012/11/08(木) 22:53:32.55ありがとうございます、言い切ってもらえると参考になります。
今すごいH本をやっと読み終わろうかという段階なので正直難しいですが、
そのうち理解できるように精進します。
0328デフォルトの名無しさん
2012/11/08(木) 23:43:06.04インデントは全角空白派が大勝利で悔しい
仕様変更の経緯のわかるスレとかあればどなたかプリーズ
0329デフォルトの名無しさん
2012/11/09(金) 13:58:18.49アイドル時にやってくれる?
0330デフォルトの名無しさん
2012/11/09(金) 18:56:23.67メモリが足りなくなったら
0331デフォルトの名無しさん
2012/11/09(金) 19:22:04.750332デフォルトの名無しさん
2012/11/09(金) 19:22:21.31今入力待ちで暇だなー……
あ、もう要らない領域あんじゃん
スカベンジスカベンジ……
こうはならないの?
0333デフォルトの名無しさん
2012/11/09(金) 19:23:42.68あり^^
0334デフォルトの名無しさん
2012/11/09(金) 21:15:13.21これって需要あるの?
{-# 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]
0335デフォルトの名無しさん
2012/11/11(日) 15:48:20.65ライブラリドキュメントの 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 の評価結果を数値または数字で得る、
あるいは標準出力へ出力することができるでしょうか。
0336355
2012/11/11(日) 16:02:03.19これでできました。
a :: GSink () IO Int
a = sourceList [1..10] $$ fold (+) 0
main :: IO ()
main = do
a <- runPipe a
print a
なんか不親切なチュートリアルですね。
最初の sourceFile の例ではちゃんと runResourceT があるのに。
0338デフォルトの名無しさん
2012/11/11(日) 18:20:04.170339デフォルトの名無しさん
2012/11/11(日) 18:25:43.15それよりWindowsのghc7.6.1ではghci上でconduitが使えないというのが気になる
0340デフォルトの名無しさん
2012/11/11(日) 18:53:17.01>>289 >>290 >>293 辺り
0341デフォルトの名無しさん
2012/11/11(日) 19:02:24.587日に 0.5.4 が公開されていたんですね(その前日にDLしてました)
今 0.5.4.1 にアップデートして、
sourceList [1..10] $$ fold (+) 0 の値を print してみましたが、
コンパイルエラーでした。
大丈夫だったというのは、どのようにやったのでしょうか。
0342デフォルトの名無しさん
2012/11/11(日) 19:07:49.53大域的な型推論
直和型が簡単に表現できる(CのunionやOOPLのsubtypeと比べて)
パターンマッチ(網羅性チェック、分岐と値の取り出しを同時に行える、など)
副作用のある箇所が型により分離される
(LLとかよりは)実行速度が速い
0343デフォルトの名無しさん
2012/11/11(日) 19:10:49.180344341
2012/11/11(日) 19:11:52.88あぁ、分かりました。
(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 のままなんです。
0345341
2012/11/11(日) 19:18:31.91誤 (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が変更されている事になるので、
ドキュメントも変更しないとまずいような気がするのですが・・・
0346デフォルトの名無しさん
2012/11/11(日) 20:02:42.53λ> sourceList [1..10] $$ fold (+) 0
って入力しただけだけど 省略 >>= printと同じ事か
ドキュメンテーションが更新されないのは多分haddockのバージョンとghcのバージョンが違うから生成に失敗してるとかが考えられる
0347341
2012/11/11(日) 20:46:24.73> 省略 >>= printと同じ事か
なるほど、たしかに。
> 多分haddockのバージョンとghcのバージョンが違うから
haddock.exe は ghc 7.6.1 に元々入っているのですが、
これが違うという事でしょうか。
ちなみに、ghc の bin ディレクトリには haddock.exe とは別に、
haddock-7.6.1 という名前の謎のファイルもあります。
(バイナリエディタで見てみると、形は実行ファイルの様ですが)
どうも、ghc 7.6.1 は謎の挙動かちらほらとありますね・・・
0348デフォルトの名無しさん
2012/11/11(日) 22:43:59.93cabal install haddockで入れなおしたらconduitのドキュメント作ってくれるようになった
これはcabal/binにhaddockがあるからそっちが優先されるのが原因だけど
0349デフォルトの名無しさん
2012/11/12(月) 02:11:31.23Javaのような言語で書かれた業務アプリ、ドカタの世界にもこれから進出してきたりしますかね
0350デフォルトの名無しさん
2012/11/12(月) 06:17:52.78早くて20年後ぐらいじゃね?
0351デフォルトの名無しさん
2012/11/12(月) 20:15:17.94ハードについてるドライバは何度かある
0352デフォルトの名無しさん
2012/11/12(月) 20:22:24.00俺はひとつだけ知ってる
astah*
Haskell で書かれた商用ソフトってあるんかな
うちは社内ツールではあるけど
0353デフォルトの名無しさん
2012/11/12(月) 20:29:59.560354デフォルトの名無しさん
2012/11/12(月) 20:33:15.190355デフォルトの名無しさん
2012/11/12(月) 20:37:06.130356デフォルトの名無しさん
2012/11/12(月) 20:43:17.14という認識でいいのか?
0357341
2012/11/12(月) 22:44:21.87Haddock を 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 の更新は必要条件だったのかよく分かりませんが、
とりかくドキュメントが正しく更新できて良かったです。
お騒がせしました。
0358デフォルトの名無しさん
2012/11/13(火) 20:32:21.56Minecraft
0359デフォルトの名無しさん
2012/11/14(水) 13:53:30.81type family Mutable v :: * -> * -> *
Mutable v s a is the mutable version of the pure vector type v a with the state token s
って
リワハじゃ習わなかったぞ
0360デフォルトの名無しさん
2012/11/14(水) 15:21:27.75Unbox a => ……としたとして
letやwhereと続けた内部関数にも型宣言をつけるとします
このとき、その宣言でもトップレベルの a と同じ型を指定する為にはどうしますか?
0361デフォルトの名無しさん
2012/11/14(水) 18:30:25.04トップレベル関数 = 関数を生成する関数 内部関数 where 内部関数 = …
0362デフォルトの名無しさん
2012/11/14(水) 19:30:01.00Lexically scoped type variables の事かな
0363デフォルトの名無しさん
2012/11/19(月) 07:06:57.78whereって必要ですか?
0364デフォルトの名無しさん
2012/11/19(月) 07:07:41.130365デフォルトの名無しさん
2012/11/19(月) 07:37:36.320366デフォルトの名無しさん
2012/11/19(月) 08:06:27.68トップレベルの関数に持ち上げてしまって、モジュールの機能で外部からは隠して、
自由変数になっていたところは明示的に引数として渡すほうが良いのではないかと
0367デフォルトの名無しさん
2012/11/19(月) 08:09:12.81whereが要る要らないの話にはならないと思う
0368デフォルトの名無しさん
2012/11/19(月) 08:13:31.560369デフォルトの名無しさん
2012/11/19(月) 18:06:19.91多くの人はwhereを大量に使うことを選択している
何を読み難いと感じるかは個人差が大きいから、
多数派と違う感性を持ってると生きづらいね
という結論が嫌なら、「読みやすく感じる」よりも客観的な論拠を挙げてください
0370デフォルトの名無しさん
2012/11/20(火) 00:03:10.08whereはプログラムを書きやすくできるが読みにくくする
whereを使うのは甘え
0371デフォルトの名無しさん
2012/11/20(火) 06:58:26.14関数内のスコープに限定するより
モジュール内スコープに広げた方が読みやすい?
頭大丈夫?
0372デフォルトの名無しさん
2012/11/20(火) 07:07:32.45頭の中で、読みにくいコードを読みやすいコードに書きかえればいいだろ
それができる人は読むことより書くことが多い
0373デフォルトの名無しさん
2012/11/20(火) 07:38:40.46末尾再帰覚えてない人かな?
where使わず書いたら、引数の数が違うだけで同じ機能の関数が沢山出来上がってしまう
sum ns = sum' ns 0
where
sum' [] v = v
sum' (n:ns) v = sum' ns (n + v)
whereが無ければsum関数とsum'関数の両方が関数を使う側に公開されるか、末尾再帰関数作る度にモジュール書き換えが必要になる
0374デフォルトの名無しさん
2012/11/20(火) 08:10:24.50sum' (n:ns) v = sum' ns (n + v)
in sum' ns 0
0375デフォルトの名無しさん
2012/11/20(火) 09:16:11.00君、仕事でプログラム書いたことないでしょ?
0376デフォルトの名無しさん
2012/11/20(火) 09:29:43.91ノイズが少ない方が優れているといってノイズばかり見ている
雑音を無視したら優劣の概念がなくなってしまう
優劣を気にするとデジタルが読めなくなる
0377デフォルトの名無しさん
2012/11/20(火) 09:57:34.350378デフォルトの名無しさん
2012/11/20(火) 14:25:22.30自分で作ったサービスで始める仕事(ビジネス)だったら、言語はなんだっていいんだよ。
ドヤ顔で「仕事でhaskell使ったことないわ」とか恥ずかしすぎるわw
0379デフォルトの名無しさん
2012/11/20(火) 14:26:08.120380デフォルトの名無しさん
2012/11/20(火) 14:45:50.000381デフォルトの名無しさん
2012/11/20(火) 15:35:16.080382デフォルトの名無しさん
2012/11/20(火) 16:26:57.230383デフォルトの名無しさん
2012/11/20(火) 18:16:34.72トップレベルにリフトすれば自由変数が減るかのような錯覚はどこからきた?
0384デフォルトの名無しさん
2012/11/20(火) 18:21:28.910385デフォルトの名無しさん
2012/11/20(火) 18:30:03.160386デフォルトの名無しさん
2012/11/20(火) 18:49:25.200387デフォルトの名無しさん
2012/11/20(火) 22:50:08.770388デフォルトの名無しさん
2012/11/20(火) 23:02:02.530389デフォルトの名無しさん
2012/11/21(水) 01:14:53.06大学
0390デフォルトの名無しさん
2012/11/21(水) 07:23:50.52実際にどのような仕事があるか知らんが、
君には "haskell commercial OR industry" でググる知恵はないのか
0391デフォルトの名無しさん
2012/11/21(水) 09:17:06.660392デフォルトの名無しさん
2012/11/22(木) 02:43:01.30自分で始めればいいだけだろ。
仕事を作るのも仕事のうち。
0393デフォルトの名無しさん
2012/11/22(木) 06:04:12.01一つの生き方ではあるわな
0394デフォルトの名無しさん
2012/11/22(木) 07:38:46.45いや、維持保守を引き継ぐ人たちがHaskell使えないのに
Haskellのソースを残すわけには行かないだろ。
0395デフォルトの名無しさん
2012/11/22(木) 09:54:55.620396デフォルトの名無しさん
2012/11/22(木) 13:58:22.73本当に知らなくていい事なのかを考えもしない手合いは厄介だけどな。
0397デフォルトの名無しさん
2012/11/22(木) 13:59:26.23いやそこはPHPで。
0398デフォルトの名無しさん
2012/11/22(木) 14:55:22.060399デフォルトの名無しさん
2012/11/22(木) 16:17:40.42仕事にHaskellを使う事の利点を、アピール出来なけれぱそうなるな。
0400デフォルトの名無しさん
2012/11/22(木) 17:23:28.24あるよ。金融系で実稼働している。
0401デフォルトの名無しさん
2012/11/22(木) 17:29:09.330402デフォルトの名無しさん
2012/11/22(木) 21:09:50.14そんなに仕事がしたけりゃJavaでも書いてればいいじゃん
0403デフォルトの名無しさん
2012/11/22(木) 21:32:01.160404デフォルトの名無しさん
2012/11/22(木) 21:35:32.480405デフォルトの名無しさん
2012/11/22(木) 21:49:49.04最も洗練されているライブラリは何でしょう?
やはり今も昔も haskelldb が一歩先を行く感じでしょうか。
0406デフォルトの名無しさん
2012/11/22(木) 23:28:04.06これを次のいずれかのような型にしたい
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]) という型になって、
これでは目的を果たせませんでした。
0407デフォルトの名無しさん
2012/11/23(金) 00:12:37.96f pred xs = do{
rs <- mapM pred xs;
let (ys, zs) = partition snd (zip xs rs);
return (map fst ys, map fst zs);
}
なら目的は果たせそう
0408デフォルトの名無しさん
2012/11/23(金) 00:16:47.55filterM なら存在するけど partitionM はないんだよな
0409デフォルトの名無しさん
2012/11/23(金) 01:03:35.060410デフォルトの名無しさん
2012/11/23(金) 02:09:12.090411デフォルトの名無しさん
2012/11/23(金) 03:47:23.41保守?
お前の仕事はそれしかないのか?
>>395
納品?
twitterやfacebookあるいはwindowsみたいに
自分でアイデアを実現して商売始めてやろうという気概や野望はないのか?
0412デフォルトの名無しさん
2012/11/23(金) 03:48:46.49haskellは受注開発向きじゃないんだから。
0413デフォルトの名無しさん
2012/11/23(金) 03:51:13.240414デフォルトの名無しさん
2012/11/23(金) 06:10:46.560415デフォルトの名無しさん
2012/11/23(金) 07:01:49.960416デフォルトの名無しさん
2012/11/23(金) 07:02:55.060417デフォルトの名無しさん
2012/11/23(金) 07:05:51.480418デフォルトの名無しさん
2012/11/23(金) 07:24:06.230419デフォルトの名無しさん
2012/11/23(金) 07:27:39.44http://www.haskell.org/pipermail/haskell/2012-November/023566.html
Haskell終わったな
0420デフォルトの名無しさん
2012/11/23(金) 07:50:59.95始まってすらない
0421デフォルトの名無しさん
2012/11/23(金) 08:10:32.640422デフォルトの名無しさん
2012/11/23(金) 08:50:34.460423デフォルトの名無しさん
2012/11/23(金) 09:07:05.42いかにも○○(言語)が最強とか言っちゃいそうなタイプだな
学生に多い
0424デフォルトの名無しさん
2012/11/23(金) 09:10:58.51底辺ドカタが言語を語るなんて滑稽。君達に選択権は無い。
0425デフォルトの名無しさん
2012/11/23(金) 09:27:27.860426デフォルトの名無しさん
2012/11/23(金) 09:40:17.120427デフォルトの名無しさん
2012/11/23(金) 09:45:53.79社畜よ、これが安全だ
0428デフォルトの名無しさん
2012/11/23(金) 09:55:47.010429デフォルトの名無しさん
2012/11/23(金) 10:02:35.08残念。趣味では好きな言語を選択して楽しんじゃってまーすw
ベロベロバーw
0430デフォルトの名無しさん
2012/11/23(金) 10:04:06.150431デフォルトの名無しさん
2012/11/23(金) 10:06:22.660432デフォルトの名無しさん
2012/11/23(金) 10:08:47.010433デフォルトの名無しさん
2012/11/23(金) 10:13:08.07ハードウェア関係の人から見たらHaskellすら危なくて触る気しないぐらいなんだろう
0434デフォルトの名無しさん
2012/11/23(金) 10:24:07.34実行もテストもしないやつとか
0435デフォルトの名無しさん
2012/11/23(金) 10:36:28.120436デフォルトの名無しさん
2012/11/23(金) 11:02:04.58理由は>>394みたいな雑魚がよってくるから。
0437デフォルトの名無しさん
2012/11/23(金) 11:20:18.060438デフォルトの名無しさん
2012/11/23(金) 11:34:25.330439デフォルトの名無しさん
2012/11/23(金) 11:48:18.590440デフォルトの名無しさん
2012/11/23(金) 13:48:08.19関数型言語が普及するためにお前みたいなのが絶滅するべきなんだな。
日本のSI業界において受注開発を否定するわけには行かない。
0441デフォルトの名無しさん
2012/11/23(金) 13:51:45.660442デフォルトの名無しさん
2012/11/23(金) 15:21:24.510443デフォルトの名無しさん
2012/11/23(金) 15:25:08.900444デフォルトの名無しさん
2012/11/23(金) 15:26:40.05大企業は、ヘマを減らす事で成長するんだぜ?
0445406
2012/11/23(金) 15:52:31.69アドバイス、あれがとうございます。
どうも、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))
0446デフォルトの名無しさん
2012/11/23(金) 17:54:10.19本当に諦めたらfilterを使う
0447デフォルトの名無しさん
2012/11/23(金) 17:58:32.391%でも7000万人やぞ
0448デフォルトの名無しさん
2012/11/23(金) 18:08:41.960449デフォルトの名無しさん
2012/11/23(金) 18:28:14.73あと、C言語にインラインアセンブラとか。
0450デフォルトの名無しさん
2012/11/23(金) 18:37:42.98本屋で情報処理の試験の本をよくよく読んでみたらもC言語が必須じゃなくてビビッた
0451デフォルトの名無しさん
2012/11/23(金) 19:33:58.80もう今の時代javaの方が手軽だし
0452デフォルトの名無しさん
2012/11/23(金) 20:07:51.26Javaには余裕が足りない
0453デフォルトの名無しさん
2012/11/23(金) 20:26:11.390454デフォルトの名無しさん
2012/11/23(金) 22:00:25.130455デフォルトの名無しさん
2012/11/24(土) 00:12:57.661%も居ない <> 1%くらい
0456デフォルトの名無しさん
2012/11/24(土) 00:17:44.91まともなJavaエンジンなら、充分早い。
問題は、未熟なJavaプログラマーが書いたコードは大抵遅い、ということ。
この問題を避け、尚且つJava資産を活かすために、Java以外の言語で書いたソースを
Javaソースに変換・コンパイルする手法も使われている。
0457デフォルトの名無しさん
2012/11/24(土) 00:49:58.53保守が1.5倍楽になるなら、速度半分になってもいい職場がほとんどだと思う
速度っつっても、ディスクアクセスとネットのボトルネックから見ればもう処理系の差なんて無視できる
速度を基準に言語を選ぶのは、画像処理屋と組み込み屋だけではなかろうか
0458デフォルトの名無しさん
2012/11/24(土) 00:57:18.66シミュレーション(数値計算)屋も入れろよ
0459デフォルトの名無しさん
2012/11/24(土) 01:27:52.99数値計算屋さんは速度ではなく、ボスがFortranかCのどっちで教育を受けたかで言語が決まる
0460デフォルトの名無しさん
2012/11/24(土) 02:05:48.82SI業界自体オワコンじゃん
0461デフォルトの名無しさん
2012/11/24(土) 02:07:55.47業務システムはパッケージを買いましょう
ネット通販サイトは楽天を使いましょう
こんな時代ですよ
0462デフォルトの名無しさん
2012/11/24(土) 02:10:44.24ITの行く先は、今度はサービスを作り出す側だ。
0463デフォルトの名無しさん
2012/11/24(土) 02:29:03.30「現在の業務プロセスがこうなので、それに合わせてシステムを作ってください」
から
「システムが新しくなったので、業務プロセスを変更します」
という風に変わっていくだろうね。
0464デフォルトの名無しさん
2012/11/24(土) 08:38:10.91社内のシステム作ったり、政府のシステム作ったりしてたが、
到底WebアプリやExcelマクロなどが無くなるとは思えないが
0465デフォルトの名無しさん
2012/11/24(土) 08:55:27.70海外のWebサービス企業と日本のSIerを比較するからな。
グーグルと富士通ではビジネスモデルが違いすぎるだろう。
比べるならオラクルやHPを出さないと。
そして、googleやamazonに対抗するWebサービス企業は楽天()などなんだが、
日本もこっちを主流にするって?
0466デフォルトの名無しさん
2012/11/24(土) 12:08:19.05妄想だけど
0467デフォルトの名無しさん
2012/11/24(土) 12:09:37.54Oracleはパッケージ系で、富士通は受託開発系。
0468デフォルトの名無しさん
2012/11/24(土) 12:28:23.42お前の仕事は似たような大企業ばっかり相手にしてないか?
最近では各社毎のシステム開発がいかに無駄か知れ渡ってきている。
それに加え、不景気のせいでリストラや構造改革が強いられるようになった。
そこで、フットワークの軽い中小企業では、
実用レベルになってきた既製のWEBサービスやパッケージを利用することで、
汎用的な人材確保やシステム開発コストの削減等ができるようになった。
システムを組織に合わせるのをやめて、
組織がシステムに合わせるようになったんだよ。
0469デフォルトの名無しさん
2012/11/24(土) 12:51:08.71>そして、googleやamazonに対抗するWebサービス企業は楽天()などなんだが、
>日本もこっちを主流にするって?
google、amazon、楽天が並んでたら、普通はamazonを選ぶだろ。
0470デフォルトの名無しさん
2012/11/24(土) 13:07:58.30流れはガラパゴス的な独自仕様のシステム開発から既存のサービスを利用する方に流れが変わってきてるんだよ。
0471デフォルトの名無しさん
2012/11/24(土) 13:31:09.01俺はそのどれかに就職していいと言われたらgoogle選ぶけど
0472デフォルトの名無しさん
2012/11/24(土) 13:33:42.96官公庁の利用してるサービスはヤフオクだけなのかよw
そもそも官公庁自体のHPが数限りなくあるわけだがw
0473デフォルトの名無しさん
2012/11/24(土) 13:38:48.59でも、それはバックグラウンドで動く複雑なシステム抜きなら簡単な仕事だし、
どう考えても今より需要が伸びる余地は無いと思うよ。
0474デフォルトの名無しさん
2012/11/24(土) 13:43:02.38法律は毎年増えてるわけで、減りもしないけどw
0475デフォルトの名無しさん
2012/11/24(土) 13:46:00.08「バックグラウンドで動く複雑なシステム」
を作る仕事は確実になくなっていくと思うけどね。
0476デフォルトの名無しさん
2012/11/24(土) 13:46:37.080477デフォルトの名無しさん
2012/11/24(土) 13:47:05.28× を作る仕事
◯ を作らされる仕事
0478デフォルトの名無しさん
2012/11/24(土) 13:48:53.18受注開発からパッケージに変わる。
0479デフォルトの名無しさん
2012/11/24(土) 13:49:43.53むしろそういう仕事こそ、汎用パッケージではどうにもならないので
無くなるとは思えない
特殊な法律やら仕組みにあわせてシステムをカスタマイズする仕事は最後まで無くならないよ
0480デフォルトの名無しさん
2012/11/24(土) 13:51:58.39これからはbasicでプログラムを組む時代じゃないとかw
しかし、結果はご覧の通り、basicでマクロを組んでいます。
0481デフォルトの名無しさん
2012/11/24(土) 13:58:18.64法律って日本全国統一だよね。
パッケージなら修正してアップデートすれば対応できるわけで、
個々のガラパゴスシステムを修正して回るより遥かに低コストでできるよね。
0482デフォルトの名無しさん
2012/11/24(土) 13:59:33.42その日本全国統一のパッケージを作る仕事がまずなくならないなw
さて、法律ってどのくらいの量あるでしょうか?
0483デフォルトの名無しさん
2012/11/24(土) 14:01:39.76それが命取りになって逆に利益や業務を圧迫するのは、
システムを業務プロセスに合わせようとするからなんだよ。
0484デフォルトの名無しさん
2012/11/24(土) 14:02:47.19何を言ってるんだ?
0485デフォルトの名無しさん
2012/11/24(土) 14:03:56.06国会で法律が決まったらシステムがあわせるよりしょうがないしね
「システム簡単だからこういう法律にします」でなんでもかんでも決められれば良いけどw
0486デフォルトの名無しさん
2012/11/24(土) 14:05:14.08>>481
0487デフォルトの名無しさん
2012/11/24(土) 14:05:44.74わからない?まず、全国統一の法律にあわせて
カスタマイズする必要があるわけで
0488デフォルトの名無しさん
2012/11/24(土) 14:06:18.02話が噛み合ってないな
パッケージでどうやって法律に対応するの?
0489デフォルトの名無しさん
2012/11/24(土) 14:07:17.460490デフォルトの名無しさん
2012/11/24(土) 14:07:38.76俺も噛み合ってないと思う。
パッケージを修正してアップデートすればいいだけだろ?
0491デフォルトの名無しさん
2012/11/24(土) 14:08:51.84地域設定で対応可能だろ。
0492デフォルトの名無しさん
2012/11/24(土) 14:08:55.72「パッケージを修正する」仕事が無くならない
そもそもパッケージでは対応できない
アップデートしたらしたで、互換性の問題とかいろいろ出るから
それを修正する必要も出てくるし
0493デフォルトの名無しさん
2012/11/24(土) 14:09:29.99無理無理w
if文使わなきゃ複雑な条件設定できないよw
0494デフォルトの名無しさん
2012/11/24(土) 14:10:58.23細かい部分をカスタマイズできる余地を残したパッケージにすれば良い。
カスタマイズはSIerがやればいい。
0495デフォルトの名無しさん
2012/11/24(土) 14:12:28.00パッケージを作ったり修正する仕事をなくす必要がない。
俺はそれを批判したことは一度も無いし、むしろ受託開発より伸びしろが大きいと思ってる。
0496デフォルトの名無しさん
2012/11/24(土) 14:15:27.67そういうパッケージを受託開発で作る仕事があるだろw
で、細かいことに対応するとなると汎用性は犠牲になり、
新たなシステムがまた必要になる
既存のパッケージではもちろん無理
あるというのなら「あらゆる法律に基づいたシステムに対応するパッケージ」とやらの具体名を教えてくれよ
国会、裁判所、大蔵省から財務省、県庁やら市役所やらなんやら、あらゆる省庁の
システムに対応したパッケージがあるとでも?
なんのことだよマジでw
0497デフォルトの名無しさん
2012/11/24(土) 14:15:49.44if文?
もちろんどんなソフトでもif文は使うと思うが、
それがどうした?
0498デフォルトの名無しさん
2012/11/24(土) 14:16:24.33そうかそうか、どんなソフトでもプログラミングの仕事はあると
そういうことでよろしいか?w
0499デフォルトの名無しさん
2012/11/24(土) 14:17:19.94>そういうパッケージを受託開発で作る仕事があるだろw
さらに層が分厚くなってないか?w
0500デフォルトの名無しさん
2012/11/24(土) 14:18:45.56まあ、今でもSIerの仕事はそういう仕事なんだけど
ある程度特化してるから「パッケージ」と呼ぶかどうかは微妙だが
結局、パッケージと呼ぼうが呼ぶまいが、汎用性を工夫しようがしまいが
限界があるので似たような仕事は絶対無くならない
0501デフォルトの名無しさん
2012/11/24(土) 14:24:46.26そうだが、無くなると言った覚えはないがw
0502デフォルトの名無しさん
2012/11/24(土) 14:49:27.750503デフォルトの名無しさん
2012/11/24(土) 14:54:07.57一部のコアシステムでは各社毎のチューニングが必要だからその通りだが、
簡単なところから汎用品を積極的に利用しようという動きがあるのは確か。
受託開発はさらに低い層の仕事になって、利益も成果物の質も下がるだろう。
知っての通り、受託開発では自由がない。
Haskell使いたくても使えないんだよ。
だったら、先細りでこれからどんどん薄利多忙になる受託開発なんか辞めて
思い切って自分で事業始めちまえばいいんだよ。
0504デフォルトの名無しさん
2012/11/24(土) 15:33:12.01Hasukell自体はいい言語なので良識あるエンジニアの下で
もっと普及してほしいね。
0505デフォルトの名無しさん
2012/11/24(土) 15:38:32.65ニートほどよく他人をニート認定するよね。
自分がニートだっていうことにコンプレックスがあるから?
0506デフォルトの名無しさん
2012/11/24(土) 15:39:51.49普及させるならocamlとかで良い。
0507デフォルトの名無しさん
2012/11/24(土) 15:43:40.13なんかぼろ糞に叩かれてるSIerの元受だからだよ。
0508デフォルトの名無しさん
2012/11/24(土) 15:44:51.47HaskellっぽいシンタックスのOCamlがあれば
絶対それ使うわ
0509デフォルトの名無しさん
2012/11/24(土) 15:49:38.60そのレス、自分がニートだって主張になってませんか。
0510デフォルトの名無しさん
2012/11/24(土) 16:04:04.04ニートの話なんかしてないのに、唐突にニート認定とか、
自分がニートであることがコンプレックスで、
「ニート」という言葉が普段から頭にこびり付いている人間としか考えられないわ。
0512デフォルトの名無しさん
2012/11/24(土) 16:04:52.21SIerの元請けだからなんだって?
0513デフォルトの名無しさん
2012/11/24(土) 16:05:09.900514デフォルトの名無しさん
2012/11/24(土) 16:05:42.690515デフォルトの名無しさん
2012/11/24(土) 16:06:21.650516デフォルトの名無しさん
2012/11/24(土) 16:10:21.230517デフォルトの名無しさん
2012/11/24(土) 16:16:59.890518デフォルトの名無しさん
2012/11/24(土) 16:24:43.380519デフォルトの名無しさん
2012/11/24(土) 16:31:31.38Haskellの使い道について語るのにHaskellスレを使って何が悪い。
0520デフォルトの名無しさん
2012/11/24(土) 16:32:58.48なんで勘定系
0521デフォルトの名無しさん
2012/11/24(土) 16:34:10.63なんで勘定系システムって、各行毎に独自に作ってるの?
どの銀行も窓口があって、ATMがあって、ネットで取引できて、
っていうインターフェース部分はほとんど同じなのに。
0522デフォルトの名無しさん
2012/11/24(土) 16:37:05.600523デフォルトの名無しさん
2012/11/24(土) 16:57:01.12サーバセンターがアメリカの同じ場所にあるというオチまでついてる
0524デフォルトの名無しさん
2012/11/24(土) 18:07:09.42LISPUSER Qi - Lisp for 21 Century
Lisp isn't a language, it's a building material.
http://lispuser.net/commonlisp/qi.html
0525デフォルトの名無しさん
2012/11/24(土) 21:27:40.16きんもーっ☆
0526デフォルトの名無しさん
2012/11/24(土) 22:44:07.032chで世界が判ったような気になり始めたら、色んな意味でヤバい。
0527デフォルトの名無しさん
2012/11/24(土) 22:51:30.68勘定系のうち、預金勘定元帳については銀行間で大差はない(はず。以前関わったがブラックボックスが多かった。)
金融商品関連まで含んだ部分については、当然、外部に教えたくない所がある。
問題は、銀行合併の時。
”どこに合わせるか”が政治的に決まるので、現場泣かせ。
0528デフォルトの名無しさん
2012/11/24(土) 23:54:22.43面白そうだ。
0529デフォルトの名無しさん
2012/11/25(日) 03:09:08.47世界のことを知っている人なんてこの世に一人もいないw
世界を知った気になっている人はネラーに関係なくすべてやばいw
0530511
2012/11/25(日) 04:59:01.060531デフォルトの名無しさん
2012/11/25(日) 10:47:53.56/ `ヽ. お薬増やしておきますねー
__/ ┃)) __i |
/ ヽ,,⌒)___(,,ノ\
0532デフォルトの名無しさん
2012/11/25(日) 12:43:14.640533デフォルトの名無しさん
2012/11/25(日) 12:48:15.270534デフォルトの名無しさん
2012/11/25(日) 13:08:15.130535デフォルトの名無しさん
2012/11/25(日) 13:22:26.33べつにきもくていいんじゃね?と思ってるやつしか残らない
0536デフォルトの名無しさん
2012/11/25(日) 14:51:24.150537デフォルトの名無しさん
2012/11/25(日) 15:20:22.26銀行系はまだCobolを使ってるのだろうか…
0538デフォルトの名無しさん
2012/11/25(日) 16:24:26.450539デフォルトの名無しさん
2012/11/25(日) 17:29:24.900540デフォルトの名無しさん
2012/11/25(日) 17:30:27.60窓口業務にデータを提供するシステムの一部は、ObjectCOBOL系に移行。
年次処理などの、めったに使わない&過去遡及処理しないものは、前年のをコピー後、修正したりするから、昔のCOBOLが健在。
聞いた話では、欧米の金融系の一部で、商品開発・メンテナンスにHaskellを使ってるそうだ。
何に使うというと、既存商品のルール整合性チェック(商品内、商品間、規制・法律との照合)、新商品開発(既存と同様)。
ただ開発途中で、既存商品中にルール矛盾がみつかって、回避策(万一、訴訟で矛盾を突かれると困る)が出せなくて例外処理を入れたりするとHaskellでやるメリットが薄れるので、Haskell適用前にビジネスルールとして整理する方が合理的かも。
まあこれは他言語でシステム組むときも似たようなもの。
顧客にヒアリングしていったら、客自身も意識していなかった未整理・矛盾点が出て来て、作業担当に聞いたら、”自前のExcel計算結果と都度差し替えてました”なんて事もあるから。
0541デフォルトの名無しさん
2012/11/25(日) 23:28:14.44<$> って $ みたいに 『以降右側全部を括弧で括る』みたいに扱えないのか!
f <$> (…)
こうしないと駄目なのかよ!
驚き最小の原則に反してるじゃないか!
0542デフォルトの名無しさん
2012/11/26(月) 00:01:25.33が
f <$> (mx <*> my <*> mz)
と解釈されるよりはマシ
0543デフォルトの名無しさん
2012/11/26(月) 01:13:26.360544デフォルトの名無しさん
2012/11/26(月) 02:51:39.680545デフォルトの名無しさん
2012/11/26(月) 03:05:11.49会計計算と飛行機のソフトウェアだけはHaskell使わないでほしいです
0546デフォルトの名無しさん
2012/11/26(月) 07:44:21.030547デフォルトの名無しさん
2012/11/26(月) 07:59:05.660548デフォルトの名無しさん
2012/11/26(月) 08:03:20.580549デフォルトの名無しさん
2012/11/26(月) 08:33:18.760550デフォルトの名無しさん
2012/11/26(月) 09:00:30.86胸熱
0551デフォルトの名無しさん
2012/11/27(火) 14:59:43.450552デフォルトの名無しさん
2012/11/27(火) 19:09:02.78寿命が確定できないからGCで管理するしかないんじゃね?
というか、関数型言語の処理系がほぼどれもGCを持ってるのは、
高階関数とレキシカルスコープを認めると
自然とそういうクロージャが出現してしまうからだと思ってるんだが、そうでもない?
0553デフォルトの名無しさん
2012/11/27(火) 19:14:20.560554デフォルトの名無しさん
2012/11/27(火) 19:17:31.670555デフォルトの名無しさん
2012/11/27(火) 19:40:47.420556デフォルトの名無しさん
2012/11/27(火) 19:52:42.710557デフォルトの名無しさん
2012/11/27(火) 20:22:32.700558デフォルトの名無しさん
2012/11/27(火) 20:36:28.870559デフォルトの名無しさん
2012/11/27(火) 23:55:18.02なんか奥田民生の歌の歌詞みたいだな
0560デフォルトの名無しさん
2012/11/28(水) 02:25:24.890561デフォルトの名無しさん
2012/11/28(水) 03:19:42.85そういう意味じゃない。
Javaじゃ普通の技術なんだがな。
0562デフォルトの名無しさん
2012/11/28(水) 07:44:32.215年前はPRECが来る!とか言われてたけどその後どうなったかしらん
0563デフォルトの名無しさん
2012/11/28(水) 23:15:32.900564デフォルトの名無しさん
2012/11/28(水) 23:48:29.760565デフォルトの名無しさん
2012/11/29(木) 02:10:09.620566デフォルトの名無しさん
2012/11/29(木) 02:12:10.79大多数はラダー言語だよ
0567デフォルトの名無しさん
2012/11/29(木) 02:15:28.67想像で書いてるんだろ?
レベル低いわぁ
0568デフォルトの名無しさん
2012/11/29(木) 02:24:00.35継続性と互換性重視だから、ずっと同じ言語(つまりアセンブラ)でソフトを更新し続けてる
少しマシな場合だと、高級言語のコードの中にいきなりアセンブラのコードの羅列が登場したりする
団塊の世代が退職すると同時にアセンブラ技術者が職場からいなくなって、マジで危機的状況になってる
日本に限らずインフラのソフトは先進国ほど危険な状態
0569デフォルトの名無しさん
2012/11/29(木) 02:34:30.39そんな話は聞かねえな。
あったとしても、よっぽどローカルすぎる話。
0570デフォルトの名無しさん
2012/11/29(木) 02:39:45.360571デフォルトの名無しさん
2012/11/29(木) 02:53:22.73Haskellだったら一瞬で終わったか、発狂してたか、どっちかだな
0572デフォルトの名無しさん
2012/11/29(木) 07:33:16.06衝撃のあまり‥‥‥
0573デフォルトの名無しさん
2012/11/29(木) 11:04:53.67死んどらーですね判ります
0574デフォルトの名無しさん
2012/11/29(木) 11:04:53.720575デフォルトの名無しさん
2012/11/29(木) 11:09:33.61むしろ、信頼性が高すぎる
そのため、一度完成してしまったら、容易に置き換えることができない
0576デフォルトの名無しさん
2012/11/29(木) 11:17:26.69鉄道のシステム開発やってた知り合いがいたが、
Prolog使ってるって言ってたぞ。
0577デフォルトの名無しさん
2012/11/29(木) 11:20:01.090578デフォルトの名無しさん
2012/11/29(木) 11:51:39.830579デフォルトの名無しさん
2012/11/29(木) 12:12:17.01他の言語使っても同等以上の信頼性得られるよね
アセンブリ言語で速度じゃなくて信頼性を売りにするとかありえないよね
0580デフォルトの名無しさん
2012/11/29(木) 12:20:15.28ヒント: 高級言語は処理系と言語仕様にも重大なバグがある
0581デフォルトの名無しさん
2012/11/29(木) 12:34:19.52だとしたら、せめてTRONのHaskellくらい誰か作ってほしい
0582デフォルトの名無しさん
2012/11/29(木) 13:02:21.33そうかも知れないし、
一方で、長ったらしいアセンブリコードにも重大なバグがある(かも知れない)。
どこにバグがあるのかテストしてみないとわからない。
Haskellみたいなオープンソースの処理系なら、
処理系にバグがあるなら処理系のコードを書きなおせばいいだけのこと。
0583デフォルトの名無しさん
2012/11/29(木) 13:04:07.63Haskellを使う人や組織が、お互いがフィードバックし合えば、
すべて自社開発するよりはるかに効率的に利益が享受できる。
0584デフォルトの名無しさん
2012/11/29(木) 13:16:05.64しかし言語のコミュニティにとっては有益なので我慢してください
0585デフォルトの名無しさん
2012/11/29(木) 13:23:08.530586デフォルトの名無しさん
2012/11/29(木) 13:23:09.690587デフォルトの名無しさん
2012/11/29(木) 13:41:50.780588デフォルトの名無しさん
2012/11/29(木) 13:44:31.60しかし、ハードが不統一なため(特異なハードだから売り物になる)、その不統一な部分を言語の独自拡張でカバーしてきた
その一番簡単な拡張方法が、アセンブリ言語の埋め込み
別の見方をすれば、世界規模のコミュニティで共有する高級言語で統一的にシステム開発できるということは、ハードがすべて統一さてれいるということ
つまり、そういうハードそのものとそれにくっついてるシステムソフトは差別化がないという意味で根本的には売り物になるようなモノではなく、無償労働が当然の連中と競合していくことになる
ゆえに、システムの収入源はアセンブリコードである
0589デフォルトの名無しさん
2012/11/29(木) 14:09:50.11言語仕様のバグっていうのがあったとしても、
普通は別のやり方で回避できると思うけどなぁ。
0590デフォルトの名無しさん
2012/11/29(木) 14:15:33.04ちょこっと書くだけならともかく、
特殊なハードだからって長ったらしいアセンブラを書く必要は無いんだよ。
0591デフォルトの名無しさん
2012/11/29(木) 16:17:18.39processの定義で
一度計算したら以降、mapを通して持ち回す変数があるとします(例えば平均値や標準偏差)
この変数は、processの定義のwhere以下では定義しない方が良いですか?
processと同レベル以上のスコープに置くべきですか?
危惧しているのは、processのwhere以下に書くと
適用毎に再利用しないで計算し直してしまうのではないかという事です
0592デフォルトの名無しさん
2012/11/29(木) 16:29:02.87「平均値」がcontainerの要素の平均値なら、processにはそれを知る術はないだろうし
processが定義される場所からcontainerが見えているなら問題ないけど
0593デフォルトの名無しさん
2012/11/29(木) 16:46:48.69call-by-needで同じ計算が防げるのは関数内部で関数の引数を複数回使ったときだけ
>>591はprocessと同レベル以上のスコープに置いたほうがいい
0594デフォルトの名無しさん
2012/11/29(木) 18:11:53.18なぜかEqを定義しなくても深い(==)と浅い(==)が当たり前のように存在している
0595デフォルトの名無しさん
2012/11/29(木) 18:24:27.94import 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が一度の計算で済むかが気懸かりです
0596デフォルトの名無しさん
2012/12/01(土) 17:44:40.86ラダーって正規言語ですよね。
0597デフォルトの名無しさん
2012/12/01(土) 19:35:23.020598デフォルトの名無しさん
2012/12/02(日) 00:03:09.85開発の活発なプログラムとそうでもないプログラムは一緒に使うことができない、っていう状態はどうすればいいんだろうね。
みんなどうしてるんだろう。他人のライブラリ/アプリケーションなんて一切使わねえぜ!とかやってるのかな。
ghc7.6.1だとxmonad0.10とpandoc1.9.4.5は最新のものが一緒に使える。leksahはインストールできない。yesodはトライ中。
0599デフォルトの名無しさん
2012/12/02(日) 07:28:15.85ちょっとよくわからないです
0600デフォルトの名無しさん
2012/12/02(日) 09:30:25.95バージョンが 1.0.0.0 になって初めて正式リリースとなる、
と言いたいんだろうことは分かると思うが。
>>598
同じ名前のパッケージの2つのバージョンあるとき、
互いのバージョン番号の最初の2つ同士で比較して少なくとも一方が異なると、
その2つのパッケージの間に互換性は保証されない。
最初の番号が0だろうが、これは変わらない。
よって君が、開発の活発なプログラムとそうでもないプログラムは
一緒に使うことができない、と思っているのなら、
最初の番号が0であっても、1以上であっても状況は変わらないはず。
1以上であっても、活発なら2番目の番号はよく変わるはずだから。
つまり君が抱えている問題はベータリリース状態であることとは関係ないと言える。
0601デフォルトの名無しさん
2012/12/02(日) 10:02:01.83具体的にはleksahがghc7.6.1に対応してないのが問題ってこと?
それはパッチを送る以外にどうしようもないんじゃね
それからhackageだと正式リリースで1.0を付けるって習慣はそこまで浸透してないと思う
bytestringやcontainersがベータだというのは実感に合わないし
0602デフォルトの名無しさん
2012/12/02(日) 11:21:35.250603デフォルトの名無しさん
2012/12/02(日) 20:10:26.68型理論の取り合えずこれ買って何章と何章よめばおk
みたいなイカす入門書を教えてください
出来れば日本語で
0604デフォルトの名無しさん
2012/12/02(日) 20:16:16.41これとか
http://www.amazon.co.jp/dp/4781912850
0605デフォルトの名無しさん
2012/12/02(日) 20:25:16.93こっちの方が入門だ
とりあえず第一章を理解すれば、型理論が何かは多少分かる
http://www.amazon.co.jp/dp/4844372106/
0607デフォルトの名無しさん
2012/12/02(日) 21:42:55.98状態が増えない言語です。
0608デフォルトの名無しさん
2012/12/02(日) 23:18:11.65fetchAllRows' すれば disconnect していい?
というのは、データ貰った後で超重い処理させる時って
計算始める前に接続切っておいた方がエコでしょ?
でも全部読み終わる前に接続切ったら危険だっていうじゃない
fetchAllRows' でリストとして全部よっこできるんでしょ?
0609デフォルトの名無しさん
2012/12/02(日) 23:57:32.46俺は、言葉そのままと思ってるんだが。
0610デフォルトの名無しさん
2012/12/03(月) 00:06:10.76このスレ的には、Haskellの専門家(言語設計者とか)と意見が合えばいいんじゃないか?
0611デフォルトの名無しさん
2012/12/03(月) 07:10:46.31なんでいきなり型推論の話か出てくる?
0612デフォルトの名無しさん
2012/12/03(月) 23:13:10.80これ Nothing の考慮要るんですか?
何も入力しなかったら Just "" になります
Nothing になるケースあるんですか?
0613デフォルトの名無しさん
2012/12/03(月) 23:35:03.600614デフォルトの名無しさん
2012/12/04(火) 00:08:41.99あざっす^^
0615608
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のお陰で成功しました
0616デフォルトの名無しさん
2012/12/04(火) 18:01:34.100617デフォルトの名無しさん
2012/12/04(火) 20:57:39.510618デフォルトの名無しさん
2012/12/05(水) 22:09:24.36ご存命でなにより
0619デフォルトの名無しさん
2012/12/06(木) 01:23:33.39http://pragprog.com/magazines
Rails/Erlang/Clojureの有名な本を出してる出版社の無料誌。
連載の方は最近Scalaが多かったんだけどHaskellは初めてかも。
0620デフォルトの名無しさん
2012/12/06(木) 01:30:26.64ごめん、9月じゃないや。
0621デフォルトの名無しさん
2012/12/06(木) 01:37:01.670622デフォルトの名無しさん
2012/12/06(木) 02:00:22.85http://www.haskell.org/haskellwiki/Numeric_Haskell:_A_Vector_Tutorial
http://www.haskell.org/haskellwiki/Numeric_Haskell:_A_Repa_Tutorial
0623デフォルトの名無しさん
2012/12/06(木) 14:12:24.940624デフォルトの名無しさん
2012/12/06(木) 15:01:01.68関数合成と2タプル操作関数の為のユーティリティぐらいとしてしか使ってないし
0625デフォルトの名無しさん
2012/12/06(木) 15:27:35.910626デフォルトの名無しさん
2012/12/06(木) 23:25:38.010627デフォルトの名無しさん
2012/12/06(木) 23:59:50.860628デフォルトの名無しさん
2012/12/07(金) 00:15:22.33大学の研究室には腐るほどあると思う
独自のHaskellウンコライブラリが
0629デフォルトの名無しさん
2012/12/07(金) 23:07:15.03日本語もAll OK ?
0630デフォルトの名無しさん
2012/12/07(金) 23:36:05.660631デフォルトの名無しさん
2012/12/08(土) 04:11:40.540632デフォルトの名無しさん
2012/12/08(土) 04:47:09.52MSのコマンドプロンプトもUTF表示が怪しい
0633デフォルトの名無しさん
2012/12/08(土) 12:37:18.630634デフォルトの名無しさん
2012/12/08(土) 13:25:14.36GUIの中の人が主にシングルスレッドやプロポーショナルフォントを想定しているから
0635デフォルトの名無しさん
2012/12/08(土) 13:29:54.920636デフォルトの名無しさん
2012/12/08(土) 13:48:16.970637デフォルトの名無しさん
2012/12/08(土) 16:33:51.92それでは不十分ですか?
0638デフォルトの名無しさん
2012/12/08(土) 17:37:32.690639デフォルトの名無しさん
2012/12/08(土) 17:44:15.68コードの断片だけ見せられて、孫引きしながらデバッグしていく場合には不便
0640デフォルトの名無しさん
2012/12/08(土) 18:05:09.32型推論でデバッグが難しくなるなら一つの関数が長過ぎだ
0641デフォルトの名無しさん
2012/12/08(土) 18:09:55.88文化で解決しようとする姿勢が
まだまだ未熟な技術という感じなんだよね
型に関する他の技術に比べて型推論はイマイチ
0642デフォルトの名無しさん
2012/12/08(土) 18:12:10.760643デフォルトの名無しさん
2012/12/08(土) 18:12:14.310644デフォルトの名無しさん
2012/12/08(土) 18:23:54.82-fwarn-missing-signatures
0645デフォルトの名無しさん
2012/12/08(土) 18:38:37.50Emacsでもvimでも出来るだろ
0646デフォルトの名無しさん
2012/12/08(土) 18:53:52.63イマイチってなんだよ
中途半端な警告は無視する人もいるんだぞ
完璧じゃないなら全否定でいいだろ?
0647デフォルトの名無しさん
2012/12/08(土) 19:00:04.61警告を無視ってなんだよ
型が推論できなかったらコンパイルエラーになるだけだろ
0648デフォルトの名無しさん
2012/12/08(土) 21:38:22.030649デフォルトの名無しさん
2012/12/08(土) 22:16:16.24幾らなんでもアホ過ぎ
0650デフォルトの名無しさん
2012/12/08(土) 23:44:44.90ヘッダファイル的なものがなければコード全体を一気にコンパイルする文化になる
分割したいならヘッダを書く言語か動的言語を使えばいい
0651デフォルトの名無しさん
2012/12/09(日) 03:02:30.45最終的順序を保証するだけでいつやるかはイレギュラーなんだな
計算前の始まり報告と
計算終了報告を
正しくタイムリーに表示させるには
seq使えばいいのか?
0652デフォルトの名無しさん
2012/12/09(日) 16:55:09.08勝手にすんなよ
Calculation ... done.
とかやりたいのに
0653デフォルトの名無しさん
2012/12/11(火) 00:40:21.14測定系のツール紹介しているが、目的にかなうかな?
0654デフォルトの名無しさん
2012/12/11(火) 00:43:30.95https://www.google.co.jp/search?hl=ja&q=haskell+%E6%B8%AC%E5%AE%9A+itpro
0655デフォルトの名無しさん
2012/12/11(火) 11:51:36.850656デフォルトの名無しさん
2012/12/11(火) 12:36:42.55それをするために何をしたのか、その結果どうできなかったのか、
という事を詳細に書いてくれないと、アドバイスするのは難しいと思う。
wxHaskellの前にwxは動くの?
コンパイルはできる?
実行するとエラーが出るの?
0657デフォルトの名無しさん
2012/12/11(火) 18:35:32.390658デフォルトの名無しさん
2012/12/11(火) 18:43:03.330659デフォルトの名無しさん
2012/12/13(木) 02:08:51.890660デフォルトの名無しさん
2012/12/13(木) 07:25:54.59ここでそんな事を言って待っていても誰も作りません。
0661デフォルトの名無しさん
2012/12/13(木) 14:31:57.550662デフォルトの名無しさん
2012/12/13(木) 19:47:54.500663デフォルトの名無しさん
2012/12/13(木) 20:40:48.180664デフォルトの名無しさん
2012/12/14(金) 13:47:08.11あるいはモナドを先に理解する。
どちらが得策ですか?
0665デフォルトの名無しさん
2012/12/14(金) 15:09:43.320666デフォルトの名無しさん
2012/12/14(金) 15:22:59.66釣りっぽいが、併行してやるのがお薦め。
>>665 はもうちょっと練ろうな。
進化上のトライ&エラーは、全員が何時までも繰り返しやるべき事じゃない。
俺は先人の成果を感謝しながら使わせて貰うけど、それが嫌らしいから、全部独力でやってくれ。
0667デフォルトの名無しさん
2012/12/14(金) 15:29:04.450668デフォルトの名無しさん
2012/12/14(金) 15:35:20.570669デフォルトの名無しさん
2012/12/14(金) 16:50:33.05これは正格版ということでしょうか?
0670デフォルトの名無しさん
2012/12/14(金) 17:51:50.240671デフォルトの名無しさん
2012/12/14(金) 18:04:45.77'付きはBEGIN無しの非連鎖モード
0672デフォルトの名無しさん
2012/12/14(金) 21:21:59.74あり^^
0673デフォルトの名無しさん
2012/12/17(月) 23:58:29.41言語の経験はCだけでどこからかじったらいいかわからないっす
スレ違いならゴメン
0674デフォルトの名無しさん
2012/12/18(火) 00:16:42.490675デフォルトの名無しさん
2012/12/18(火) 00:25:43.35ビビらせて喜んでるのは、ニワカだから無視していい。
ttp://www.sampou.org/haskell/tutorial-j/index.html
を読んでみて。
0676デフォルトの名無しさん
2012/12/18(火) 00:38:44.50それがリストに並んでるとします
deepseqすると全部のリストを洗って全部の要素をNF化するんですよね?
リストは全部タッチ(e:?で止めないでe1:e2:e3:…en:[]まで)して欲しいけどけど
個々の要素をNF化する必要は無いときはどうしますか?
0677デフォルトの名無しさん
2012/12/18(火) 01:36:59.76あんがと
Cつっても組み込み実装の用途だったから関数言語のアカデミックな思考とは今まであんまり縁がなかったなあ・・
関数言語使えるようになったらシステム制御とかすごい効率的に書けそう
0678デフォルトの名無しさん
2012/12/18(火) 02:31:09.17C言語の入出力は実は悪くないとあらためて実感できる
0679デフォルトの名無しさん
2012/12/18(火) 03:24:25.210680デフォルトの名無しさん
2012/12/18(火) 08:10:21.22sprintfがあれば十分だろ
0681デフォルトの名無しさん
2012/12/18(火) 10:31:21.64こんなのもあるよ。
Haskellで作る超コンパクト音声認識システム:Husky
ttp://www.furui.cs.titech.ac.jp/~shinot/husky/
0682デフォルトの名無しさん
2012/12/18(火) 16:04:02.18Sugeeeeeee!と思ってライブラリアーカイブ漁ったらコマンドライン簡易計算機が出てきたでござるの巻
0683デフォルトの名無しさん
2012/12/18(火) 18:54:45.46import Control.Seq
r = seqList r0
でどうだろうか
0684デフォルトの名無しさん
2012/12/18(火) 19:08:30.54monadize
0685デフォルトの名無しさん
2012/12/18(火) 19:26:12.84っていう議論が大昔にあった筈だからその辺の歴史も知った上で考えたいのだけどそんな資料ありませんかね
0686デフォルトの名無しさん
2012/12/18(火) 22:30:23.06join の代わりに hinin
ってのがいいと思う
0687デフォルトの名無しさん
2012/12/19(水) 20:44:44.19returnにはないのは何故ですか?
0688デフォルトの名無しさん
2012/12/19(水) 20:56:29.95記号だとプログラムが読みにくいから
0689デフォルトの名無しさん
2012/12/19(水) 20:59:39.61そもそも単項演算子なんて(-)ぐらいのもの
命令型言語とのアナロジーも考えればreturnでいいでしょう
0690デフォルトの名無しさん
2012/12/19(水) 20:59:56.08じゃあ何故bindは>>=なのかが疑問なんです
統一感がないっていうか・・
0691デフォルトの名無しさん
2012/12/19(水) 21:01:43.29bindな>>=なのはプログラムが読みやすいから
0692デフォルトの名無しさん
2012/12/19(水) 21:03:25.98統一感がないという理由なら、fail にも記号が必要になる
あるいは、(>>=) と (>>) も演算子ではなく関数名を定義するか
0693デフォルトの名無しさん
2012/12/19(水) 21:03:34.64m `bind` k `bind` l
では前者のほうが読みやすいでしょう
中置記法は優先度も決められないしね
0694デフォルトの名無しさん
2012/12/19(水) 21:12:23.99ぐっとくる記号があったら採用されてたかもしれんな
0695デフォルトの名無しさん
2012/12/19(水) 21:16:37.02> 中置記法は優先度も決められないしね
関数 f も infixr 5 `f` で中置記法としての優先度や結合の向きを定義できる
0696デフォルトの名無しさん
2012/12/19(水) 21:17:56.3815へぇ
0697デフォルトの名無しさん
2012/12/19(水) 21:18:25.23returnにはそれがなかった。と言う事ですか
0698デフォルトの名無しさん
2012/12/19(水) 21:20:03.950699デフォルトの名無しさん
2012/12/20(木) 00:15:39.970700デフォルトの名無しさん
2012/12/20(木) 10:36:24.58モナド=コンテナ 的な発想だとそうなるんだけどね。
Maybe はコンテナか?とか
0701デフォルトの名無しさん
2012/12/20(木) 10:38:12.620702デフォルトの名無しさん
2012/12/20(木) 11:42:45.44争いは読むレベルで発生する
0703デフォルトの名無しさん
2012/12/20(木) 11:53:27.050704デフォルトの名無しさん
2012/12/20(木) 12:17:42.000705デフォルトの名無しさん
2012/12/20(木) 12:21:46.79ちなみにarrowはコモナドじゃねーぞ
0706デフォルトの名無しさん
2012/12/20(木) 12:27:03.750707デフォルトの名無しさん
2012/12/20(木) 12:45:59.170708デフォルトの名無しさん
2012/12/20(木) 13:14:51.420709デフォルトの名無しさん
2012/12/20(木) 14:11:29.170710デフォルトの名無しさん
2012/12/20(木) 14:15:09.36localの使えないReaderMonad
つまりゴミ
0711デフォルトの名無しさん
2012/12/20(木) 15:07:04.740712デフォルトの名無しさん
2012/12/20(木) 17:02:39.670713デフォルトの名無しさん
2012/12/20(木) 17:28:05.580714デフォルトの名無しさん
2012/12/20(木) 19:30:38.86俺は全く分からんが、このじーさんがその手の実用を惜しみなく公開しているっぽい
http://conal.net/blog/
0715デフォルトの名無しさん
2012/12/20(木) 22:54:32.750716デフォルトの名無しさん
2012/12/20(木) 23:20:37.62どういう事ができる分散並列処理フレームワークが欲しいの?
0717デフォルトの名無しさん
2012/12/20(木) 23:31:12.670718デフォルトの名無しさん
2012/12/20(木) 23:34:34.78その程度で良いのなら自分で作れ
0719デフォルトの名無しさん
2012/12/21(金) 04:52:06.99Haskellの話をお願いします
0720デフォルトの名無しさん
2012/12/21(金) 12:21:13.870721デフォルトの名無しさん
2012/12/21(金) 12:46:25.70必要なのは信頼と実績のみ
理論方面は証明支援系に任せましょう
0722デフォルトの名無しさん
2012/12/21(金) 13:11:28.86emacsとかはもう嫌
0723デフォルトの名無しさん
2012/12/21(金) 16:19:53.42Yahoo! pipes的なの誰か作ってよ。
0724デフォルトの名無しさん
2012/12/21(金) 16:41:55.99モナドで順序保証といえど遅延であるという事実
これが意図に反する挙動を招く事について解説するべきだ
0725デフォルトの名無しさん
2012/12/21(金) 18:13:48.40やりたいけどできない挙動はあっても、できるけどできない挙動というのはありえません
0726デフォルトの名無しさん
2012/12/21(金) 19:15:07.14Haskellのどの辺りがビジュアルプログラミングに向いてるのでしょうか。
0727デフォルトの名無しさん
2012/12/22(土) 00:11:16.33イベントドリブンの実装のしやすさ
0728デフォルトの名無しさん
2012/12/22(土) 06:43:37.720729デフォルトの名無しさん
2012/12/22(土) 14:29:59.23プロシュートいいよね
0730デフォルトの名無しさん
2012/12/27(木) 03:50:17.100731デフォルトの名無しさん
2012/12/27(木) 16:16:16.13data 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つ目の式でに共通の呼び出し毎に減っているものは何ですか?
整礎帰納法の例で探してもマージソートとか割り算ばっかりで木の平坦化とか全然出てきません
0732デフォルトの名無しさん
2012/12/27(木) 16:31:39.00単に止まることを証明したいという意味?
俺なら
1. どの操作でもAppが増えることはない
2. 左側の木の高さが1以上の場合は左側の木の高さが減る、0の場合はAppが減る
というあたりから攻める
との操作でも減るような上手い値を定義したいということなら分からん
0733デフォルトの名無しさん
2012/12/27(木) 19:02:10.89App xs ys が xs に減ってるじゃん
0734デフォルトの名無しさん
2012/12/27(木) 19:17:07.390735デフォルトの名無しさん
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 みたいな「抜け穴」の使用はナシで
0736デフォルトの名無しさん
2012/12/27(木) 20:33:11.53君は、任意のグラフではなく、ツリー構造なら問題なく >>375(の様なもの)を実現できる?
もっと言うと、一列のリスト構造なら問題なく実現できる?
それなら実現できると言うのなら、グラフ構造だと何故できない?
グラフ構造とそれ以外の構造との >>375 を実現する上での本質的な違いは何?
0737デフォルトの名無しさん
2012/12/27(木) 21:43:08.04頂点、辺をそれぞれ整数で表わす
data Graph a = Graph
{ nodes :: IntMap (a, [Int]) -- [Int]はここから出る辺のリスト
, edges :: IntMap (Int, Int) -- 出発頂点と行き先頂点
, nextInt :: Int -- 次に頂点や辺を作ったときに割り当てる整数
}
0738デフォルトの名無しさん
2012/12/27(木) 22:04:12.36data List a = List a (List a) | Nil
とか
data Tree a = Tree a [Tree a]
と定義するのと同じような感じで
data Node a = Node a [Node a]
と定義してしまうと、Eqのインスタンスにすることさえできない (有限なグラフに対しても(==)が停止しない可能性がある)
循環構造を考えないとしても、グラフには、リストの頭や木の根みたいな「どこからも参照されていない唯一の基準点」がない
仮に木構造の参照の向きを全部逆にしたような構造があったとき、その根が変更されたら、それをどうやって全てのノードに伝えたらいいのだろうか
唯一のエントリーポイントが存在するなら、そこから変更点までの、影響を受ける全てのノードを(陰にせよ陽にせよ)記憶しておけばいいけど、グラフだとそうはいかなくなってしまう
0739デフォルトの名無しさん
2012/12/27(木) 22:56:29.51>有限なグラフに対しても(==)が停止しない可能性がある
ん? 必ず停止する同値判定プログラムは書けるが、
複雑で面倒と言うことだよね?
(循環を検知できないわけがない)
>>737 の方法でも、同値判定をする必要があるのなら、
循環を検知する同じような仕組みが必要だぞ。
0740デフォルトの名無しさん
2012/12/27(木) 23:19:51.93というだけの構造でも循環は検知できるんでしょうか?
x = Node 0 [Node 1 [x]]
y = Node 0 [Node 1 [y]]
に対して
x == y
が停止してTrueを返す(==)って定義できるんでしょうか
0741デフォルトの名無しさん
2012/12/27(木) 23:30:16.000742デフォルトの名無しさん
2012/12/28(金) 06:07:19.07単に隣接行列を持てばいいだけだと思うけど
0743デフォルトの名無しさん
2012/12/28(金) 06:11:44.81循環は検知できないだろ
たとえば[Int]を与えられたときに、それが
・普通の無限リストなのか
・単にやたらと長いリストなのか
・let a = 0:a in aのように作られた循環リストなのか
判別することはできない
>>738の構造ではグラフの頂点数を数えることすらできないし、
辺の追加や削除もできない
どうしても>>737みたいなグローバルなテーブルを持つを持つ必要がある
0744デフォルトの名無しさん
2012/12/28(金) 06:39:32.04x = Node 0 [Node 1 [x]]
z = Node 0 [Node 1 [Node 0 [Node 1 [z]]]]
この二つが全く同じデータになっちゃうんだからおかしいよね
最低でもノードの同一性判定は必要(ノードの持つ値が同一というのではなく)
0745デフォルトの名無しさん
2012/12/28(金) 07:08:57.06隣接行列を2次元配列で表現するとノードの追加や削除が非効率
また、辺が無いところが無駄になる
検索の効率は良いけどね
0746デフォルトの名無しさん
2012/12/28(金) 07:14:42.62今まで比較した全てのものを記録しておいて、
[x] と [Node 0 [Node 1 [z]] を比較すれば判定できると思うけど。
判定処理の中で随時別のグラフ表現にフォーマットし直しながら判定すれば、
非常に馬鹿で無駄で非効率で面倒で阿保だけど、不可能ではないような気がする。
ダメかな・・・
0747デフォルトの名無しさん
2012/12/28(金) 07:26:54.43いやできないって
xとzを定義した時の式が後から取り出せるわけじゃないんだぞ
0748デフォルトの名無しさん
2012/12/28(金) 08:13:27.860749デフォルトの名無しさん
2012/12/28(金) 08:53:49.77data Node a = Node a ID [Node a]
というように、各ノードを区別できる全体で一意のノードIDを持たせても無理?
0750デフォルトの名無しさん
2012/12/29(土) 02:07:43.84それだと同一性判定は可能といえば可能だけど
n > 1のn部グラフは表現できない
という問題がありそう。
一例を挙げれば、点が二つで辺が一つもないグラフと、点が二つで辺が一つだけのグラフをどうやって区別するの、ってこと。
なお、オレは>>747とは別人ね。
0751デフォルトの名無しさん
2012/12/29(土) 09:51:22.04Data Graph a = Graph [Node a]
data Node a = Node a ID [Node a]
0752751
2012/12/29(土) 09:53:16.93すまん、>>751 は変だな
まぁ、こんな感じでリストを組んでおけばn部グラフも表現できるでしょ
検索処理とか面倒そうなんで、俺はやらんが
0753デフォルトの名無しさん
2012/12/29(土) 10:28:35.980754デフォルトの名無しさん
2012/12/29(土) 10:50:10.35と言いたかっただけだ
実際にプログラムするなら >>737 の方法がシンプルでいいと思うぞ
0755デフォルトの名無しさん
2012/12/29(土) 11:00:02.950756デフォルトの名無しさん
2012/12/29(土) 11:07:38.80稚拙な英語で書いてあったから日本人でもよく分かると思ったよ。
とりあえず7章までは問題なく読めたからオススメしておく。
0757デフォルトの名無しさん
2012/12/29(土) 11:09:26.960758デフォルトの名無しさん
2012/12/29(土) 11:35:07.480759デフォルトの名無しさん
2012/12/29(土) 11:42:31.40平易 -> Plain
0760731
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
0761デフォルトの名無しさん
2012/12/30(日) 01:40:11.45小数点何位でも取り扱える小数型ってないん?
0762デフォルトの名無しさん
2012/12/30(日) 08:27:53.97Data.Ratio
0763デフォルトの名無しさん
2012/12/31(月) 18:50:13.910764デフォルトの名無しさん
2012/12/31(月) 22:28:49.72データ構造内の異なる複数の個所から
あるデータを参照するにはどうすればいい?
やっぱり整数値をポインタに見立ててIntMapでごにょごにょするしかない?
0765デフォルトの名無しさん
2012/12/31(月) 22:29:59.12ghciが起動してそのソースコードを読み込んでくれるのですが、
その方法で起動したghciの中で補完機能(termの中でTabを押すことで使えるやつ)
が使えるようにするにはどんな設定/elispを使ったらいいんでしょうか。
0766デフォルトの名無しさん
2013/01/01(火) 15:43:07.01データを複数回参照するには変数を定義する
実行時に複雑なデータを入力する場合は、文字列を変数に見立てる
もちろん整数をポインタに見立ててもよい
0767デフォルトの名無しさん
2013/01/01(火) 15:50:06.040768デフォルトの名無しさん
2013/01/03(木) 23:10:24.48ネット上のサンプルとかチュートリアル見ても、
すでにあるテーブルの参照はあっても、新規作成の例が見当たらない。
もしかして、テーブル作るには
Database.HDBC.run 関数に SQL 文を適用するの?
0769デフォルトの名無しさん
2013/01/03(木) 23:26:03.15確かRWHでは普通にSQL使ってた
0770デフォルトの名無しさん
2013/01/03(木) 23:37:20.91HaskellDB is a Haskell library for expressing database queries and operations
in a type safe and declarative way.
と言うのは、レコードに対するクエリや操作に関してのことで、
テーブル作成や削除は勝手にやってくれってことか・・・
何という片手落ち
0771デフォルトの名無しさん
2013/01/04(金) 00:07:32.39てへぺろ(・ω<)
0772デフォルトの名無しさん
2013/01/05(土) 16:59:33.140773デフォルトの名無しさん
2013/01/05(土) 17:27:10.22遅延評価を使うと、RDBMSが対応してないと、メモリがどえらいことになると思うけど、どうなんだろ
0774デフォルトの名無しさん
2013/01/06(日) 02:56:26.25尚且つ最後まで受け取ったら
その瞬間に自動的にデータベースとの接続を切って欲しいんですが
そういう巧い話ありません?
0775デフォルトの名無しさん
2013/01/06(日) 03:36:24.690776デフォルトの名無しさん
2013/01/06(日) 04:10:12.110777775
2013/01/06(日) 13:30:19.07conduit はストリームの下流にあるものから上流にあるものへシグナルを発信できる。
それによって、上流にあるものは下流に提供しているリソースをもう解放して良いのか、
それともまだダメなのかを判断できる、という代物だ。
下流で、データを最後まで受け取ったと判断したら上流へシグナルを送る仕組みを作れば良い。
と予想したんだが、どうだろうな。
couchdb-conduit パッケージを使ってみれば、もう少し分かるかも知れん。
俺は使ったことないから分からんが。
0778デフォルトの名無しさん
2013/01/06(日) 13:56:47.190779デフォルトの名無しさん
2013/01/06(日) 17:45:50.34putStr "begin..."
value <- heavyProcess
putStr "done."
print value
これはbegin...done.と表示した後にようやくheavyProcessが動き出すじゃないですか
もう何を信じていいのかわからないじゃないですか
0780デフォルトの名無しさん
2013/01/06(日) 18:36:09.490781デフォルトの名無しさん
2013/01/06(日) 18:37:14.290782デフォルトの名無しさん
2013/01/06(日) 18:54:46.450783デフォルトの名無しさん
2013/01/06(日) 18:58:26.750784デフォルトの名無しさん
2013/01/06(日) 19:18:17.78それだと"done."が表示される時点ではheavyProcessは実行終了してるよ
done.の後で時間が掛かってるなら、それはheavyProcessが重いサンクを返してるのが原因
0785デフォルトの名無しさん
2013/01/06(日) 20:22:38.700786デフォルトの名無しさん
2013/01/07(月) 00:00:19.71実行の定義が判らなくなった。。。
0787デフォルトの名無しさん
2013/01/07(月) 00:05:25.77NFにして初めて実行したというんだと思ってました
「実行は済んだ。結果はまだだ」
「手術は成功だ。患者は死んだ」
0788デフォルトの名無しさん
2013/01/07(月) 07:23:17.88そういう言語だから仕方ない
[Int]は、Intの値かサンクを持つリスト
IO Intは、Intの値かサンクを返すアクション
0789デフォルトの名無しさん
2013/01/07(月) 07:27:47.04heavyProcess内で行われるI/OはheavyProcessが返る前に完了するよ
返り値をNFまで評価するのは実行のうちに入らないってだけ
0790デフォルトの名無しさん
2013/01/07(月) 15:28:41.89他に即処理されることを判断する為の指針は?
0791デフォルトの名無しさん
2013/01/07(月) 16:00:29.15そんなの気にしなくていいってのが関数型言語のいい所だと思うんだけど。
0792デフォルトの名無しさん
2013/01/07(月) 16:17:50.100793デフォルトの名無しさん
2013/01/07(月) 18:18:28.260794デフォルトの名無しさん
2013/01/07(月) 18:23:35.280795デフォルトの名無しさん
2013/01/07(月) 20:48:54.35おおざっぱに、どういう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の評価を発生させるので、サンクでなく値を返す
0796デフォルトの名無しさん
2013/01/07(月) 21:44:18.68なるほど、キーポイントはI/Oなんですね(´・ェ・`)
0797デフォルトの名無しさん
2013/01/07(月) 22:37:39.08> when (f x) $ putStrLn "Hello"
> も、Helloを出力するかどうかを決めるのにf xの評価が必要だから評価する
このケースで、本当に f x が評価されてるのかどうか、確認する方法はある?
(まぁこのケースだけの話じゃないけど)
ghc のソースを覗く以外なら手段は問わない
0798デフォルトの名無しさん
2013/01/08(火) 00:01:22.41fを書き換えていいのなら、
・評価されたらerrorで死ぬようにする
・評価されたらDebug.Trace.traceで画面になんか出力
0799デフォルトの名無しさん
2013/01/09(水) 20:38:20.37期待通りの順序で動かない時も有るけど、そういう時の為の関数が大抵有る
自分はhFlush,DeepSeqぐらいしかまだ使ってないけど
0800デフォルトの名無しさん
2013/01/10(木) 00:54:16.280801デフォルトの名無しさん
2013/01/10(木) 14:41:59.89drinkdrankdrunk
みたいに
think thank thunk
と変化するんだよ。そう思ったときの thunk 。
0802デフォルトの名無しさん
2013/01/10(木) 15:14:29.46thunkってthinkの完了形だったのか…。でも、遅延評価だから完了してなくね?
0803デフォルトの名無しさん
2013/01/10(木) 18:08:08.090804デフォルトの名無しさん
2013/01/11(金) 01:11:28.760805デフォルトの名無しさん
2013/01/11(金) 07:15:59.400806デフォルトの名無しさん
2013/01/11(金) 13:23:17.200807デフォルトの名無しさん
2013/01/11(金) 13:26:19.240808デフォルトの名無しさん
2013/01/11(金) 22:11:17.76計算機プログラムの構造と解釈
実装はschemeだけど
>>805
自分の手で実装してはじめて意味が理解できる
レッツトライ!
0809デフォルトの名無しさん
2013/01/11(金) 23:07:05.99いや、言葉の意味、なんでthunkなの? という趣旨の質問かと思ってた
0810デフォルトの名無しさん
2013/01/11(金) 23:16:51.00なんでthunkという単語にしたかという経緯は、algolの教科書に書いてある
algolスレへGo!
0811デフォルトの名無しさん
2013/01/11(金) 23:48:37.48thunks
0812デフォルトの名無しさん
2013/01/12(土) 02:46:50.400813デフォルトの名無しさん
2013/01/12(土) 02:54:12.190814デフォルトの名無しさん
2013/01/12(土) 03:17:28.07えるちゃんじゃなくて、えばるちゃん!
0815デフォルトの名無しさん
2013/01/12(土) 12:29:18.06> >>806
> 計算機プログラムの構造と解釈
> 実装はschemeだけど
それ和田本じゃなくてSICPと呼ぶのが普通。
訳が独特だから、あえて和田本なのかも知れないけど。
0816デフォルトの名無しさん
2013/01/12(土) 13:56:53.28えばる
あぷらい
らむだ
って名前付ける。
0817デフォルトの名無しさん
2013/01/12(土) 14:47:46.84子供、できるといいな
0818デフォルトの名無しさん
2013/01/12(土) 15:26:35.34たぶん俺なんかが読んでも速攻で挫折するんだろうな
0819デフォルトの名無しさん
2013/01/12(土) 15:29:58.950820デフォルトの名無しさん
2013/01/12(土) 15:30:57.490821デフォルトの名無しさん
2013/01/12(土) 15:31:44.780822デフォルトの名無しさん
2013/01/12(土) 15:31:59.020823デフォルトの名無しさん
2013/01/13(日) 01:38:46.38RWH通読した根性があれば、その1/4の時間で読み終わると思う
0824デフォルトの名無しさん
2013/01/13(日) 03:31:35.01そこは『氷菓だけにぃいいいいい?』だろ
0825デフォルトの名無しさん
2013/01/13(日) 04:02:56.200826デフォルトの名無しさん
2013/01/13(日) 10:03:39.600827デフォルトの名無しさん
2013/01/13(日) 10:20:00.59SICPが書かれた時分なんて計算機科学の専門家ですらモナドなにそれおいしいの?ってレベルだぞ
0828デフォルトの名無しさん
2013/01/13(日) 11:19:30.210829デフォルトの名無しさん
2013/01/13(日) 11:31:23.25学部でやる線型代数の教科書も古い
0830デフォルトの名無しさん
2013/01/13(日) 11:33:30.350831デフォルトの名無しさん
2013/01/13(日) 11:42:44.76ニュートン力学が古くならないのと同じ意味で。
0832デフォルトの名無しさん
2013/01/13(日) 11:54:41.27でもここでSchemeよりHaskellが良いと言うのは進歩がないよね
0833デフォルトの名無しさん
2013/01/13(日) 11:59:53.760834デフォルトの名無しさん
2013/01/13(日) 12:01:20.270835デフォルトの名無しさん
2013/01/13(日) 12:08:39.180836デフォルトの名無しさん
2013/01/13(日) 12:18:50.54何が正しいか議論するよりも実験する方が早いところが科学
0837デフォルトの名無しさん
2013/01/13(日) 14:53:17.710838デフォルトの名無しさん
2013/01/13(日) 15:20:28.330839デフォルトの名無しさん
2013/01/13(日) 15:34:05.63だって企業は学生がどの学科かなんて全く見てないんだから。
0840デフォルトの名無しさん
2013/01/13(日) 15:42:35.4964MBで普段スワップ起こしてる環境だから判んないけど
32GBとか積んだ環境だと一杯になるまで無尽蔵に使い続けるわけ?
0841デフォルトの名無しさん
2013/01/13(日) 15:48:38.940842デフォルトの名無しさん
2013/01/13(日) 16:19:38.25RTSオプション付けてプロファイリングしてみれば良い
それくらいは自分でできるだろ
0843デフォルトの名無しさん
2013/01/13(日) 17:42:29.07SICPが古くなる(読んでもあまり意味がなくなる)ことは無いよ
0844デフォルトの名無しさん
2013/01/13(日) 17:48:12.12あんなもんただのScheme解説書じゃん。
計算機科学分もネットで出回っている情報レベルの本w
0845デフォルトの名無しさん
2013/01/13(日) 17:55:29.51ま、そんなことはどうでもいいけど、
お前ら本の名前ばっかり論ってないで議論しろw
0846デフォルトの名無しさん
2013/01/13(日) 17:58:10.860847デフォルトの名無しさん
2013/01/13(日) 17:59:57.416Gあっても足りない
0848デフォルトの名無しさん
2013/01/13(日) 18:06:18.28どこがだよ。Schemeの教科書として読むのは勧められない、というのが定評なのに。
おまえが何もわかってないことだけが明らかw
0849デフォルトの名無しさん
2013/01/13(日) 18:11:55.06有志によるPython版すらあるというのに何を言っているのか
0850デフォルトの名無しさん
2013/01/13(日) 18:13:04.440851デフォルトの名無しさん
2013/01/13(日) 18:15:48.44あの頃はコンピュータ技術者の地位はそこそこ高かったw
0852デフォルトの名無しさん
2013/01/13(日) 18:18:08.65生物学のようなものが発展したら数学者はガッカリするだろうか
0853デフォルトの名無しさん
2013/01/13(日) 18:18:55.36みんなHaskellで語ることないんだよ
0854デフォルトの名無しさん
2013/01/13(日) 18:32:35.58語る事が無いほど明快な言語というわけか!
0855デフォルトの名無しさん
2013/01/13(日) 18:45:50.40そういうのって C や Python、Java などでよく作られるけど、
Haskell で作るって話が出ないのはなんで?
Haskell はその手のツールを作るの苦手なの?
こういうツールも初めは個人の趣味で、
一人で必要最小限の小さなアプリから作って育ったんだから、
Haskell で作って公開してる人が居てもおかしくないと思うんだが。
0856デフォルトの名無しさん
2013/01/13(日) 19:04:51.44そういうのが量産された時代ってせいぜい10〜20年ほど前だろ?
0857デフォルトの名無しさん
2013/01/13(日) 19:09:11.54注目されている分野が違うんだよ。
0858デフォルトの名無しさん
2013/01/13(日) 19:28:01.620859デフォルトの名無しさん
2013/01/13(日) 19:34:52.420860デフォルトの名無しさん
2013/01/13(日) 19:35:27.26論文
0861デフォルトの名無しさん
2013/01/13(日) 19:35:51.74イイネ!!
0862デフォルトの名無しさん
2013/01/13(日) 19:36:10.480863デフォルトの名無しさん
2013/01/13(日) 20:07:28.76論文を書くのに必要な資料や文献を管理するツールとか?
論文の構想を錬るのに使うビジュアルツールみたいなのとか?
一部の特別な人間が使うサーバー関係よりも、こっちの方が興味あるな。
こういうのなら、改良して一般の人たちが普段使うツールにできそうな可能性ある。
なんでフリーウェアで公開しないの?
公開すればいろんな人たちが改造するかも知れんのに。
0864デフォルトの名無しさん
2013/01/13(日) 20:09:50.930865デフォルトの名無しさん
2013/01/13(日) 20:34:30.44定理を論文に書く → haskellで確認する
アルゴリズムを論文に書く → 実証用の簡易実装をhaskellで作って公開する
数値実験 → haskell環境で実験
haskellのコードに限りなく近い形で論文に掛けるからhaskellを使ってる
0866デフォルトの名無しさん
2013/01/13(日) 20:38:25.440867デフォルトの名無しさん
2013/01/13(日) 20:52:45.820868デフォルトの名無しさん
2013/01/13(日) 21:12:57.13論文に書く定理をhaskellでどうやって確認するの?
Haskellで確認できるというのは、例えばどういう定理?
0869デフォルトの名無しさん
2013/01/14(月) 01:35:28.870870デフォルトの名無しさん
2013/01/14(月) 08:55:56.090871デフォルトの名無しさん
2013/01/14(月) 10:31:42.370872デフォルトの名無しさん
2013/01/14(月) 12:21:32.06これ、Haskell導入促進支援事業のページのリンクが切れてるんだけど、
結局どうなったの? 頓挫?
公式のサイト内でHaskellを検索してもページ無いし
0873デフォルトの名無しさん
2013/01/14(月) 12:35:21.540874デフォルトの名無しさん
2013/01/14(月) 12:43:07.80ttp://www.dcs.gla.ac.uk/mail-www/haskell/msg00394.html
0875デフォルトの名無しさん
2013/01/14(月) 13:26:11.79個人が特定できちゃうからな…
0876デフォルトの名無しさん
2013/01/14(月) 13:32:56.76π計算、Chameleon system、単一型パラメータコンストラクタからの拡張法、…
0877デフォルトの名無しさん
2013/01/14(月) 14:19:54.71そういう事か
なんか悪意を感じるな
0878デフォルトの名無しさん
2013/01/14(月) 14:22:15.78もちろんオープンソースのプロジェクトでもOKだけど
0879デフォルトの名無しさん
2013/01/14(月) 15:18:11.540880デフォルトの名無しさん
2013/01/14(月) 16:09:52.52すまん、Haskellを使って具体的に何をするのか、
その事業はなんで他言語じゃなくHaskellなのか、
とかその辺りが知りたかった。
Haskellでこんな狙い(ビジョン)でこんなことやってます、
というのが分かるといいんだけどなぁ。
0881デフォルトの名無しさん
2013/01/14(月) 16:26:48.72その次はウェアラブルコンピューティングの時代
ますます富豪的プログラミングの日の目は遠ざかりますなあ
0882デフォルトの名無しさん
2013/01/14(月) 17:03:03.44http://benchmarksgame.alioth.debian.org/u64/which-programs-are-fastest.php
富豪的プログラミングから遠ざかりLLが滅びる中、haskellだけは生き残る!
0883デフォルトの名無しさん
2013/01/14(月) 18:52:05.940884デフォルトの名無しさん
2013/01/14(月) 20:09:00.180885デフォルトの名無しさん
2013/01/14(月) 21:07:04.60コンソール用のゲームならC/C++が適してるし、
Webのクライアント側のシステムならJavaScriptが適してるが、
その他の用途って、言語は何使っても大して違いないような気がする。
好きな言語選べばいいんじゃね。
Haskellが適してる用途って何よ。
Haskellの特長を生かした、学習曲線が穏やかなGUIライブラリが無いという時点で、
適してる分野がかなり狭められているような気がするが。
Haskellの適した分野の集合 ⊂ その他の言語の適した分野の集合
今こんな感じだろ
0886デフォルトの名無しさん
2013/01/14(月) 21:27:07.840887デフォルトの名無しさん
2013/01/14(月) 21:48:19.53学習速度、アプリ構築速度、メンテナンス速度、投資回収速度、いろいろ有るから無意味ではない。
0888デフォルトの名無しさん
2013/01/14(月) 21:58:30.320889デフォルトの名無しさん
2013/01/14(月) 22:05:18.330890デフォルトの名無しさん
2013/01/15(火) 00:38:01.96言語は選ぶモノではない
押し付けられるモノだ
計算可能性が同じである以上、分野が適していないなんて言い訳は通用しない
我々にできることは、インターネット上の間違った知識を理由に言語を押し付けられないよう、間違いを見付けたら逐一指摘していくことのみ
0891デフォルトの名無しさん
2013/01/15(火) 00:53:54.35それ、結局は人間がボトルネックになってる。
ハードが進化して実行速度を無視してよくなったように、5年以内に自動コーディングが進んで人間のボトルネックも無視する風潮になるような気がする。
コンピュータ言語はガチの専門家さえ理解できればいい代物になってしまうのではなかろうか。
0892デフォルトの名無しさん
2013/01/15(火) 00:56:52.99また自動コーディング系になんらかの「仕様が記述されたもの」を入力しなければならないであろうが、それはどのように記述されるのであろうか?
haskell 風に記述するのか?まさか?
0894デフォルトの名無しさん
2013/01/15(火) 02:40:54.78言語が一段高級になるだけにしか思えない
0895デフォルトの名無しさん
2013/01/15(火) 08:12:45.760896デフォルトの名無しさん
2013/01/15(火) 08:35:24.36>ハードが進化して実行速度を無視してよくなったように、
この認識が通用するのは、元々数桁の改善で済む程度の単純な問題についてだけ。
あと投資は技術のすじ以外の部分が大きい。
0897デフォルトの名無しさん
2013/01/15(火) 10:14:14.82すごいHはあんなに分かりやすかったのに…
0898デフォルトの名無しさん
2013/01/15(火) 18:13:13.36本物の〜の方が内容はしっかりしてる
0899デフォルトの名無しさん
2013/01/15(火) 19:00:45.860900デフォルトの名無しさん
2013/01/15(火) 20:36:26.80例えばどこがどう読みにくい?
0901デフォルトの名無しさん
2013/01/15(火) 21:30:08.31端的に言えば読む側が理解しやすいように順序立てて説明してる感じがしない
筆者が思いついた順に説明してる感じ
各段落で読者が何を知っていて何を知らないかに注意を配ってないし
段落でされている説明が章全体の中でどういう位置にあるのかを読んでいて見失いやすい
知りたかったこと(定義)をズバリと教えてくれず例示とあいまいな日本語で済ませてる
あと「前回では〜」みたいな別の章の参照が不必要に多くて各章の独立性が低い
Haskellはどのような時にメモ化を行うのかを調べていて
「第8回 遅延評価の仕組み」に行き当たったけれど
「名前呼び出し」の説明に量を割きすぎていて
肝であろう「必要呼び出し」の説明が段落ひとつ分しか書かれてない
0902デフォルトの名無しさん
2013/01/15(火) 22:25:09.230903デフォルトの名無しさん
2013/01/15(火) 22:28:45.200904デフォルトの名無しさん
2013/01/15(火) 22:33:38.140905デフォルトの名無しさん
2013/01/15(火) 22:34:11.10難しすぎてスルーされてるけど。
君が10行も語ってるのがその証拠だな
俺的には彼にIOモナドを3年くらい解説してほしいマジで
State#って何なんだよ
0906デフォルトの名無しさん
2013/01/15(火) 23:45:44.27何だよっていうか、概念的には State Monad と同じだから State って書いてるだけで、
その辺は外部世界をどう記述するかっていう処理系依存の話だし別に気にせんでもいいのでは。
0907デフォルトの名無しさん
2013/01/15(火) 23:58:53.61一文字書く度に全てのデータを作り直す必要があるんですか?
0908デフォルトの名無しさん
2013/01/16(水) 00:03:48.560909デフォルトの名無しさん
2013/01/16(水) 00:11:02.27結局referenceを意識しないとプログラムが書けないという罠
0910デフォルトの名無しさん
2013/01/16(水) 00:13:56.61なぜ効率が異なるとプログラムが書けないのかを説明するべき
0911デフォルトの名無しさん
2013/01/16(水) 01:12:59.450912デフォルトの名無しさん
2013/01/16(水) 01:32:03.16に変換したとき、同じ式に二個以上の一時変数が定義されるならば効率が良くない。
0913デフォルトの名無しさん
2013/01/16(水) 16:53:19.40女は遅延評価
0914デフォルトの名無しさん
2013/01/16(水) 16:56:26.76女がプログラミング向いてるなんてのは迷信。
0915デフォルトの名無しさん
2013/01/16(水) 17:09:26.02鼠並み
0916デフォルトの名無しさん
2013/01/16(水) 19:03:21.970917デフォルトの名無しさん
2013/01/16(水) 19:06:33.590918デフォルトの名無しさん
2013/01/16(水) 19:31:51.370919デフォルトの名無しさん
2013/01/16(水) 19:42:39.67そんなことは知ってる。
当時はプログラミングは大した仕事ではなかった。
戦時中の米軍でコンピュータが導入された時、
プログラミングは数学者や工学者ではなく、
普通の高校生を何人か連れてきてやらせていた。
0920デフォルトの名無しさん
2013/01/16(水) 19:44:32.25ソフトウェアはオマケ程度にしか思われていなかったんだよ。
それこそ、プログラミングはティッシュ配り程度の仕事だと思われていた。
0921デフォルトの名無しさん
2013/01/16(水) 20:47:09.85女性も普通に高度なプログラミングに従事していた様子が窺える。
少なくとも、ティッシュ配り程度の仕事という認識では、
とてもではないけどあんなシステムを構築する仕事はできないと思う。
それも、フラン・アレンが特別優秀だったわけではなく、他の女性達もね。
0923デフォルトの名無しさん
2013/01/16(水) 20:50:11.040924デフォルトの名無しさん
2013/01/16(水) 21:14:36.47APLだとすべての演算子が右結合だったので、
foldrが簡約演算子'/'を一般化したものだと考えることができた。
でも左結合のfoldlがピンと来ない。
foldl f v [x0,x1,...,xn]=(...((v `f` x0) `f` x1) `f`...) `f` xn
とのことだけど、リストの先頭に空リストがあるわけでもないのに、vがx0より前に現れる。
不思議。
0925デフォルトの名無しさん
2013/01/16(水) 21:37:19.20俺は不思議さを共有できないからアドバイスできんのだが、
foldl のソースを見てみると、もしかしたら疑問が解消されるかも。
ライブラリドキュメントの Data.List のページの
foldl の項の右端にある Source というリンクを辿れば、ソースが見れる。
0926デフォルトの名無しさん
2013/01/16(水) 22:20:58.55どうもありがとう。
ライブラリ関数のソースの調べ方も分かりました。
リストの先頭から要素を一つづつ取り出して二項演算子で評価していますね。
BASIC風に書くと
result=v
FOR i=0 TO n
LET result=result `f` x(i)
NEXT i
PRINT result
みたいな動きで、foldlの第2引数はループの最初に与える初期値のようですね。
(foldrの第2引数は再帰の終端の値。)
手続き型言語によるアナロジーで、関数型言語を理解したことになるのか不明ですが。
0927デフォルトの名無しさん
2013/01/17(木) 01:45:46.62ghci 環境で :load で読み込んだファイルにある関数ならできそうな気がするのですが
0928デフォルトの名無しさん
2013/01/17(木) 03:11:29.670929デフォルトの名無しさん
2013/01/17(木) 07:22:06.47そのような関数が GHC の標準ライブラリに存在するかという質問でしたら、
存在しません。
haskell-src パッケージ(およびその拡張機能パッケージ)を使って、
その関数が定義されているソースファイルを解析してください。
0930デフォルトの名無しさん
2013/01/17(木) 10:21:16.94:list 関数
じゃあかんの?
0931デフォルトの名無しさん
2013/01/17(木) 10:23:05.55自分は、foldrは普通の再帰を一般化したもの
foldlは末尾再帰を一般化したものって理解
0932デフォルトの名無しさん
2013/01/17(木) 10:27:37.475年以内はちと難しいだろうが、まさにあなたの読み通りになるだろう。
>>893
最近の日本人の論文を検索してみるとよい。ひそかにすごいのがある。
>どのように記述されるのであろうか?
もちろんhaskell 風ではない。
0933デフォルトの名無しさん
2013/01/17(木) 11:13:16.150934デフォルトの名無しさん
2013/01/17(木) 11:41:39.73Fortran時代の人ですかねw
0935デフォルトの名無しさん
2013/01/17(木) 12:37:48.210936デフォルトの名無しさん
2013/01/17(木) 12:56:18.380937デフォルトの名無しさん
2013/01/17(木) 13:08:11.53で?
0938デフォルトの名無しさん
2013/01/17(木) 13:29:52.95エクセルで仕様書書くだけでプログラム自動生成の時代なんだぜ
0939デフォルトの名無しさん
2013/01/17(木) 13:47:58.38それとかプログラムソース->実行モジュールは、アセンブラのレベル。
コンパイラでないものを、高級?に見せるためにコンパイラと称してるのが多いけどね。
0940デフォルトの名無しさん
2013/01/17(木) 13:49:23.13書かなくてもわかるようなところは汎用的だから
すでにライブラリ化されているはずだし
結局は自分でプログラム書いたほうが早いわけ。
自然言語でしか仕様書を書けない人は無駄な余剰人員だと思う。
0941デフォルトの名無しさん
2013/01/17(木) 13:56:37.860942デフォルトの名無しさん
2013/01/17(木) 14:16:18.190943デフォルトの名無しさん
2013/01/17(木) 14:38:15.190944デフォルトの名無しさん
2013/01/17(木) 14:39:05.81便利さでいえば人間が最強だ
機械化、自動化の魅力は便利さではなく正確で馬鹿正直なところ
0945デフォルトの名無しさん
2013/01/17(木) 15:06:12.84新しい部分だけ新設されて既存箇所はポインタで繋げるだけで済む?
0946デフォルトの名無しさん
2013/01/17(木) 17:28:55.29職人芸として自動プログラミングを利用するプログラマがすでに存在するから、同じ給料でもプログラマによって生産量が1000倍違う
0947デフォルトの名無しさん
2013/01/17(木) 17:44:56.140948デフォルトの名無しさん
2013/01/17(木) 17:49:52.660949デフォルトの名無しさん
2013/01/17(木) 17:54:23.080950デフォルトの名無しさん
2013/01/17(木) 18:09:14.09瞬間生産量が1000倍あっても
集中力持続時間が1000分の1しかないなら
総生産量は変わらん
0951デフォルトの名無しさん
2013/01/17(木) 18:09:56.870952デフォルトの名無しさん
2013/01/17(木) 19:04:24.650953デフォルトの名無しさん
2013/01/17(木) 19:20:57.44スレ違いの話題を延々と引っ張る
自演荒らしが流行ってるのか
0954デフォルトの名無しさん
2013/01/17(木) 20:06:23.17総生産量が1000倍違う
10年前は100倍だった
0955デフォルトの名無しさん
2013/01/17(木) 20:12:50.36Haskellの使い道が自動コーディング
というか、日本の会社の実務でのHaskellの使い道なんてそれしかない
昔はlispでDSLからスケルトンとテストケース作ってたけど、parsecがあるからhaskellに移行中
0956デフォルトの名無しさん
2013/01/17(木) 20:24:47.44海外だとどうなの?
0957デフォルトの名無しさん
2013/01/17(木) 20:29:35.230958デフォルトの名無しさん
2013/01/17(木) 20:38:07.96部分的にはできてる
(100歩譲って全部できてる分野があったとしても、自動でやるからもう表に出ない)
実際に使ってるのを見たことがあるのは、領域を限定してコーディングするのと、コードの断片だけ生成するのと、自動でリファクタリングしてAPIを出力するのだけ
あと作曲
0959デフォルトの名無しさん
2013/01/17(木) 20:48:03.60例えばクラス図を元にC++のファイルを生成するとか。
0960デフォルトの名無しさん
2013/01/17(木) 20:59:37.72「自動コーディング」するために、なんらかの仕様書を食わせる必要があるっしょ。
結果、その仕様書を作る作業が必要になる。
その仕様書も独特の文法があるはずで、結果としてプログラミング言語の一種になってしまう。
0961デフォルトの名無しさん
2013/01/17(木) 21:04:40.55自動プログラミングの最終目標は、仕様書=自然言語
0962デフォルトの名無しさん
2013/01/17(木) 21:08:40.130963デフォルトの名無しさん
2013/01/17(木) 21:10:06.880964デフォルトの名無しさん
2013/01/17(木) 21:19:55.45うん
0965デフォルトの名無しさん
2013/01/17(木) 21:24:54.20それ以上を目指すのはオカルト
0966デフォルトの名無しさん
2013/01/17(木) 21:28:08.900967デフォルトの名無しさん
2013/01/17(木) 22:27:23.81そこで、泣き声に魔術のような力があると思い込んだ奴は科学的な発達が止まる
0968デフォルトの名無しさん
2013/01/17(木) 22:37:29.470969デフォルトの名無しさん
2013/01/17(木) 22:44:47.400970デフォルトの名無しさん
2013/01/17(木) 22:55:37.000971デフォルトの名無しさん
2013/01/17(木) 23:06:44.61計算機の中は論理だけでよい
0972デフォルトの名無しさん
2013/01/17(木) 23:08:49.110973デフォルトの名無しさん
2013/01/17(木) 23:09:53.44foo= 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]
メモ化の基準が分からない…
0974デフォルトの名無しさん
2013/01/17(木) 23:10:58.94間違えた
0975デフォルトの名無しさん
2013/01/18(金) 00:10:17.88こう考えると良い(説明を簡単にするために少し端折ってる)。
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回トレースされているのはこういうこと。
0976デフォルトの名無しさん
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: ...という(途中の)評価結果を指していると考えていいのかな…
0977デフォルトの名無しさん
2013/01/18(金) 01:35:49.34これならリストの中も変数 x か y に指されるのでポインタなどいらん
0978デフォルトの名無しさん
2013/01/18(金) 07:38:00.33それこそ「で?」としか言いようがないな
0979デフォルトの名無しさん
2013/01/18(金) 08:44:09.510980デフォルトの名無しさん
2013/01/18(金) 09:01:45.780981デフォルトの名無しさん
2013/01/18(金) 09:52:25.700982デフォルトの名無しさん
2013/01/18(金) 10:09:05.30「居ない」と答えるべき
0983デフォルトの名無しさん
2013/01/18(金) 11:18:10.830984デフォルトの名無しさん
2013/01/18(金) 11:46:52.98確かに自由だなw
0985デフォルトの名無しさん
2013/01/18(金) 11:47:58.510986デフォルトの名無しさん
2013/01/18(金) 11:53:31.20それは、居ないし要らないって意味だと推論できない奴は無能だな
Javaみたいな面倒な言語を平気で愛用してそう
0987デフォルトの名無しさん
2013/01/18(金) 11:53:35.220988デフォルトの名無しさん
2013/01/18(金) 12:16:24.390989デフォルトの名無しさん
2013/01/18(金) 13:31:16.94それとももう原理上の限界に来てるの?
0990デフォルトの名無しさん
2013/01/18(金) 13:45:34.69GRIN っていうバックエンドがすげぇ、って話は聞いたことがあるけど、
試したことはない(他のいくつかのコンパイラで使ってるらしい)。
0991デフォルトの名無しさん
2013/01/18(金) 16:11:07.59がスラスラ進むのは
tail fibs の次が、左の fibs の、評価した最後尾の値を読むだけで済むから?
0992デフォルトの名無しさん
2013/01/18(金) 16:49:32.32どこが妄言?
0993デフォルトの名無しさん
2013/01/18(金) 16:59:43.950994デフォルトの名無しさん
2013/01/18(金) 17:43:37.72根拠が分からんならそう言えばよいだけ
0995デフォルトの名無しさん
2013/01/18(金) 17:51:40.56じゃあ君の定義では何が妄言なの?
0996デフォルトの名無しさん
2013/01/18(金) 17:52:42.250997デフォルトの名無しさん
2013/01/18(金) 18:01:53.810998デフォルトの名無しさん
2013/01/18(金) 18:07:20.83妄言だと言われたくないなら根拠を示せばいいだけ
0999デフォルトの名無しさん
2013/01/18(金) 18:19:51.681000デフォルトの名無しさん
2013/01/18(金) 18:21:19.5910011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。