[FAQ]Haskellには副作用があるのか、ないのか

副作用ということばのゆれ、手続き型脳と関数型脳という造語によるしなくてもいいクラスタの分類が、この対話でみえてきます。
20
前へ 1 2 ・・ 10 次へ
Nobuo Yamashita @nobsun

.@masahiro_sakai 小前提の付帯条件は例えば「C言語で書けば」ということで、まさにそういうこと http://twitter.com/masahiro_sakai/status/15430153545

2010-06-05 05:42:44
Ikegami Daisuke @ikegami__

用語が不正確でも、「わかりやすければいい」と主張するひととは、用語の正確さを議論してもむなしいですよねえ

2010-06-05 05:43:58
Nobuo Yamashita @nobsun

そうではなくて、用語を正確に使って説明しているはずなのにわかりにくい、というのが問題なんです。正確な言葉を使っても、不正確な用語を使った説明の方がわかりやすい、と思わせてしまうようなわかりにくい説明をしているのが問題なんです。

2010-06-05 06:03:27
結城浩 / Hiroshi Yuki @hyuki

@nobsun @ikegami__ 用語の正確さとわかりやすさは、関係はあるけれど、一致しているわけではなさそう。一致しているほうが望ましいでしょうけれど。

2010-06-05 06:33:23
専門性・売上・原稿 @golden_lucky

たぶん、Haskellに副作用がある、と主張したい理由は、Haskellって副作用ないとかいってるけど入出力のための裏技でモナドってのがあるんだぜ、という誤解をとくためだと思う。

2010-06-05 06:44:56
専門性・売上・原稿 @golden_lucky

Haskellには副作用がある、という説明は、そういう誤解をする人に対して、あなたが考えているような意味なら副作用はある、といってるんですよね、きっと。

2010-06-05 06:47:56
専門性・売上・原稿 @golden_lucky

その真意は陽に示したほうがいいと思う。

2010-06-05 06:50:24
専門性・売上・原稿 @golden_lucky

まあ、だから、モナドを知りたかったら副作用とか入出力とか眠いこといってないで抽象化のための便利な道具のひとつとして素直に見てごらん、というふうに導入したいだけのとことなのではないかと。

2010-06-05 06:53:51
専門性・売上・原稿 @golden_lucky

という立場なので「副作用」という用語は正確な定義に基づくものではなく一般にHaskellを使わない人が「Haskellは…」という文脈で語るときに出てきがちな意味で使ってるよ、ということは陽に示したほうがいいと思う。

2010-06-05 06:56:58
Nobuo Yamashita @nobsun

.@hyuki 自分にとって新しいことについて「あっ。わかった」と思うのは、そこからいろいろなことが首尾一貫して説明できると直感する瞬間なんだろうと思います。首尾一貫を確保するのは正確な用語使いが必要条件だと思います。十分条件ではないので、足りない分をなんとかしたいと思っています

2010-06-05 07:08:37
Nobuo Yamashita @nobsun

.@golden_lucky はい。その点は同意します。

2010-06-05 07:10:58
山本和彦 @kazu_yamamoto

C だって、表現している時点で終わって、動かさないなら、副作用はないですね。と昔言って、何か返事をもらった気もしますが、納得できなかったような気もします。 @nobsun プログラム(算譜)は何かを表現していますよね

2010-06-05 12:59:33
山本和彦 @kazu_yamamoto

.@masahiro_sakai 僕が参照透明という言葉を使わなければいいんでしょうか?

2010-06-05 13:05:07
山本和彦 @kazu_yamamoto

.@masahiro_sakai Haskell のすべてが参照透明であるのであれば、IORef/STRef をどう説明しますか?

2010-06-05 13:06:32
山本和彦 @kazu_yamamoto

タイプ A の実行順序は処理系が決めます。どの順番で実行しても結果は同じだからです。(実行順によってはエラーを引き起こす場合は除く。) Haskell では、遅延評価という評価戦略で実行順序を決めます。

2010-06-05 13:13:27
山本和彦 @kazu_yamamoto

ここまでは、いいですか?

2010-06-05 13:13:52
山本和彦 @kazu_yamamoto

命令型言語プログラマーは、タイプBの関数を副作用があると表現することがあります。副作用をこの意味で使うなら、Haskell にも副作用があります。

2010-06-05 13:16:27
山本和彦 @kazu_yamamoto

この続きで、「関数型言語プログラマーは、... を参照透明があると言います。...」みたいな説明を誰か考えて下さい。

2010-06-05 13:17:11
Nobuo Yamashita @nobsun

このような関数はHaskellには存在しません。putStr は値を返す以外の仕事はしません。@kazu_yamamoto http://twitter.com/kazu_yamamoto/status/15464860314

2010-06-05 14:27:39
tana@人間らしく生きたい @tana_ash

HaskellのputStrみたいな関数って、「文字列を表示する命令」という値を返してるんだっけ

2010-06-05 14:29:59
arton @arton

@nobsun いや、IO () を値を返すというのはさすがにvoidでもaxレジスタには値が入っているというくらいの無茶ぶりでしょう。定義ではなく作用に注目するのがアクションというやつではないかな。

2010-06-05 14:45:21
Nobuo Yamashita @nobsun

@arton いえ全然無茶ぶりじゃないんですよ。IO ()は値です。

2010-06-05 14:50:12
Nobuo Yamashita @nobsun

@arton putStr は 文字列に作用して IO () という値を返すというのはなんの無茶もないですよね。

2010-06-05 14:52:01
山本和彦 @kazu_yamamoto

.@nobsun putStr は IO () という値を返す以外に何もしないんですか? すると、プリントされる文字は誰がやった仕事ですか?

2010-06-05 14:52:19
前へ 1 2 ・・ 10 次へ