トップページ⇒tech
203コメント54KB

ML!!!!!!

■ このスレッドは過去ログ倉庫に格納されています
0001あなたの近くの名無しさんNGNG
Meta-Languageについて語って下さい。
この掲示板の人なら知ってるかなと…
な〜んてね
0002デフォルトの名無しさんNGNG
>1
son of a bitch.
0003デフォルトの名無しさんNGNG
関数型言語
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=987954395
0004デフォルトの名無しさんNGNG
age
0005デフォルトの名無しさんNGNG
Neta?
0006デフォルトの名無しさんNGNG
というわけで今からここはNeta Languageスレになります。
0007デフォルトの名無しさんNGNG
検索で、メーリングリストと区別つかないのが悲しい
0008デフォルトの名無しさんNGNG
>>7
激しく同意。
SML とかで検索すると
Smalltalk 系の ML とかひっかかるし…。
0009名無しNGNG
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使ったらファームウェアのバージョンいくつになったの?
0010デフォルトの名無しさんNGNG
というわけで今からここはNeta Languageスレになります。
0011デフォルトの名無しさんNGNG
というわけで今からここはNeta Languageスレになります。
0012デフォルトの名無しさんNGNG
>>7
Scheme「お前なんかまだましな方だよ…」
Clean「それは俺のセリフだろ…」
0013デフォルトの名無しさんNGNG
>>12
Scheme はそれほどでもないよ。
0014デフォルトの名無しさんNGNG
.comとか.netとか
0015デフォルトの名無しさんNGNG
blue なんかどうするよ。
0016デフォルトの名無しさんNGNG
.co.jpとか.ne.jpとか
0017デフォルトの名無しさんNGNG
>>1
のいうMeta-Languageってわからない人が多いようです。
1さん説明してください。
それともヴァカに別れを告げてスレ削除してください。
0018デフォルトの名無しさんNGNG
Meta Language is not Language!!
0019not 1NGNG
>>17
自分で調べろよ。
0020デフォルトの名無しさんNGNG
http://www.google.com/search?q=cache:9oW2EN0V8XE:www.score.is.tsukuba.ac.jp/~minamide/lectures/sml.htm+ML+%83v%83%8D%83O%83%89%83~%83%93%83O&hl=ja
0021デフォルトの名無しさんNGNG
http://www.google.com/search?q=cache:QJpUIo62oI8:www.yfcbookshelf.com/ml_lisp_scheme.htm+ML+%8A%D6%90%94%8C%5E&hl=ja
0022デフォルトの名無しさんNGNG
なぜにgoogle経由?
0023デフォルトの名無しさんNGNG
色がついててキレイだから。
0024デフォルトの名無しさんNGNG
確かに…
0025デフォルトの名無しさんNGNG
ocaml って ml ですか
0026not 26NGNG
htmlって ml ですか
0027デフォルトの名無しさんNGNG
>>25
ML の一種みたいなもんです。

>>26
Markup-Language ではありますが
Meta-Language ではありません。
0028デフォルトの名無しさんNGNG
�_�gってmlですか
0029デフォルトの名無しさんNGNG
合成関数を表す、oの定義ってどんな感じですか?
0030基本的に無知NGNG
なんかHaskellスレが異様に盛り上がっているのでありますが、
Haskell界とML界の温度差って、どこから来るのでありますか?
0031もっと無知NGNG
なにそれ?
0032デフォルトの名無しさんNGNG
関数型プログラミング言語Haskell
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=996131288
0033デフォルトの名無しさんNGNG
>>29
infix o;
fun op o(f,g)=fn x=>f(g x);
かなぁ?
0034デフォルトの名無しさんNGNG
>>33様
fun f o g = …の後に続けられる?
003533NGNG
>>34
すまん、質問の意味がわからん。
0036デフォルトの名無しさんNGNG
fun f o g = _____;

_____の部分の穴埋めをお願いしたい…ってことかな?
0037民族分布図NGNG
>>30
アメリカ: SML
エゲレス: Haskell
フランス: OCAML

