トップページtech
1001コメント283KB

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2012/10/17(水) 08:08:28.97
haskell.org
ttp://www.haskell.org/

日本語サイト
ttp://www.sampou.org/cgi-bin/haskell.cgi
ttp://www.shido.info/hs/

過去ログ
関数型プログラミング言語Haskell
Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html
Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/
Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/
Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/
Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/
Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/
Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/
Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/
Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/
Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/
Part17 ttp://toro.2ch.net/test/read.cgi/tech/1325510368/
Part18 ttp://toro.2ch.net/test/read.cgi/tech/1331902463/
Part19 ttp://toro.2ch.net/test/read.cgi/tech/1340760070/
0951デフォルトの名無しさん2013/01/17(木) 18:09:56.87
1000倍だとか30分だとか、小学生の喧嘩レベルだな
0952デフォルトの名無しさん2013/01/17(木) 19:04:24.65
Haskell の話しろ
0953デフォルトの名無しさん2013/01/17(木) 19:20:57.44
最近は質問とみせかけて
スレ違いの話題を延々と引っ張る
自演荒らしが流行ってるのか
0954デフォルトの名無しさん2013/01/17(木) 20:06:23.17
>>950
総生産量が1000倍違う
10年前は100倍だった
0955デフォルトの名無しさん2013/01/17(木) 20:12:50.36
>>952
Haskellの使い道が自動コーディング
というか、日本の会社の実務でのHaskellの使い道なんてそれしかない

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

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

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

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

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

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

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

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

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

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

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

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

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

>>973 で hoge が1回しかトレースされず、
foo が2回トレースされているのはこういうこと。
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 f -> f x y) でリスト構造が作れる
これならリストの中も変数 x か y に指されるのでポインタなどいらん
0978デフォルトの名無しさん2013/01/18(金) 07:38:00.33
単なるコード生成の事を自動コーディングって呼んでるだけかよ
それこそ「で?」としか言いようがないな
0979デフォルトの名無しさん2013/01/18(金) 08:44:09.51
なにをどう考えたら>>932みたいな妄言吐くようになるんだろうね
0980デフォルトの名無しさん2013/01/18(金) 09:01:45.78
継ぎスレ居る?
0981デフォルトの名無しさん2013/01/18(金) 09:52:25.70
要らないでしょ
0982デフォルトの名無しさん2013/01/18(金) 10:09:05.30
居るか居ないかを聞いている訳だから
「居ない」と答えるべき
0983デフォルトの名無しさん2013/01/18(金) 11:18:10.83
日本語が不自由なようで
0984デフォルトの名無しさん2013/01/18(金) 11:46:52.98
居る? という質問に対して、要らないと返すのが自由な日本語だそうだ。

確かに自由だなw
0985デフォルトの名無しさん2013/01/18(金) 11:47:58.51
replibでgeneric zipper書いてくれ
0986デフォルトの名無しさん2013/01/18(金) 11:53:31.20
「居る?」に対して「要らない」と返って来たら、
それは、居ないし要らないって意味だと推論できない奴は無能だな
Javaみたいな面倒な言語を平気で愛用してそう
0987デフォルトの名無しさん2013/01/18(金) 11:53:35.22
ああ、想像力が無いのね
0988デフォルトの名無しさん2013/01/18(金) 12:16:24.39
いいぞもっとやれ
0989デフォルトの名無しさん2013/01/18(金) 13:31:16.94
Haskellはもっと速くなるの?
それとももう原理上の限界に来てるの?
0990デフォルトの名無しさん2013/01/18(金) 13:45:34.69
GHC は、現行のハードウェアでの実装としてはかなりチューニングされてる。
GRIN っていうバックエンドがすげぇ、って話は聞いたことがあるけど、
試したことはない(他のいくつかのコンパイラで使ってるらしい)。
0991デフォルトの名無しさん2013/01/18(金) 16:11:07.59
fibs = 0:1:(zipWith (+) fibs $ tail fibs)
がスラスラ進むのは
tail fibs の次が、左の fibs の、評価した最後尾の値を読むだけで済むから?
0992デフォルトの名無しさん2013/01/18(金) 16:49:32.32
>>979
どこが妄言?
0993デフォルトの名無しさん2013/01/18(金) 16:59:43.95
ソースを明示しない所
0994デフォルトの名無しさん2013/01/18(金) 17:43:37.72
それは妄言とは言わん。
根拠が分からんならそう言えばよいだけ
0995デフォルトの名無しさん2013/01/18(金) 17:51:40.56
>>994
じゃあ君の定義では何が妄言なの?
0996デフォルトの名無しさん2013/01/18(金) 17:52:42.25
根拠が分からない
0997デフォルトの名無しさん2013/01/18(金) 18:01:53.81
単語の定義に踏み込んでおきながら辞書を引かない994が悪い
0998デフォルトの名無しさん2013/01/18(金) 18:07:20.83
>>994
妄言だと言われたくないなら根拠を示せばいいだけ
0999デフォルトの名無しさん2013/01/18(金) 18:19:51.68
示せないからぐだぐだ言ってるんだろうね
1000デフォルトの名無しさん2013/01/18(金) 18:21:19.59
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。