1 :
あなたの近くの名無しさん :
01/10/03 21:17 Meta-Languageについて語って下さい。 この掲示板の人なら知ってるかなと… な〜んてね
2 :
デフォルトの名無しさん :01/10/03 21:28
>1 son of a bitch.
3 :
デフォルトの名無しさん :01/10/03 21:44
4 :
デフォルトの名無しさん :01/10/04 00:41
age
5 :
デフォルトの名無しさん :01/10/04 01:07
Neta?
6 :
デフォルトの名無しさん :01/10/04 01:36
というわけで今からここはNeta Languageスレになります。
検索で、メーリングリストと区別つかないのが悲しい
>>7 激しく同意。
SML とかで検索すると
Smalltalk 系の ML とかひっかかるし…。
801 名前: :01/10/04 01:18 ID:???
その後
>>800 の姿を見たものは誰もいない…
802 名前:名無しさん :01/10/04 01:20 ID:???
-------- そして伝説へ… ---------
803 名前:800 :01/10/04 02:03 ID:???
のわ〜、生きてるって。(;´Д`)ノ(ワラ
それで「〜静かなるHDDを求めて〜」の結果は…
静音化に成功! いや、マジでイイヨ、これ。
まぁ、ゴマ声に馴れた頃だったので ちと寂しくなったケドね。
つー訳で、4人目の勇者よ、旅立て! 播(゚-゚)
804 名前: :01/10/04 02:09 ID:???
readmeにMD5があるあたりに、なんともいえないあやしさを感じる
805 名前: :01/10/04 02:49 ID:yVMskSvY
>>744 使ったらファームウェアのバージョンいくつになったの?
10 :
デフォルトの名無しさん :01/10/04 22:11
というわけで今からここはNeta Languageスレになります。
11 :
デフォルトの名無しさん :01/10/04 23:38
というわけで今からここはNeta Languageスレになります。
>>7 Scheme「お前なんかまだましな方だよ…」
Clean「それは俺のセリフだろ…」
14 :
デフォルトの名無しさん :01/10/04 23:41
.comとか.netとか
15 :
デフォルトの名無しさん :01/10/05 00:08
blue なんかどうするよ。
16 :
デフォルトの名無しさん :01/10/05 00:18
.co.jpとか.ne.jpとか
>>1 のいうMeta-Languageってわからない人が多いようです。
1さん説明してください。
それともヴァカに別れを告げてスレ削除してください。
18 :
デフォルトの名無しさん :01/10/05 00:23
Meta Language is not Language!!
20 :
デフォルトの名無しさん :01/10/05 01:00
21 :
デフォルトの名無しさん :01/10/05 01:04
なぜにgoogle経由?
色がついててキレイだから。
24 :
デフォルトの名無しさん :01/10/05 01:26
確かに…
25 :
デフォルトの名無しさん :01/10/05 01:29
ocaml って ml ですか
26 :
not 26 :01/10/05 01:38
htmlって ml ですか
>>25 ML の一種みたいなもんです。
>>26 Markup-Language ではありますが
Meta-Language ではありません。
28 :
デフォルトの名無しさん :01/10/05 02:01
_gってmlですか
29 :
デフォルトの名無しさん :01/10/05 20:21
合成関数を表す、oの定義ってどんな感じですか?
なんかHaskellスレが異様に盛り上がっているのでありますが、 Haskell界とML界の温度差って、どこから来るのでありますか?
なにそれ?
33 :
デフォルトの名無しさん :01/10/05 23:16
>>29 infix o;
fun op o(f,g)=fn x=>f(g x);
かなぁ?
34 :
デフォルトの名無しさん :01/10/05 23:42
>>33 様
fun f o g = …の後に続けられる?
36 :
デフォルトの名無しさん :01/10/06 00:12
fun f o g = _____; _____の部分の穴埋めをお願いしたい…ってことかな?
>>30 アメリカ: SML
エゲレス: Haskell
フランス: OCAML
アメリカ: Common Lisp
ユーロ: EuLisp
フランス: Prolog
あ、それから、 エゲレス: 関数型言語のメッカ
39 :
デフォルトの名無しさん :01/10/06 01:26
EuLisp と OCAML って初めて知った。
40 :
デフォルトの名無しさん :01/10/06 11:20
>>36 そういう書きかたってできるのかなぁ・・。
なんかできないような気もする。
42 :
デフォルトの名無しさん :01/10/06 13:56
なんとか出来ませんか?
44 :
デフォルトの名無しさん :01/10/06 14:08
>>42 > なんとか出来ませんか?
何をしたいのか説明せよ。
>>33 は理解したか?
45 :
デフォルトの名無しさん :01/10/06 14:20
>>30 元々Meta言語として作られたモノと標準関数型言語として作られたモノの違いかなあ?
46 :
デフォルトの名無しさん :01/10/06 15:39
.NETで関数型言語にも風穴があくんでしょうか?
>>46 > .NETで関数型言語にも風穴があくんでしょうか?
あいたとしても針穴。まあそれはそれでいとおかし
ML.NETとかHaskell.NETなんていつ出てくるのかな?
49 :
デフォルトの名無しさん :01/10/06 20:31
マイクロソフト自身が実装するのかぁ、、、 でも楽しみだね。なんにしても。
53 :
デフォルトの名無しさん :01/10/06 21:24
>>51 > 水を差すようだけど、MSはC#とVBとC++で手一杯だからそれは無いと思う。
> RationalにJAVAを任せたみたいに、FujitsuがCOBOLを実装するようにどっかの
> 物好きな会社が実装することになるはず。
ん? 「〜思う。〜はず。」って何? もう試験的に実装始めてるじゃん。GHC baseでさ。
http://research.microsoft.com/~dsyme/読んだ? まあ、実用になるものが出てくるとは思えないけど。
とにかく処理系のプロトタイプをCLR向けにイッパイ作って 欲しいところなんだろうね。たぶんMSも製品化するつもりで 作っているんじゃんくて、布教活動の一環としてとらえて いるんでしょ。 算数しかできないミニチュア言語より、少しのがんばりで、 .NETの多くの機能を利用できる方がありがたいに決まってるし。わら
>まあ、実用になるものが出てくるとは思えないけど。 商用プロダクト実装に向けての実証という段階でないかと"思う"よ。 んで、あらかたの枠組みが決まった段階で丸投げすると。 CLS準拠レベルがどうなるかはサードパーティーのキャパとMSの支援次第。
56 :
デフォルトの名無しさん :01/10/06 21:42
ま、IL, CLRの研究の一貫なんでしょ。 Project 7って言うみたいですね。挙げたURL見てね。
CLRってそんなに凄いのか?
うん♥
あっちのほうも満たしてくれるのか? ウヘヘ
60 :
デフォルトの名無しさん :01/10/06 22:38
ふっ…
61 :
デフォルトの名無しさん :01/10/07 00:14
あっちのほうも満たしてくれるのか? ウヘヘ
涼スレを汚さないで下さい
63 :
デフォルトの名無しさん :01/10/07 01:28
34の質問に答えてないではないか… では拙者が…… … ん? … わからん…
64 :
デフォルトの名無しさん :01/10/07 07:29
>>57 > CLRってそんなに凄いのか?
まずはILの設計次第、次にCLRの実装次第だけど、
ILはJava byte codeの前例を参考にできるからねー。
しかも中間言語の経験が深いSimon Peyton Jones呼んできてるし。
MS得意の、他の人にinnovateさせておいて、後追いでinnovateを標榜する、だな。
> CLS準拠レベルがどうなるかはサードパーティーのキャパとMSの支援次第。
製品としては出ないと思うが…
65 :
デフォルトの名無しさん :01/10/08 05:17
MLは言語の筋は良いのに普及がいまいちなのは, 一番メジャーであり割と最近まで唯一のフルセットのフリーな処理系であった SML/NJの効率や使い勝手があまりよくなくしかも開発のペースが遅かったこと, そして標準であるSMLの仕様がいまいち古臭く最新の研究成果を反映していないこと. が挙げられると思う.CAMLはその辺を独自路線で良いものにしたわけだが, あくまで非標準ということでフランス以外ではあまり受け入れられていない. MLの基本設計は好きなのでこういった残念な状況は改善されて欲しいのだが.
66 :
デフォルトの名無しさん :01/10/08 06:05
>>65 オイオイ普及しないのは、まず名前のせいだろ!
地味すぎだし、勘違いされるし(w
67 :
デフォルトの名無しさん :01/10/08 11:52
MLの目的ってのはなんですか? つまりMLの存在意義というか… どうなんでしょう?
67の目的ってのはなんですか? つまり67の存在意義というか… どうなんでしょう?
69の目的ってのはなんですか? つまり69の存在意義というか… どうなんでしょう?
70 :
デフォルトの名無しさん :01/10/08 15:03
meta langってなんかどうしようもなくベタですね。
leibnizとかにしてくれればよかったのにw
>>69 愛の表現形式です。それ以上のでも以下でもありません。
>>71 LCFが本題だったから、軽い気持ちでつけたんじゃないかな?
それとも、わざとそっけない態度、それが愛の表現形式…
73 :
デフォルトの名無しさん :01/10/08 19:45
Goferは名前はスゴそうなのにあんま普及してないぞ?
74 :
デフォルトの名無しさん :01/10/08 20:52
>>68 答えられないからって…(プ >>69 愛ですね。
良スレだと思う奴らは絶対ageんな。
77 :
デフォルトの名無しさん :01/10/08 22:03
>>76 >最新トレンドを満載したプログラミング言葉である。
なんか泣けてきました。
>>77 でも本当では?
関数型はトレンドを先取りしてきた感がある。
XMLっていうのは関数型言語の逆襲だと思ってました
MLとかHaskellなんて名前じゃ永遠に市場から評価されるわけないし
81 :
デフォルトの名無しさん :01/10/08 22:21
>>80 名前と市場の評価が関係あるのか?
普及しそうにない名前だってのは同意するけど。
82 :
デフォルトの名無しさん :01/10/08 23:29
>>73 研究社英和中辞典より
go・fer 米俗 (会社の)使い走り,雑用係.
はは、だめじゃん。
>>80 Microsoft ML2001とかJavaMLではどうでせう?
ML.NETに期待!
>>37 国で分けても意味無いと思うよ。
大学/研究機関 で分けたほうがいいよ。
87 :
デフォルトの名無しさん :01/10/10 06:16
Haskell と Scheme があれば ML っていらなくねぇ? とか言ってみるテスト。
Scheme があれば Haskell もいらねぇよ。 とか言われそうな予感。
いや、逆だろ。 SchemeでHaskell的なプログラムするのはめちゃ大変。 逆はすぐできるけど。
90 :
デフォルトの名無しさん :01/10/10 20:13
Haskell挫折しました。
91 :
デフォルトの名無しさん :01/10/10 22:04
ここのスレ読んでやってみたくなったんだけど、
いい本なんかないかな?
>>76 の本以外に何かある?
教えて下さい。
92 :
デフォルトの名無しさん :01/10/11 00:06
とりあえず
>>76 がいいと思うよ。
MLにこだわらないなら、Haskellスレも読んでくれぃ。
93 :
デフォルトの名無しさん :01/10/11 00:24
>>91-92 StandardMLとかいう本が出版されてますが。
キシュツ?
94 :
デフォルトの名無しさん :01/10/11 00:35
たしか、日本人の団体(京大?)が書いた本があったよ。 上・下巻。ちょっと前、図書館でみつけた。 厳密にはML専門の本では無かった気がするけど、 良い本だった。
95 :
デフォルトの名無しさん :01/10/11 01:41
amazon.comで検索すると10冊ぐらい出てくるけど、 びっくりしたのはどれも最近出版されていること。 ところでそれらの中で一冊といったらどれがお勧めですか? なにかMLの英語の本でいいものを知ってる人がいたら教えて 下さい。それとも一冊ぐらいじゃマスターできないものでしょうか? 金が無いので沢山本を買うことができません。
>>96 ありがとう。ここでまず基本をみっちりやってみようと思います。
シネクドキ
102 :
デフォルトの名無しさん :01/10/12 23:38
いやー今日ML習ってきました。ちょっとカルチャーショック。 なんかパズルに向いてるような気がしたのでCマガの電脳倶楽部を 解こうと思ったんですが、む、むずかしい。 forループみたいなのは再帰でやるんですよね?
103 :
デフォルトの名無しさん :01/10/12 23:50
再帰、特に末尾再帰は引数付きgotoって感じで気軽に使います>102
age
105 :
デフォルトの名無しさん :01/10/18 01:41
禿げ
107 :
デフォルトの名無しさん :01/10/20 18:01
104はageてるのか?
こんどこそ、あげ
109 :
仕様書無しさん :01/10/27 00:01
age
110 :
デフォルトの名無しさん :01/10/27 00:26
MLにマクロってあるの?
111 :
デフォルトの名無しさん :01/10/27 00:31
>>111 でもS式って無いんでしょ?どんなの?
サンプルきぼん
113 :
デフォルトの名無しさん :01/11/02 19:42
114 :
デフォルトの名無しさん :01/11/02 22:17
昔某所で教えてました.
こんなスレがあったのね.
>>34 >>36 の答えは
fun (f o g) x = f (g x)
あるいは
fun f o g = fn x => f (g x)
でok.
115 :
デフォルトの名無しさん :01/11/02 22:22
ocalmの情報が少なすぎるよーん。
>>116 インストールすればかなり詳しいドキュメントついてくる。
ドキュメントだけなら、HPからたぶんダウンできる。
しかし、英語ではあるが・・・
俺は今印刷して読みはじめた。
O'Camlを理解するために、MLの本読むのも良いかもしれない。
119 :
デフォルトの名無しさん :01/11/03 23:25
ちょっと質問 SML/NJ で関数の多重定義ってできますか? fun add(a,b:int) = a+b; fun add(a,b:real) = a+b; を定義すると、int向けの add が使えなくなってしまいます。 どうすればいいのでしょうか?
>>120 おいおい、検索でつづり間違えてるよ・・・
どなたか教えてage・・・ 関数の多重定義、できなさそうなのは分かってきたんだけど、 じゃあなんで組み込みの + とか - は多重定義になってるの? っていう疑問が・・・
124 :
デフォルトの名無しさん :01/11/04 14:57
組み込みの演算子は特別なのです。 この辺がHaskellに比べてカコワルイとこ。
>>124 ありがとうございます。
むー残念です。
#なんで多重定義をできなくしてるんでしょうね・・・
#C++だってできるのに
126 :
デフォルトの名無しさん :01/11/04 15:59
>>124 Haskellに比べてカコイイところはどこですか?
128 :
デフォルトの名無しさん :01/11/04 16:02
>>126 ModuleとSignature。
それから、Cと同じくらい速いとこ。
129 :
デフォルトの名無しさん :01/11/04 16:16
>>129 2つめのURLの方が挙げているpaulsonの解だと「リストのリスト」
しか扱っていませんね。
a list list -> a list
で、a がさらにリストの時には、a listに対してflatを再帰的に
呼び出してやらなければいけないと思いますが...
そんな動的な型判定がMLでできるのだろうか。
131 :
デフォルトの名無しさん :01/11/05 03:28
ML2000ってどうなったの? いつになったら言語仕様が出来上がるの?
>>130 やっぱりできないんですかね。。。
C++だと、テンプレートを使って静的に処理できました。
すみません、コード載せます。。。 template <class T> struct Flat { template <class X> static list<T> flat(list<X> x) { return x.empty() ? list<T>() : append(flat(car(x)), flat(cdr(x))); } static list<T> flat(list<T> x) { return x; } }; list は stl のリストです。 car()、cdr()、append() はそれっぽい関数です。 コンパイラによってテンプレートの挙動が違ったりするんで不安ですが、 一応ボーランドの bcc32 (フリーのやつ) で確認しました。 ML、ちょっと非力なのかなぁ・・・
つーか、任意の深さのlistをflatするのは overloadingしないと無理っぽいと思うぞ。 だって、flat関数の型を決定できないじゃん。 で、これはMLが非力ってんじゃなくて、 型安全への立場の違いの現れにすぎない。 C++のtemplateを使うと、bodyをinstantiateするまでは 型安全性を検査できないが、 MLは関数を定義するたびにその型安全性を検査できる。 この違いは大きい。
>>134 立場の違いですか。。。勉強不足ですみません。
結論的には、リストのリストの・・・リストをflatにする関数は
定義できないということですね。(あの演習問題は一体・・・)
ありがとうございました。
え?出来ないの? listってコンパイル時に要素数決まって無くても良いよね?
おいおい,いいかげんなこというなよ. polymorphism使えば簡単だろうが.
138 :
デフォルトの名無しさん :01/11/07 05:16
>>136 問題なのはリストの長さじゃなくて深さなんだが。
>>137 じゃあ、そのflat関数の型を言ってみろよ。
129が聞きたいのは
flat [[1], [2], [3]] = [1, 2, 3]
かつ
flat [[[1],[2],[3]]] = [1, 2, 3]
となるような関数だよな? > 129
'a list list -> 'a listじゃあ
flat [[[1],[2],[3]]] = [1, 2, 3]にはならんぞ。
>>138 そうです。そんな感じの関数が定義できるのか? ということです。
関数の型ですが、もし定義できるとしたら
'a list -> 'b list
みたいな感じでしょうかね・・・ 'a と 'b の関係が記述できそうにないんで
やっぱり無理そうです。
>>138-139 ML良く知らないけど、'a list -> 'b listでできるんじゃないの?
本体を書けば自然に関係の記述も本体の中に記述されるでしょ。
>>140 いや、まあ、そうなんですけどね。
「リストのリストの・・・リスト」のくだりに喰いついてみたというか。
失礼しました。
イメージとしては flat(x) = (if (list?(first x)) then flat(first x) else (first x))::(tail x) のような感じの記述で出来ない?
>>141 fun f(_:'a list) = [];
なら 'a list -> 'b list ですが、ほかに思いつかないです。。。
>>143 (tail x) という部分も flat してあげる必要があるような。
で、これだと、
>>138 の方が書いてるように、flat の型が
1つに定まってないんですよね。
関数の多重定義が可能ならそんな感じでいけそうなんですけどね。
>>144 え?だから、flatの型は'a list ->'b listでいいじゃん。
何が問題なの?
>>142 いや、parametric polymorphismとtemplateの違いがはっきりする
例題としておもしろかったよ。
型が決まらないというよりも、
>>145 の方が言い得てるような気がする。
動的に型を参照することが出来ないのでは?
仮に動的に型を判別できたとしても、無理っぽい気がします。 リストかどうかを判別する関数 val islist = fn : 'a -> bool が組み込み関数であったとします。 で、以下のような関数をSML/NJに入力してみました。 - fun islist _ = true; (* とりあえず *) val islist = fn : 'a -> bool - fun flat [] = [] = | flat (x::xs) = (if (islist x) then (flat x) else [x])@(flat xs); stdIn:25.38-25.46 Error: operator and operand don't agree [circularity] operator domain: 'Z list operand: 'Z in expression: flat x というような反応なので、やはり関数の型がまずいと思います。
>>149 つまり、
((x::xs): 'a list) とすると、xの型は'aだから(flat x)が型不整合。
((x::xs): 'a list list)としても、xの型は'a listだから(flat x)が型不整合。
ってことだね。
151 :
デフォルトの名無しさん :01/11/08 04:07
悪戦苦闘して、こういうのなら出来たんだけど・・・ datatype 'a tree = empty | leaf of 'a | node of 'a tree list; fun flat empty = [] | flat (leaf x) = [x] | flat (node [t]) = flat t | flat (node (t1::t2)) = flat t1 @ flat (node t2); - flat (node [node [leaf 1, leaf 2], leaf 3, empty]); val it = [1,2,3] : int list listでもこれ応用できないかな? ところでなんでかWarningが出るけど何で?
>>151 flat (node [])の場合が書いてないから。
>>151 結局リストもどきのデータ型を自分で作らないと駄目なのか・・・
>>151 それはちょっと違うでしょ。
listじゃなくてconsを使ったのと同等じゃん。
155 :
デフォルトの名無しさん :01/11/08 09:22
>>154 そうする以外に出来ないのがMLの流儀でしょ。
MLのlistは、S式のように型が弱くない。プログラムの安全性を保障するために。
S式はリストと木のあいの子だから。実装=木、仕様=木&リスト
156 :
デフォルトの名無しさん :01/11/08 14:43
S式の型が弱いってのがわからない。 datatype Sexp = Cons of (Sexp * Sexp) | Symbol of string | Number of int | ... みたいなvariant型だろ? これだって安全だと思うが。
157 :
デフォルトの名無しさん :01/11/08 17:58
>>153 まあ、自分で木構造作れば出来るんだから、MLが非力っってことはない。
静的なくせにかなり柔軟な言語だよMLは。
158 :
デフォルトの名無しさん :01/11/08 23:43
個人で改造ができそうな小さいMLってないですか?
>>146 'a list ->'b list じゃ駄目だよ。
それだと例えば (1 + flat [1,2,3]) がOKになっちゃう。
これは155や157みたいに少し構造を複雑にしないと
出来ないと思う。
間違えやした 例は (hd flat['a'] + 1) にしてください。
162 :
デフォルトの名無しさん :01/11/14 01:01
>>156 > S式の型が弱いってのがわからない。
(int list) list, int list, etc.をまとめて一つの構造で扱うので、
"int list"として扱うxに対して、head (head x)がcompile時にerrorとならない。
これはデータの持つ特徴を、型にabstractし損なっている、ということになる。
もちろん、
>>156 の様でないといけない局面では「弱い」とは言えないし、
Lispは、この柔軟さを構文の柔軟さとし、武器とした。
163 :
デフォルトの名無しさん :01/11/20 23:17
良スレage
164 :
デフォルトの名無しさん :01/12/07 11:43
mltonってどうよ
165 :
デフォルトの名無しさん :01/12/07 14:32
ML2000はいつになったら、出来るんだろう。かなり興味あるんだけど。
166 :
デフォルトの名無しさん :01/12/28 12:03
大納会アゲ
167 :
デフォルトの名無しさん :01/12/28 12:06
大学でMLで演習やってるとこある?
ほほう。
htmlはMarkup Language で Programming Language ではないから、あっち(どっち?)ではMetaなんだろう。たぶん。
171 :
デフォルトの名無しさん :02/01/04 14:09
大発会アゲ
172 :
デフォルトの名無しさん :02/01/07 12:49
大発会アゲ
173 :
デフォルトの名無しさん :02/01/07 15:34
Ocaml使っている人いる? SML/NJより格段に速いそうだけどちょっとSyntaxが違うみたい。
174 :
デフォルトの名無しさん :02/01/07 19:29
2chではMLってあんま人気ないけど、 実際はどんなもん?Haskellの翻訳本なんて ないけどMLならある。でもここじゃHaskellだよね。 不思議・・
175 :
デフォルトの名無しさん :02/01/07 23:46
129で紹介された悩める者です。flatの件は皆さんの書き込みを読んで納得でした。 非正格のHaskellも気にはなりますが、一番好きな言語はMLです。SMLは、やはり好きな言語のSchemeを強力にしたもののように思えるからです。 今は大堀先生の本を読んでいます。
176 :
デフォルトの名無しさん :02/01/08 17:32
厳密に言えばSMLは関数型言語じゃないんだそうな。 でHaskellはそうだとか。 Side effectが無いかどうかなんだと。 Ocamlなんてさら脱線してるし。 でもHaskellは普及しないと思う。 Closureの機能をコンパイルするのはそれ程大変ではないが Lazy evaluationのコンパイラは一般のプログラマには 理解しにくいだろうというのが一つの理由。
177 :
デフォルトの名無しさん :02/01/08 17:34
MLはプログラム解析ソフトを書くのに結構使われてるよ。
ocaml使ってます。syntaxは違いますが慣れました(ML -> Ocamlで入った)。
目立つ違いは宣言まわりかな? SMLのトップレヴェル宣言
val x = ...
fun f x = ...
fun f x = ...f...
はそれぞれOcamlでは
let x = ...
let f x = ...
let rec f x = ...f...
になります。定数と関数の宣言をどちらもletで行ないます。再帰関数の宣言
の時だけrecを入れる必要があります。Ocamlの局所宣言はletに続けてin (式)
とします。SMLのようにendで閉じる必要はありません。
あとdatatypeのコンストラクタは必ず大文字で始めるというのも最初は戸惑い
ました。
(SML) datatype 'a tree = leaf | node of 'a * 'a tree * 'a tree
(Ocaml) type 'a tree = Leaf | Node of 'a * 'a tree * 'a tree
他にもいろいろありますがとりあえず。
[email protected]
Σ(゚Д゚)・・・指がすべった・・・
180 :
デフォルトの名無しさん :02/01/09 17:00
あの大学の理論研究者か・・・凄すぎ(;´Д`) ニチャンテトキドキコウイウヒトイルカラコワイ
アゲテシマタ! ゴメンナサイ
>>180 ニチャンテトキドキコウイウヒトイルカラコワイ
禿胴 ...
185 :
デフォルトの名無しさん :02/01/09 19:12
navi2chのメッセージ入力画面がmhに似ていて 条件反射でやってしまった (´Д`) はぁー鬱 他にもOcamlにはオーバーロードが無いので 3 + 2, 3.0 +. 2.0 など区別して書きます。 実数を扱うプログラムを書く時など、ちょっと気になるかも...
>>187 しかし=は未だオーバーロードされているようで。
>>188 > しかし=は未だオーバーロードされているようで。
そうでした。
>>187 は言いすぎでした (鬱死
「+,-,/,*,符号反転といった演算子はオーバーロードされてない」と訂正します。
...反省すると、型システムはオーバーロードを考慮して作られていません、
ということが言いたかったのでした。
このためOcamlでは = や < などの比較演算に'a->'a->boolという型を持たせ
ることでオーバーロードを実現しています。こうすれば(整数) < (整数) と
(実数) < (実数) が同時に型チェックを通るのでよいのですが、一方で < が
未定義な引数が来てもそれを通してしまいます。例えば(fun x -> x) < (fun
x -> x) は実行できて、例外を発生します。この点、SMLでは型システムが <
の定義されている型を知っているのでこれを型エラーにします。
190 :
デフォルトの名無しさん :02/01/13 11:20
質問いいですか?
ttp://a414s1.it.nanzan-u.ac.jp/smlbook/smlwww/node12.html を見つつお勉強してるんですが、
ここに載ってる例の、
exception Get_nth;
fun get_nth _ nil = raise Get_nth
|get_nth 1 (front :: _) = front
|get_nth n (_ :: rest) = get_nth (n-1) rest;
val get_third = get_nth 3;
というのが、smlで
stdIn:7.1-7.22 Warning: type vars not generalized because of
value restriction are instantiated to dummy types (X1,X2,...)
val get_3 = fn : ?.X1 list -> ?.X1
と言われて動きません。
moscow ml だと
! Warning: Value polymorphism:
! Free type variable(s) at top level in value identifier get3
と言われつつも動くのですが。
なんでですか?
Standard ML of New Jersey v110.9.1 [FLINT v1.41], October 19, 1998
Moscow ML version 2.00 (June 2000)
NetBSD 1.5ZA
にて。
整数とリストのタプルを要求しているのに整数を与えているから。
s/get3/get_third/gでした。スマソ >191は私に対する回答ですか? タプルなんて出てこないと思うのですが...。 タプルって(a,b)みたいなやつですよね?
>>190 折もわからんのだが、
fun get_third xs = get_nth 3 xs
ならうまくいくねぇ。どうしてなんだろ。
>>190 部分適用で多相的な関数を宣言するのはSML97では無理じゃないかな?
val get_third' = (fn l => get_nth 3 l) とか、これに同値な宣言
fun get_third' l = get_nth 3 l
なら'a list->'aになりますが...というのは:
SML97にはvalue polymorphismというものが導入されました。これは、「宣言
val x = eのxが多相型を持つのはeがnon-expansiveな式であるときに限る」と
いうものです。
non-expansiveな式とはおおざっぱにいって定数、変数、関数抽象、
non-expansiveな式からなるタプルやレコード、そしてnon-expansiveな式が与
えられたコンストラクタ(refを除く)からなります。それ以外、例えば関数呼
び出しはnon-expansiveではありません。
>>190 でWarningが出るのは、get_thirdの型を多相的にしようとしたところ、
get_nth 3がnon-expansiveな式ではなかったためです。一方冒頭の例では
non-expansiveな式でget_third'を宣言しているのでうまくいきます。
できなかった時にget_thirdの型がどうなるか、については省略します。ただ
し、SML/NJとMosmlでは扱いが微妙に異なるため
>>190 のように挙動が違います。
ちなみにMosmlでget_thirdを定義してget_third [1,2,3]を計算した後
get_thirdの型を見ると...
>>194 をはしょって言えば
「fun get_third xs = get_nth 3 xs が良くて
val get_third = get_nth 3 がだめなのは仕様です。」
>>194-195 ありがとうございます。
元ネタのページのないようがSML97以前のものということでしょうか。
正直、よくわかりませんが、(w
勉強してみます。
197 :
デフォルトの名無しさん :02/01/30 10:21
日経平均1万円割れ アゲ
198 :
デフォルトの名無しさん :02/01/30 13:35
MAXミーナできちゃった婚おめでと、アゲ
200get!!! そして、終了!!!!!!
201 :
デフォルトの名無しさん :02/02/03 14:27
もっとこっちのスレで頑張るべきだ!
凄い高レベルの人がいるから皆恐縮してるのでは。 でも良スレでした。