アメリカ: Common Lisp
ユーロ: EuLisp

フランス: Prolog
0038民族分布図NGNG
あ、それから、
エゲレス: 関数型言語のメッカ
0039デフォルトの名無しさんNGNG
EuLisp と OCAML って初めて知った。
0040デフォルトの名無しさんNGNG
>>39 OCAML
http://pauillac.inria.fr/~furuse/jmmm/
004133NGNG
>>36
そういう書きかたってできるのかなぁ・・。
なんかできないような気もする。
0042デフォルトの名無しさんNGNG
なんとか出来ませんか?
0043Ruby >>>>> PythonNGNG
【衝撃の真実】Pythonユーザはホモ集団!!!
http://piza2.2ch.net/test/read.cgi/tech/965815778/
--------------------------------------------------------
446 :デフォルトの名無しさん :01/10/05 23:44
ホモフォビックなホモ、愛ゆえのレイプ、そしてクィアなレズビアン
....あぁすばらしい(照)
0044デフォルトの名無しさんNGNG
>>42
> なんとか出来ませんか?

何をしたいのか説明せよ。>>33は理解したか?
0045デフォルトの名無しさんNGNG
>>30

元々Meta言語として作られたモノと標準関数型言語として作られたモノの違いかなあ?
0046デフォルトの名無しさん NGNG
.NETで関数型言語にも風穴があくんでしょうか?
0047デフォルトの名無しさんNGNG
>>46
> .NETで関数型言語にも風穴があくんでしょうか?

あいたとしても針穴。まあそれはそれでいとおかし
0048デフォルトの名無しさんNGNG
ML.NETとかHaskell.NETなんていつ出てくるのかな?
0049デフォルトの名無しさんNGNG
>>48
http://research.microsoft.com/users/simonpj/
http://research.microsoft.com/~dsyme/
とかいるから早いんじゃない?

MSってNTとかSOAPとかC#とか最初の設計をやる研究者は優秀なの呼んできてるから。
経営方針や屑プログラマのせいでなんだかおかしくなるだけで。

ただ、全てのAPIが使えるようになるわけじゃないと思うけどね。
Monad的にinterfaceを変えないといけないからさ。
VBだって使えないAPIたくさんあるよね。
0050デフォルトの名無しさんNGNG
マイクロソフト自身が実装するのかぁ、、、
でも楽しみだね。なんにしても。
0051デフォルトの名無しさんNGNG
>>50
水を差すようだけど、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
>>51
そうですか。安心しましたw
0053デフォルトの名無しさんNGNG
>>51
> 水を差すようだけど、MSはC#とVBとC++で手一杯だからそれは無いと思う。
> RationalにJAVAを任せたみたいに、FujitsuがCOBOLを実装するようにどっかの
> 物好きな会社が実装することになるはず。

ん? 「〜思う。〜はず。」って何? もう試験的に実装始めてるじゃん。GHC baseでさ。
http://research.microsoft.com/~dsyme/読んだ?

まあ、実用になるものが出てくるとは思えないけど。
0054デフォルトの名無しさんNGNG
とにかく処理系のプロトタイプをCLR向けにイッパイ作って
欲しいところなんだろうね。たぶんMSも製品化するつもりで
作っているんじゃんくて、布教活動の一環としてとらえて
いるんでしょ。

算数しかできないミニチュア言語より、少しのがんばりで、
.NETの多くの機能を利用できる方がありがたいに決まってるし。わら
0055デフォルトの名無しさんNGNG
>まあ、実用になるものが出てくるとは思えないけど。

