[過去ログ] 関数型プログラミング言語Haskell Part16 (978レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
478: 2011/11/12(土)16:07 AAS
Haskellわかってないやつが批判してるってのは理解できた
479: 2011/11/12(土)16:19 AAS
名前についてHaskellよりRubyの方がうまくやってるのはその通りだな
qualifiedでインポートしても結局修飾しなきゃいけなくて、.fooで済むオブジェクト指向言語には負ける

それ以外の点は的外れだと思った
関数の部分適用とsetterはまるで別物だし、パターンマッチはかっこいいifじゃないし、
高階関数の「固まり」を苦労して扱わなくて済むのはそれだけで利点だし
480
(1): 2011/11/12(土)16:23 AAS
>>477
そのuri.schemeのuriってモジュール名?そうならRubyと遜色ないとは言えないだろ
Ruby(や他のオブジェクト指向言語)はモジュールで修飾する必要がないのが自慢なんだから
481
(2): 2011/11/12(土)16:24 AAS
>>477
バイナリ互換性が糞だからな
それが一番大問題だと思う

名前空間は一長一短だろ、エディタでの補完考えるとhaskellみたいに関数名で完結してたほうが良い
482: 2011/11/12(土)16:27 AAS
補完は静的であれば何でもいけるんじゃないかと
483
(1): 2011/11/12(土)16:28 AAS
外部リンク:hackage.haskell.org
これがあれば短い名前を使って衝突しても解決してくれるという触れ込みだけどどうなんだろう
個人的には曖昧エラーの山になりそうだと思うんだが
SPJは使いものになると考えてるらしい
484
(1): 2011/11/12(土)17:07 AAS
>>480
SMLなら、open uri と宣言すれば、Rubyと同じように修飾を省略できるよ
Haskellはできないの?
485
(2): 2011/11/12(土)17:09 AAS
>>481
>名前空間は一長一短だろ、エディタでの補完考えるとhaskellみたいに関数名で完結してたほうが良い

まるでイソップ童話の「酸っぱいブドウ」みたいだ....
486
(2): 2011/11/12(土)17:11 AAS
>>484
できるけど、名前が衝突しない場合に限る。これはSMLも同じだよな?
Haskellで短かい名前を多用すると、けっこう頻繁に衝突して、けっきょく修飾インポートするはめになる
Rubyだとメソッド名はグローバルじゃないので衝突を気にする必要すらない
487
(3): 2011/11/12(土)17:16 AAS
>>486
>これはSMLも同じだよな?

いや、ゼンゼン(理由は下記を参照)

>Haskellで短かい名前を多用すると、けっこう頻繁に衝突して、

ナゼこんなことが起きるの?
SMLなら名前空間は(Rubyと同じように)階層化されているから、
適切にモジュール設計していれば、衝突なんて全く気にならないんだけど....

もしかしてHaskellの(モジュールに関する)名前空間というのは
フラット(平坦)なの?
488
(1): 2011/11/12(土)17:21 AAS
>>485
>>481は関数名しか補完してくれないテキストエディタしか使ったことが無いのかもしれない。
型を認識するIDEを使ったことがあれば、こんな発想にはならないだろ。
489
(1): 2011/11/12(土)17:23 AAS
>>487
Haskellの名前空間はフラットだよ
階層化されているから名前が衝突しないってのが良く分からん
実例かポインタある?

>SMLなら名前空間は(Rubyと同じように)階層化されているから、
Rubyで衝突を気にしなくていいのはメソッド名の解決に型情報を使う
(正確にはレシーバがメソッド名を実行時に解釈する)からであって、
階層化うんぬんは関係なくね?
490: 2011/11/12(土)17:25 AAS
>>487
> もしかしてHaskellの(モジュールに関する)名前空間というのは
> フラット(平坦)なの?

どういうのをフラットと言うのか分からんが、
俺が Haskell のモジュール関係で不満なのは次のことができない事

AAA.BBB.CCC.DDD というモジュールがあったとして、
モジュール AAA.BBB をインポートして CCC.DDD.fff で関数 fff を使う事

関数 fff を使いたかったらモジュール AAA.BBB.CCC.DDD をインポートしないといけない
491: 2011/11/12(土)17:36 AAS
すいません、Haskell初心者で
オライリーのプログラミング言語Haskellを買ってきたのです
プログラムをかきながら本を進めていくと
後半からimportできないモジュールばかりになるのですが…
環境はWindowsでGHC6.4.1ですが、CentOSでGHC6.10.4でもダメなので
単純に環境問題ではない気がするのですが…
492
(1): 2011/11/12(土)17:42 AAS
>>489
>実例かポインタある?

階層化されたディレクトリの無いファイルシステム(CP/Mや初期のMS-DOS)
過去の階層化されていないWindows Network(NetBIOS)

名前の衝突回避と階層化との関連はコンピュータ科学の知識があれば常識だよ

>階層化うんぬんは関係なくね?
Rubyのインスタンスメソッドについては、その通りだね。
ただし、Rubyにはクラスメソッドあるいはモジュール関数という概念がある。
これらのメソッドは(実際の実行は動的であっても、)構文上は静的に解釈できる。
ここで、M::N::O.func と M::N.func は同じモジュール関数名 func を使っているけど、
それぞれ名前空間が M::N::O と M::N とで異なっているから静的に区別できる。
493
(1): 2011/11/12(土)17:49 AAS
>>492
いやプログラミングの文脈ではぜんぜん常識じゃないと思うんだが

あるモジュールMを書いているとする
別のモジュールA.B.Cの関数fと、A.D.Eの関数fを使いたくなったので、両方ともインポートする
すると、単にfと書くだけではどちらを意味しているか決まらないので、なんらかの修飾が必要になる
これは名前空間が階層化されていようがいまいが関係ない

という理解だけど
494: 2011/11/12(土)17:52 AAS
>>485,488
たしかに変なこと言っちゃったな
大規模開発云々で名前空間のrubyとhaskellでの差なんて大した問題じゃないってことが言いたかった
495
(1): 2011/11/12(土)18:05 AAS
>>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なら「普通に」できるんだけど....
496
(1): [―{}@{}@{}-] 2011/11/12(土)18:08 AAS
>>495
>修飾の無い名前 f だけじゃ区別がつかないのは、常識以前の当たり前な話だろ
Rubyのインスタンスメソッドについてはそれができるんだよ。ずっとその話をしていたと思ったんだが

>HaskellではAだけをインポートするとか、
>あるいは局所的なモジュール空間を宣言するとかできないの?
できません
497: [―{}@{}@{}-] 2011/11/12(土)18:12 AAS
>局所的なモジュール空間を宣言してX.f および Y.f という短い別名での参照が可能。
これについては同様のことができるな。局所的なモジュール空間を宣言するわけじゃなくて
単なる別名の導入だけど

import qualified A.B.C as X
import qualified A.D.E as Y
498
(1): 2011/11/12(土)18:15 AAS
>>496
>Rubyのインスタンスメソッドについてはそれができるんだよ。

Rubyのインスタンスメソッドもレシーバで修飾しなければ区別できないよ。

たとえば
 c = A::B::C.new; e = A::D::E.new
という文脈の下で、レシーバで修飾された
 c.f および e.f
という式は正しく評価できるけど、単なる
 f
ではRuby処理形は式を評価できない。(当たり前の話だよね?)
499
(1): [―{}@{}@{}-] 2011/11/12(土)18:22 AAS
>>498
もちろん。でもHaskellにはその能力がない
Rubyでuri.schemeと書くときにメソッド名schemeが他と衝突するのを心配する必要はないけど、
Haskellで(scheme uri)と書くならそうはいかない
これを指して>>486で「けっこう頻繁に衝突」と言った
>>487で否定されたのでSMLにもRubyみたいなレシーバ依存の名前lookupがあるのかと思ったけど、
そういう訳でもないってことで良いかな
500: 2011/11/12(土)18:23 AAS
なんか一人すごい天然がいるなw
501: 2011/11/12(土)18:36 AAS
お願い

感情に走らずに、もっと落ち着いて議論して
502
(1): 2011/11/12(土)18:39 AAS
>>499
>そういう訳でもないってことで良いかな

SMLはオブジェクト指向では無いし静的型付け言語だから、
Rubyのようなレシーバ(インスタンス)依存の名前参照は存在しない

ただし、SMLでは uri.scheme と書く時に、uri以外の他のモジュールで
schemeというアクセサ名が使われているかどうかを心配する必要はない
つまりHaskellのような urlScheme という冗長な命名は不要

こういう事で理解してもらえるかな?
503: [―{}@{}@{}-] 2011/11/12(土)18:51 AAS
>>502
>つまりHaskellのような urlScheme という冗長な命名は不要
Haskellでもこれは原理的には不要なんだよ
衝突が発生したら修飾した名前に切り替えればいいだけ
uriSchemeのような命名がされるのは修飾を面倒だと思っているから

これに関してHaskellでできないことをSMLができる訳じゃないと理解した
もちろん名前空間が階層化されてるのは良いことだけど、この話題には関係ない
504: [―{}@{}@{}-] 2011/11/12(土)18:54 AAS
あと、Haskellだってオブジェクト指向じゃないし静的型付けだけど、
レシーバ(に相当するもの)の型に依存して名前解決を行えるようにしようという提案があって、
それが>>483
505: 2011/11/12(土)18:57 AAS
SMLとHaskellは同じ
Rubyは普通のOOPをやってる

新しい話題は無いわけね
506
(1): 2011/11/12(土)18:58 AAS
ようやく数セミにモナドの解説出たか。やっぱ京大スゲーわ。
507: 2011/11/12(土)19:06 AAS
ここで出ている話題だと
コンパイル時に実装が選択できれば十分で
OOPの動的束縛を持ち出すのは道具が大きすぎな気がした
1-
あと 471 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.028s