ML!!!!!!
■ このスレッドは過去ログ倉庫に格納されています
0001あなたの近くの名無しさん
NGNGこの掲示板の人なら知ってるかなと…
な〜んてね
0002デフォルトの名無しさん
NGNGson of a bitch.
0003デフォルトの名無しさん
NGNGhttp://piza2.2ch.net/test/read.cgi?bbs=tech&key=987954395
0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNG激しく同意。
SML とかで検索すると
Smalltalk 系の ML とかひっかかるし…。
0009名無し
NGNGその後>>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使ったらファームウェアのバージョンいくつになったの?
0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNG0012デフォルトの名無しさん
NGNGScheme「お前なんかまだましな方だよ…」
Clean「それは俺のセリフだろ…」
0013デフォルトの名無しさん
NGNGScheme はそれほどでもないよ。
0014デフォルトの名無しさん
NGNG0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNGのいうMeta-Languageってわからない人が多いようです。
1さん説明してください。
それともヴァカに別れを告げてスレ削除してください。
0018デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNG0021デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNG0024デフォルトの名無しさん
NGNG0025デフォルトの名無しさん
NGNG0026not 26
NGNG0027デフォルトの名無しさん
NGNGML の一種みたいなもんです。
>>26
Markup-Language ではありますが
Meta-Language ではありません。
0028デフォルトの名無しさん
NGNG0029デフォルトの名無しさん
NGNG0030基本的に無知
NGNGHaskell界とML界の温度差って、どこから来るのでありますか?
0031もっと無知
NGNG0032デフォルトの名無しさん
NGNGhttp://piza2.2ch.net/test/read.cgi?bbs=tech&key=996131288
0033デフォルトの名無しさん
NGNGinfix o;
fun op o(f,g)=fn x=>f(g x);
かなぁ?
0034デフォルトの名無しさん
NGNGfun f o g = …の後に続けられる?
003533
NGNGすまん、質問の意味がわからん。
0036デフォルトの名無しさん
NGNG_____の部分の穴埋めをお願いしたい…ってことかな?
0037民族分布図
NGNGアメリカ: SML
エゲレス: Haskell
フランス: OCAML
アメリカ: Common Lisp
ユーロ: EuLisp
フランス: Prolog
0038民族分布図
NGNGエゲレス: 関数型言語のメッカ
0039デフォルトの名無しさん
NGNG0040デフォルトの名無しさん
NGNGhttp://pauillac.inria.fr/~furuse/jmmm/
004133
NGNGそういう書きかたってできるのかなぁ・・。
なんかできないような気もする。
0042デフォルトの名無しさん
NGNG0043Ruby >>>>> Python
NGNGhttp://piza2.2ch.net/test/read.cgi/tech/965815778/
--------------------------------------------------------
446 :デフォルトの名無しさん :01/10/05 23:44
ホモフォビックなホモ、愛ゆえのレイプ、そしてクィアなレズビアン
....あぁすばらしい(照)
0045デフォルトの名無しさん
NGNG元々Meta言語として作られたモノと標準関数型言語として作られたモノの違いかなあ?
0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNG> .NETで関数型言語にも風穴があくんでしょうか?
あいたとしても針穴。まあそれはそれでいとおかし
0048デフォルトの名無しさん
NGNG0049デフォルトの名無しさん
NGNGhttp://research.microsoft.com/users/simonpj/
http://research.microsoft.com/~dsyme/
とかいるから早いんじゃない?
MSってNTとかSOAPとかC#とか最初の設計をやる研究者は優秀なの呼んできてるから。
経営方針や屑プログラマのせいでなんだかおかしくなるだけで。
ただ、全てのAPIが使えるようになるわけじゃないと思うけどね。
Monad的にinterfaceを変えないといけないからさ。
VBだって使えないAPIたくさんあるよね。
0050デフォルトの名無しさん
NGNGでも楽しみだね。なんにしても。
0051デフォルトの名無しさん
NGNG水を差すようだけど、MSはC#とVBとC++で手一杯だからそれは無いと思う。
RationalにJAVAを任せたみたいに、FujitsuがCOBOLを実装するようにどっかの
物好きな会社が実装することになるはず。
また、MSは.NETのCLS(Common Language Spacification)に関して複数の準拠
レベルを設けてるので、フルスペック.NET言語となるかどうか未知数ですな。
参考ページ
ttp://www.atmarkit.co.jp/fdotnet/special/dotnetframework_overview/dotnframewk_over06.html
0052デフォルトの名無しさん
NGNGそうですか。安心しましたw
0053デフォルトの名無しさん
NGNG> 水を差すようだけど、MSはC#とVBとC++で手一杯だからそれは無いと思う。
> RationalにJAVAを任せたみたいに、FujitsuがCOBOLを実装するようにどっかの
> 物好きな会社が実装することになるはず。
ん? 「〜思う。〜はず。」って何? もう試験的に実装始めてるじゃん。GHC baseでさ。
http://research.microsoft.com/~dsyme/読んだ?
まあ、実用になるものが出てくるとは思えないけど。
0054デフォルトの名無しさん
NGNG欲しいところなんだろうね。たぶんMSも製品化するつもりで
作っているんじゃんくて、布教活動の一環としてとらえて
いるんでしょ。
算数しかできないミニチュア言語より、少しのがんばりで、
.NETの多くの機能を利用できる方がありがたいに決まってるし。わら
0055デフォルトの名無しさん
NGNG商用プロダクト実装に向けての実証という段階でないかと"思う"よ。
んで、あらかたの枠組みが決まった段階で丸投げすると。
CLS準拠レベルがどうなるかはサードパーティーのキャパとMSの支援次第。
0056デフォルトの名無しさん
NGNGProject 7って言うみたいですね。挙げたURL見てね。
0057デフォルトの名無しさん
NGNG0058デフォルトの名無しさん
NGNG0059デフォルトの名無しさん
NGNG0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNG0062デフォルトの名無しさん
NGNG0063デフォルトの名無しさん
NGNGでは拙者が……
…
ん?
…
わからん…
0064デフォルトの名無しさん
NGNG> CLRってそんなに凄いのか?
まずはILの設計次第、次にCLRの実装次第だけど、
ILはJava byte codeの前例を参考にできるからねー。
しかも中間言語の経験が深いSimon Peyton Jones呼んできてるし。
MS得意の、他の人にinnovateさせておいて、後追いでinnovateを標榜する、だな。
> CLS準拠レベルがどうなるかはサードパーティーのキャパとMSの支援次第。
製品としては出ないと思うが…
0065デフォルトの名無しさん
NGNG一番メジャーであり割と最近まで唯一のフルセットのフリーな処理系であった
SML/NJの効率や使い勝手があまりよくなくしかも開発のペースが遅かったこと,
そして標準であるSMLの仕様がいまいち古臭く最新の研究成果を反映していないこと.
が挙げられると思う.CAMLはその辺を独自路線で良いものにしたわけだが,
あくまで非標準ということでフランス以外ではあまり受け入れられていない.
MLの基本設計は好きなのでこういった残念な状況は改善されて欲しいのだが.
0066デフォルトの名無しさん
NGNGオイオイ普及しないのは、まず名前のせいだろ!
地味すぎだし、勘違いされるし(w
0067デフォルトの名無しさん
NGNGつまりMLの存在意義というか…
どうなんでしょう?
0068デフォルトの名無しさん
NGNGつまり67の存在意義というか…
どうなんでしょう?
0069デフォルトの名無しさん
NGNGつまり69の存在意義というか…
どうなんでしょう?
0070デフォルトの名無しさん
NGNG0071デフォルトの名無しさん
NGNGleibnizとかにしてくれればよかったのにw
>>69
愛の表現形式です。それ以上のでも以下でもありません。
0072デフォルトの名無しさん
NGNGLCFが本題だったから、軽い気持ちでつけたんじゃないかな?
それとも、わざとそっけない態度、それが愛の表現形式…
0073デフォルトの名無しさん
NGNG0074デフォルトの名無しさん
NGNG答えられないからって…(プ
>>69
愛ですね。
0075忠告
NGNG0076デフォルトの名無しさん
NGNGhttp://www.amazon.co.jp/exec/obidos/tg/detail/glance/-/books/4756116418
これをまず読んでから書き込んでね
ところで2chはアマゾンとのアファリエイトはやってるのかな?
あるサイトから来た客が買い物したらその何パーセントがその
サイト運営者に落ちるっていう。どうなんだろう。
だとしたら本の紹介するときはアマゾンを使うことにしたいところなんだけど
0077デフォルトの名無しさん
NGNG>最新トレンドを満載したプログラミング言葉である。
なんか泣けてきました。
0078デフォルトの名無しさん
NGNGでも本当では?
関数型はトレンドを先取りしてきた感がある。
0079デフォルトの名無しさん
NGNG0080デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNG名前と市場の評価が関係あるのか?
普及しそうにない名前だってのは同意するけど。
0082デフォルトの名無しさん
NGNGgo・fer 米俗 (会社の)使い走り,雑用係.
0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNGMicrosoft ML2001とかJavaMLではどうでせう?
0085デフォルトの名無しさん
NGNG0086デフォルトの名無しさん
NGNG国で分けても意味無いと思うよ。
大学/研究機関 で分けたほうがいいよ。
0087デフォルトの名無しさん
NGNGとか言ってみるテスト。
008887
NGNGとか言われそうな予感。
0089デフォルトの名無しさん
NGNGSchemeでHaskell的なプログラムするのはめちゃ大変。
逆はすぐできるけど。
0090デフォルトの名無しさん
NGNG0091デフォルトの名無しさん
NGNGいい本なんかないかな?>>76の本以外に何かある?
教えて下さい。
0092デフォルトの名無しさん
NGNGMLにこだわらないなら、Haskellスレも読んでくれぃ。
0093デフォルトの名無しさん
NGNGStandardMLとかいう本が出版されてますが。
キシュツ?
0094デフォルトの名無しさん
NGNG上・下巻。ちょっと前、図書館でみつけた。
厳密にはML専門の本では無かった気がするけど、
良い本だった。
0095デフォルトの名無しさん
NGNGびっくりしたのはどれも最近出版されていること。
ところでそれらの中で一冊といったらどれがお勧めですか?
なにかMLの英語の本でいいものを知ってる人がいたら教えて
下さい。それとも一冊ぐらいじゃマスターできないものでしょうか?
金が無いので沢山本を買うことができません。
0096デフォルトの名無しさん
NGNGどうなの?
0098デフォルトの名無しさん
NGNGありがとう。ここでまず基本をみっちりやってみようと思います。
0100ゴルゴ
NGNG0101デフォルトの名無しさん
NGNGこれよめ。これで分からなかったらあきらめろ
0102デフォルトの名無しさん
NGNGなんかパズルに向いてるような気がしたのでCマガの電脳倶楽部を
解こうと思ったんですが、む、むずかしい。
forループみたいなのは再帰でやるんですよね?
0103デフォルトの名無しさん
NGNG0104デフォルトの名無しさん
NGNG0105デフォルトの名無しさん
NGNG0106デフォルトの名無しさん
NGNGきみらageてないで話題提供しなさい。
0107デフォルトの名無しさん
NGNG0108仕様書無しさん
NGNG0109仕様書無しさん
NGNG0110デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNGあるよ。
0112デフォルトの名無しさん
NGNGでもS式って無いんでしょ?どんなの?
サンプルきぼん
0113デフォルトの名無しさん
NGNGhttp://www.research.microsoft.com/Projects/SML.NET/
0114デフォルトの名無しさん
NGNGこんなスレがあったのね.
>>34 >>36 の答えは
fun (f o g) x = f (g x)
あるいは
fun f o g = fn x => f (g x)
でok.
0115デフォルトの名無しさん
NGNGおすすめします.
0116デフォルトの名無しさん
NGNG0117デフォルトの名無しさん
NGNGインストールすればかなり詳しいドキュメントついてくる。
ドキュメントだけなら、HPからたぶんダウンできる。
しかし、英語ではあるが・・・
俺は今印刷して読みはじめた。
0118117
NGNG0119デフォルトの名無しさん
NGNGSML/NJ で関数の多重定義ってできますか?
fun add(a,b:int) = a+b;
fun add(a,b:real) = a+b;
を定義すると、int向けの add が使えなくなってしまいます。
どうすればいいのでしょうか?
0120116
NGNG英語は苦手です。
>>118
そのほうが良さそうですね……。
http://www.google.com/search?hl=ja&q=ocalm&btnG=Google+%8C%9F%8D%F5&lr=lang_ja
http://www.google.com/search?hl=ja&q=objective+calm&lr=lang_ja
0121デフォルトの名無しさん
NGNGおいおい、検索でつづり間違えてるよ・・・
0122116,120
NGNGぐはっ!
……綴りを間違えたのではありません。
ocalmという名前だと思い込んでいたんです。
どおりで少ないわけです……。
(全言語検索で本家が出てこなかったときに疑うべきでした)
http://www.google.com/search?hl=ja&q=objective+caml&lr=lang_ja
http://www.google.com/search?hl=ja&q=ocaml&lr=lang_ja
少しはあるのね。
0123119
NGNG関数の多重定義、できなさそうなのは分かってきたんだけど、
じゃあなんで組み込みの + とか - は多重定義になってるの?
っていう疑問が・・・
0124デフォルトの名無しさん
NGNGこの辺がHaskellに比べてカコワルイとこ。
0125119
NGNGありがとうございます。
むー残念です。
#なんで多重定義をできなくしてるんでしょうね・・・
#C++だってできるのに
0126デフォルトの名無しさん
NGNGHaskellに比べてカコイイところはどこですか?
0127デフォルトの名無しさん
NGNG0128デフォルトの名無しさん
NGNGModuleとSignature。
それから、Cと同じくらい速いとこ。
0129デフォルトの名無しさん
NGNG下のような 関数 flat の定義は定義できるのでしょうか?
「リストのリストの・・・リストというように,入れ子になっているリストを,
入れ子になっていないリストに変換する関数を定義せよ. 」
http://a414s1.it.nanzan-u.ac.jp/smlbook/smlwww/node39.html
以下のページの方も悩んでいたようですが、
結局うやむやになってるようです。
www5a.biglobe.ne.jp/~sasagawa/MLEdit/study/index.html
よろしくお願いします。
0130デフォルトの名無しさん
NGNG2つめのURLの方が挙げているpaulsonの解だと「リストのリスト」
しか扱っていませんね。
a list list -> a list
で、a がさらにリストの時には、a listに対してflatを再帰的に
呼び出してやらなければいけないと思いますが...
そんな動的な型判定がMLでできるのだろうか。
0131デフォルトの名無しさん
NGNGいつになったら言語仕様が出来上がるの?
0132129
NGNGやっぱりできないんですかね。。。
C++だと、テンプレートを使って静的に処理できました。
0133129
NGNGtemplate <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、ちょっと非力なのかなぁ・・・
0134デフォルトの名無しさん
NGNGoverloadingしないと無理っぽいと思うぞ。
だって、flat関数の型を決定できないじゃん。
で、これはMLが非力ってんじゃなくて、
型安全への立場の違いの現れにすぎない。
C++のtemplateを使うと、bodyをinstantiateするまでは
型安全性を検査できないが、
MLは関数を定義するたびにその型安全性を検査できる。
この違いは大きい。
0135129
NGNG立場の違いですか。。。勉強不足ですみません。
結論的には、リストのリストの・・・リストをflatにする関数は
定義できないということですね。(あの演習問題は一体・・・)
ありがとうございました。
0136デフォルトの名無しさん
NGNGlistってコンパイル時に要素数決まって無くても良いよね?
0137デフォルトの名無しさん
NGNGpolymorphism使えば簡単だろうが.
0138デフォルトの名無しさん
NGNG問題なのはリストの長さじゃなくて深さなんだが。
>>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]にはならんぞ。
0139129
NGNGそうです。そんな感じの関数が定義できるのか? ということです。
関数の型ですが、もし定義できるとしたら
'a list -> 'b list
みたいな感じでしょうかね・・・ 'a と 'b の関係が記述できそうにないんで
やっぱり無理そうです。
0140デフォルトの名無しさん
NGNGhttp://a414s1.it.nanzan-u.ac.jp/smlbook/smlwww/node39.html
の例は
> - flat;・
> val it = fn : 'a list list -> 'a list
って出てるし、
一つの関数で、深さの違うリストに対応せよって話でもない気が…。
0141デフォルトの名無しさん
NGNGML良く知らないけど、'a list -> 'b listでできるんじゃないの?
本体を書けば自然に関係の記述も本体の中に記述されるでしょ。
0143デフォルトの名無しさん
NGNGflat(x) = (if (list?(first x)) then flat(first x) else (first x))::(tail x)
のような感じの記述で出来ない?
0144129
NGNGfun f(_:'a list) = [];
なら 'a list -> 'b list ですが、ほかに思いつかないです。。。
>>143
(tail x) という部分も flat してあげる必要があるような。
で、これだと、>>138 の方が書いてるように、flat の型が
1つに定まってないんですよね。
関数の多重定義が可能ならそんな感じでいけそうなんですけどね。
0145デフォルトの名無しさん
NGNGlist? のあたりが無理。
0146デフォルトの名無しさん
NGNGえ?だから、flatの型は'a list ->'b listでいいじゃん。
何が問題なの?
0148デフォルトの名無しさん
NGNG動的に型を参照することが出来ないのでは?
0149129
NGNGリストかどうかを判別する関数
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
というような反応なので、やはり関数の型がまずいと思います。
0150134
NGNGつまり、
((x::xs): 'a list) とすると、xの型は'aだから(flat x)が型不整合。
((x::xs): 'a list list)としても、xの型は'a listだから(flat x)が型不整合。
ってことだね。
0151デフォルトの名無しさん
NGNGdatatype '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が出るけど何で?
0152デフォルトの名無しさん
NGNGflat (node [])の場合が書いてないから。
0153デフォルトの名無しさん
NGNG結局リストもどきのデータ型を自分で作らないと駄目なのか・・・
0154デフォルトの名無しさん
NGNGそれはちょっと違うでしょ。
listじゃなくてconsを使ったのと同等じゃん。
0155デフォルトの名無しさん
NGNGそうする以外に出来ないのがMLの流儀でしょ。
MLのlistは、S式のように型が弱くない。プログラムの安全性を保障するために。
S式はリストと木のあいの子だから。実装=木、仕様=木&リスト
0156デフォルトの名無しさん
NGNGdatatype Sexp = Cons of (Sexp * Sexp) | Symbol of string |
Number of int | ...
みたいなvariant型だろ? これだって安全だと思うが。
0157デフォルトの名無しさん
NGNGまあ、自分で木構造作れば出来るんだから、MLが非力っってことはない。
静的なくせにかなり柔軟な言語だよMLは。
0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNGMLでMLの処理系書いてみるよろし。
'a list ->'b list じゃ駄目だよ。
それだと例えば (1 + flat [1,2,3]) がOKになっちゃう。
これは155や157みたいに少し構造を複雑にしないと
出来ないと思う。
0161160
NGNG例は (hd flat['a'] + 1) にしてください。
0162デフォルトの名無しさん
NGNG> S式の型が弱いってのがわからない。
(int list) list, int list, etc.をまとめて一つの構造で扱うので、
"int list"として扱うxに対して、head (head x)がcompile時にerrorとならない。
これはデータの持つ特徴を、型にabstractし損なっている、ということになる。
もちろん、>>156の様でないといけない局面では「弱い」とは言えないし、
Lispは、この柔軟さを構文の柔軟さとし、武器とした。
0163デフォルトの名無しさん
NGNG0164デフォルトの名無しさん
NGNG0165デフォルトの名無しさん
NGNG0166デフォルトの名無しさん
NGNG0167デフォルトの名無しさん
NGNG0168デフォルトの名無しさん
NGNG0169デフォルトの名無しさん
NGNG0170デフォルトの名無しさん
NGNG0171デフォルトの名無しさん
NGNG0172デフォルトの名無しさん
NGNG0173デフォルトの名無しさん
NGNGSML/NJより格段に速いそうだけどちょっとSyntaxが違うみたい。
0174デフォルトの名無しさん
NGNG実際はどんなもん?Haskellの翻訳本なんて
ないけどMLならある。でもここじゃHaskellだよね。
不思議・・
0175デフォルトの名無しさん
NGNG非正格のHaskellも気にはなりますが、一番好きな言語はMLです。SMLは、やはり好きな言語のSchemeを強力にしたもののように思えるからです。
今は大堀先生の本を読んでいます。
0176デフォルトの名無しさん
NGNGでHaskellはそうだとか。
Side effectが無いかどうかなんだと。
Ocamlなんてさら脱線してるし。
でもHaskellは普及しないと思う。
Closureの機能をコンパイルするのはそれ程大変ではないが
Lazy evaluationのコンパイラは一般のプログラマには
理解しにくいだろうというのが一つの理由。
0177デフォルトの名無しさん
NGNG0178デフォルトの名無しさん
NGNGocaml使ってます。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]
0179178
NGNG0180デフォルトの名無しさん
NGNGニチャンテトキドキコウイウヒトイルカラコワイ
0181デフォルトの名無しさん
NGNGゴメンナサイ
0183デフォルトの名無しさん
NGNG禿胴 ...
0184デフォルトの名無しさん
NGNGhttp://www.kaba.or.jp/htbin/wwwfinger?person=sinya
こういう人を見ると自分のヘボさを実感します。
0185デフォルトの名無しさん
NGNGな〜んてね
0186デフォルトの名無しさん
NGNG0187178
NGNG条件反射でやってしまった (´Д`) はぁー鬱
他にもOcamlにはオーバーロードが無いので
3 + 2, 3.0 +. 2.0 など区別して書きます。
実数を扱うプログラムを書く時など、ちょっと気になるかも...
0188デフォルトの名無しさん
NGNGしかし=は未だオーバーロードされているようで。
0189178
NGNG> しかし=は未だオーバーロードされているようで。
そうでした。>>187は言いすぎでした (鬱死
「+,-,/,*,符号反転といった演算子はオーバーロードされてない」と訂正します。
...反省すると、型システムはオーバーロードを考慮して作られていません、
ということが言いたかったのでした。
このためOcamlでは = や < などの比較演算に'a->'a->boolという型を持たせ
ることでオーバーロードを実現しています。こうすれば(整数) < (整数) と
(実数) < (実数) が同時に型チェックを通るのでよいのですが、一方で < が
未定義な引数が来てもそれを通してしまいます。例えば(fun x -> x) < (fun
x -> x) は実行できて、例外を発生します。この点、SMLでは型システムが <
の定義されている型を知っているのでこれを型エラーにします。
0190デフォルトの名無しさん
NGNGttp://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
にて。
0191デフォルトの名無しさん
NGNG0192190
NGNG>191は私に対する回答ですか?
タプルなんて出てこないと思うのですが...。
タプルって(a,b)みたいなやつですよね?
0193デフォルトの名無しさん
NGNG折もわからんのだが、
fun get_third xs = get_nth 3 xs
ならうまくいくねぇ。どうしてなんだろ。
0194デフォルトの名無しさん
NGNG部分適用で多相的な関数を宣言するのは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の型を見ると...
0195デフォルトの名無しさん
NGNG「fun get_third xs = get_nth 3 xs が良くて
val get_third = get_nth 3 がだめなのは仕様です。」
0197デフォルトの名無しさん
NGNG0198デフォルトの名無しさん
NGNG0199デフォルトの名無しさん
NGNG関数型プログラミング言語ML
http://pc.2ch.net/test/read.cgi/tech/1012445015/
以後はこちらで。
0200200
NGNGそして、終了!!!!!!
0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNGでも良スレでした。
0203デフォルトの名無しさん
NGNG関数型プログラミング言語ML
http://pc.2ch.net/test/read.cgi/tech/1012445015/
以後はこちらで。
引越しの原因は >>1の説明の不備による混乱。
また、このスレの説明ではMLをまだ知らない人がMLを始めることはないでしょう。
■ このスレッドは過去ログ倉庫に格納されています