[過去ログ] 関数型プログラミング言語Haskell Part16 (978レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
497: [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/11/12(土) 18:12:28.69 AAS
>局所的なモジュール空間を宣言してX.f および Y.f という短い別名での参照が可能。
これについては同様のことができるな。局所的なモジュール空間を宣言するわけじゃなくて
単なる別名の導入だけど
import qualified A.B.C as X
import qualified A.D.E as Y
498(1): デフォルトの名無しさん [sage] 2011/11/12(土) 18:15:51.80 AAS
>>496496(1): [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/11/12(土) 18:08:18.90 AAS
>>495
>修飾の無い名前 f だけじゃ区別がつかないのは、常識以前の当たり前な話だろ
Rubyのインスタンスメソッドについてはそれができるんだよ。ずっとその話をしていたと思ったんだが
>HaskellではAだけをインポートするとか、
>あるいは局所的なモジュール空間を宣言するとかできないの?
できません
>Rubyのインスタンスメソッドについてはそれができるんだよ。
Rubyのインスタンスメソッドもレシーバで修飾しなければ区別できないよ。
たとえば
c = A::B::C.new; e = A::D::E.new
という文脈の下で、レシーバで修飾された
c.f および e.f
という式は正しく評価できるけど、単なる
f
ではRuby処理形は式を評価できない。(当たり前の話だよね?)
499(1): [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/11/12(土) 18:22:34.43 AAS
>>498
もちろん。でもHaskellにはその能力がない
Rubyでuri.schemeと書くときにメソッド名schemeが他と衝突するのを心配する必要はないけど、
Haskellで(scheme uri)と書くならそうはいかない
これを指して>>486486(2): デフォルトの名無しさん [sage] 2011/11/12(土) 17:11:25.72 AAS
>>484
できるけど、名前が衝突しない場合に限る。これはSMLも同じだよな?
Haskellで短かい名前を多用すると、けっこう頻繁に衝突して、けっきょく修飾インポートするはめになる
Rubyだとメソッド名はグローバルじゃないので衝突を気にする必要すらない
で「けっこう頻繁に衝突」と言った
>>487487(3): デフォルトの名無しさん [sage] 2011/11/12(土) 17:16:42.29 AAS
>>486
>これはSMLも同じだよな?
いや、ゼンゼン(理由は下記を参照)
>Haskellで短かい名前を多用すると、けっこう頻繁に衝突して、
ナゼこんなことが起きるの?
SMLなら名前空間は(Rubyと同じように)階層化されているから、
適切にモジュール設計していれば、衝突なんて全く気にならないんだけど....
もしかしてHaskellの(モジュールに関する)名前空間というのは
フラット(平坦)なの?
で否定されたのでSMLにもRubyみたいなレシーバ依存の名前lookupがあるのかと思ったけど、
そういう訳でもないってことで良いかな
500: デフォルトの名無しさん [sage] 2011/11/12(土) 18:23:49.38 AAS
なんか一人すごい天然がいるなw
501: デフォルトの名無しさん [sage] 2011/11/12(土) 18:36:14.30 AAS
お願い
感情に走らずに、もっと落ち着いて議論して
502(1): デフォルトの名無しさん [sage] 2011/11/12(土) 18:39:16.82 AAS
>>499
>そういう訳でもないってことで良いかな
SMLはオブジェクト指向では無いし静的型付け言語だから、
Rubyのようなレシーバ(インスタンス)依存の名前参照は存在しない
ただし、SMLでは uri.scheme と書く時に、uri以外の他のモジュールで
schemeというアクセサ名が使われているかどうかを心配する必要はない
つまりHaskellのような urlScheme という冗長な命名は不要
こういう事で理解してもらえるかな?
503: [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/11/12(土) 18:51:56.84 AAS
>>502
>つまりHaskellのような urlScheme という冗長な命名は不要
Haskellでもこれは原理的には不要なんだよ
衝突が発生したら修飾した名前に切り替えればいいだけ
uriSchemeのような命名がされるのは修飾を面倒だと思っているから
これに関してHaskellでできないことをSMLができる訳じゃないと理解した
もちろん名前空間が階層化されてるのは良いことだけど、この話題には関係ない
504: [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/11/12(土) 18:54:26.76 AAS
あと、Haskellだってオブジェクト指向じゃないし静的型付けだけど、
レシーバ(に相当するもの)の型に依存して名前解決を行えるようにしようという提案があって、
それが>>483483(1): デフォルトの名無しさん [sage] 2011/11/12(土) 16:28:53.90 AAS
外部リンク:hackage.haskell.org
これがあれば短い名前を使って衝突しても解決してくれるという触れ込みだけどどうなんだろう
個人的には曖昧エラーの山になりそうだと思うんだが
SPJは使いものになると考えてるらしい
505: デフォルトの名無しさん [sage] 2011/11/12(土) 18:57:39.73 AAS
SMLとHaskellは同じ
Rubyは普通のOOPをやってる
新しい話題は無いわけね
506(1): デフォルトの名無しさん [sage] 2011/11/12(土) 18:58:06.93 AAS
ようやく数セミにモナドの解説出たか。やっぱ京大スゲーわ。
507: デフォルトの名無しさん [sage] 2011/11/12(土) 19:06:28.43 AAS
ここで出ている話題だと
コンパイル時に実装が選択できれば十分で
OOPの動的束縛を持ち出すのは道具が大きすぎな気がした
508(2): デフォルトの名無しさん [sage] 2011/11/12(土) 22:08:46.75 AAS
僕ハスケルでOOPしたいです先生
509: デフォルトの名無しさん [sage] 2011/11/12(土) 22:23:45.34 AAS
>>508
多相レコードを使え…あったっけ?
510: デフォルトの名無しさん [sage] 2011/11/12(土) 23:01:33.64 AAS
>>508
どういうのをOOPと言ってるの?
何がどうできたらOOPと言っていいの?
511: デフォルトの名無しさん [sage] 2011/11/13(日) 00:47:50.77 AAS
どんな言語でもまともなプログラムを作ろうと思うったらOOPしない方が難しい
512: デフォルトの名無しさん [sage] 2011/11/13(日) 00:53:06.55 AAS
定義と思ってるものが各人違うから
外部リンク:ja.m.wikipedia.org
- カプセル化 (振る舞いの隠蔽とデータ隠蔽)
- インヘリタンス (継承) --クラスベースの言語
- ポリモフィズム (多態性、多相性) --型付きの言語
- ダイナミックバインディング (動的束縛) --インタープリタの言語 この機能
これらの機能のうち、オブジェクト指向の考え方で不可欠なのは「カプセル化」の機能だけである
513: デフォルトの名無しさん [sage] 2011/11/13(日) 00:58:52.92 AAS
隠蔽かあ。あんまり良い定義とも思えないな
PythonとかOOPLでなくなってしまう
なんでこう日本語版のWikipediaは(略
514: デフォルトの名無しさん [sage] 2011/11/13(日) 01:03:23.86 AAS
そう思うのなら翻訳よろしく
外部リンク:en.wikipedia.org
515: デフォルトの名無しさん [sage] 2011/11/13(日) 01:16:28.24 AAS
やさしいHaskell入門 型クラスと多重定義
外部リンク[html]:www.sampou.org
Haskell vs OOP
外部リンク:d.hatena.ne.jp
OOP vs type class
外部リンク:www.haskell.org
↓こういう考えかたも、分かりやすいと思うんだけどな。
Clojureは、皆さんがオブジェクト指向から望む多くのものを提供 *して* います。
外部リンク:www.infoq.com
516: デフォルトの名無しさん [sage] 2011/11/13(日) 01:18:40.31 AAS
> ダイナミックバインディング (動的束縛) --インタープリタの言語 この機能
これ dynamic dispatch のことだよね
インタープリタの言語じゃなくてもあると思うんだけど
517: デフォルトの名無しさん [sage] 2011/11/13(日) 01:20:07.80 AAS
オブジェクト指向といえば、こんなのも有るよ。
Perl5's Moose ロールベース?のオブジェクト指向
外部リンク[html]:perldoc.perlassociation.org
518: デフォルトの名無しさん [sage] 2011/11/13(日) 01:36:57.23 AAS
宣言的とのことなので、ロールじゃ無くてルールだった。
そういえば、動的型付け言語も動的ディスパッチする部分を型推論したり、
宣言する方向で高速化してるな。
519: デフォルトの名無しさん [sage] 2011/11/13(日) 01:45:46.50 AAS
What is "Object-Oriented Programming?" [B. Stroustrup ECOOP '87] によれば
(subtype) polymorphismとADTの組み合わせだと言ってる
データ隠匿やデータ抽象だけならADTで可能だけど、これだけではOOPじゃない
520: デフォルトの名無しさん [sage] 2011/11/13(日) 02:46:52.16 AAS
それは二つに分岐した一方のオブジェクト指向ではないかい?
521: デフォルトの名無しさん [sage] 2011/11/13(日) 03:05:26.23 AAS
Haskellの型クラスとかインスタンスという用語は
OOPの用語と重なっているからまぎらわしい
もちろんHaskellの型クラスがOOPのクラスとは全く異なる概念であることは
調べればすぐに理解できることだけど、
いざHaskellのFPとOOPを対比させた説明を始めようとすると、
いちいち「Haskellのクラスは...」と「OOPのクラスは...」というように修飾が必要
上下前次1-新書関写板覧索設栞歴
あと 457 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.022s