商用プロダクト実装に向けての実証という段階でないかと"思う"よ。
んで、あらかたの枠組みが決まった段階で丸投げすると。
CLS準拠レベルがどうなるかはサードパーティーのキャパとMSの支援次第。
0056デフォルトの名無しさんNGNG
ま、IL, CLRの研究の一貫なんでしょ。
Project 7って言うみたいですね。挙げたURL見てね。
0057デフォルトの名無しさんNGNG
CLRってそんなに凄いのか?
0058デフォルトの名無しさんNGNG
うん♥
0059デフォルトの名無しさんNGNG
あっちのほうも満たしてくれるのか? ウヘヘ
0060デフォルトの名無しさんNGNG
ふっ…
0061デフォルトの名無しさんNGNG
あっちのほうも満たしてくれるのか? ウヘヘ
0062デフォルトの名無しさん NGNG
涼スレを汚さないで下さい
0063デフォルトの名無しさんNGNG
34の質問に答えてないではないか…
では拙者が……
…
ん?
…
わからん…
0064デフォルトの名無しさんNGNG
>>57
> CLRってそんなに凄いのか?

まずはILの設計次第、次にCLRの実装次第だけど、
ILはJava byte codeの前例を参考にできるからねー。
しかも中間言語の経験が深いSimon Peyton Jones呼んできてるし。

MS得意の、他の人にinnovateさせておいて、後追いでinnovateを標榜する、だな。

> CLS準拠レベルがどうなるかはサードパーティーのキャパとMSの支援次第。

