関数型プログラミング言語Haskell Part12
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/04/29(木) 19:15:28ttp://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/
・2chの仕様により、行頭の半角スペースは表示されません。
コードをインデントしたいときは、代わりに または全角スペースを使うことができます。
0446デフォルトの名無しさん
2010/06/10(木) 16:41:43それは頭悪そう
0447デフォルトの名無しさん
2010/06/10(木) 16:46:220448デフォルトの名無しさん
2010/06/10(木) 16:51:540449デフォルトの名無しさん
2010/06/10(木) 17:08:50近代物理学の自然単位系では、時間と距離とを区別しない
約30万km = 1秒
1光年 = 1年
0450デフォルトの名無しさん
2010/06/10(木) 22:35:560451デフォルトの名無しさん
2010/06/10(木) 23:33:560452デフォルトの名無しさん
2010/06/10(木) 23:54:190453デフォルトの名無しさん
2010/06/11(金) 00:32:38Cの利点:
* ポインタを使って、関数を関数の引数にできる
* 関数ポインタに自由に四則演算をすることができる
* 型キャストが容易。関数型をlong型にすることもできる
Haskellの欠点:
* ポインタがないので、関数を特別なファーストクラスオブジェクトにしなくてはならない
* 関数に自由に四則演算をすることはできない
* 型キャストはない
0454デフォルトの名無しさん
2010/06/11(金) 00:36:120455デフォルトの名無しさん
2010/06/11(金) 00:44:27おい、初心者の就職活動みたいな事すんなよ
0456デフォルトの名無しさん
2010/06/11(金) 12:43:340457デフォルトの名無しさん
2010/06/11(金) 12:46:560458デフォルトの名無しさん
2010/06/11(金) 12:52:370459デフォルトの名無しさん
2010/06/11(金) 13:04:370460デフォルトの名無しさん
2010/06/11(金) 14:25:17積 f *** f
差と商はどう定義しよう
0461デフォルトの名無しさん
2010/06/11(金) 15:23:21和 f+++g = \x-> Nothing `mplus` f x `mplus` g x
0462デフォルトの名無しさん
2010/06/11(金) 15:55:160463デフォルトの名無しさん
2010/06/11(金) 16:00:51というか、MonadPlusが「和」を定義するクラスなんだが
0464デフォルトの名無しさん
2010/06/11(金) 16:07:56fが成功かつgが失敗のときf-gが成功
0465デフォルトの名無しさん
2010/06/11(金) 18:49:390466デフォルトの名無しさん
2010/06/11(金) 18:56:15色々と制約を追加してModuleを構成できるArrowってのを考えるのが楽か
Arrowそのものが抽象だから具体例を考えなくてもいいし
0467デフォルトの名無しさん
2010/06/11(金) 19:14:51* :: (S1 -> T1) -> (S2 -> T2) -> (S1,S2) -> (T1,T2)
(f * g) (x1,x2) = (f x1, g x2)
+ :: (S1 -> T) -> (S2 -> T) -> (S -> T)
where data S = Inl S1 | Inr S2
(f + g) x = case x of { Inl y -> f y; Inr y -> g y }
和がHaskellの構文でうまく書けないけど
0468デフォルトの名無しさん
2010/06/11(金) 19:20:010469デフォルトの名無しさん
2010/06/11(金) 19:30:340470デフォルトの名無しさん
2010/06/11(金) 19:50:14それは命題論理に対応するっていう話で、代数系じゃないでしょ
0471デフォルトの名無しさん
2010/06/11(金) 20:14:040472デフォルトの名無しさん
2010/06/11(金) 20:19:25Haskellはそもそも論理型じゃないし
0473デフォルトの名無しさん
2010/06/11(金) 20:33:31CCC+直和が代数系でない?
0474デフォルトの名無しさん
2010/06/11(金) 20:33:38でtype of typeができないから二階じゃない
0475デフォルトの名無しさん
2010/06/11(金) 20:50:44RankNTypes拡張を有効にしたら
高階論理なんじゃないの?
0476デフォルトの名無しさん
2010/06/11(金) 21:43:140477デフォルトの名無しさん
2010/06/11(金) 22:14:430478デフォルトの名無しさん
2010/06/11(金) 22:21:307年前の本なんですよね?
絶版したんでしょうか?
0479デフォルトの名無しさん
2010/06/12(土) 00:15:57近日発売中?
0480デフォルトの名無しさん
2010/06/12(土) 00:45:08お前の中では論理っていうと二値論理のことなのか?
0481デフォルトの名無しさん
2010/06/12(土) 01:14:02この本ずっと待ってんだけど6月下旬らしいね
0482デフォルトの名無しさん
2010/06/12(土) 10:09:42大学を思想的に侵略して関数型言語以外はクズという主義を学生に叩き込もうぜ
0483デフォルトの名無しさん
2010/06/12(土) 10:27:190484デフォルトの名無しさん
2010/06/12(土) 12:21:480485デフォルトの名無しさん
2010/06/12(土) 12:24:410486デフォルトの名無しさん
2010/06/12(土) 12:32:160487デフォルトの名無しさん
2010/06/12(土) 13:42:090488デフォルトの名無しさん
2010/06/12(土) 14:03:070489デフォルトの名無しさん
2010/06/12(土) 16:11:17枠にはめて考えること自体合わないんだと思うよ。
今じゃマルチパラダイムになってるからね。
型にハメる系統と対照的だといえるよ。
0490デフォルトの名無しさん
2010/06/12(土) 16:26:08関数型言語はラムダ計算の応用だからLISPは関数型言語
0491デフォルトの名無しさん
2010/06/12(土) 16:34:34嘘ですね
> 関数型言語はラムダ計算の応用だからLISPは関数型言語
前件が意味不明です
0492デフォルトの名無しさん
2010/06/12(土) 17:58:43LISPマシン専用言語だ
0493デフォルトの名無しさん
2010/06/12(土) 18:33:42あなたがウソですね
0494デフォルトの名無しさん
2010/06/12(土) 20:19:19自転車や自動車、それに八つ橋などの例をみても、元祖が子孫と違うのは珍しくない。
関数型言語でも同様のパターンがあると考えるのはごく自然な発想だ。
0495デフォルトの名無しさん
2010/06/12(土) 20:23:06>型にハメる系統と対照的だといえるよ。
Haskellのことを言っているのであれば、これは少々不適切な表現だ。
Haskellはデータを既存の型にはめるだけではない。
プログラマが型を積極的に定義することを許しているのだから、型を使う言語と言ってほしい。
0496デフォルトの名無しさん
2010/06/12(土) 20:25:290497デフォルトの名無しさん
2010/06/12(土) 20:27:34初心者にありがちな失敗コースです。
0498デフォルトの名無しさん
2010/06/12(土) 20:32:39http://obiekt.hp.infoseek.co.jp/t72/genesis1.html
0499デフォルトの名無しさん
2010/06/12(土) 20:39:46Lisp はパラダイム非依存のパラダイス言語です
0500デフォルトの名無しさん
2010/06/12(土) 20:42:250501デフォルトの名無しさん
2010/06/12(土) 20:48:41というか、lispのパラダイムにはsyntactic abstraction(構文抽象)という名前があるんだよ
0502デフォルトの名無しさん
2010/06/12(土) 20:55:54具体的なものから抽象的な概念に進歩していくのか
0503デフォルトの名無しさん
2010/06/12(土) 21:06:510504デフォルトの名無しさん
2010/06/12(土) 21:18:080505デフォルトの名無しさん
2010/06/12(土) 21:20:010506デフォルトの名無しさん
2010/06/12(土) 21:24:410507物理っぽく言ってみた
2010/06/12(土) 21:31:18現代関数型言語(より良い理解のために)=
0508J. M.
2010/06/12(土) 21:46:05「ただ、リストの再帰処理が書ける言語が欲しかっただけ」
といい出せない雰囲気…
0509デフォルトの名無しさん
2010/06/12(土) 21:56:270510デフォルトの名無しさん
2010/06/13(日) 02:39:41と書いてあるのをどこかで見た気がします。
これは本当でしょうか?
0511デフォルトの名無しさん
2010/06/13(日) 02:46:340512デフォルトの名無しさん
2010/06/13(日) 06:29:39まあ、Haskellに詳しくない人は、シミュレーションをどうやってモデリングすべきか見当もつかないかもしれないね
0513デフォルトの名無しさん
2010/06/13(日) 07:27:25副作用がないってのがメモリは食うし遅いという印象があるのかも
0514デフォルトの名無しさん
2010/06/13(日) 07:46:20きれいなやり方が見当たらないときは、きたないやり方も許されます
詳しい人はそれを知っているので、数値計算もシミュレーションもこわくない
0515デフォルトの名無しさん
2010/06/13(日) 09:11:150516デフォルトの名無しさん
2010/06/13(日) 10:01:07SoftwareDesignでnobsunが書いた記事でしょ。
Haskellはクソ遅いからシミュレーションみたいなパワーがいる処理には向いてないよw
0517デフォルトの名無しさん
2010/06/13(日) 13:26:570518デフォルトの名無しさん
2010/06/13(日) 13:47:06nobsunが言っているのは、我々が感じているのと同様に
reactiveなプログラミングをするのが非常に煩雑になってしまうというところ。
シミュレーションは物によるけど、決まったタイミングで処理をするもの、
例えばアニメーションとかは書きにくいね。
現在YampaなどFRPライブラリが作られてはおり、
reactiveなプログラミングを支援しようという動きはあるが、
あまりわかりやすくプログラミングできるとはとても言い難い。
そしてさらに誰がいおうと、HaskellはCと比べて明らかに遅い。
0519デフォルトの名無しさん
2010/06/13(日) 14:01:160520デフォルトの名無しさん
2010/06/13(日) 14:08:09を置き換える事が可能だと思う。
だからオブジェクト指向で有利なreactiveなプログラミングも関数型言語で簡単にできるようになると思う。
0521デフォルトの名無しさん
2010/06/13(日) 16:22:15記述量もCと同等以上かつ大抵の人には読めない…
やっぱC++でHaskellっぽく書くというところで妥協するしかないのか
0522デフォルトの名無しさん
2010/06/13(日) 17:46:29勝手にアルゴリズムを推論して書き換えちゃうくらいじゃないとどうにもならないんじゃないの。
0523デフォルトの名無しさん
2010/06/13(日) 18:00:22何言ってるんだ?
0524デフォルトの名無しさん
2010/06/13(日) 18:02:540525デフォルトの名無しさん
2010/06/13(日) 18:07:460526デフォルトの名無しさん
2010/06/13(日) 18:20:49いや、CPUアーキテクチャの違いを吸収してくれるのは大きい。
小さなパフォーマンスコストでポータブルなコードを書けるんだからな。
0527デフォルトの名無しさん
2010/06/13(日) 18:40:100528デフォルトの名無しさん
2010/06/13(日) 19:07:06高級言語がアーキテクチャの違いを吸収してくれると言っているんだから。
0529デフォルトの名無しさん
2010/06/13(日) 19:24:02必要な計算ならhaskellは得意だと思うんだけど。
0530デフォルトの名無しさん
2010/06/13(日) 20:55:39Javaに勝てれば十分。
0531デフォルトの名無しさん
2010/06/13(日) 21:04:33しかし遅延評価だからスペースリークが怖いな
0532デフォルトの名無しさん
2010/06/13(日) 21:45:35たとえばスペースリークが出ないようにソースを調整したのに、
べつのコンパイラでコンパイルしたら出ちゃったとか。
それとも、共通したテクニックで防げるものなの?
0533デフォルトの名無しさん
2010/06/13(日) 22:04:45馬鹿な例だけど例えば必ずリークするコンパイラ作ってそれでコンパイルすればリークするし。
0534デフォルトの名無しさん
2010/06/13(日) 22:06:29程度の差はあるだろうが、基本的な考え方は同じでいけるはず。
Haskell でのスペースリークってのは要は遅延させた仕事がたまっていっぱいいっぱいってことだから。
それがないように注意深く調整すればいいって話。
0535デフォルトの名無しさん
2010/06/13(日) 22:06:40call by need簡約だけ想定してスペースリークを潰せば実用上問題ない
0536デフォルトの名無しさん
2010/06/13(日) 22:36:10「Haskellで書くより速いプログラムをCで書くなんて非現実的な苦行」と言われるようになるかもしれない。
というか、なってほしい。
0537デフォルトの名無しさん
2010/06/13(日) 22:41:55純粋関数型言語だから自動並列化が簡単になるわけではない
0538デフォルトの名無しさん
2010/06/13(日) 22:48:02単調増加的に刻一刻と変化する「現在時刻」の列を無限リストで表現する方法があるよね。
[t0, t1, t2, t3, .....] みたいな。
ああいう無限リストで表現された現在時刻をつかってアニメーションなんかさせる場合、
リストの既に消費した部分(先頭の方)はちゃんと GC で回収されるものなの?
そのようなリストの要素は一度参照されればもう二度と参照されないことは
プログラムソースの全体をちゃんと見れば分かることだけど、
そういう事をコンパイラに期待しても良いものなのか、ちょっと心配になる。
0539デフォルトの名無しさん
2010/06/13(日) 22:54:120540デフォルトの名無しさん
2010/06/13(日) 23:06:000541デフォルトの名無しさん
2010/06/13(日) 23:10:01けっこう賢いんだな
0542デフォルトの名無しさん
2010/06/13(日) 23:17:070543デフォルトの名無しさん
2010/06/14(月) 00:11:450544デフォルトの名無しさん
2010/06/14(月) 00:13:58どのコンパイラでも、中間コードを生成するオプションを使ってコードを追えば、明らかにヤバい部分は回避できる
0545デフォルトの名無しさん
2010/06/14(月) 00:26:55なんで?
この ts' ってのはたぶん最後に取得した時刻の事だよね。
head ts は捨てられないけど、それ以降から ts' までは要らないから、
GC で回収されるんじゃないの?
つまり ts = [t0, t1, t2, t3, ... tn-1, tn] で処理が完了したなら、
tn - head ts としても t1 や t2 などは明らかに要らないよね(参照されないから)。
それでも回収できないの?
■ このスレッドは過去ログ倉庫に格納されています