[過去ログ]
関数型プログラミング言語Haskell Part16 (978レス)
関数型プログラミング言語Haskell Part16 http://echo.5ch.net/test/read.cgi/tech/1317958045/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
491: デフォルトの名無しさん [] 2011/11/12(土) 17:36:29.05 すいません、Haskell初心者で オライリーのプログラミング言語Haskellを買ってきたのです プログラムをかきながら本を進めていくと 後半からimportできないモジュールばかりになるのですが… 環境はWindowsでGHC6.4.1ですが、CentOSでGHC6.10.4でもダメなので 単純に環境問題ではない気がするのですが… http://echo.5ch.net/test/read.cgi/tech/1317958045/491
492: デフォルトの名無しさん [sage] 2011/11/12(土) 17:42:05.24 >>489 >実例かポインタある? 階層化されたディレクトリの無いファイルシステム(CP/Mや初期のMS-DOS) 過去の階層化されていないWindows Network(NetBIOS) 名前の衝突回避と階層化との関連はコンピュータ科学の知識があれば常識だよ >階層化うんぬんは関係なくね? Rubyのインスタンスメソッドについては、その通りだね。 ただし、Rubyにはクラスメソッドあるいはモジュール関数という概念がある。 これらのメソッドは(実際の実行は動的であっても、)構文上は静的に解釈できる。 ここで、M::N::O.func と M::N.func は同じモジュール関数名 func を使っているけど、 それぞれ名前空間が M::N::O と M::N とで異なっているから静的に区別できる。 http://echo.5ch.net/test/read.cgi/tech/1317958045/492
493: デフォルトの名無しさん [sage] 2011/11/12(土) 17:49:31.51 >>492 いやプログラミングの文脈ではぜんぜん常識じゃないと思うんだが あるモジュールMを書いているとする 別のモジュールA.B.Cの関数fと、A.D.Eの関数fを使いたくなったので、両方ともインポートする すると、単にfと書くだけではどちらを意味しているか決まらないので、なんらかの修飾が必要になる これは名前空間が階層化されていようがいまいが関係ない という理解だけど http://echo.5ch.net/test/read.cgi/tech/1317958045/493
494: デフォルトの名無しさん [sage] 2011/11/12(土) 17:52:01.51 >>485,488 たしかに変なこと言っちゃったな 大規模開発云々で名前空間のrubyとhaskellでの差なんて大した問題じゃないってことが言いたかった http://echo.5ch.net/test/read.cgi/tech/1317958045/494
495: デフォルトの名無しさん [sage] 2011/11/12(土) 18:05:45.44 >>493 修飾の無い名前 f だけじゃ区別がつかないのは、常識以前の当たり前な話だろ >>493の例の場合、RubyやSMLならばモジュール空間Aだけをインポートして B.C.f と D.E.f と書くことができる。あるいは、X=A.B.CおよびY=A.D.Eという 局所的なモジュール空間を宣言してX.f および Y.f という短い別名での参照が可能。 HaskellではAだけをインポートするとか、 あるいは局所的なモジュール空間を宣言するとかできないの? RubyやSMLなら「普通に」できるんだけど.... http://echo.5ch.net/test/read.cgi/tech/1317958045/495
496: [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/11/12(土) 18:08:18.90 >>495 >修飾の無い名前 f だけじゃ区別がつかないのは、常識以前の当たり前な話だろ Rubyのインスタンスメソッドについてはそれができるんだよ。ずっとその話をしていたと思ったんだが >HaskellではAだけをインポートするとか、 >あるいは局所的なモジュール空間を宣言するとかできないの? できません http://echo.5ch.net/test/read.cgi/tech/1317958045/496
497: [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/11/12(土) 18:12:28.69 >局所的なモジュール空間を宣言してX.f および Y.f という短い別名での参照が可能。 これについては同様のことができるな。局所的なモジュール空間を宣言するわけじゃなくて 単なる別名の導入だけど import qualified A.B.C as X import qualified A.D.E as Y http://echo.5ch.net/test/read.cgi/tech/1317958045/497
498: デフォルトの名無しさん [sage] 2011/11/12(土) 18:15:51.80 >>496 >Rubyのインスタンスメソッドについてはそれができるんだよ。 Rubyのインスタンスメソッドもレシーバで修飾しなければ区別できないよ。 たとえば c = A::B::C.new; e = A::D::E.new という文脈の下で、レシーバで修飾された c.f および e.f という式は正しく評価できるけど、単なる f ではRuby処理形は式を評価できない。(当たり前の話だよね?) http://echo.5ch.net/test/read.cgi/tech/1317958045/498
499: [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/11/12(土) 18:22:34.43 >>498 もちろん。でもHaskellにはその能力がない Rubyでuri.schemeと書くときにメソッド名schemeが他と衝突するのを心配する必要はないけど、 Haskellで(scheme uri)と書くならそうはいかない これを指して>>486で「けっこう頻繁に衝突」と言った >>487で否定されたのでSMLにもRubyみたいなレシーバ依存の名前lookupがあるのかと思ったけど、 そういう訳でもないってことで良いかな http://echo.5ch.net/test/read.cgi/tech/1317958045/499
500: デフォルトの名無しさん [sage] 2011/11/12(土) 18:23:49.38 なんか一人すごい天然がいるなw http://echo.5ch.net/test/read.cgi/tech/1317958045/500
501: デフォルトの名無しさん [sage] 2011/11/12(土) 18:36:14.30 お願い 感情に走らずに、もっと落ち着いて議論して http://echo.5ch.net/test/read.cgi/tech/1317958045/501
502: デフォルトの名無しさん [sage] 2011/11/12(土) 18:39:16.82 >>499 >そういう訳でもないってことで良いかな SMLはオブジェクト指向では無いし静的型付け言語だから、 Rubyのようなレシーバ(インスタンス)依存の名前参照は存在しない ただし、SMLでは uri.scheme と書く時に、uri以外の他のモジュールで schemeというアクセサ名が使われているかどうかを心配する必要はない つまりHaskellのような urlScheme という冗長な命名は不要 こういう事で理解してもらえるかな? http://echo.5ch.net/test/read.cgi/tech/1317958045/502
503: [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/11/12(土) 18:51:56.84 >>502 >つまりHaskellのような urlScheme という冗長な命名は不要 Haskellでもこれは原理的には不要なんだよ 衝突が発生したら修飾した名前に切り替えればいいだけ uriSchemeのような命名がされるのは修飾を面倒だと思っているから これに関してHaskellでできないことをSMLができる訳じゃないと理解した もちろん名前空間が階層化されてるのは良いことだけど、この話題には関係ない http://echo.5ch.net/test/read.cgi/tech/1317958045/503
504: [―{}@{}@{}-] デフォルトの名無しさん [sage] 2011/11/12(土) 18:54:26.76 あと、Haskellだってオブジェクト指向じゃないし静的型付けだけど、 レシーバ(に相当するもの)の型に依存して名前解決を行えるようにしようという提案があって、 それが>>483 http://echo.5ch.net/test/read.cgi/tech/1317958045/504
505: デフォルトの名無しさん [sage] 2011/11/12(土) 18:57:39.73 SMLとHaskellは同じ Rubyは普通のOOPをやってる 新しい話題は無いわけね http://echo.5ch.net/test/read.cgi/tech/1317958045/505
506: デフォルトの名無しさん [sage] 2011/11/12(土) 18:58:06.93 ようやく数セミにモナドの解説出たか。やっぱ京大スゲーわ。 http://echo.5ch.net/test/read.cgi/tech/1317958045/506
507: デフォルトの名無しさん [sage] 2011/11/12(土) 19:06:28.43 ここで出ている話題だと コンパイル時に実装が選択できれば十分で OOPの動的束縛を持ち出すのは道具が大きすぎな気がした http://echo.5ch.net/test/read.cgi/tech/1317958045/507
508: デフォルトの名無しさん [sage] 2011/11/12(土) 22:08:46.75 僕ハスケルでOOPしたいです先生 http://echo.5ch.net/test/read.cgi/tech/1317958045/508
509: デフォルトの名無しさん [sage] 2011/11/12(土) 22:23:45.34 >>508 多相レコードを使え…あったっけ? http://echo.5ch.net/test/read.cgi/tech/1317958045/509
510: デフォルトの名無しさん [sage] 2011/11/12(土) 23:01:33.64 >>508 どういうのをOOPと言ってるの? 何がどうできたらOOPと言っていいの? http://echo.5ch.net/test/read.cgi/tech/1317958045/510
511: デフォルトの名無しさん [sage] 2011/11/13(日) 00:47:50.77 どんな言語でもまともなプログラムを作ろうと思うったらOOPしない方が難しい http://echo.5ch.net/test/read.cgi/tech/1317958045/511
512: デフォルトの名無しさん [sage] 2011/11/13(日) 00:53:06.55 定義と思ってるものが各人違うから http://ja.m.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%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0 - カプセル化 (振る舞いの隠蔽とデータ隠蔽) - インヘリタンス (継承) --クラスベースの言語 - ポリモフィズム (多態性、多相性) --型付きの言語 - ダイナミックバインディング (動的束縛) --インタープリタの言語 この機能 これらの機能のうち、オブジェクト指向の考え方で不可欠なのは「カプセル化」の機能だけである http://echo.5ch.net/test/read.cgi/tech/1317958045/512
513: デフォルトの名無しさん [sage] 2011/11/13(日) 00:58:52.92 隠蔽かあ。あんまり良い定義とも思えないな PythonとかOOPLでなくなってしまう なんでこう日本語版のWikipediaは(略 http://echo.5ch.net/test/read.cgi/tech/1317958045/513
514: デフォルトの名無しさん [sage] 2011/11/13(日) 01:03:23.86 そう思うのなら翻訳よろしく http://en.wikipedia.org/wiki/Object_Oriented_Programming http://echo.5ch.net/test/read.cgi/tech/1317958045/514
515: デフォルトの名無しさん [sage] 2011/11/13(日) 01:16:28.24 やさしいHaskell入門 型クラスと多重定義 http://www.sampou.org/haskell/tutorial-j/classes.html Haskell vs OOP http://d.hatena.ne.jp/kazu-yamamoto/touch/20080828/1219888005 OOP vs type class http://www.haskell.org/haskellwiki/OOP_vs_type_classes ↓こういう考えかたも、分かりやすいと思うんだけどな。 Clojureは、皆さんがオブジェクト指向から望む多くのものを提供 *して* います。 http://www.infoq.com/jp/news/2009/02/clojure-interview-halloway http://echo.5ch.net/test/read.cgi/tech/1317958045/515
516: デフォルトの名無しさん [sage] 2011/11/13(日) 01:18:40.31 > ダイナミックバインディング (動的束縛) --インタープリタの言語 この機能 これ dynamic dispatch のことだよね インタープリタの言語じゃなくてもあると思うんだけど http://echo.5ch.net/test/read.cgi/tech/1317958045/516
517: デフォルトの名無しさん [sage] 2011/11/13(日) 01:20:07.80 オブジェクト指向といえば、こんなのも有るよ。 Perl5's Moose ロールベース?のオブジェクト指向 http://perldoc.perlassociation.org/pod/Moose-Doc-JA/Moose/Manual.html http://echo.5ch.net/test/read.cgi/tech/1317958045/517
518: デフォルトの名無しさん [sage] 2011/11/13(日) 01:36:57.23 宣言的とのことなので、ロールじゃ無くてルールだった。 そういえば、動的型付け言語も動的ディスパッチする部分を型推論したり、 宣言する方向で高速化してるな。 http://echo.5ch.net/test/read.cgi/tech/1317958045/518
519: デフォルトの名無しさん [sage] 2011/11/13(日) 01:45:46.50 What is "Object-Oriented Programming?" [B. Stroustrup ECOOP '87] によれば (subtype) polymorphismとADTの組み合わせだと言ってる データ隠匿やデータ抽象だけならADTで可能だけど、これだけではOOPじゃない http://echo.5ch.net/test/read.cgi/tech/1317958045/519
520: デフォルトの名無しさん [sage] 2011/11/13(日) 02:46:52.16 それは二つに分岐した一方のオブジェクト指向ではないかい? http://echo.5ch.net/test/read.cgi/tech/1317958045/520
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 458 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.020s