関数型プログラミング言語Haskell Part21
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2013/01/21(月) 02:16:16.07ttp://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/
Part20 ttp://toro.2ch.net/test/read.cgi/tech/1350428908/
0554デフォルトの名無しさん
2013/03/05(火) 01:45:00.19できない
0555デフォルトの名無しさん
2013/03/05(火) 01:58:32.92>>524
0556デフォルトの名無しさん
2013/03/05(火) 03:46:01.480557デフォルトの名無しさん
2013/03/05(火) 06:44:09.97unsafePerformIOを使えばできる
が、これは通常使用されるべきものではない
0558デフォルトの名無しさん
2013/03/05(火) 18:46:22.28すべてを数学的な関数で表現しているという意味で。
だけど、Haskellには副作用がない・・とする主張は詭弁だと思う。
Haskellに副作用がないといえるなら、C言語もある意味で副作用ないといえると思う。
実際に動作する前までは・・。
DanoMoiの説明を見たときは、ケムにまかれたという感想でもなくて、単に「は?」だった。
0559デフォルトの名無しさん
2013/03/05(火) 18:58:39.16副作用の定義を慎重に狭く決めた上、C言語とHaskellの間の、
解釈から実行に至るまでの処理の違いを大げさに主張しただけ。
Haskellの処理と実行の間に、仮想の?プロセスを挟み込んで
そのプロセスをHaskellではないとみなすことで、
副作用とやらについて、やっとC言語と差別化できる。
まあ、偉そうなハスケラーには反感を持っていたので
最初から同意するつもりなかったけどね。
0560デフォルトの名無しさん
2013/03/05(火) 18:58:42.240561デフォルトの名無しさん
2013/03/05(火) 19:02:10.79モナド何読んでもわからないという話から始まっているんだこのスレッド。
0562デフォルトの名無しさん
2013/03/05(火) 19:15:45.300563デフォルトの名無しさん
2013/03/05(火) 19:16:01.070564デフォルトの名無しさん
2013/03/05(火) 19:16:29.69Cは問題ないが、クラスとコンストラクタがある言語が問題だ
static変数を初期化する段階ですでに副作用がある
そういう実行前の副作用をなくしたことは評価されるべき
0565デフォルトの名無しさん
2013/03/05(火) 19:20:16.33何を見ても偉そうに感じる人生なんて想像できない
もっと教えてください!
0566デフォルトの名無しさん
2013/03/05(火) 20:05:34.24もうちょい頭良かったら理解できたのにね
まあその日本語力からして無理か
0567デフォルトの名無しさん
2013/03/05(火) 20:14:52.77関数型プログラミングの流行で浅はかなHaskellerが増えたんだな。
0568デフォルトの名無しさん
2013/03/05(火) 20:23:42.37このおっさんがバカだなって話だけどな
0569デフォルトの名無しさん
2013/03/05(火) 20:24:39.280570デフォルトの名無しさん
2013/03/05(火) 20:27:21.90Cプログラマに失礼だろ、Cでガリガリプログラム組むようなやつは
Cの問題点もきっちり理解してるし
Haskellみたいなやり方があることも理解してる
0571デフォルトの名無しさん
2013/03/05(火) 20:32:01.14おまえか
おかげでここ数日アホみたいな質問で埋まってウンザリしたわ
長文で我慢強く答えてた人は天使だと思った
0572デフォルトの名無しさん
2013/03/05(火) 20:32:03.850573デフォルトの名無しさん
2013/03/05(火) 20:41:59.590574デフォルトの名無しさん
2013/03/05(火) 20:47:58.77さよう
0575デフォルトの名無しさん
2013/03/05(火) 20:52:44.25純粋関数型なのに、どうやって入出力を実現するの? というのが疑問、ってぐらいが普通だと思うけど。
まだそんなにはHaskellは普及してない。
0576デフォルトの名無しさん
2013/03/05(火) 20:54:59.78分離できる(それを静的にチェックできる)だけで副作用はあるよ
0577デフォルトの名無しさん
2013/03/05(火) 21:03:45.37C言語のエキスパートなら、
関数型的なコードと入出力部分のコードを分離してみるなんて普通に試してみたりするもんだ
0578デフォルトの名無しさん
2013/03/05(火) 21:04:35.35それなりに答えたのは、DanoMoiの例くらいだと思うよ。
他の「Haskellには副作用は存在しない」教信者は、「お前は理解してない」と言い張るのみだ。
なお、「Haskellには副作用は存在しない」教信者とHaskell信者は一致しない。
0579デフォルトの名無しさん
2013/03/05(火) 21:09:58.410580デフォルトの名無しさん
2013/03/05(火) 21:11:29.88ということくらいしか知らない多くの他言語プログラマにとっては、
「Haskell = 副作用が無い」という認識なのだと思います。
それくらい、他言語プログラマにとって Haskell はまだまだ謎な言語で、
関わりの無い言語だと言うことなのでしょう。
もし、他言語プログラマにもHaskellに興味を持ってほしいと思っているのなら、
Haskell プログラマがもっと増えるといいなと思っているのなら、
根気よく丁寧に説明していくしか無いと思います。
そんなのはどうでもいい、という事なのでしたら、
せめて説明している人の邪魔だけはしないであげてほしいです。
勘違いの指摘は大歓迎だと思いますが。
0581デフォルトの名無しさん
2013/03/05(火) 21:18:44.93どうでも良いとは思わんけど、ここ数日の質問者クラスのアホだと教える気なくすわ
0582デフォルトの名無しさん
2013/03/05(火) 21:33:54.20ヒントを少し書いてはい論破でいいんだよ
難しく考えすぎ
0583デフォルトの名無しさん
2013/03/05(火) 21:42:17.34GUIアプリとかゲームとかクライアントサーバ的なものとか作って世に出してかないと
関数型の(精神的な)敷居は高すぎる
0584デフォルトの名無しさん
2013/03/05(火) 21:48:09.03と思っていますが・・。
シミュレーションゲーム作ろうとして挫折しているけど、思考部などをHaskellで作りたい。
Haskellに慣れるための練習として、パズル解答ソフト作成中です。
0585デフォルトの名無しさん
2013/03/05(火) 21:49:50.130586デフォルトの名無しさん
2013/03/05(火) 21:53:13.00消去法でゲームが正解
0587デフォルトの名無しさん
2013/03/05(火) 21:55:20.69>Cコンパイラは次の関数ポインタを受け取る関数
>int twice(int (*f)(int), int x) {
> return f(f(x));
>}
>が副作用があるか無いかを、どうやって知れば良いの?
>渡される関数ポインタfがどんなものか分からないのに。
twiceが副作用のない関数であることは、"int twice"から自明だ。
そして*fで指されたfが本当にint->intであることをチェックしたいなら
twice呼び出し側の"int (*f)(int)"パラメータの素姓を辿っていけばよい。
それだけのことだ。
>それとも、関数ポインタが渡されるときは、常に副作用があると考えるの?
そんなことはしない。
0588デフォルトの名無しさん
2013/03/05(火) 21:55:24.81Haskell強力な手続き型言語だと思った
0589デフォルトの名無しさん
2013/03/05(火) 21:58:20.39"int twice"から自明であると思った根拠を述べてください
0590デフォルトの名無しさん
2013/03/05(火) 22:03:57.07int twiceから自明ってどういうこと?
int twice(int (*f)(int), int x){
static int n = 10;
return n = f(n);
}
0591デフォルトの名無しさん
2013/03/05(火) 22:04:55.300592デフォルトの名無しさん
2013/03/05(火) 22:05:29.83Cでそれを型から確認する方法はないな。
GCCなら __attribute__ ((pure)); と書いて、プログラマの責任でコンパイラに対して
保証してやることはできるが。
0593デフォルトの名無しさん
2013/03/05(火) 22:06:40.17> twiceが副作用のない関数であることは、"int twice"から自明だ。
え?
int twice(int (*f)(int), int x) {
static int n = 0;
n += f(f(x));
printf("%d\n", n);
return n;
}
0594デフォルトの名無しさん
2013/03/05(火) 22:13:34.88まだ続けんのかよ
0595デフォルトの名無しさん
2013/03/05(火) 22:15:33.03voidではない関数の中では副作用を自粛する
0596デフォルトの名無しさん
2013/03/05(火) 22:17:21.80int main(int argc, char* argv[]) {
}
副作用を自重してくださいね!
0597デフォルトの名無しさん
2013/03/05(火) 22:23:46.83なんでそんなややこしい例をだすんだよw
int twice(int (*f)(int), int x) {
printf("%d\x", x);
return x;
}
でいいんだろ
0598デフォルトの名無しさん
2013/03/05(火) 22:24:48.69なんか副作用ない気がしてきた
0599デフォルトの名無しさん
2013/03/05(火) 22:26:49.85unsafePerformIOはgotoレベルだからまた別だと思うの
0600デフォルトの名無しさん
2013/03/05(火) 22:30:55.57ようやく分かってきたか
それは副作用ないと判断すればいいんだよ
ほんとに分かってる?
0601デフォルトの名無しさん
2013/03/05(火) 22:32:41.74ライブラリを作り直す必要があるね
Haskellはライブラリのついでに言語も作り直したのだ
0602デフォルトの名無しさん
2013/03/05(火) 22:36:28.740603デフォルトの名無しさん
2013/03/05(火) 22:41:51.970604デフォルトの名無しさん
2013/03/05(火) 22:42:54.23static変数が使われたら自説が破綻するからややこしいということにしてstatic変数を消した
0605デフォルトの名無しさん
2013/03/05(火) 23:08:35.21もうダメだわ
0606デフォルトの名無しさん
2013/03/05(火) 23:14:14.74何々をやってみたがダメだったとだけ言われても、
それがどうしたとしか言いようがない。
Haskellは使えんと言いたいのか?
それとも、何か質問や議論したいことがあるのか?
0607デフォルトの名無しさん
2013/03/05(火) 23:21:40.780608デフォルトの名無しさん
2013/03/05(火) 23:23:10.41そんなもんツイッターにでも書いておけよ
0609デフォルトの名無しさん
2013/03/05(火) 23:25:58.500610デフォルトの名無しさん
2013/03/05(火) 23:28:54.790611デフォルトの名無しさん
2013/03/05(火) 23:34:32.380612デフォルトの名無しさん
2013/03/05(火) 23:36:09.19マウスのクリックとドラッグ以外の操作は全部削除する方向で設計してる
細かい数値やテキストが必要になったら、起動時にファイル読み込み
http://www.dotup.org/uploda/www.dotup.org4010417.png
0613デフォルトの名無しさん
2013/03/05(火) 23:37:11.30RADツール次第
0614デフォルトの名無しさん
2013/03/05(火) 23:40:31.91これ参考になりますか
http://www.cs.unc.edu/~rademach/glui/
0615デフォルトの名無しさん
2013/03/05(火) 23:42:12.72これ使えよ
http://www.haskell.org/haskellwiki/GLFW
0616デフォルトの名無しさん
2013/03/05(火) 23:43:07.77と言っているように聞こえる。
そんな馬鹿なと言いたい。
0617デフォルトの名無しさん
2013/03/05(火) 23:46:30.930618デフォルトの名無しさん
2013/03/05(火) 23:52:32.13Callbackするフレームワーク
イベントキューを含めた話で
0619デフォルトの名無しさん
2013/03/05(火) 23:56:07.890620デフォルトの名無しさん
2013/03/05(火) 23:57:07.79>>609 の時点で暗黙だったその前提が >>610 にちゃんと伝わってたと思ってるのか?
0621デフォルトの名無しさん
2013/03/06(水) 00:12:47.20>>それをクロージャがある言語に訊くか?馬鹿なのか?
この発言が出るくらいだから理解しているはず
0622デフォルトの名無しさん
2013/03/06(水) 00:17:31.670623デフォルトの名無しさん
2013/03/06(水) 01:06:15.270624デフォルトの名無しさん
2013/03/06(水) 02:26:45.230625デフォルトの名無しさん
2013/03/06(水) 06:58:07.99それはお前の思い込みだ。
お前は会社や学校でもそうやって後足しして
仲間を苛つかせてないか?
0626デフォルトの名無しさん
2013/03/06(水) 07:12:25.76>後足しして
後出しして
0627デフォルトの名無しさん
2013/03/06(水) 08:03:03.67言うまでもないと思うが聞かれたから言うよ
"int twice"と書かれているからだよ
ほんとにそうかはtwiceのbody部を見ればよい
xがintでfがint->intなのだし他に何もないからほんとだとわかる
fがほんとにint->intかは...(同じことの繰返し)
0628デフォルトの名無しさん
2013/03/06(水) 08:06:25.70へー、じゃあコンパイラでチェックできますよね?
>>593のコードに警告かエラーを出すコンパイラ教えてください!
0629デフォルトの名無しさん
2013/03/06(水) 08:19:04.13バーカバーカ
0632デフォルトの名無しさん
2013/03/06(水) 09:33:07.68副作用とは何かが全く分かってなさそう
0633デフォルトの名無しさん
2013/03/06(水) 09:34:52.260634デフォルトの名無しさん
2013/03/06(水) 09:37:53.33名言が生まれた瞬間だった
0635デフォルトの名無しさん
2013/03/06(水) 09:44:26.430636デフォルトの名無しさん
2013/03/06(水) 09:56:04.040637デフォルトの名無しさん
2013/03/06(水) 09:57:46.430638デフォルトの名無しさん
2013/03/06(水) 09:59:36.88IOや副作用の話ばっかりになったようなのですが。
0639デフォルトの名無しさん
2013/03/06(水) 10:00:04.970640デフォルトの名無しさん
2013/03/06(水) 10:07:09.97見るのがコンパイラでも?
Haskellは見なくても分かるの?
0641デフォルトの名無しさん
2013/03/06(水) 10:10:56.20天使の君はどこへ行った?
0642デフォルトの名無しさん
2013/03/06(水) 10:22:23.61どのコンパイラの話をしているの?
Haskellは文法上書けないから見るまでもない
0643デフォルトの名無しさん
2013/03/06(水) 10:26:49.28書いたらどうなるの?
0644デフォルトの名無しさん
2013/03/06(水) 10:28:43.09だから書くための文法がないんだってば
書きたくても書けない
「書いたら」なんてあり得ない
0645デフォルトの名無しさん
2013/03/06(水) 10:38:20.10静的型は片方をあり得ないと想定し複雑度を下げようとするんだよな
0646デフォルトの名無しさん
2013/03/06(水) 10:40:02.89書けないのはコンパイラが文法の観点から 見 て いるからでしょ。
640の言うのも、単なる文法チェックでは済まないだろうけど機械が
見 れ ば分かるので、その意味では同じじゃないのと言ってるんじゃないの?
0647デフォルトの名無しさん
2013/03/06(水) 10:40:44.72どんな凄い文法なんだろう
0648デフォルトの名無しさん
2013/03/06(水) 10:46:48.22そりゃ当然どこかで副作用の無いことを保証しなくちゃいけないし、その保証のプロセスを「見る」というならそうかもしれない
でも、その保証が文法レベルで存在することって重要なことじゃない?
そして、それを「見て」くれるCコンパイラってどれのことを言ってるの?って聞いてるのに答えてくれないんだよ…
0649デフォルトの名無しさん
2013/03/06(水) 10:53:36.870650デフォルトの名無しさん
2013/03/06(水) 10:56:47.890651デフォルトの名無しさん
2013/03/06(水) 11:02:28.68引数や戻り値の型とは違う型のデータを、どこかに隠された変数に入れたり
例外として投げたりできるから
0652デフォルトの名無しさん
2013/03/06(水) 11:12:58.290653デフォルトの名無しさん
2013/03/06(水) 11:13:45.73■ このスレッドは過去ログ倉庫に格納されています