- 1 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/07(土) 21:26:47.61 ]
- 一般的には、オブジェクト指向型言語が優勢でが
一部には関数型言語を崇拝している人もいます どちらが上なのか、この際はっきりさせましょう 前スレ toro.2ch.net/test/read.cgi/tech/1331328955/
- 112 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:13:17.49 ]
- ちなみに関数型でメリットがまったく無いとは思ってない。
状態を引数に追い出すことにより副作用がなくなるというのは 分かりやすくなる場面が必ずある。 ただ今のところD言語のpureキーワード以上のメリットはあまり感じられない。
- 113 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:17:31.33 ]
- >>105
オブジェクトを起点としたプログラミングって何? ていうか、オブジェクトって何? 関数型言語では関数は第一級オブジェクトなんですが、その場合 関数を起点にしたらその時点でオブジェクト指向なんですかね? それとも「第一級オブジェクト」でいうところのオブジェクトとは違う 別のオブジェクトの定義があるんですかね?
- 114 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:17:48.26 ]
- >>111
うーん別にそれでもいいが、 歴史的にはC言語のグローバル連発からC++のオブジェクト分割って流れだし 設計の面でもフローチャートよりオブジェクト指向分析のほうが大枠だし。 粒度で見ればオブジェクト指向>手続き/関数型が自然な解釈だと思うよ。
- 115 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:28:37.22 ]
- >>113
そこの見分け方は「メモリ」です。 >関数を起点にしたらその時点でオブジェクト指向なんですかね? オブジェクト指向として捉えれば正しいとみることもできるけど (関数オブジェクトや関数ポインタをオブジェクトとして解釈する) それは関数型の視点ではない。 関数型特有の視点は一級オブジェクトを「引数」にできるという視点であって ここでの関数を起点というのはそういう意味。 これが納得いかないのならOOPLにも関数型言語にも両方のフレーバーはあるねというだけ。 別にオブジェクト指向のメリットを取り入れている関数型言語を全否定しないし 関数型の考え方を利用しているOOPも否定しない。
- 116 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:32:33.68 ]
- >>113
あーはいはい。俺が変わりに答えるよ。 オブジェクトは日本語で「対象」とか「目的語」とかに訳されるね。 そんで何に対しての「対象/目的」かというと、それは述語、つまり、関数。 だから、 func1( a, b ); の func1 はオブジェクトとして扱われてない。 func2( func1 ); のfunc1 はオブジェクトはオブジェクトとして扱われてる。 つーわけで、引数に取れる=第一級オブジェクトってわけ。 >関数型言語では関数は第一級オブジェクトなんですが 引数に取れる訳だから、第一級オブジェクトで間違いないが、「指向」はしてない。 引数によって関数の呼び出し先がスイッチして始めてOO。 な、OOってつまらねーだろ。
- 117 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:38:32.38 ]
- >>116
それでは f x を x の型で(型クラスで)スイッチしたらOOなんですね ただ型を集合で括っただけでオブジェクトを指向した記憶は無いんですが 確かにつまらないというか、ただの多態ですね
- 118 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:40:07.49 ]
- 今北。前スレの行番号+カンマ化のやつ、SmalltalkのリクエストがあったのでSqueakで。
| fs | fs := { [| n | n := 0. [:str | (n := n +1) asString, ' ', str]] value. [:str | str, ','] }. FileStream fileNamed: 'text.txt' do: [:file | [file atEnd] whileFalse: [ Transcript show: (fs inject: file nextLine into: [:line :f | f value: line])]]
- 119 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:41:46.80 ]
- OO=多態のレッテル貼りで話題ずらし
- 120 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:43:14.06 ]
- >>117
そそ。 関数型言語でも、型システムがあったりして、 引数の型によって呼び出し先がスイッチするんなら、OOってことになるな。 だから、関数型言語のOOってのも普通にあるわな。(知ってるだろうけど)
- 121 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:47:13.80 ]
- >>119
違うのですか? 違うなら説明してもらわないと分かりませんよ
- 122 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:48:34.65 ]
- >>121
すでにループだと思うんだけど>>105
- 123 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:50:51.79 ]
- あ、それと f x y z で x と y と z の型でスイッチするときに
OOPで良くある x.f y z という表記は分かり難くないですか? なんで x だけ f の前に来てるんですか?
- 124 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:54:44.64 ]
- >>122
だからオブジェクトを起点にしてるとだけ言われても分かりませんよ なんとなくの気分の問題なんですか?
- 125 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 00:56:04.83 ]
- >>124
正直それで分からないときついと思うんだけど。 オブジェクト指向分析とかイメージできる?
- 126 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:01:54.50 ]
- オブジェクトを起点にしたか否かなんて
設計者の心の中にしか無いのではないですか? 設計/分析されたものだけを見てオブジェクト指向か否か判定できるのですか?
- 127 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:03:10.45 ]
- いや、>>92を見ると判定はできるようですね
その基準を教えてください
- 128 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:06:40.85 ]
- >>126
それは正しいとも言えるし正しく無いとも言える。 設計者本人がどう設計したかを100%証明することはできないという意味では正しいが OOPLで書かれたコードをみてどう設計したかったを推測することは可能。 正直君のレスは哲学レベルの話でソフトウェア工学の話じゃない。
- 129 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:09:01.03 ]
- >>128
ソフトウェア工学の話じゃないのは>>115の説明ですよ >>116の話は分かりますよ?ソフトウェアの機能について言及してますからね
- 130 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:10:37.96 ]
- >>129
じゃあどこが理解できないか説明してもらえるかな あまりに共通言語なさそうだから説明は無理かもしれないけど。
- 131 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:11:06.70 ]
- >正直君のレスは哲学レベルの話でソフトウェア工学の話じゃない。
お前のことだろw 自分で >>105 読み直してみろよw
- 132 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:11:39.42 ]
- >>131
どこがか指摘してね
- 133 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:18:56.56 ]
- >>130
「起点にする」を正しく定義してください それはソフトウェアの機能として定義できますか? プログラマの心理状態として定義するのですか? それとも哲学的な何かとして定義するのですか?
- 134 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:20:45.64 ]
- >>133
えーと正直あほらしいです。 Wikipediaで気分に近い文章を引用してみます。 >ソフトウェア工学において、ソフトウェア (システム) を相互作用するオブジェクトの集まりとしてモデル化 (オブジェクト指向モデリング) する、オブジェクト指向に基づくソフトウェア開発の方法である。 ja.wikipedia.org/wiki/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E5%88%86%E6%9E%90%E8%A8%AD%E8%A8%88
- 135 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:24:59.21 ]
- >>134
その定義は大分>>105や>>115と違いませんか? それはともかく、それでは関数がオブジェクトの関数型言語では 関数が相互作用してるのでオブジェクト指向ですね
- 136 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:29:44.35 ]
- こう言っては何ですが、議論に負けないために
より一般的な、より抽象度の高い何かとして オブジェクト指向を定義しようとするあまり ナンセンスの域に到達してると思いますよ
- 137 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:32:10.63 ]
- 主語も述語も不明なレス
- 138 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:33:20.29 ]
- >>137
自己言及文ですか?
- 139 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 01:57:40.04 ]
- 結局のところオブジェクト指向で
システム開発は行われるんだよ。 たとえ関数型言語を使ったとしてもね。 だって考えるでしょ? 関数型言語で多態を実装するにはどうしようか?とか。
- 140 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 02:02:55.92 ]
- ルールを厳密に適用すれば何でもOOになってしまうので、
結局OOか否かは本人の胸先三寸で決まる 伊達にオブジェクト"指向"を名乗ってないな 他にないもんな"指向"なんて付いてるの
- 141 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 02:05:04.00 ]
- アスペクト指向さんがアップを始めました
- 142 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 02:17:29.46 ]
- >>139
オブジェクト指向言語で使うのは inclusion polymorphism 関数型言語でよく使うのは parametric polymorphism で、 あと Haskell なら ad-hoc polymorphism も使う(type class) さて、parametric polymorphism や ad-hoc polymorphism を使ったところで オブジェクト指向と言えるのかい?
- 143 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 02:30:41.89 ]
- JavaのGenericsやC++のtemplateやオーバーロードがOOの機能ではないって言うんならそうなんじゃね?
- 144 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 02:49:26.49 ]
- OOPにある機能は皆OOの機能なら
クロージャも関数も変数も条件分岐もループも再帰も 全部OOの機能だね、すげぇ
- 145 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 03:27:47.51 ]
- >OOPにある機能は皆OOの機能なら
そうは言ってないだろ。 GenericsやtemplateやオーバーロードをOOの機能と認めないなら、 parametric polymorphism や ad-hoc polymorphism を使ったところで オブジェクト指向といえないし、 逆に、GenericsやtemplateやオーバーロードをOOの機能と認めるのなら、 parametric polymorphism や ad-hoc polymorphism を使ったら オブジェクト指向といえる。
- 146 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 06:17:57.25 ]
- >>139
考えねぇよ リストとかが多態なだけで、自分はあくまでリスト型を受け取って何かを返す関数作ってるだけ
- 147 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 08:13:50.81 ]
- >>145
JavaやC++よりもMLにparametric polymporhismが入った年のほうが早くね? それなのにオブジェクト指向が起源になっちゃうの?
- 148 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 08:22:12.21 ]
- リストに対する(多相な)map
map f [] = [] map f (x:xs) = f x : map f xs を定義しただけでOOとは、OOの範囲はすごいなぁw
- 149 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 08:40:02.66 ]
- lispのプログラムの特徴を「全てリスト」とするなら、OOは「全てOO」なんだよ
- 150 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 14:11:18.89 ]
- 誰も起源なんて書いてないんじゃね?
- 151 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 17:38:02.23 ]
- parametric polymorphism と ad-hoc polymorphism がOOの機能なら
モナドは両方使って定義されてるからOOの機能だな
- 152 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 18:07:22.23 ]
- >>149
「全てobject oriented」って何だよ意味分からん 「全てオブジェクト」って言いたいのか? だとしても、Javaのようにブロックすらオブジェクトでない言語も OOPを名乗ってるから事実と異なる
- 153 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 18:25:42.02 ]
- parametric polymorphism と ad-hoc polymorphismがOOの機能なら
モナドは両方使って定義されてるから、モナドにはOOが使われている、が正解。
- 154 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 18:28:02.27 ]
- 圏論にはOOが使われている(キリッ
- 155 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 18:31:10.09 ]
- >>154
あちらさんの言葉で言うところで、だよ。
- 156 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 19:09:26.44 ]
- JavaはGenericsが入る前からオブジェクト指向言語を名乗ってた
=> parametric polymorhism は OOPL の必要条件じゃない オーバーロードが無いRubyがオブジェクト指向言語を名乗ってる => ad-hoc polymorhism は OOPL の必要条件じゃない
- 157 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 20:40:19.99 ]
- 手続き"型"言語、関数"型"言語
そして、オブジェクト”指向”言語 名前からして比較するべきものじゃないんだよ。 オブジェクト指向は、指向って書いてあるとおり考え方。 手続き型言語を使ってオブジェクト指向が出来るように 関数型言語を使ってもオブジェクト指向が出来る。 ではオブジェクト指向言語とは何か? 答えは、オブジェクト指向を素直に表現するのに 便利な構文を持っている言語 だから必須条件なんてものは存在しない。 オブジェクト指向を代表する機能が一つでもあれば それはオブジェクト指向言語
- 158 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 20:49:59.98 ]
- まあ極端な話すれば、C言語はオブジェクト指向じゃないけど、C89でもOOP自体はできるわけだし
- 159 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 20:55:14.86 ]
- 今どきOOを手放しで絶賛する椰子は、今までコンピューターサイエンスが発展してきた流れとか知らないんだろうな
Simula,Smalltalkから1985年ころのflavorまでの流れ、その後C++1.0がcfrontとして登場しオブジェクト指向が一旦退化、 C++はその後複雑化の一途を辿っていること。 また、当初アプレットのためにC++を単純化したようなJavaが登場ししばらくはぱっとしなかったこと。 その後2000年ころのITバブルを機会にtomcat,WSDL,UDDIと合わせてWEBサービスで使われるようになり、 Java自体がが中庸のプログラマ向け言語としてソフトウエア開発分野の裾野へ普及していったこと、 素人向けの誤ったのOO本が入門者に誤解を与えいま変なOO感が普及し弊害が目に付くようになったこと、 それとは別の流れとして、haskellのparottなどでの成功を契機に関数型の利点の認識が広まってきたこと… 時代の節目かな。
- 160 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 20:57:58.20 ]
- >>159
OO感→OO観
- 161 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 20:57:59.82 ]
- 基本的な流れとして手続き型も、関数型も
オブジェクト指向を取り入れる方向で進化してるよね。
- 162 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 20:59:11.07 ]
- >>159
parottはなかろう…
- 163 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 21:00:32.51 ]
- オブジェクト指向言語は
関数型言語の利点を取り入れ、 関数型言語はそれだけではアプリを作りにくと 現実的な選択肢としてオブジェクト指向を取り入れる。
- 164 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 21:01:15.18 ]
- >>159
最近楽しいなと思うのは10年くらい前に産声を上げたオデスキーのScalaがここ近年 実用に使われるようになってきたこととか、Clojureというもう一つの選択肢がでてきたこととかetc
- 165 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 21:02:41.73 ]
- >>162
あ、いや成功したのはparottでは(まだ)なく、parottの実装でhaskellが注目されたこと
- 166 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 21:03:54.88 ]
- 絶賛というか、今のOOPは単なる常識でしかない
関数型もまた、珍しい技術から単なる常識になりつつある ただそれだけのことだろ
- 167 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 21:05:12.46 ]
- メソッドをメッセージと捉えるのは、その多くの場合の使われ型から無理を感じる
- 168 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 21:06:16.77 ]
- なれればどうってこと無い
- 169 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 22:21:19.77 ]
- OOも関数型も単なる一機能なんだから、
それをもって〜言語って言い張るのは無理があるんだよ。
- 170 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 22:52:21.84 ]
- >>169
でも、マルチスレッドや分散処理の論文は関数型や論理型の推奨する永続データモデルばかりだよ? シングルスレッドならともかく、マルチスレッド意識したら純粋関数型や論理型じゃないと厳しい時代になってくると思うんだけど
- 171 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 22:53:59.95 ]
- >>170
今は普通にマルチスレッドの機能は オブジェクト指向言語に搭載されてる。
- 172 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 23:20:47.45 ]
- ストラウストラップのOOのキモは「抽象データ型にクラスを使うアイデア」。
ref. www2.research.att.com/~bs/whatis.pdf ケイのOOのキモは「処理系のみならず、その受け皿であるナンチャッテOS、工程まで ひっくるめたあらゆることで徹底した動的性」。 ref. metatoys.org/oxymoron/oxymoron.html 関数型のキモは「非破壊操作とそれがもたらす参照透明性」。 型推論とかメッセージとかパターンマッチとかはオマケです。偉い人には(ry
- 173 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 23:31:04.63 ]
- >>170
分散したいならデータも共有しないのが基本なので 永続データの共有を推奨するのはおかしいと思う
- 174 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 23:41:08.58 ]
- >>170
あんま最近は追いかけてないから知らないけど、 汎用手続き型+トランザクショナルメモリの研究はもう止めちゃったのかね。 デッドロックのみならず、例外処理もしやすくなるから期待していたんだけど。 トランザクションで思い出したけど、SQLは宣言的言語と言われてたはずだったんだけど、 今どきはストアドプロシージャとかも使うらしいね。
- 175 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/09(月) 23:44:18.47 ]
- 結局欲しいのは副作用の管理
- 176 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 06:49:32.37 ]
- >>161>>163
オブジェクト指向の何を取り入れたの? Haskellのどの機能がオブジェクト指向由来なのか教えてくれ
- 177 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 06:55:00.27 ]
- OOで見るべきところがあるのはメッセージング(徹底的な動的性)とtraitsのみ
他はゴミ
- 178 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 07:27:14.51 ]
- OCaml のことを言ってるんじゃないのか?
あとジェネリックプログラミングとかは、中途半端に型があるオブジェクト指向系の 言語でやるより、がっちり型のある関数型言語でやったほうがいいし、ST モナド 使えば、本物の「状態のカプセル化」ができる。 関数型ではオブジェクト指向なんてできない、というのは初心者が陥りがちなデマ。
- 179 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 07:47:00.64 ]
- そういや、関数型でOOPLでいう継承ってどんな形になるの?
- 180 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 08:04:22.67 ]
- >>179
継承っぽいやつ>>93 プロトタイプOOっぽいやつ>>25 OCamlは普通にクラスも継承もあるので省略
- 181 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 08:24:34.70 ]
- >>179
OCamlで高階ファンクター F はモジュール X,Y を引数にして新しいモジュールを返す module type S = sig end module type T = sig end module F (X : S) (Y : T) = struct include X include Y end
- 182 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 09:21:46.15 ]
- やろうと思えばCでもできること
自然に書けるかなんだけどな
- 183 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 12:05:42.06 ]
- 不自然なものを自然にしたいという需要は確かにあるね
科学的に有害か無害かは関係なく、自然か不自然かだけで商売になる
- 184 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 12:30:26.91 ]
- ただし自然かどうかはOO信者のさじ加減ひとつで決まります
- 185 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 13:06:13.85 ]
- セマンティクスとしては x の評価を 2 度する、というのは変わらんじゃないのかな。
その評価が状態に対して idempotent かどうかという違いであって。
- 186 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 13:08:03.10 ]
- (誤爆w)
- 187 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/10(火) 23:37:56.20 ]
- >>183
自分はHaskellのリバース関数が自然だと感じて入門当時は感動したな reverse [] = [] reverse (x:xs) = reverse xs ++ [x] もちろん、組込み関数のreverseは速度重視の直感的ではないコードなんだが・・・
- 188 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/11(水) 01:26:37.69 ]
- >>187
演算子とコンストラクタの違いが直感的に分からない 英単語だったら先頭が大文字かどうかで分かるんだが
- 189 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/11(水) 03:24:43.28 ]
- >>188
コ、コンストラクタ!? Haskellを例に出した私にレスされましても・・・ クラスの生成時に呼び出すメソッドと演算子に直感的な違いも何も無いと思いますが・・・ Cons演算子のことでしたら、リストという構造に対する演算子だと理解しておけば良いと思います [1,2,3] = 1:[2.3] = 1:2:[3] = 1:2:3:[] 関数の引数にリストの全部の要素を書きたければ(要素数固定になりますが)書けますよ sum3 (x:y:z:[]) = x+y+z (x:xs)の部分の理解はghci上で let (x:xs) = [1..5] とかしてxとxsの値を調べると良いです リストを引数に取る時の表記は、Haskellの中では特別な表記法と言う訳ではないです +演算子もこう言う書き方は出来ま・・・廃止になったけど、ちょっと前までは出来たんです dec (n + 1) = n
- 190 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/11(水) 03:47:40.43 ]
- >>189
彼には言っても無駄な稀ガス…
- 191 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/04/11(水) 13:49:19.06 ]
- >クラスの生成時に呼び出すメソッドと演算子に直感的な違いも何も無いと思いますが・・・
右辺で使う演算子を左辺に書いてみれば違いが分かるよ reverse (xs++[x]) = x : reverse xs 実際には xs++[x] というパターンマッチはできない
- 192 名前:デフォルトの名無しさん mailto:sage [2012/04/11(水) 21:29:08.42 ]
- ユーザ定義のデータコンストラクタは頭大文字で始まるから
そんな混乱せんだろ むしろコンストラクタを関数としても使えるのは便利だ まあリストやタプルのコンストラクタは記号だが、それくらい覚えとけ
- 193 名前:デフォルトの名無しさん mailto:sage [2012/04/11(水) 23:24:51.38 ]
- 関数型言語ってようするに、
関数がクラスになる。 言ってみればJavaScriptからprototypeがなくなったようなもの。 prototypeがなくなっても効率が悪くなるだけで オブジェクト指向できるでしょ? それが関数型言語。
- 194 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 00:08:31.03 ]
- オブジェクト指向言語ってようするに、
オブジェクトがクロージャになる。 言ってみれば関数型言語から代数データ型やパターンマッチやカリー化が無くなったようなもの。 代数データ型やパターンマッチやカリー化が無いと効率悪いけど 関数型スタイルでプログラミングできるでしょ? それがオブジェクト指向言語。
- 195 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 00:14:31.10 ]
- > 代数データ型やパターンマッチやカリー化が無いと効率悪いけど
それはないな。
- 196 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 00:22:10.76 ]
- >>194
それはチョット違うだろ。 クロージャーはlexical scope内にある変数をバインドして保持している関数オブジェクトで、あくまで関数オブジェクト。 オブジェクト指向のオブジェクトは、主に構造を持ったデータオブジェクト(単純スカラーでも可)またはクラスscopeにメソッドやインスタンス変数を 従属させモジュラレティーを確保する事に加え、インヘリタンス/mixin/treitなどで共有または階層関係を持たせ、データドリブンなインターフェースを提供する。 似たところもあるけれど、分けて考えるべきかと。
- 197 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 00:29:40.32 ]
- >>196
いや、マジレスされると困るわw つーか、そこ突っ込むなら>>193の方が違いすぎるだろ > 関数がクラスになる
- 198 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 00:39:23.32 ]
- >>197
じゃあ、関数の戻り値がオブジェクト(インスタンス)になる。でいいか? オブジェクトを作り出すもの = クラス 戻り値を作り出すもの = 関数 言ってることは同じだけどなw
- 199 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 00:48:53.41 ]
- >>198
カリー化されてんだから関数の戻り値も関数だろ クラスとインスタンスのような関係はねーよ それともあれか?関数もオブジェクトだから 関数型言語はオブジェクト指向ってやつか?くだらねえ
- 200 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 00:56:44.16 ]
- 気持ち悪いアナロジーで無理矢理OOに対応付けて
理解しようとしなくても ドカタの人生で関数型言語を使う機会なんて来ないから 安心しろよ お前にとって運悪く関数型言語が普及してしまったとしても その頃にはお前の仕事は無くなってるよ
- 201 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 00:57:45.87 ]
- >>197
>>193も突っ込もうと思ってたw JSがらprototype削ったらinfix notationなlispみたいなのになっちゃうから。
- 202 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 01:01:03.49 ]
- ドカタ以下のトイプログラマー
- 203 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 01:05:35.12 ]
- オレ>>169>>201だけれど、
関数をOOのオブジェクトとみなすところにはそれ程違和感無かった。 言語によっては、関数オブジェクトにもメタ情報設定してOOのオブジェクトみたいにmethodを従属させたり、他のmethodをmixinさせることもできるものがあるから。 ただしhaskellではないが。
- 204 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 01:12:21.32 ]
- 関数型が自己満足以上のメリットがあると感じたこと無い
- 205 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 01:15:35.37 ]
- >>203
うそつけ。>>169はオレの書き込みだ。
- 206 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 01:17:46.33 ]
- >>203
あ、でもやっぱ違うか、勘違い。 クラスは静的な物(ともかぎらないclassすらもオブジェクトという概念の言語もあるけれどちょっとおいて置いて) オブジェクトの生成はコンストラクタってのが昨今普及している概念だから。
- 207 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 01:18:40.06 ]
- >>205
こめ、あんか間違えた。えーとどれがオレのレスだったっけw
- 208 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 01:19:35.18 ]
- ぶっちゃけいうと
関数型は今仕事がない。 将来はあると信じてる。 オブジェクト指向は今仕事がある 将来はなくなって欲しいと、関数型厨は思ってる。 >>200とかそうだなw
- 209 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 01:49:53.91 ]
- スパコン向けのプログラム書いてる人とかなら関数型を使う機会があるかもだが、
求められるのはプログラミング技術じゃなくて、対象問題の専門知識だわな。 あとは、大学教授が自分の論文に必要な計算をキャンパスのコンピュータを使って並列計算しました的な。 関数型は並列化が容易だから、実行速度が求められる分野に適していそうだが、 手続き型で並列化したほうがもっと速くなるから、結局なんだかなーな。 クラスタを電卓代わりに使う人用かと。
- 210 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 02:03:13.63 ]
- >>209
本気で並列化に取り組むとその考えかたは変わるよ。 関数型の並列化はタスク?データ?どっちのparallelだと思う。 スパコンは徹底的に性能重視だし。 まいいや2chでマジレスカコワルイオレw
- 211 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 02:20:44.68 ]
- >>210
関数型で出来ることが手続き型で出来ないってことはないんで。 FPGAとかは別としても、主流のノイマン型は手続き型がネイティブなんで。
- 212 名前:デフォルトの名無しさん mailto:sage [2012/04/12(木) 02:45:31.08 ]
- >>211
できるできないまで話を広げればパラダイムなぞ何でもいいんだよ。 性能を徹底的に追及するにはCPUの命令レベル並列化SIMD並列化core間メモリ共有離散並列化ネットワーク分散並列化 徹底的に実効効率(≒GFLOPS)と性能を追求する。 一方の関数型で一部取りざたされる並列化は、並列化のしやすさ=参照透過による並列依存解析の簡便さなどで まだ止まっている段階であり性能の追求に関してはマッタク解になっていないンジャマイカ? だからデータパラレルorタスクパラレルか上で訊いてみた。その答えでどのくらい深く考えている椰子かわかるから。 簡便さは無視できず大切なことかもしれないが、それで数値解析がいままでより早くなっていないのであればつかわれなくてもしょうがない。。 安易に並列化に研究成果を求めて逃げるのは愚。 で、FPGAって何の話だ?と小一時間w もしかしてハード・ソフト両面でずぶの素人さんをオレは相手にしてしまった? 上のクロージャーもしかりだけれど2chでマジレスあまりしたくない。
|

|