製品としては出ないと思うが…
0065デフォルトの名無しさんNGNG
MLは言語の筋は良いのに普及がいまいちなのは,
一番メジャーであり割と最近まで唯一のフルセットのフリーな処理系であった
SML/NJの効率や使い勝手があまりよくなくしかも開発のペースが遅かったこと,
そして標準であるSMLの仕様がいまいち古臭く最新の研究成果を反映していないこと.
が挙げられると思う.CAMLはその辺を独自路線で良いものにしたわけだが,
あくまで非標準ということでフランス以外ではあまり受け入れられていない.
MLの基本設計は好きなのでこういった残念な状況は改善されて欲しいのだが.
0066デフォルトの名無しさんNGNG
>>65
オイオイ普及しないのは、まず名前のせいだろ!
地味すぎだし、勘違いされるし(w
0067デフォルトの名無しさんNGNG
MLの目的ってのはなんですか?
つまりMLの存在意義というか…
どうなんでしょう?
0068デフォルトの名無しさんNGNG
67の目的ってのはなんですか?
つまり67の存在意義というか…
どうなんでしょう?
0069デフォルトの名無しさんNGNG
69の目的ってのはなんですか?
つまり69の存在意義というか…
どうなんでしょう?
0070デフォルトの名無しさんNGNG
>>67-69 は爆撃で塵と化しました。アメーソ
0071デフォルトの名無しさん NGNG
meta langってなんかどうしようもなくベタですね。
leibnizとかにしてくれればよかったのにw

>>69
愛の表現形式です。それ以上のでも以下でもありません。
0072デフォルトの名無しさんNGNG
>>71
LCFが本題だったから、軽い気持ちでつけたんじゃないかな?

それとも、わざとそっけない態度、それが愛の表現形式…
0073デフォルトの名無しさんNGNG
Goferは名前はスゴそうなのにあんま普及してないぞ?
0074デフォルトの名無しさんNGNG
>>68
答えられないからって…(プ
>>69
愛ですね。
0075忠告NGNG
良スレだと思う奴らは絶対ageんな。
0076デフォルトの名無しさんNGNG
以後、
http://www.amazon.co.jp/exec/obidos/tg/detail/glance/-/books/4756116418
これをまず読んでから書き込んでね


ところで2chはアマゾンとのアファリエイトはやってるのかな?
あるサイトから来た客が買い物したらその何パーセントがその
サイト運営者に落ちるっていう。どうなんだろう。
だとしたら本の紹介するときはアマゾンを使うことにしたいところなんだけど
0077デフォルトの名無しさんNGNG
>>76
>最新トレンドを満載したプログラミング言葉である。
なんか泣けてきました。
0078デフォルトの名無しさんNGNG
>>77
でも本当では?
関数型はトレンドを先取りしてきた感がある。
0079デフォルトの名無しさんNGNG
XMLっていうのは関数型言語の逆襲だと思ってました
0080デフォルトの名無しさんNGNG
MLとかHaskellなんて名前じゃ永遠に市場から評価されるわけないし
0081デフォルトの名無しさんNGNG
>>80
名前と市場の評価が関係あるのか?
普及しそうにない名前だってのは同意するけど。
0082デフォルトの名無しさんNGNG
>>73 研究社英和中辞典より
go・fer 米俗 (会社の)使い走り,雑用係.
0083デフォルトの名無しさんNGNG
はは、だめじゃん。
0084デフォルトの名無しさんNGNG
>>80
Microsoft ML2001とかJavaMLではどうでせう?
0085デフォルトの名無しさんNGNG
ML.NETに期待!
0086デフォルトの名無しさんNGNG
>>37
国で分けても意味無いと思うよ。
大学/研究機関 で分けたほうがいいよ。
0087デフォルトの名無しさんNGNG
Haskell と Scheme があれば ML っていらなくねぇ?

とか言ってみるテスト。
008887NGNG
Scheme があれば Haskell もいらねぇよ。

とか言われそうな予感。
0089デフォルトの名無しさんNGNG
いや、逆だろ。
SchemeでHaskell的なプログラムするのはめちゃ大変。
逆はすぐできるけど。
0090デフォルトの名無しさんNGNG
Haskell挫折しました。
0091デフォルトの名無しさんNGNG
ここのスレ読んでやってみたくなったんだけど、
いい本なんかないかな?>>76の本以外に何かある?
教えて下さい。
0092デフォルトの名無しさんNGNG
とりあえず>>76がいいと思うよ。
MLにこだわらないなら、Haskellスレも読んでくれぃ。
0093デフォルトの名無しさんNGNG
>>91-92
StandardMLとかいう本が出版されてますが。
キシュツ?
0094デフォルトの名無しさんNGNG
たしか、日本人の団体(京大?)が書いた本があったよ。
上・下巻。ちょっと前、図書館でみつけた。
厳密にはML専門の本では無かった気がするけど、
良い本だった。
0095デフォルトの名無しさんNGNG
amazon.comで検索すると10冊ぐらい出てくるけど、
びっくりしたのはどれも最近出版されていること。

ところでそれらの中で一冊といったらどれがお勧めですか?
なにかMLの英語の本でいいものを知ってる人がいたら教えて
下さい。それとも一冊ぐらいじゃマスターできないものでしょうか?

金が無いので沢山本を買うことができません。
0096デフォルトの名無しさんNGNG
http://www.jaist.ac.jp/~ohori/mltext.html
どうなの?
0097デフォルトの名無しさんNGNG
http://www.gin.or.jp/users/daikoku/lang/func/ml.htm
0098デフォルトの名無しさんNGNG
>>96
ありがとう。ここでまず基本をみっちりやってみようと思います。
009996NGNG
>>98
え?
別に>>96の本を薦めてるわけじゃないぞ…。
0100ゴルゴNGNG
シネクドキ
0101デフォルトの名無しさんNGNG
http://www.amazon.com/exec/obidos/ASIN/052156543X/
これよめ。これで分からなかったらあきらめろ
0102デフォルトの名無しさんNGNG
いやー今日ML習ってきました。ちょっとカルチャーショック。
なんかパズルに向いてるような気がしたのでCマガの電脳倶楽部を
解こうと思ったんですが、む、むずかしい。
forループみたいなのは再帰でやるんですよね?
0103デフォルトの名無しさんNGNG
再帰、特に末尾再帰は引数付きgotoって感じで気軽に使います>102
0104デフォルトの名無しさんNGNG
age
0105デフォルトの名無しさんNGNG
禿げ
0106デフォルトの名無しさんNGNG
>>104-105
きみらageてないで話題提供しなさい。
0107デフォルトの名無しさんNGNG
104はageてるのか?
0108仕様書無しさんNGNG
こんどこそ、あげ
0109仕様書無しさんNGNG
age
0110デフォルトの名無しさんNGNG
MLにマクロってあるの?
0111デフォルトの名無しさんNGNG
>>110
あるよ。
0112デフォルトの名無しさんNGNG
>>111
でもS式って無いんでしょ?どんなの?
サンプルきぼん
0113デフォルトの名無しさん NGNG
ゴルァー!!!いつになったらものがでてくるんだー!
http://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
>>96
おすすめします.
0116デフォルトの名無しさんNGNG
ocalmの情報が少なすぎるよーん。
0117デフォルトの名無しさんNGNG
>>116
インストールすればかなり詳しいドキュメントついてくる。
ドキュメントだけなら、HPからたぶんダウンできる。
しかし、英語ではあるが・・・
俺は今印刷して読みはじめた。
0118117NGNG
O'Camlを理解するために、MLの本読むのも良いかもしれない。
0119デフォルトの名無しさんNGNG
ちょっと質問
SML/NJ で関数の多重定義ってできますか?
fun add(a,b:int) = a+b;
fun add(a,b:real) = a+b;
を定義すると、int向けの add が使えなくなってしまいます。
どうすればいいのでしょうか?
0120116NGNG
http://caml.inria.fr/ocaml/distrib.html
英語は苦手です。
>>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
>>120
おいおい、検索でつづり間違えてるよ・・・
0122116,120NGNG
>>121
ぐはっ!
……綴りを間違えたのではありません。
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
少しはあるのね。
0123119NGNG
どなたか教えてage・・・

関数の多重定義、できなさそうなのは分かってきたんだけど、
じゃあなんで組み込みの + とか - は多重定義になってるの?
っていう疑問が・・・
0124デフォルトの名無しさんNGNG
組み込みの演算子は特別なのです。
この辺がHaskellに比べてカコワルイとこ。
0125119NGNG
>>124
ありがとうございます。
むー残念です。
#なんで多重定義をできなくしてるんでしょうね・・・
#C++だってできるのに
0126デフォルトの名無しさん NGNG
>>124
Haskellに比べてカコイイところはどこですか?
0127デフォルトの名無しさんNGNG
>>126 /
0128デフォルトの名無しさんNGNG
>>126
ModuleとSignature。
それから、Cと同じくらい速いとこ。
0129デフォルトの名無しさんNGNG
119ですが、もうひとつ質問です。

下のような 関数 flat の定義は定義できるのでしょうか?

「リストのリストの・・・リストというように,入れ子になっているリストを,
入れ子になっていないリストに変換する関数を定義せよ. 」
http://a414s1.it.nanzan-u.ac.jp/smlbook/smlwww/node39.html

以下のページの方も悩んでいたようですが、
結局うやむやになってるようです。
www5a.biglobe.ne.jp/~sasagawa/MLEdit/study/index.html

よろしくお願いします。
0130デフォルトの名無しさんNGNG
>>129
2つめのURLの方が挙げているpaulsonの解だと「リストのリスト」
しか扱っていませんね。

a list list -> a list
で、a がさらにリストの時には、a listに対してflatを再帰的に
呼び出してやらなければいけないと思いますが...
そんな動的な型判定がMLでできるのだろうか。
0131デフォルトの名無しさんNGNG
ML2000ってどうなったの?
いつになったら言語仕様が出来上がるの?
0132129NGNG
>>130
やっぱりできないんですかね。。。

C++だと、テンプレートを使って静的に処理できました。
0133129NGNG
すみません、コード載せます。。。

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、ちょっと非力なのかなぁ・・・
0134デフォルトの名無しさんNGNG
つーか、任意の深さのlistをflatするのは
overloadingしないと無理っぽいと思うぞ。
だって、flat関数の型を決定できないじゃん。

で、これはMLが非力ってんじゃなくて、
型安全への立場の違いの現れにすぎない。
C++のtemplateを使うと、bodyをinstantiateするまでは
型安全性を検査できないが、
MLは関数を定義するたびにその型安全性を検査できる。
この違いは大きい。
0135129NGNG
>>134
立場の違いですか。。。勉強不足ですみません。
結論的には、リストのリストの・・・リストをflatにする関数は
定義できないということですね。(あの演習問題は一体・・・)

ありがとうございました。
0136デフォルトの名無しさんNGNG
え?出来ないの?
listってコンパイル時に要素数決まって無くても良いよね?
0137デフォルトの名無しさんNGNG
おいおい,いいかげんなこというなよ.
polymorphism使えば簡単だろうが.
0138デフォルトの名無しさんNGNG
>>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]にはならんぞ。
0139129NGNG
>>138
そうです。そんな感じの関数が定義できるのか? ということです。
関数の型ですが、もし定義できるとしたら
'a list -> 'b list
みたいな感じでしょうかね・・・ 'a と 'b の関係が記述できそうにないんで
やっぱり無理そうです。
0140デフォルトの名無しさんNGNG
そもそも
http://a414s1.it.nanzan-u.ac.jp/smlbook/smlwww/node39.html
の例は
> - flat;・
> val it = fn : 'a list list -> 'a list
って出てるし、
一つの関数で、深さの違うリストに対応せよって話でもない気が…。
0141デフォルトの名無しさんNGNG
>>138-139
ML良く知らないけど、'a list -> 'b listでできるんじゃないの?
本体を書けば自然に関係の記述も本体の中に記述されるでしょ。
0142129NGNG
>>140
いや、まあ、そうなんですけどね。
「リストのリストの・・・リスト」のくだりに喰いついてみたというか。
失礼しました。
0143デフォルトの名無しさんNGNG
イメージとしては
flat(x) = (if (list?(first x)) then flat(first x) else (first x))::(tail x)
のような感じの記述で出来ない?
0144129NGNG
>>141
fun f(_:'a list) = [];
なら 'a list -> 'b list ですが、ほかに思いつかないです。。。

>>143
(tail x) という部分も flat してあげる必要があるような。
で、これだと、>>138 の方が書いてるように、flat の型が
1つに定まってないんですよね。
関数の多重定義が可能ならそんな感じでいけそうなんですけどね。
0145デフォルトの名無しさんNGNG
>>143
list? のあたりが無理。
0146デフォルトの名無しさんNGNG
>>144
え?だから、flatの型は'a list ->'b listでいいじゃん。
何が問題なの?
0147134NGNG
>>142
いや、parametric polymorphismとtemplateの違いがはっきりする
例題としておもしろかったよ。
0148デフォルトの名無しさんNGNG
型が決まらないというよりも、>>145の方が言い得てるような気がする。
動的に型を参照することが出来ないのでは?
0149129NGNG
仮に動的に型を判別できたとしても、無理っぽい気がします。
リストかどうかを判別する関数
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


というような反応なので、やはり関数の型がまずいと思います。
0150134NGNG
>>149
つまり、
((x::xs): 'a list) とすると、xの型は'aだから(flat x)が型不整合。
((x::xs): 'a list list)としても、xの型は'a listだから(flat x)が型不整合。
ってことだね。
0151デフォルトの名無しさんNGNG
悪戦苦闘して、こういうのなら出来たんだけど・・・

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が出るけど何で?
0152デフォルトの名無しさんNGNG
>>151
flat (node [])の場合が書いてないから。
0153デフォルトの名無しさんNGNG
>>151
結局リストもどきのデータ型を自分で作らないと駄目なのか・・・
0154デフォルトの名無しさんNGNG
>>151
それはちょっと違うでしょ。
listじゃなくてconsを使ったのと同等じゃん。
0155デフォルトの名無しさんNGNG
>>154
そうする以外に出来ないのがMLの流儀でしょ。
MLのlistは、S式のように型が弱くない。プログラムの安全性を保障するために。
S式はリストと木のあいの子だから。実装=木、仕様=木&リスト
0156デフォルトの名無しさんNGNG
S式の型が弱いってのがわからない。

datatype Sexp = Cons of (Sexp * Sexp) | Symbol of string |
      Number of int | ...

みたいなvariant型だろ? これだって安全だと思うが。
0157デフォルトの名無しさんNGNG
>>153
まあ、自分で木構造作れば出来るんだから、MLが非力っってことはない。
静的なくせにかなり柔軟な言語だよMLは。
0158デフォルトの名無しさんNGNG
個人で改造ができそうな小さいMLってないですか?
0159デフォルトの名無しさんNGNG
>>158
MLでMLの処理系書いてみるよろし。
0160 NGNG
>>146

'a list ->'b list じゃ駄目だよ。
それだと例えば (1 + flat [1,2,3]) がOKになっちゃう。

これは155や157みたいに少し構造を複雑にしないと
出来ないと思う。
0161160NGNG
間違えやした

例は (hd flat['a'] + 1) にしてください。
0162デフォルトの名無しさんNGNG
>>156
> S式の型が弱いってのがわからない。

(int list) list, int list, etc.をまとめて一つの構造で扱うので、
"int list"として扱うxに対して、head (head x)がcompile時にerrorとならない。
これはデータの持つ特徴を、型にabstractし損なっている、ということになる。

もちろん、>>156の様でないといけない局面では「弱い」とは言えないし、
Lispは、この柔軟さを構文の柔軟さとし、武器とした。
0163デフォルトの名無しさんNGNG
良スレage
0164デフォルトの名無しさん NGNG
mltonってどうよ
0165デフォルトの名無しさんNGNG
ML2000はいつになったら、出来るんだろう。かなり興味あるんだけど。
0166デフォルトの名無しさんNGNG
大納会アゲ
0167デフォルトの名無しさんNGNG
大学でMLで演習やってるとこある?
0168デフォルトの名無しさんNGNG
http://www.google.com/search?q=cache:XXbn3TAAsWk:saitolab.tamacc.chuo-u.ac.jp/WWW/lecture/gakuin/syodoku/chap11.html+site:ac.jp+Meta+Language&hl=ja
0169デフォルトの名無しさんNGNG
ほほう。
0170デフォルトの名無しさんNGNG
htmlはMarkup Language で Programming Language ではないから、あっち(どっち?)ではMetaなんだろう。たぶん。
0171デフォルトの名無しさんNGNG
大発会アゲ
0172デフォルトの名無しさんNGNG
大発会アゲ
0173デフォルトの名無しさんNGNG
Ocaml使っている人いる?
SML/NJより格段に速いそうだけどちょっとSyntaxが違うみたい。
0174デフォルトの名無しさん NGNG
2chではMLってあんま人気ないけど、
実際はどんなもん?Haskellの翻訳本なんて
ないけどMLならある。でもここじゃHaskellだよね。
不思議・・
0175デフォルトの名無しさんNGNG
129で紹介された悩める者です。flatの件は皆さんの書き込みを読んで納得でした。
非正格のHaskellも気にはなりますが、一番好きな言語はMLです。SMLは、やはり好きな言語のSchemeを強力にしたもののように思えるからです。
今は大堀先生の本を読んでいます。
0176デフォルトの名無しさんNGNG
厳密に言えばSMLは関数型言語じゃないんだそうな。
でHaskellはそうだとか。
Side effectが無いかどうかなんだと。
Ocamlなんてさら脱線してるし。

でもHaskellは普及しないと思う。
Closureの機能をコンパイルするのはそれ程大変ではないが
Lazy evaluationのコンパイラは一般のプログラマには
理解しにくいだろうというのが一つの理由。
0177デフォルトの名無しさんNGNG
MLはプログラム解析ソフトを書くのに結構使われてるよ。
0178デフォルトの名無しさんNGNG

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]
0179178NGNG
Σ(゚Д゚)・・・指がすべった・・・
0180デフォルトの名無しさんNGNG
あの大学の理論研究者か・・・凄すぎ(;´Д`)

ニチャンテトキドキコウイウヒトイルカラコワイ
0181デフォルトの名無しさんNGNG
アゲテシマタ!

ゴメンナサイ
0182デフォルトの名無しさんNGNG
http://www.informatics.ed.ac.uk/people/students/Shin-ya_Katsumata.html
0183デフォルトの名無しさんNGNG
>>180 ニチャンテトキドキコウイウヒトイルカラコワイ

禿胴 ...
0184デフォルトの名無しさんNGNG
http://www.kaba.or.jp/~sinya/
http://www.kaba.or.jp/htbin/wwwfinger?person=sinya

こういう人を見ると自分のヘボさを実感します。
0185デフォルトの名無しさんNGNG
>>1
な〜んてね
0186デフォルトの名無しさんNGNG
>>185のレスが、わけわからんコワッ!
0187178NGNG
navi2chのメッセージ入力画面がmhに似ていて
条件反射でやってしまった (´Д`) はぁー鬱

他にもOcamlにはオーバーロードが無いので
3 + 2, 3.0 +. 2.0 など区別して書きます。

実数を扱うプログラムを書く時など、ちょっと気になるかも...
0188デフォルトの名無しさんNGNG
>>187
しかし=は未だオーバーロードされているようで。
0189178NGNG
>>188
> しかし=は未だオーバーロードされているようで。

そうでした。>>187は言いすぎでした (鬱死
「+,-,/,*,符号反転といった演算子はオーバーロードされてない」と訂正します。

...反省すると、型システムはオーバーロードを考慮して作られていません、
ということが言いたかったのでした。

このためOcamlでは = や < などの比較演算に'a->'a->boolという型を持たせ
ることでオーバーロードを実現しています。こうすれば(整数) < (整数) と
(実数) < (実数) が同時に型チェックを通るのでよいのですが、一方で < が
未定義な引数が来てもそれを通してしまいます。例えば(fun x -> x) < (fun
x -> x) は実行できて、例外を発生します。この点、SMLでは型システムが <
の定義されている型を知っているのでこれを型エラーにします。
0190デフォルトの名無しさんNGNG
質問いいですか?

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
にて。
0191デフォルトの名無しさんNGNG
整数とリストのタプルを要求しているのに整数を与えているから。
0192190NGNG
s/get3/get_third/gでした。スマソ

>191は私に対する回答ですか?
タプルなんて出てこないと思うのですが...。
タプルって(a,b)みたいなやつですよね?
0193デフォルトの名無しさんNGNG
>>190
折もわからんのだが、
fun get_third xs = get_nth 3 xs
ならうまくいくねぇ。どうしてなんだろ。
0194デフォルトの名無しさんNGNG
>>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の型を見ると...
0195デフォルトの名無しさんNGNG
>>194をはしょって言えば
「fun get_third xs = get_nth 3 xs が良くて
val get_third = get_nth 3 がだめなのは仕様です。」
0196190NGNG
>>194-195
ありがとうございます。
元ネタのページのないようがSML97以前のものということでしょうか。
正直、よくわかりませんが、(w
勉強してみます。
0197デフォルトの名無しさんNGNG
日経平均1万円割れ アゲ
0198デフォルトの名無しさんNGNG
MAXミーナできちゃった婚おめでと、アゲ
0199デフォルトの名無しさんNGNG
いろいろありまして、MLスレはお引越しです。

関数型プログラミング言語ML
http://pc.2ch.net/test/read.cgi/tech/1012445015/

以後はこちらで。

0200200NGNG
200get!!!

そして、終了!!!!!!
0201デフォルトの名無しさんNGNG
もっとこっちのスレで頑張るべきだ!
0202デフォルトの名無しさんNGNG
凄い高レベルの人がいるから皆恐縮してるのでは。

でも良スレでした。
0203デフォルトの名無しさんNGNG
いろいろありまして、MLスレはお引越し済みです。

関数型プログラミング言語ML
http://pc.2ch.net/test/read.cgi/tech/1012445015/

以後はこちらで。

引越しの原因は >>1の説明の不備による混乱。
また、このスレの説明ではMLをまだ知らない人がMLを始めることはないでしょう。
■ このスレッドは過去ログ倉庫に格納されています