>>920 切り分ければそうだというだけで、別にクラスを使った関数(メソッド)を
内包させるタイプの抽象データ型と、内包しない狭義の抽象データ型の共存が
できないということを意味するものではないよ。
PythonとかScalaとかC#とか普通に(後者は特に巧妙に)やっているでしょう。
>>922 坊や。危ないからこんなところに来ちゃだめだよ。ほらほらOOP村にお戻りなさい。
>>921 だとしても「継承、多態、カプセル化」と並べられた場合
カプセル化が意味するところは封じ込めのほうで良いのでは?
>>921 haskellでのカプセル化はモジュール化して公開するシンボルを制限することだと思うが
>簡単にはユーザー定義型
カプセル化とオブジェクト化を混同してないか
ADTは、カプセル化の型システムからの射影。
OOPの文脈で
データの抽象化:データと振る舞いを一つにまとめること(クラスベースやプロトタイプベースで実現)
カプセル化:整合性を保つため内部への直接の操作を制限すること(アクセス指定子やクロージャで実現)
抽象化:派生クラスが何個あるのか気にしない
カプセル化:メンバ変数が何個あるのか気にしない
「obj.fooとobj.barは絶対にアクセスするなよ」と言われると逆に気になってしまう
OOPのカプセル化も公開するシンボルの制限にすぎんだろ
副作用を制限するって言ってるけど、OOPでカプセル化すれば
同じメソッド呼び出しが常に同じ結果を返すようになるんか?
ならないなら副作用の何を制限してるんだ?
>>901をSmalltalkに逆翻訳してみた。もちろん厳密にはいろいろと違うけどまあ勘弁して。
>>782や
>>799と見比べて、関数型でMultiSet(Bag)が使えてもぜんぜん嬉しくないのはよく分かった。
| M N cards bag replicate randoms |
M := 1000.
N := 10.
cards := 1 to: N.
replicate := [:n :x | Array new: n withAll: x].
randoms := [:g | (g next: N*10) * 2147483647 truncated].
bag := (replicate value: M value: Random new) inject: Bag new into: [:b :g |
b add: (((randoms value: g) inject: {Bag new} into: [:xs :n |
xs, {xs last copy add: n \\ N + 1; yourself}])
detect: [:xs | xs includesAllOf: cards]) size; yourself].
^{bag min. bag max. bag sortedCounts first} "=> {12 . 85 . 56->23} "
>>932 HaskellのMultiSetはimmutableだから、SmalltalkのBagとはその点で違うよ
immutableなコレクションに値を次々突っ込んでいく場合、
foldl等使って次々に新しいコレクションを生成する必要があるけど、
mutableなデータ構造で同じことやっても無意味に遅いだけだし
だからSmalltalkで真似したときに意味を見出せないのは当然だと思う
immutableなデータ構造や副作用の隔離による
ミス防止の恩恵は、うっかりなプログラマには嬉しいものだが
全く必要としないプログラマも居るんだよな
SmalltalkerにはHaskellのメリットなんて拘束具にしか見えんのかもしれんね
>>931 副作用をもたらす経路を制限出来る、というのは副作用を許す言語にとってかなり大きいことだよ
>>934 つまり、マルチセットをイミュータブルにして、その状態は
リストや再帰コンテキストに封じ込めて破壊的操作の代替にするのは
ミス防止のためっていう理解であってます?
具体的にはどんなミスが想定されて、イミュータブルにすることで
どうしてそれが防げるのか教えてもらえますか?
>>936 同じ値が複数箇所から参照されてるケースを考えれば分かるよ。
そういや
>>932ってどのくらいの実行速度だったの?
次世代高速CogVM(笑)だから速いんだよね?
暫定ダイナブック環境ww
老害しか使わないOSもどきの玩具www
レッテル貼りしかできない馬鹿wwwwwwww
オブジェクト指向言語って今でもあるのか。
>>941 お前が何の言語を知っているのか
すごく不安になるwwww
自分で作った訳でもない言語をドネーションも無しで手に入れて、他の言語ファンを叩くのに使うのが楽しい人って何時の世でも居るんだな。
訂正:本当に使ってるかは判らんか。
ドネーションの意味がわからない。
どないしよん。
>>943 笑うところだよ。
HaskellやSmalltalk使ってる人達は
JavaやC#使ってる人達をドカタ呼ばわりして
見下してるから好感が持てる
947 :
944:2012/05/27(日) 18:26:08.71
・・・
948 :
941:2012/05/27(日) 19:55:08.90
>>942 Smalltalkっていう言語があったのは知ってるけど。あの言語の
ような徹してオブジェクト指向という言語はあるのかい?
値打ちのわからない者には何の役にもたたないということ。
>>948 > ような徹してオブジェクト指向という言語はあるのかい?
中置演算子っぽく見せかけて実は他のメッセージと同じ扱いなので
2 + 3 * 4 => 20 になるような言語ってこと?
Rubyをdisろうとして失敗してる?
お題:
整数型を引数に取る、次の性質を満たす関数fを定義せよ。
f(f(x)) = -x
OOPLで解く場合は x.f.f = -x でも良い。
def f(x):
return complex(0, x)
>>953 二回目の関数適用でfの引数が複素数になるぞ。
場合わけはOK?
f(x) = -x (x >= 0)
f(x) = +x (x <= 0)
operator=だかoperator==だかを置き換えればいいのだな!
>>955 ごめん。これ x < 0 のときf(f(x)) = x だった。
降参だ。
>>958 御題の条件が自然数なら問題ないけど、整数だからね
f(f(x)) = -x
なので
f(f( f(f(x)) )) = x
引数が整数型なので戻り値も整数型
オブジェクトもタプルも複素数も使えない
分かんね
こんな感じかな。
f 0 = 0
f k | k > 0 = if odd k then k+1 else 1-k
f k = - f (-k)
>>952 たぶんこういうのを求めてはいないのだろうけど、Squeak Smalltalk で。
Integer >> f
| selectors |
selectors := #(negated yourself).
thisContext method literals first swap: 1 with: 2.
^self perform: selectors first
1 f f "=> -1 "
2 f f "=> -2 "
3 f f "=> -3 "
あ、いかん。負数の実行例を忘れた。
-1 f f "=> 1 "
-2 f f "=> 2 "
-3 f f "=> 3 "
>961が正攻法なんだろうけど、>962も面白いな。
>>961と基本的に一緒だけど
f x = (-1) ^ abs x * x - signum x
> map (f . f) [-5..5]
[5,4,3,2,1,0,-1,-2,-3,-4,-5]
このスレもそろそろ終わりか
関数型言語を覚えられない頭の可哀想なPGだけが
オブジェクト指向言語を使う、でFA
お前ん中ではなwwwww
関数型の駄目なところやその使い手のコミュ障っぷりはよく分かったけど
メリットはいまいち見えてこなかったなぁ…
自分の脳に障害があると疑ったほうがいいぞwwwww
でも手続き型のほうが副作用を簡単に書けて便利じゃないですか。
手続き型言語は確かに沢山あるけど、オブジェクト指向言語なんて
呼べるものはほとんどないのではないかな。