[過去ログ]
関数型プログラミング言語Haskell Part16 (978レス)
関数型プログラミング言語Haskell Part16 http://echo.5ch.net/test/read.cgi/tech/1317958045/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
479: デフォルトの名無しさん [sage] 2011/11/12(土) 16:19:42.77 名前についてHaskellよりRubyの方がうまくやってるのはその通りだな qualifiedでインポートしても結局修飾しなきゃいけなくて、.fooで済むオブジェクト指向言語には負ける それ以外の点は的外れだと思った 関数の部分適用とsetterはまるで別物だし、パターンマッチはかっこいいifじゃないし、 高階関数の「固まり」を苦労して扱わなくて済むのはそれだけで利点だし http://echo.5ch.net/test/read.cgi/tech/1317958045/479
480: デフォルトの名無しさん [sage] 2011/11/12(土) 16:23:39.76 >>477 そのuri.schemeのuriってモジュール名?そうならRubyと遜色ないとは言えないだろ Ruby(や他のオブジェクト指向言語)はモジュールで修飾する必要がないのが自慢なんだから http://echo.5ch.net/test/read.cgi/tech/1317958045/480
481: デフォルトの名無しさん [sage] 2011/11/12(土) 16:24:46.65 >>477 バイナリ互換性が糞だからな それが一番大問題だと思う 名前空間は一長一短だろ、エディタでの補完考えるとhaskellみたいに関数名で完結してたほうが良い http://echo.5ch.net/test/read.cgi/tech/1317958045/481
482: デフォルトの名無しさん [sage] 2011/11/12(土) 16:27:49.15 補完は静的であれば何でもいけるんじゃないかと http://echo.5ch.net/test/read.cgi/tech/1317958045/482
483: デフォルトの名無しさん [sage] 2011/11/12(土) 16:28:53.90 http://hackage.haskell.org/trac/haskell-prime/wiki/TypeDirectedNameResolution これがあれば短い名前を使って衝突しても解決してくれるという触れ込みだけどどうなんだろう 個人的には曖昧エラーの山になりそうだと思うんだが SPJは使いものになると考えてるらしい http://echo.5ch.net/test/read.cgi/tech/1317958045/483
484: デフォルトの名無しさん [sage] 2011/11/12(土) 17:07:16.80 >>480 SMLなら、open uri と宣言すれば、Rubyと同じように修飾を省略できるよ Haskellはできないの? http://echo.5ch.net/test/read.cgi/tech/1317958045/484
485: デフォルトの名無しさん [sage] 2011/11/12(土) 17:09:09.99 >>481 >名前空間は一長一短だろ、エディタでの補完考えるとhaskellみたいに関数名で完結してたほうが良い まるでイソップ童話の「酸っぱいブドウ」みたいだ.... http://echo.5ch.net/test/read.cgi/tech/1317958045/485
486: デフォルトの名無しさん [sage] 2011/11/12(土) 17:11:25.72 >>484 できるけど、名前が衝突しない場合に限る。これはSMLも同じだよな? Haskellで短かい名前を多用すると、けっこう頻繁に衝突して、けっきょく修飾インポートするはめになる Rubyだとメソッド名はグローバルじゃないので衝突を気にする必要すらない http://echo.5ch.net/test/read.cgi/tech/1317958045/486
487: デフォルトの名無しさん [sage] 2011/11/12(土) 17:16:42.29 >>486 >これはSMLも同じだよな? いや、ゼンゼン(理由は下記を参照) >Haskellで短かい名前を多用すると、けっこう頻繁に衝突して、 ナゼこんなことが起きるの? SMLなら名前空間は(Rubyと同じように)階層化されているから、 適切にモジュール設計していれば、衝突なんて全く気にならないんだけど.... もしかしてHaskellの(モジュールに関する)名前空間というのは フラット(平坦)なの? http://echo.5ch.net/test/read.cgi/tech/1317958045/487
488: デフォルトの名無しさん [sage] 2011/11/12(土) 17:21:06.02 >>485 >>481は関数名しか補完してくれないテキストエディタしか使ったことが無いのかもしれない。 型を認識するIDEを使ったことがあれば、こんな発想にはならないだろ。 http://echo.5ch.net/test/read.cgi/tech/1317958045/488
489: デフォルトの名無しさん [sage] 2011/11/12(土) 17:23:06.27 >>487 Haskellの名前空間はフラットだよ 階層化されているから名前が衝突しないってのが良く分からん 実例かポインタある? >SMLなら名前空間は(Rubyと同じように)階層化されているから、 Rubyで衝突を気にしなくていいのはメソッド名の解決に型情報を使う (正確にはレシーバがメソッド名を実行時に解釈する)からであって、 階層化うんぬんは関係なくね? http://echo.5ch.net/test/read.cgi/tech/1317958045/489
490: デフォルトの名無しさん [sage] 2011/11/12(土) 17:25:14.72 >>487 > もしかしてHaskellの(モジュールに関する)名前空間というのは > フラット(平坦)なの? どういうのをフラットと言うのか分からんが、 俺が Haskell のモジュール関係で不満なのは次のことができない事 AAA.BBB.CCC.DDD というモジュールがあったとして、 モジュール AAA.BBB をインポートして CCC.DDD.fff で関数 fff を使う事 関数 fff を使いたかったらモジュール AAA.BBB.CCC.DDD をインポートしないといけない http://echo.5ch.net/test/read.cgi/tech/1317958045/490
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
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 470 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.012s