関数型プログラミング言語ML
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
NGNGMLは比較的学びやすく、関数型言語を学んでみたい人にもお奨めです。
MLの魅力に取りつかれた人も、MLをこれから学ぶ人もどうぞ。
参考:リンク集
http://www.gin.or.jp/users/daikoku/lang/func/ml.htm
0002デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1002111468/l50
0003デフォルトの名無しさん
NGNG1じゃないけどあっちはネタスレ化してるからダメだろ
0004デフォルトの名無しさん
NGNGあ、ほんとだ。
ごめんなさい。
・・・でも、そちらのスレは1の説明不足で、荒れ荒れになってますので、
こちらで再開した方がよろしいかと思いますが、いかがでしょう?
0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNGMeta-Language、と書いただけでスレをスタートしたので、
だれも何のことかわからなかったらしい。
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNGよってこっち終了w
MLスレ使い切ってもまだこっちがdat落ちしてなかったら
こっちを使おう!
0010デフォルトの名無しさん
NGNGアスキーから翻訳がでているUllmanの本は内容もだめ(大御所だけど
関数型プログラミングについてはわかってないね)だけど訳もだめ.
まあ,まともにやってる人はみんなPaulsonくらい読んでるよね?
0011デフォルトの名無しさん
NGNG大堀先生は良い人だ。
00122
NGNG向こうのスレでも結構まともな議論がされてるように見えるのだが。
荒れてるといっても一部のレスがアレなだけだし。
まあ、こっちでやってもいいのでしょうけど
その場合は、向こうのスレにその旨を書き、
こちらへの誘導リンクを貼っておくべきかと。
0013デフォルトの名無しさん
NGNG>アスキーから翻訳がでているUllmanの本は内容もだめ
買っちゃってるよ・・
0014デフォルトの名無しさん
NGNGby Lawrence C. Paulson
http://www.amazon.com/exec/obidos/ASIN/052156543X/
0015デフォルトの名無しさん
NGNGたしかに Ullman の本の内容の薄さはやばい。
0016デフォルトの名無しさん
NGNG勝手ながら誘導リンクを張っておきます。
MLしらないひとにもMLやって欲しいので。
(>>1のリンクは役に立つと思うので・・)
0017デフォルトの名無しさん
NGNG確かに読んだ後、MLって割と簡単だな、とは思ったんですけど・・
0018デフォルトの名無しさん
NGNGに指定しながらほとんど参照しませんでした。それなら買わせるなよなあ…
0019デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNG英語だから、よさ「そう」、って感じだが。
0021デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNGなった.例えば
fun id x = x
と定義しておいて
val id' = id id
とするとエラーになる(SML90ではちゃんと定義できる).同様に
fun curry f x y = f (x, y)
fun twice (f, x) = f (f x)
と定義して
val ctwice = curry twice
とするのもだめ.
うーむ.
0024デフォルトの名無しさん
NGNGMLに密着しすぎ(w
0025デフォルトの名無しさん
NGNGう〜ん、
かくなる制限はなぜに設けられたのでしょう?
なにか良いことでもあるのかな?
ML使ってるだけで、背後の理論を知らないので理由がわからぬ。
0027デフォルトの名無しさん
NGNG0028デフォルトの名無しさん
NGNG何がどう制限されたのか、はっきりとわからない(泣
MLはまだまだだ・・
0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNGポリモルフィズムと破壊的代入が相容れないからです。
もし制限が無いと例えば
let val f = ref (fn x => x) in f := fn x => x + 1; !f "abc" end
が型チェックを通ってしまう。しかしこれを実行したら整数を取る関数に文字
列が渡され、まずい。
ということで、これを回避するための制限がvalue polymorphismです。この制
限により上の例だとfは単相型しか持てなくなり、let本体で型エラーが起きる
ので、上の例は無事弾かれます。
0031デフォルトの名無しさん
NGNGHaskell使いが聞いたら喜びそうな話だ。
0032デフォルトの名無しさん
NGNGあれってありですか?
関数型でなおかつオブジェクティブっていうのは素敵に思える反面、
じつは殺しあっていてどっちでもないという結末も想像できます。
0033デフォルトの名無しさん
NGNGなぜそう想像するの?
0034デフォルトの名無しさん
NGNG関数型と、オブジェクトって相性わるそうじゃない。
それに、すんなり兼ねそなえられるなら、なぜに他の言語がそうでない?
だから無理してるのでは?
そうおもったわけ。
0035デフォルトの名無しさん
NGNGRuby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 関数型言語
0036デフォルトの名無しさん
NGNGなかなか勉強がはかどりません。専門に勉強できる学生さんがうらやましい。
最初にSMLに出会ったのはMLWorksでした。
竹内関数を実行して、そのスピードにびっくりしました。
もともとSchemeが好きでしたから、型がきっちりしているのに最初は抵抗が
ありました。しかし、今ではSMLの方が気に入っています。そして、Prologのような
パターンが使えること、モジュールが使えることなど、今まで接してきた正格な
言語では最強ではないかと思います。
再帰は強力な思考方法なので、それを活かせる言語という点でもSMLは良い言語だと
思います。
0037デフォルトの名無しさん
NGNGオブジェクトを入れると型システムや型推論がややこしくなるからねぇ。
Ocamlはよくやっている。
しかしたまに複雑な型システム故の理解困難な型エラーに悩まされる、時もあるが...
0038デフォルトの名無しさん
NGNG関数プログラミングになじみがない方にとっては、とっつきやすい本だと思います。
この本で入門を果たした後に、Paulsonさんや、大堀先生の本に取り組めばと思います。
0039デフォルトの名無しさん
NGNG(大堀先生の本でもちょっと解説されていましたが)
以前、武市先生の関数プログラミングの本でラマヌジャン数を求める
MirandaかHaskellのコードが書かれた本があって気にかかっていました。
0040デフォルトの名無しさん
NGNGMeta-Languageでわからない奴(アホ)はこっち。
わかる人はあっち。
0041デフォルトの名無しさん
NGNG0042デフォルトの名無しさん
NGNG0043デフォルトの名無しさん
NGNG無念。
0044デフォルトの名無しさん
NGNGdatatype 'a inflist = Nil | Cons of 'a * (unit -> 'a inflist)
じゃだめ? (無限というよりは遅延リストだが)
0045デフォルトの名無しさん
NGNG普通に、
(unit -> 'a inflist) を呼んだのとあまり違いがないようにも思えますが・・
0046デフォルトの名無しさん
NGNGfun nat n = Cons (n, fn () => nat (n + 1))
とか(nat 0 = [0, 1, 2, 3, ...])
fun filter p l =
case l of
Nil => Nil
| Cons (hd, tl) =>
if p hd then Cons (hd, fn () => filter p (tl ()))
else filter p (tl ())
とか(リストlをpでフィルターする)。これでいけると思ったんだけど...
>>45
>普通に、(unit -> 'a inflist) を呼んだ
??? 45流だとどうなるの?
004739
NGNG大堀先生の本でも同様に定義されていて、
以下p104より引用
datatype 'a inflist = NIL|CONS of 'a * (unit -> 'a inflist)
引用終わり
本を読んで、SMLでも無限リストが使えるのか、こいつはすごいと思ったものの
意味がよくわからずに深く読んでいませんでした。正格言語では無限リストの表現
は難しくなってしまうのでしょうか。「関数プログラミング」バード&ワドラーでは
では簡潔な表記になっているのですが。
0048デフォルトの名無しさん
NGNGそんなことできるんですね。
Ullmanの本と違ってそんなことも書かれているんですね。
無限リストはLazyを拡張したMLだけが使えるものだと思っていました。
大堀先生の本は読むべきかも。
0049デフォルトの名無しさん
NGNG無限の実装は遅延objectですが何か?
0050デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNGあがってないよ大将!
といいつつ折れもsage
0052デフォルトの名無しさん
NGNG以前、人に薦められて「プログラム意味論」(横内寛文 著)を購入しました。
第2章がそれですが、独学ではきびしいです。
「関数プログラミング」(萩谷昌己 著)あたりならなんとかかんとかです。
チャーチってコンピューター出現以前に何を夢見ていたのでしょうね?
0053デフォルトの名無しさん
NGNGlispやschemeのlambdaはほぼ直感的にわかったけど、
MLとかはそんなに難しいものなの?
0054デフォルトの名無しさん
NGNG「特集 いま欲しいブレークスルー 関数プログラミング」(武市正人)Bit1999,3
に概略が記述されています。
それにしてもBit休刊は悔やまれます。
0055デフォルトの名無しさん
NGNGlambda とかの無名関数のことでなく
λ計算というモデルの話だと思われ。
005652
NGNG私はちゃんと学校で教わったわけではないのですが、、、。
SchemeにしろSMLにしろ関数プログラミングの根底にあるものはラムダ計算
理論と思います。そして、それはチューリング機械やゲーデルの不完全性定理
とも関連がある記憶しています。
この辺り現役で専門教育を受けている人に解説をお願いしたいところです。
0057デフォルトの名無しさん
NGNGなんでこういう頭の硬い人が多いのかなあ・・・
005852
NGNGないと思います。(現に私はよくわかっていません。)
せっかく、MLに興味をもった人を遠ざけてしまってはいけないので、、、。
武市先生もBitの特集で言っています。
引用開始
「しかし、関数プログラミングの悲哀もまた、ここにあるのかも知れない。
関数プログラミングといえば、ラムダ計算法が顔を出すので、それとはなしに
プログラミングに興味のあるプログラマを遠ざけてしまったのではなかろうか。、、、」
引用終わり
0059デフォルトの名無しさん
NGNGHaskellだと公式サイトにいろんなライブらいなどが紹介されていますが、
MLにそのようなものはないのでしょうか。
偉人のソースを読まないと理解は進まないと思うので。
また、MLで(ML流に)GUIのアプリをつくろうという試みとかライブラリはない
のでしょうか。GUIにかぎらずデータベースアクセスなど実用的なものについて。
普及している言語を学ぶと、最初の方に、表示やファイル操作など
「結果として成果を得る」ことや、実際に動くシステムをつくるコツなど具体的な
成果物を得ようとするトピックが必ずありますが、
関数型言語の本ではそういうものはあまり扱われていない傾向があると思います。
内部的な計算は非常に楽しく出来て、じっさい他の言語を使っていても
高階関数があればなあ、とおもったりするようになったりしましたが、
MLに戻ってくるとあまりに計算しか出来ないので悲しくなります。
MLを作っている人って、コンパイラと言語設計だけしか頭にないのでしょうか。
極端な話VBのように「実用に配慮した」りすることには全く興味はないのでしょうか。
なんか、結局他の言語の将来のこやしにしかなっていない気がしてなりません。
0060デフォルトの名無しさん
NGNGMLの場合は単純に「何のひねりも無い名前」がかなり影響してるかと。
メーリングリストとかぶってるし(w
0061デフォルトの名無しさん
NGNG0063デフォルトの名無しさん
NGNGMLでも「実際に動くシステム」はいくらでも作れるし,実際作られてるんですが.
GUIはあればあったでいいんでしょうが,なくても困るものではないし.
「他の言語の将来のこやし」というのはいいですね.確かにMLやその周辺の研究
成果はいろいろな言語の設計・実装にかなり活かされています.VBやPerl,Tcl
みたいに(少なくとも設計レベルでは)全くそういうものを活かしていない言語
が幅をきかせているのは残念ではありますが.
0064デフォルトの名無しさん
NGNGどんなプログラムでも仕様通りに動くんだったらそういっていいのでは?
fun fact x = if x=0 then 1 else x*fact(x-1)
だって「x が(x!がMLで扱える整数値を超えないような)非負整数のときに
fact x はx!を与える」という仕様に従ってるわけだし。
0065デフォルトの名無しさん
NGNG大堀先生の本の後半には実際的なプログラムの例も掲載されていますよ。
GUIについては、他のDelphiなどの言語に任せて、MLは頭脳部分にするという
方法はどうですか。うろ覚えなんですが、AMZI!Prologはそんなアプローチ
だったように思います。
http://www.amzi.com/
MLってどんな用途に使われているんでしょうね。学校での理論的な勉強、研究
はもちろんなのでしょうが、その厳格な型チェックは医療用プログラム、宇宙開発
などシビアーな用途に向いているように思えますが。
0066デフォルトの名無しさん
NGNGいるんですね。それで、その開発部隊にいたという若い人がDelphiでの開発
にあたっていたというので、先日プログラムの話で大いに盛り上がりました。
彼に大堀先生の本を見せてあげたのですが、ピンとこないようでした。
再帰の話をしても、普通はそれは使いませんよね、、てな調子でして。
まあ、それで、MLに関心のあるプログラマーの人というのは研究熱心な方
なんだろうな〜と。
まとまりのない話で恐縮です。
0067デフォルトの名無しさん
NGNG>彼に大堀先生の本を見せてあげたのですが、ピンとこないようでした。
>再帰の話をしても、普通はそれは使いませんよね、、てな調子でして。
なんたる!
それは従来の言語のパラダイムに囚われて損をしているです。
なぜ関数プログラミングは重要か
http://www.sampou.org/haskell/article/whyfp.html
とか
Scheme(LISP)のページですけどここを読めば関数型での再帰の扱いについて
書いています。普通の言語だったら再帰はメモリ食いで良くない、
とされているんですが(じつはそれも怪しいのだが)
http://www.shiro.dreamhost.com/scheme/index-j.html の
なんでも再帰 (06/10/2001)
Schemeプログラムに氾濫する再帰に戸惑うCプログラマへ。 これであなたも再帰使い。
あと、関数型と言うと、理論のラムダ計算を思い浮かべて引く人も誤解です。
使いこなすためにマストな知識ではありません。(知っていた方が良いとは思いますが)
0068デフォルトの名無しさん
NGNG>GUIについては、他のDelphiなどの言語に任せて、MLは頭脳部分にするという
私はMLで全部書きたいです。
他の言語と組み合わせて使うとしても、連携のための手段が少ない。
GUIが書けないと、一般に広く使われないんじゃないかと思うのです。
ML Builderなんかがあるくらいが・・
先ほど気がついたのですが、
Libraries and Tools For Haskell http://haskell.org/libraries/
Haskellならこんなにいろんなものがそろってるようです。
MLのほうが実用的だと思ってるのですが、せめてこれがMLにあればなあと思います。
0069デフォルトの名無しさん
NGNG>シビアーな用途
シビアーな用途といえば、MLではプログラムの検証(Verification)はどうなってい
るのでしょう?
Javaですと、配列の範囲外アクセスがないということを事前検証できますよね、確か。
0070デフォルトの名無しさん
NGNG>シビアーな用途
噂によると、Adaは、コンパイルをちゃんと通ったプログラムは落ちないようになっているのだとか。
>>68
http://www.google.co.jp/search?hl=ja&q=SML+gtk&btnG=Google+%8C%9F%8D%F5&lr=
GTKならあるみたいですけど。
>>63
WindowsではGUIはほとんど必須のようなものでは?
UNIXでは無くても良いのですけど。
0071デフォルトの名無しさん
NGNG>Javaですと、配列の範囲外アクセスがないということを事前検証できますよね
exceptionは拾えるけど、事前検証なんてむりなんじゃ・・・
0072デフォルトの名無しさん
NGNG0073デフォルトの名無しさん
NGNG配列の範囲外アクセスについての事前検証はさすがにやってませんよ.特別な
場合を除いてこれをやるのは非常に難しいでしょうね.
MLはもともと検証(支援)系を作るためにできた言語なので,MLで作られた
検証(支援)系はたくさんあります.プログラム検証にも使われていますよ.
0074デフォルトの名無しさん
NGNGMLのソースをVerificationできる方法ってありますか?
やってみたくなりました。
もしよろしければ。
0075デフォルトの名無しさん
NGNGええと,どういう性質について検証(verification)するのでしょうか?
型の整合性ならコンパイラがやってますが.
0076デフォルトの名無しさん
NGNG検証に関しては厨房です、すみません。
そうですね、何ができるか解りませんが(アフォなことをかいたらすみません)
・このプログラムは有限時間内にかならず応答する。(時相理論のEventuallyみたいな)
・このプログラムのメモリ消費はかならず有限であり、ある一定地を超えない
・プロセスAとプロセスBは排他資源XYに関してデッドロックを起こさない。
・・・期待し過ぎですか?
0077デフォルトの名無しさん
NGNGlisp素人なんでよくわからんけど、
そこのページ(なんでも再帰のほう)の
> 開かれたループ
に載ってる例で
> (define (count-words user-char user-proc)
ってしておいて
> (else (count-words (read-char) count))))
ってのはどういうこと?
0078デフォルトの名無しさん
NGNG(define (count-words user-char user-proc) ... )
は、
(define count-words
(lambda (user-char user-proc) ... ))
のシンタックスシュガーです、という風な事かな。
0079デフォルトの名無しさん
NGNG背景となる理論があるというのは関数型言語のセールスポイントの一つだと思っ
てます。ラムダ計算はScheme, ML, Haskellなどの非常に単純化された模型(モ
デル) なのです。そういう模型があると:
* 模型の中でプログラムがどう動くかを(リダクションとかで)手で確かめることができる
* 模型の中でプログラムに関して推論できる(2つのプログラムが等しいとか)
* 言語を拡張したら何が起こるかを、模型を使って確かめることができる
* 模型の定義は厳密で、また実際の言語の仕様よりもはるかに小さいので
だれでも同一の模型を共有できる
と、いろいろうれしいことがあるわけです。
物理理論には数学的モデルが存在するように(電磁気学にはMaxwellの方程式、とか)、
プログラミング言語にもあったっていいじゃないですか。
でもそういうのを想定せずに作られた言語の方が多い...
0080デフォルトの名無しさん
NGNGOcaml(ぼそ
008252
NGNGレス、ありがとうございます。
プログラミングを始めた頃は理論なんか無視していました。
とりあえず、なんか動くものが作れて面白かったんですね。
その後、Schemeに出会いプログラミングと数学がコインの
表と裏のような関係にあることがわかり興味を持ちました。
ホフスタッターのGEBを読んだこともあって数学基礎論にも
興味を持ちました。
バード&ワドラーの「関数プログラミング」のカバーに書いて
あった次の言葉が気に入っています。
引用開始
関数プログラミングはプログラミングを数学的な活動として
とらえる考え方であり、、、、、」
引用終わり
0083デフォルトの名無しさん
NGNGOCamlであれば、
Labl/Gtk や、Labl/Tk、
LablGL など、GUIをかけるライブラリは揃ってますよ。
実際、他の言語で書くよりもコーディングが楽ですし。
0084デフォルトの名無しさん
NGNG少数派のMLの方言のCamlのさらに変種だから、敬遠してました。
いれてみよっと。
日本語通ります?
あと、ウインドウズやマック向けのアプリも書けます?
0085デフォルトの名無しさん
NGNGhttp://caml.inria.fr/ocaml/distrib.html
> ウインドウズやマック
一応、コンパイラならあります。GUIはGTKやtkなら。
# WindowsでGTKってどうなんでしょう、実際。
008683
NGNGもちろん日本語は通ります。
EUCならば変数名にすらできます。
(そんな面倒なプログラミングはしないけど)
ちなみに、Camlを使ってる人はほとんどいないので、
OCamlのほうが多数派です。
ただ、OOなプログラミングをするかといわれると、
その部分は使わない方が多いようです。
また、プログラミング言語関係の理論の実装では、
SMLよりもOCamlを使った実装の方が多いですね。
ウィンドウズやマック向けのアプリに関しても、
85 のおっしゃるように、gtkやtkを使えば可能です。
ウィンドウズやマックで動くOCamlは、
ftp.inria.fr/lang/caml-light
で、配付されています。
(このディレクトリ名が気になりますが)
0087デフォルトの名無しさん
NGNG思いっきりTeX(笑
Ullmanの本を先に持っていて一通り読んでいたのですが、
どなたかが書かれていたとおり、あまりに内容の分量が違いました。
内容が多いだけではなくて、説明が固いので(論文のような文体です)
大堀先生の本で全くの初めての人が挑戦したら、挫折するのでは
ないだろうかとも思いました。
Ullmanの方が説明もゆっくりで、わかりやすい図もあり、なおかつ
出てくる例のプログラムのテーマが普通の人むけだともいます。
大堀先生の本、一冊すっかりこなすのは大変そうですが、
このスレに出てきた無限リストも乗ってますし、高度なプログラミン
グの例が結構乗っててなかなか良い感じです。
文法の説明だけではなく、ライブらいの使い方ものってたり、
文字列処理の具体的例がのってたり、
最後の章の実際に実用的なプログラムを一から作る例での説明
も良い感じですねえ。
一冊やりこなせば本当に使えるようになりますね、これ。
0088デフォルトの名無しさん
NGNG苦労してる。
>>1のリンク先の説明の簡単な奴がなかったらもう挫折してると思う。
0089デフォルトの名無しさん
NGNG「プログラミング言語ML」Jeffrey.D.Ullman 著 神林靖 訳
アスキー出版局 ISBN4-7561-1641-8
「プログラミング言語 StandardML入門」 大堀淳 著
共立出版 ISBN4-320-12024-8
「ML for the working programmer」L.C.Paulson
Cambridge University Press ISBN0-521-56543-X
「The Little MLer」Matthias Felleisen, Daniel P.Friedman
The MIT Press ISBN
「関数プログラミング」R.バード、P.ワドラー 共著
武市正人訳 近代科学社 ISBN4-7649-0181-1
「関数プログラミング」 萩谷 昌己 著 日本評論社
ISBN4-535-60817-2
「プログラム意味論」 横内寛文 著 共立出版
ISBN4-320-02657-8
0090デフォルトの名無しさん
NGNGSML/NJはコンソールアプリなので、素のままだと編集が大変です。
Emacsのようなコンソールアプリを起動する機能をもったものを
通常使っているようです。「1」のリンク先にあります。
Windowsの場合、他にXyzzyがあります。
また、Windowsの場合SML専用のものにMLEdit(1のリンク先にあり)
があります。こちらは、コンパクトなので宿題を解いたりするのに便利かも。
0091デフォルトの名無しさん
NGNG激しく萎える言葉
0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNG0094デフォルトの名無しさん
NGNG93はCマガかSoftwareDesignででも連載してみせろ。
0095デフォルトの名無しさん
NGNG「Haskelの方が逝けてる」(どうせ見得でやるだけならHaskelにしとこ)
逝っちゃってるRubyの人気がむちゃ悪いのと、似てますね。
0096デフォルトの名無しさん
NGNG住民が少ないから。
総勢10人ぐらいじゃないの?(藁
0097デフォルトの名無しさん
NGNG見栄ですか…
0098デフォルトの名無しさん
NGNGだから、HaskellのLは2つだと口を酸っぱくして言ってるだろうが!!
MLのLが足りないとMだぞ! それでもいいのか!?
0099デフォルトの名無しさん
NGNGwarata
0100デフォルトの名無しさん
NGNGなにしろ山形・・・・・
0101OOマンセー
NGNGなにしろ全角英数・・・・・
0102デフォルトの名無しさん
NGNGHaskellにはRubyのように厨房を引きつける何かかあるんだよ。
だから奴らは言語的にHaskellより優れていて、
より現実的なMLを選ばずHaskellを使うんだ。
そういう理由で、厨房だらけの2chではHaskellスレが盛り上がって
MLスレが盛り上がらないのは仕方ないのだよ。
まあ、厨房共はほっといて俺等はマターリやっていこうや。
0103デフォルトの名無しさん
NGNG気にかかります。Haskellには型推論がないのかと思ったら、そうではない
のですね。
http://www.ipl.t.u-tokyo.ac.jp/~onoue/pub/jssst01.pdf
上記にあるラマヌジャン数を求める例題をみると、へぇ〜って思うのですね。
SMLはSchemeと雰囲気が似ているのが気に入っているところです。
型については全然違いますけども。
Schemeは「計算機プログラムの構造と解釈」の影響もあって普及しつつ
あるようです。SchemerがMLerになるのは自然な流れだと思いますので
MLもいずれはポピュラーになる日が来るのでは?
0104デフォルトの名無しさん
NGNGうおー、煽るなぁあー
やめぇ!
言語的に優れてるって時点であまり正しい意見とは思えん。
MLは現実的だとは思うが、最新の研究成果などはあまり意欲的に取り
入れていない。その結果Ocamlが結構流行ってたりするんでしょうし。
でもHaskellのライブラリが沢山あったりするとこなんかはウラヤマシイ。
0105Haskeller見習
NGNG0106Haskeller見習
NGNGMetaHaskellがないかなー(他力本願(w)。
0107デフォルトの名無しさん
NGNG0108デフォルトの名無しさん
NGNGんでプレビュー版が Goffer って10年近く前に聞いたんすけど、、、
この10年でこの分野に変化と発展はあったのか?なかったのか?
小一時間ほど問い詰めたい...
0109デフォルトの名無しさん
NGNG進歩と発展があったとしても、
実際のプログラミングの現場へフィードバックされてないので空しいだけじゃ。
関数型の最大の課題は使われてないこと。
現実主義のMLですら使われていないのに。
ただでさえ難解なHaskellに機能を追加しても、流行らん。
使えることを天下に喧伝する象徴的なアプリケーションが欲しいところ。
0110デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNG>>110
それはあんまり流行ってない、とも言いませんか?
死んでないだけで。
0112デフォルトの名無しさん
NGNG0.1時間ほど問い詰めたい、と隣の席の者が申しておりますです...
0113デフォルトの名無しさん
NGNGちょっとした抽象構文木(AST)を扱うようなプログラムをさっとプロトタイピング
するのにはSML, Haskellは最適ですね.Scheme, Common-Lisp でもいいけど,
静的型付けによるエラーチェックとパターンマッチングは強力.
あと,Isabelle や coq といった証明支援系を使ってちょっとした証明を作った
りしています.
以上のように,私自身の実務(=研究)に使われています.
では.さようなら.
0114デフォルトの名無しさん
NGNGそれはたぶん実際問題として
「研究所の中だけで走っている車」
みたいなものだと思います。
街中を走ってない車にはたいした意味ない。
0115デフォルトの名無しさん
NGNGプロトタイプじゃないときは何を使ってるんですか?
0117デフォルトの名無しさん
NGNG言語という位置付けだったんだし。>>113は典型的な使い方という気がする。
>>114
車を作ったりテストしたりする道具は何も街中に出る必要はないのでは。
0118通行人
NGNGこれと同じような感じ?w
0119デフォルトの名無しさん
NGNG「研究所の中でしか走らない車」と
「その開発のための研究所の中でしか走らない車」
しか作らない研究所
とは何だ、と思いたくもなったりしますが・・
MLでさえ「研究所の中でしか走らない車」だと言われるなら・・
0120デフォルトの名無しさん
NGNGUNIXはともかくサーバとして現場で活躍していますが、
MLは・・?
でも、私はMLが現場で使えたら嬉しいと思う。
MLやってからCのソースがちょっとMLっぽくなった。
でも、それだけじゃいや。
0121デフォルトの名無しさん
NGNG0122デフォルトの名無しさん
NGNGでも言語屋さんだけなんじゃないの、研究の「現場」って。
だとしたら、「研究所の外だけど、研究所の庭の中でしか走らない車」って感じじゃない?
0123デフォルトの名無しさん
NGNG役に立たなくても、役に立たないことが証明できれば
後の人が無駄なことをしなくて済む。
現場が使えるのが偉いというのは金になるから?
0124デフォルトの名無しさん
NGNG>>122
請負のシステムなんて何年か何十年か使われてぽいじゃん。
と思ってしまうけどね。
まあ、日本はペーパーの数自体アメリカに比べるとはるかに少ないので
弾数すら足りてないのが現状だけども。
0125デフォルトの名無しさん
NGNGあなたは「"カラスは黒い"という仮説」を証明するのに
「"白い蝶々"を発見する事」は役に立っていると信じますか?
0126デフォルトの名無しさん
NGNGつまらんレトリックはやめてくれ。
研究者がみなそんなに馬鹿だと?
0127デフォルトの名無しさん
NGNG研究者が皆馬鹿だとは思わないが、
とりあえず>>125のネタ元が何か
という事さえ知らない奴がいるのは
間違いないと思われ。
0128デフォルトの名無しさん
NGNGヘンペルのカラスを持ってこられてれも。
単に、量化子を「あらゆる世界において」とする論理学の構造問題だよ。
カラスと蝶々に共通するものを研究する必要があればそうするし、
そうでなければしないだけ。
0129デフォルトの名無しさん
NGNG勉強になりました。ありがとうございました。
0130デフォルトの名無しさん
NGNGOcaml の日本語でのテキストの中ではかなりよさげ。
ついでにこれも一応
http://www.ocaml.org/
0131デフォルトの名無しさん
NGNGとっても役に立ちそうです。
書籍はSMLしかありませんから、これは頼りになりそうです。
東大、かと思ったら教養学部ですか(汗
0132デフォルトの名無しさん
NGNG専門課程(3〜4年生)の授業だし、経歴や論文リストを見ると
著者はこの分野のエキスパートと思われ。
この授業に教養の学生はついていけたのか?(w
0133デフォルトの名無しさん
NGNG忙しくって学校に通う時間はないので、ネットが使えるといいのだけど。
放送大学で関数プログラミングの講座とかやってないかな。
0134デフォルトの名無しさん
NGNGJAISTでO堀先生の講義を聴くのもまたよいかと
(行くのが大変だが)
0135デフォルトの名無しさん
NGNG0136デフォルトの名無しさん
NGNGCにあまり遜色無いのでかなり驚いている。
なんでもOcamlはかなり速いとか言いますね。
0137デフォルトの名無しさん
NGNGおいらは言語屋じゃないけど、今では Ocaml でしかプログラム
書いてないよ。ちょっと特殊なデータ処理とか。
実行速度もそうだが、開発効率がやはり良い。
Ocaml 萌え〜
0138デフォルトの名無しさん
NGNGソフトウェア科学会でチュートリアルを企画してもらうのが吉かと。
誰か知り合いはいませんかね。(できれば企画委員)
0139デフォルトの名無しさん
NGNG0140133
NGNGしてくれたり、アドヴァイスをしてくれるような教育機関が
あるとうれしいです。
我流では、なかなか進歩できないものですから。
プログラミングそのものも面白いけど、その基盤となっている
数学基礎論もちゃんと教わりたいな〜。
0141デフォルトの名無しさん
NGNG#こっちの人だったら、天然かもしれんから、レスに戸惑うんですけどぉー
>>144 数学基礎論もちゃんと教わりたいな〜。
このシリーズどうょ?
「数学基礎論へのいざない」倉田令二朗 著、河合文化教育研究所
ttp://www.amazon.co.jp/exec/obidos/ASIN/4879999652/ref=sr_aps_d_1_1/250-6253119-5480263
0142デフォルトの名無しさん
NGNG>(行くのが大変だが)
O堀先生って、堀先生のオブジェクト指向拡張?
λ山近辺にお住みと聞きましたが。
0143デフォルトの名無しさん
NGNGあっちもこっちも同じ人だよ。
0144デフォルトの名無しさん
NGNG「プログラマのための数学基礎論講座」
開講きぼーん >> 偉いひと
0145133
NGNGありがとうございます。
早速、書店に注文します。
この本のことを検索していたら、懐かしい本を見つけました。
「真理、証明、計算」 内井惣七 著 ミネルヴァ書房
10数年前、失業していたときに読んでました。
フレーゲのこととか知ったのは、この本だったかな。
0146デフォルトの名無しさん
NGNG関数型言語を基本から勉強したい人にはオススメだと思ふ。
消防な漏れでも、頑張れば理解できそうだぜ。
Information & Computing 79
プログラミング言語の意味論入門
Matthew Hennessy著 荒木啓二郎 程京徳共訳
サイエンス社 1993/12/10
0147デフォルトの名無しさん
NGNG「史上最大の発明 アルゴリズム」 デイビッド・バーリンスキ
を読み始めてますけど、これ数理論理学、数学基礎論の流れで
書かれてます。ライプニッツ、ペアノ、カントール、ヒルベルト、
、、、という流れで。この流れ関数型言語をやっているとわかり
やすですね。命令言語だとチューリングあたりが元祖という理解
になちゃうんでしょうけど。
著者はライプニッツさんを、計算機科学の元祖とみてるようで、
モナドに悩まされるハスケラーにとっては意味深です。
0148デフォルトの名無しさん
NGNG計算機科学を勉強していれば通常は理解は容易になる。
0149デフォルトの名無しさん
NGNG「関数型」という名称は適当なんだろうかと思う今日この頃。
むしろ本質を指す言葉は他にあるよな気がしてならない。
0150デフォルトの名無しさん
NGNG#>>145-147 探して立ち読みしてみます……
0151デフォルトの名無しさん
NGNG人型言語?入り型言語?とか言われそう。
なんてよむのこれ→λとか(笑
0152デフォルトの名無しさん
NGNG関数型言語は仲良し。
裏を返せば、実用性なしということか。
0153デフォルトの名無しさん
NGNG0154デフォルトの名無しさん
NGNG今はWinskelの本が主流。勿論英語のみ。
ただ、Hennessyの本もpdfかなんかでウェブ上にあったと思ったが。
当然英語のみ。
0155デフォルトの名無しさん
NGNGSchemeはかなり実用に使われていますが。
0156デフォルトの名無しさん
NGNGみなさんの「実用的な」という修飾子の定義があいまいです。
1.テキストデータを処理したり、画像や計算するのが実用的なのか?
2.GUIやネットワーク(TCP/IP)などの処理、飾りまで作れると実用的なのか?
どうでしょう?
0157デフォルトの名無しさん
NGNG0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNGたぶん両方以上。
0160デフォルトの名無しさん
NGNG>たぶん両方以上。
どんなの?
0161デフォルトの名無しさん
NGNGSchemeできる技術者を求めている職場がどれだけある?
たぶん、そういう意味。
俺は自分のためにSchemeを勉強しているし、仕事にも使っているが。
0162デフォルトの名無しさん
NGNGもともと使ってた会社なのか、
それとも自分で無理やり使い出したとか?
0163デフォルトの名無しさん
NGNG貴方みたいな人は、大体どんな職業に
ついたとしても、飯は食えます。
0164デフォルトの名無しさん
NGNGあなたは、どんな職業でも大丈夫
とは言えないでしょう。
0165デフォルトの名無しさん
NGNGそんなんじゃなくて、Schemeで作ったプログラムを
客に納品してるのか、どうかが知りたい。
>>164
ホットケ!
0166デフォルトの名無しさん
NGNGこんなのも作れるんだから、いけるんじゃない?
だめ? >>165
0167デフォルトの名無しさん
NGNGという考え方がわからん。視野がせまいんじゃないの?
0168デフォルトの名無しさん
NGNGプランナーとかプロダクションシステムとかのシステムが。
あと、YahooSTOREはLISPで書かれてたような。
WhiteHouseのWebサーバーもLISPだという噂(これは自信無し)
も聞いたことあり。
0169デフォルトの名無しさん
NGNG誰も実用的なんていう観点は持ち込んでないんですが
0170デフォルトの名無しさん
NGNG0171デフォルトの名無しさん
NGNG>プランナーとかプロダクションシステム
って何?
とりあえず『Scheme による記号処理入門』を注文してみたんだけど。
0172161
NGNGだけです。見積もりの作成なんかのとき、強力な関数電卓として利用す
ることが一番多いかな。
0173デフォルトの名無しさん
NGNGまあ、この話題おもしろいからいいか。
漏れは、金の取れるプログラムの中に、関数型言語で書かれた
ものが少ないというのは処理系の問題だと思っている。
実用アプリを書こうとしたら、ライブラリが足りなくて
結局ライブラリを作るとことから始めなきゃいかん。
これは痛い。
Macintosh CommonLispぐらいライブラリが充実している処理系が増えるといいね。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4756139264/ref%3Dpd%5Fsim%5Fb%5Fdp%5F1%5F2/249-6276606-7673106
この問題は結局、処理系作っても飯は飯は食えんというのが問題なのかもしれない。
0174デフォルトの名無しさん
NGNGLISPを使っている人はMLを使っている人より多いし、
LISPの方がライブラリもあるし常に書き足されている。
LISPerをMLにとりこむことは出来ないか?
使う機会がああれば、MLも手になじむと思うんですが。
0175デフォルトの名無しさん
NGNG>>173
> Macintosh CommonLispぐらいライブラリが充実している処理系
激しく同意。
(関係ないけど、今この方向ではSMLとOCaml、どちらが強いでしょう?)
> この問題は結局、処理系作っても飯は飯は食えんというのが問題なのかもしれない
確かに……。
使われない->処理系で喰ってけない->使えない->使われない
見たくもない悪循環。
0176デフォルトの名無しさん
NGNGbitにあったじゃん。自分あれ読んでSchemeはじめました(笑)。
0177デフォルトの名無しさん
NGNG今すぐ買うけどなあ。
値段がACL並でも。
0178デフォルトの名無しさん
NGNGmerd,Arc,他にも面白そうな言語がうまれてるんですね。
楽しみ楽しみ。っていうか私もつくりたくなってきた。
0179デフォルトの名無しさん
NGNG実用的っていうか業務で使うとなると保守する人が少ないってのがね…。
0180デフォルトの名無しさん
NGNGhttp://merd.net/
http://www.paulgraham.com/paulgraham/arc.html
ですか? merdは初めて見ました。
>>177
ACLってどんな長所がありましたっけ
0181デフォルトの名無しさん
NGNGオレモナー
0182175
NGNG見たくもない悪循環その2。
メンテ出来る人が少ない->そういうのは実務ではねぇ->使える人も使えない人も使わない->興味を持たれ難い
->メンテ出来る人が少ない
……というか、Cが強くなりすぎたんだ……。
0183デフォルトの名無しさん
NGNGああ、例のやつだね。
使われない言語スパイラル。
というか別に C だけでもないでしょ?
0184175,182
NGNG> C だけでもないでしょ?
C++もJavaもPerlも……流行る言語はC系というのが条件なのかなぁと思いまして。
それに、Cがあまりにも広く使われているために他の言語の入り込む余地が無くなっている、という考えが浮かんだんです。
でもMLの場合はCだの何だのと言う以前に関数型ですね
0185デフォルトの名無しさん
NGNG↓
何やらかしても首切られない
↓
終身雇用
↓
(゚д゚)ウマー
0186デフォルトの名無しさん
NGNG(LispからJavaのクラスを呼び出したり、その逆も出来る)
Javaに寄生してその辺の問題点をとりあえずは回避できないかな。
もっとも、MLの「速い」という利点は無くなっちゃいますけど。
SML.NETだとそういう状態になるのかな?
だといいんだけど。
もしそうなら
Ocaml.NETも欲しいかもしんない。
0187デフォルトの名無しさん
NGNG今、Average Programmerのためではなく、
Good Programmerのための言語の候補となるのってなんだろう?
っていろいろ調べてるんですが、いいのご存知ありませんか?
0188デフォルトの名無しさん
NGNG↓
やらかしてしまった!!
↓
首を切られる
↓
会社傾く
↓
(゚∀゚)アヒャヒャー
0189180
NGNGわたしはあまり詳しくなくて……
Good Programmer云々といった物はARCではじめて目にしたくらいなんです。
他の方情報プリーヅです。
>>186
http://www.dcs.ed.ac.uk/home/mlj/
MLjはどうですか?
> .NET
CLR(でしたっけ)はそんなに美味しい物でもないようです。
……とはいっても、無いのとは比べ物にならないだろうとは思うのですけど。
0190デフォルトの名無しさん
NGNGいってなかったっけ?
0191デフォルトの名無しさん
NGNGHaskellじゃないの?Simon Payton Jonesとか。
SML/NJならBell Labだよね。
0192デフォルトの名無しさん
NGNG亀レスでスマソ。
O堀先生は、今は険しい道のJAISTにいらはります。
実力からして東大でも来られただろうに、なぜ好き好んでJAISTへ逝ったかは謎。
酒がうまいから?
0193デフォルトの名無しさん
NGNG「MLがマイナーだから」
の系かと。プログラミング言語って社会的慣性が特に強くて(プログラマは人間だから)、
歴史を見ても研究レベルのお話が産業レベルで受け入れられるのに何十年もかかってるような。
自動メモリ管理とか抽象データ型とか。そもそも高級言語自体が出てきたときも、
「プログラムはアセンブリで書くもので、自動プログラミング(コンパイラのこと)なんて
使い物にならない」とか言われてたそうだし。それと同じじゃん?
だからあと10〜20年ぐらい待てば、MLやHaskellの要素技術も当たり前になるかと(今のままの形じゃないだろうけど)。
たとえば多相型はC++のテンプレートやJavaの汎用クラスとして取り入れられつつあるし。超スローペース&継ぎ足し的だけど…
「テンプレートの型を書くのがうざいー」とか言われ出してるから、型推論も近い…かなあ。
0194デフォルトの名無しさん
NGNGhttp://research.microsoft.com/ppt/
にいる人たちは、どの人もこの分野(関数型言語とか)の有名人。
0195デフォルトの名無しさん
NGNGML2000は俺も気になって聞いてみたことがあるんだが、
完全にアボーン状態らしい。そもそも
http://flint.cs.yale.edu/flint/publications/ml2000.html
に出てる「仕様」の案は、まだばりばりに研究途中の話ばかりで
1年や2年では実用化不可能と思われ。
研究者が自分たちで利用してる処理系はocamlにシフトしつつあるので、
復活は期待できないかと…
0196175
NGNGどうもです。
この分野には「研究中だから駄目」というのがあったんですね。
これには思い至らなかったけど、考えてみれば当たり前のことで。
それに、研究者自身が他へ行ってしまったなら、仕方ないか。
0197デフォルトの名無しさん
NGNG3.1 Subtyping and subsumption
3.2 Object-oriented programming
3.3 Modules
3.4 Concurrency
3.5.1 Extensible type
3.5.2 Datatypes
3.5.3 Laziness
3.5.4 First-class Polymorphism
3.5.5 Tuples and records
3.5.6 Arithmetic
0198デフォルトの名無しさん
NGNGしばらくは出ないの?
早く出てくれ。
0199デフォルトの名無しさん
NGNG0200デフォルトの名無しさん
NGNG自分も欲しいからってそんな事言っちゃってー。またまたぁー。
……ほすぃ。
0201デフォルトの名無しさん
NGNG0202John ◆0z.4Is5E
NGNG0203デフォルトの名無しさん
NGNG0204デフォルトの名無しさん
NGNGhttp://www5a.biglobe.ne.jp/~sasagawa/MLEdit/index.html
これ(sml/nj専用)。……windowsならそのくらい?
わたしの場合は対話環境で色がつけばそれで良いので3つ目のを使ってます。
emacsに慣れてるんなら、それが一番いいのでは無いかと。
0205John ◆0z.4Is5E
NGNGMLEditダウンロードしました。
私の場合も色がついてくれればよかったので。
0206デフォルトの名無しさん
NGNG色出すのに hilit 使ってるんですな。
font-lock 使った最新のはないんだろうか。
0207デフォルトの名無しさん
NGNGhttp://www-rocq.inria.fr/~acohen/tuareg/index.html.en
に無ければ、待つか自分で作るかしか無いのでは。
0208デフォルトの名無しさん
NGNG0209デフォルトの名無しさん
NGNG>205
3つ目の作者です。ども。
XEmacsなどには到底及ばないのですが、イージーなところが
良いのではと一人で納得しています。
ちゃんとインストーラー(inno setup)もつけましたんで、
よろしくね。
0210John ◆0z.4Is5E
NGNGまじっすか?
すごく便利ですよ。
もう少しML勉強したら、なんか語りましょう(w
確かオセロを作っているんでしたっけ・・・・
0211John ◆0z.4Is5E
NGNG0212デフォルトの名無しさん
NGNGOcamlモードもつけてくださいです。
0213デフォルトの名無しさん
NGNGオセロはとっくの昔に挫折しまして、、、。当時は演習問題を解いて
いました。Flat関数で悩んでいたのは私。前スレで解決でした。
>>212
ほんとに?
検討します。
0214デフォルトの名無しさん
NGNGhttp://warplayer.free.fr/
Osiris。個人的には「GPL'ed」というのがアレですけど。
http://www.speakeasy.org/~hchomsky/ocaml-win32.html
これはWin32のAPIが使えます。LGPL。
UNIXやX用のライブラリはocamlもsmlも結構豊富にあります。
http://ocamlsdl.sourceforge.net/
開発止まってる?
0215デフォルトの名無しさん
NGNG0216213
NGNGocamlはどうしたらWinのコンソールで起動しますか?
PATHの設定が必要なんだろうか?
初歩的質問で恐縮です。
0217デフォルトの名無しさん
NGNGPATHの設定 -> ocaml.exeで大丈夫なようです。
>> Fatal error: cannot open pervasives.cmi
Uncaught exception: Misc.Fatal_error
ん?
0218John ◆0z.4Is5E
NGNG残念、間違いです。
Ocamlってオブジェクト指向の関数型でしたっけ。
まあ、よく知らないです。
で、MLのGUI情報ないですか?
0219デフォルトの名無しさん
NGNG自分で調べろよ
0220デフォルトの名無しさん
NGNGそしてこのスレに還元するんだ。
0221デフォルトの名無しさん
NGNG二度とここに来るな
0222デフォルトの名無しさん
NGNG三連星だ
0223デフォルトの名無しさん
NGNGOcamlで書かれた超有名アプリに、
MooっつうWebブラウザがあって、
Ocamlベースのアプレット(!)とか動いてたっけ。
GUIは多分/当然 tkベースだと思うが。
Win32 API wrapper や SDL ほど
高速でも最新情報でもなくてスマソ
0224デフォルトの名無しさん
NGNG0225223
NGNG0226デフォルトの名無しさん
NGNG0227213
NGNGMLEdit-NTで動くかどうか試していました。
system32フォルダにあるCMDを起動させておいて
ocamlを呼び出すと起動しました。Win2000の場合
には、コントロールパネルで環境変数を登録しないと
だめだそうで、CAMLLIBを設定したらOKでした。
ちょっと手直しするとcaml、ocamlもいけそうです。
こんなんでも利用価値があるのなら、なんとかしますが
マジですか?
>>212
0228デフォルトの名無しさん
NGNGお尻s?
0229デフォルトの名無しさん
NGNGOcamlはMLと文法がちがうですから、
色をつけるルールをやりなおさなくてはならないと思われ。
0230213
NGNGご教示ください。
予約語 一覧表 色分けのため
基本ライブラリの関数名 コンプリーションのデータ作成のため
コメントは (* *)でよいのかな?
ストリングは ””だよね。
0231デフォルトの名無しさん
NGNGhttp://www.ai.univie.ac.at/~markus/ocaml_sources/ocaml.vim
emacs, xemacs
http://www-rocq.inria.fr/~acohen/tuareg/index.html.en
この2つは予約語に、
http://caml.inria.fr/ocaml/htmlman/index.html
ocamlのマニュアル
これは基本ライブラリ一覧として、使えると思います。
0232213
NGNGサンキューでした。
0233コメント
NGNG0234age
NGNG(*'ー`*)
0235213
NGNGOcamlってかなり強力な言語みたい。SML以上かな。
0236デフォルトの名無しさん
NGNGその上にMLより速いです。
GUIも作れるようだし。
0237デフォルトの名無しさん
NGNGちょっと、そりゃないんじゃないの、って感じですが。
6. You may develop application programs, reusable components and other
software items that link with the original or modified versions of the
Software. These items, when distributed, are subject to the following
requirements:
a. You must ensure that all recipients of machine-executable
forms of these items are also able to receive and use the
complete machine-readable source code to the items without any
charge beyond the costs of data transfer.
b. You must explicitly license all recipients of your items to
use and re-distribute original and modified versions of the
items in both machine-executable and source code forms. The
recipients must be able to do so without any charges whatsoever,
and they must be able to re-distribute to anyone they choose.
c. If the items are not available to the general public, and the
initial developer of the Software requests a copy of the items,
then you must supply one.
0238デフォルトの名無しさん
NGNGhttp://camlcvs.inria.fr/cgi-bin/cvsweb.cgi/ocaml/LICENSE>>237
>>237
これは処理系そのものの制限なのでは?
「コンパイラ改造するの? いいけど、その時はソース見せてよね」といった感じの。
コンパイラはQPL、ライブラリはLGPLに手を入れたもの
(初めの方にある "As a special exception to" で始まる段を参照)
のようです。
excite翻訳ですぅ
6. オリジナルでリンクするか、ソフトウェアのバージョンを修正した適用プログラム、
再使用可能なコンポーネントおよび他のソフトウェア・アイテムを身につけてもよい。これらのアイテムは、分配された時、次の必要条件に従います:
a. さらに、これらのアイテムのマシン実行可能な形式の受取人がみなデータ・トランスファーのコストの向こうの料金のないアイテムへの
完全な機械可読のソース・コードを受け取り使用することができることを保証しなければなりません。
b. 明示的に、マシン実行可能なソース・コード形式中のアイテムのオリジナルで修正されたバージョンを使用し再度分配する許可を、
アイテムの受取人すべてに与えなければなりません。受取人は、チャージ少しでもなしでそのようにやっていくことができなければなりません、
また、それらは、選ぶ誰もに再度分配することができるに違いありません。
c. アイテムが一般大衆に利用可能でなく、ソフトウェアの初期の開発者が、アイテムのコピーを要求する場合、1つを供給しなければなりません。
0240デフォルトの名無しさん
NGNG書きまくって良いのでしょうか?
link with ってことはocamlのライブラリとか開発環境を
つくった場合にはどうなるんでしょう。
#入らぬ心配だとは言うな(笑
0241gggggggg ◆gggggggg
NGNG0242grrrrrrrrr
NGNG0243デフォルトの名無しさん
NGNGQPLの日本語訳です。
0244デフォルトの名無しさん
NGNGGPLじゃないらしい
0245デフォルトの名無しさん
NGNGOcamlのライセンスの疑惑を解決してください。
きもちわるひ。
0246デフォルトの名無しさん
NGNG238 が正解。コンパイラのライセンスの the Software って
のはコンパイラのことだから、コンパイラ自体のコードと
リンクしなければいいわけ。コンパイラの吐くコードに関し
ては言及していない。
普通にソフト開発するだけならば、標準ライブラリとしか
リンクしない。標準ライブラリは LGPL だったが(メーリング
リストでも議論されたけど)、商用ソフトの開発に Ocaml 使いた
いって人が標準ライブラリが LGPL じゃきついなーってんで
LGPL に手を入れたもの(リンクに関しての例外)になった。
あと、標準ライブラリにも一部ライセンスが違うものが含まれている
かもしれないことに注意(別ライセンスの C のライブラリを使ってた
りするらしい。Str モジュールとかだったかな)
0247238
NGNGhttp://www.gnu.org/philosophy/license-list.ja.html のQPLのところを参照。
その辺訂正。
0248213
NGNGOcamlでちょっと遊んでみました。
竹内関数。インタラクティブ、コンパイラだと
SMLの方が速いようです。
let rec f(x, y, z) =
if (x > y) then
f (f(x-1,y,z),f(y-1,z,x),f(z-1,x,y))
else
y;;
fun f(x,y,z) =
if (x > y) then
f (f(x-1,y,z),f(y-1,z,x),f(z-1,x,y))
else
y;
f(12,6,0);;
0249デフォルトの名無しさん
NGNGこんなんでいいのかな?
0250デフォルトの名無しさん
NGNGう〜む、独習書としては??です。
シリーズ0巻、、、。
(自然数を)「1から始めるのは素人です」と言っている
タジマ先生が思い浮かびました。
0251デフォルトの名無しさん
NGNG0252デフォルトの名無しさん
NGNGこのページに載っているソースが物凄く汚いと思うんですけど、
Ocamlではこの書き方が普通なんでしょうか?
なんか、萎えるなあ……。
0253デフォルトの名無しさん
NGNG> インタラクティブ、コンパイラだとSMLの方が速いようです。
ocamlの対話モードはバイトコードだけど、
sml/njのはネイティブコードにコンパイルしてるので自然かと。
0254デフォルトの名無しさん
NGNGたとえばどの辺が?(煽りじゃなくて、純粋な質問)
ちなみに、http://caml.inria.fr/FAQ/pgl-eng.htmlに「ガイドライン」がある。
個人的意見としては、確かにsyntaxは汚いかも…と思う。
0255デフォルトの名無しさん
NGNGということは、いちいちどのライブラリがどのライセンスか調べて、
それに従わないといけないってことですよね?
なんだかなあ。
MSVCの方がよっぽど気楽だなあ。
0256デフォルトの名無しさん
NGNGそれともメールで聞いたら答えてくれるのでしょうか?
OcamlのML・・じゃなくてメーリングリストに入っている人が(
ややこしい(笑))居られるみたいだから、その方なら簡単に
わかるのかな?
0257デフォルトの名無しさん
NGNGどの辺かなあ……。一行に詰め込んでいるところが沢山あるのでそう思っただけかもしれません。でもなんだか、
http://www.bagley.org/~doug/shootout/lang/smlnj/allsrc.shtml
とは違う。
>>255
そういったライブラリはどこかにリストアップされていると思います。
(そういったものの殆どがLGPLでしょうけど)
> MSVCの方がよっぽど気楽だなあ。
MSVCでライセンス関係で気にかけなければならないところってありましたっけ?
0258デフォルトの名無しさん
NGNG気にかけなくても良いから気楽なんでは?
0259デフォルトの名無しさん
NGNG「の方がよっぽど」との事なので、MSVCにも何かあるのかなあ、と。
0260デフォルトの名無しさん
NGNGSMLだろうがOcamlだろうがMSVCだろうがgccだろうが関係ないでしょ。
処理系が何だろうが、配布する時に同梱するライブラリのライセンスを確認するのは
あまりにも当然な事だと思うのだが、どうよ?
0261257,259
NGNG当然のことです。でもOcamlの場合、処理系に同梱されているライブラリすべてが同じライセンスという訳では無いのでややこしい、というそれだけの事。
Rubyの「regex.cはLGPLなんで気をつけてね(これはそのうち無くなるらしい)」と同じような物です。
0262名無しさん@お腹いっぱい。
NGNG0263デフォルトの名無しさん
NGNG0264デフォルトの名無しさん
NGNG程度の差はあれ、みんな混乱してるんだと思う。特にregexp関係は
そういう問題もあって、Jeromeが独自に開発中なんじゃなかったっけ。
(情報量がなくてスマソ)
0265デフォルトの名無しさん
NGNG0266デフォルトの名無しさん
NGNG>>248
tuple 使わないで let rec f x y z = ...
と書いてあげれば少し速くなるはずです。
参考→http://caml.inria.fr/FAQ/FAQ_EXPERT-eng.html#curried
>>252
先頭のackermann関数しか見てませんが...
if-then-else を全部一行で書いてるとか言うのは置いといて
関数本体は、書きたければ、こう書くこともできます
let rec ack = function
| (0, n) -> n + 1
| (m, 0) -> ack (m - 1, 1)
| (m, n) -> ack (m - 1, ack (m, n - 1))
0267デフォルトの名無しさん
NGNGDLLにしてライセンス逃れするわけにはいかないの?
0268248
NGNGカリー化すると速くなるのですね。計測しようとプログラムを書きました。
Ocamlは初めてなので拙い点はご容赦を
let timeRun f x =
let startTime = Sys.time() in
let _ = f x in
let endTime = Sys.time() in
let time = endTime -. startTime in
time;;
# timeRun f2 (12,6,0);;
- : float = 4.717
カリー化したものを計測するにはどうすれば?
考え中です。
0269248
NGNGlet rec f x y z =
if (x > y) then
f (f(x-1) y z) (f(y-1) z x) (f(z-1) x y)
else
y;;
let f3 z = f 12 6 z;;
# timeRun f3 0;;
- : float = 2.954
20年前の8ビット機に比べると現在のパソコンは
モンスターマシンですね。
0270顔も名前も出さずに毎月100万円
NGNGFuture-Web(フューチャーウェブ)登場
なんと10,000円単位の収入
●10,000円単位の高収入
1件につき最大10、000円の高額収入。月収100万円以上も可能。
●画期的なビジネス!
インターネットを利用したこれまでにない斬新で画期的なビジネスです。
●誰でも出来ます!
インターネットが出来る環境の方なら誰でも参加可能です。
●専門的な知識は一切不要!
ビジネスに必要なツールはすべて当社で用意いたします。また、サポ
ートも万全です。
●詳細は今すぐHPをご覧ください。
http://www.future-web.tv/7823/
0271デフォルトの名無しさん
NGNGNT系版でしか使えないんですね。
ちょっと残念。
0272デフォルトの名無しさん
NGNG0273デフォルトの名無しさん
NGNG>>272
googleで調べてね
この板にも載ってるし
0274デフォルトの名無しさん
NGNG野矢茂樹先生の本ですか??
0275デフォルトの名無しさん
NGNGのってなか
0276デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
NGNGそうです。
「無限論の教室」 野矢茂樹 著 講談社現代新書
0278デフォルトの名無しさん
NGNGWin98のAPIがいいかげんなので切り捨てちゃいました。
ごめんね。
0279デフォルトの名無しさん
NGNGついでに。
http://caml.inria.fr/oreilly-book/
オライリーのOcaml本。英語版。
http://groups.google.com/groups?safe=off&group=comp.lang.ml&num=200
comp.lang.ml。
0280デフォルトの名無しさん
NGNG意味あんの?
0281デフォルトの名無しさん
NGNG,} {`i;:r,;'ニ (;;;;、` , r'
. {i' i:.'ー<.・)}:ム ヾi,
キタ━━━━━━━ノ // -r /:::ミ ('ーヽ━━━━━━━━━??!!
i゙ i:/ /二./ /',=、__ノi/
ヽ ヽ! {:::} //::::''´`'7!/
ヽ、__ヽ!l::i:::::ii;;;;;;;|,ノ
`ヽ、`ー""ヽ
`'ー-'''"
0282デフォルトの名無しさん
NGNG0283デフォルトの名無しさん
NGNG型推論?
結構簡単なシステムだよ。(って知ってるか)
うざかったら型を書けば良い。
なにか問題あるか?
0284デフォルトの名無しさん
NGNGだから意味あんのか?と。
0285283
NGNGMLを使う理由って型推論があるから?
違うんじゃない?
0286デフォルトの名無しさん
NGNG0287デフォルトの名無しさん
NGNGわかっていないってことは、プログラマとしてアボーンだよ。
型推論なんかあってもなくても本質的な違いはない。それよりは、
静的型チェックがあることが重要
0289デフォルトの名無しさん
NGNGっていうものに使うんでしょうね?
型を書かない方が良い(柔軟性が高まる?)ばあいもあるのかな?
個人的には関数内で書く関数は、型を書きたくないね。
λっぽくない
0290280
NGNG0291デフォルトの名無しさん
NGNGプログラムは証明なんだろうか?
ちがうと思う。
プログラムはプログラム。型は型。
それ以上でもそれ以下でもないと思う。
0292デフォルトの名無しさん
NGNG0293デフォルトの名無しさん
NGNGどういう意味?
0294デフォルトの名無しさん
NGNG0295デフォルトの名無しさん
NGNG0296デフォルトの名無しさん
NGNG0297デフォルトの名無しさん
NGNG禿同。
MLの型推論は関数の定義において冗長な型宣言が
不要だというだけだものね。
0298280
NGNG0300デフォルトの名無しさん
NGNG要らないから無くせというのは短絡的過ぎない?
要らないものは無くせというなら自分も無くなせば?
必要不可欠な人間なんて居ないないんだから。
0301280
NGNGということでいいんだな?ちょっと便利なだけってことだな?じゃやっぱ
いらねーや。うざい。
0302デフォルトの名無しさん
NGNG他の言語使えば?
0303デフォルトの名無しさん
NGNG使ってから書け。
0305デフォルトの名無しさん
NGNG0306デフォルトの名無しさん
NGNGなぜ?
0307デフォルトの名無しさん
NGNGポインタ(MLだとref)と整数をプログラマが知らず知らずのうちに間違えてないかとか。
型システムには静的な型システムと動的な型システムがあって、
実行時(動的)に型を確かめるか、コンパイル時(静的)に型を確かめるかが違う。
MLのように静的に型を確める機能をつけると言語に対する制約が強くなるけど、
実行時の型検査がいらなくなるからプログラムは早くなる。
schemeとかperlは実行時に型検査をしなくちゃいけないから遅い。
C言語はちゃんとした型システムがないから動作が危険。
うんちくでした。
簡単にいうと安全で効率よく実行できるってのがMLの型規則の意味。
0308デフォルトの名無しさん
NGNG型安全だからといっても、プログラムが安全という訳じゃないと思う。
>schemeとかperlは実行時に型検査をしなくちゃいけないから遅い。
別に、致命的に遅いっていう訳じゃないなら問題ないのでは?
入り口の一箇所でチェックすればいいんだし。
0309デフォルトの名無しさん
NGNG安全の定義によるけど、とりあえずsegmentation faultを起こすようなメモリアクセスは回避できる。
その程度の安全の保証ってことね。無限ループの検出なんかはもっとflow-sensitiveにやんなきゃできないしね。
Cでよくあるsegmentation faultとかバスエラーなんかはC言語の外のバグでOSが検出してんだけど、そういうの
をどうにか言語の中で検出しようって感じ?
遅いのは別に問題っていってないけど、速いってのは遅いってのよりもいいでしょ。
言語の自由さよりも速さを重視してる。
あと入り口の1箇所(関数のはじめとか?)でチェックするだけじゃ駄目な場合もいっぱい。
0310308
NGNG>遅いのは別に問題っていってないけど、速いってのは遅いってのよりもいいでしょ。
たしかに。
コンパイル時にチェックできるのが型だけっていうのが寂しいねー。
コンパイル時に表明がチェックできれば良くなるような気が。
誰か表明の推論エンジン作ってくんないかな?
小規模の言語で無いと出来ないだろうけど。
0311デフォルトの名無しさん
NGNG> Cでよくあるsegmentation faultとかバスエラーなんかはC言語の外のバグでOS
> が検出してんだけど、そういうの
> をどうにか言語の中で検出しようって感じ?
その考えで出来た高級アセンブラって無い物なんだろうか?
Cを駆逐できるほどの……。
0312デフォルトの名無しさん
NGNGなんかTAL(typed assembly language)っていう型付きのアセンブラ言語があった気が。
Javaのバイトコードも一種の型付きマシン語と見なすこともできると思う。
表明ってなんですか?
0313デフォルトの名無しさん
NGNG便利と思ってます。
0314デフォルトの名無しさん
NGNGEiffelの表明のことです。
JavaのAssert文でも良いです。
プログラムが正しく動く条件を外部に表明すること。
0315デフォルトの名無しさん
NGNG型に情報を付加してそれをflow解析する論文があったような。
File型からreadするときにちゃんとread用にopenされてるかどうか
コンパイル時にチェックできるやつが。
0316デフォルトの名無しさん
NGNGどんな論文?
タイトルとか書いた人とかURLとか教えてくれるとうれしーなー。
型に情報を付加するというのは良いアイデアだと思う。
多相型かたに型以外のものが付加できるようにするというのも
面白いかもしれない。
0317デフォルトの名無しさん
NGNGFlow-Sensitive Type Qualifiers
Jeffrey S.Foster, Tachio Terauchi, Alex Aiken
でも落ちてるとこが見つからない。なんでだろ?
僕はどこから落としたんだろう?
ごめんなさい。
0318デフォルトの名無しさん
NGNG0319316
NGNGgoogleで検索かけたら
Jeffrey S.Fosterさんとnecのページに載ってました。
これから落として読んでみます。
ttp://www.cs.berkeley.edu/~jfoster/
ttp://citeseer.nj.nec.com/492179.html
0320305じゃないけど
NGNG型推論が無いとコンパイラは型エラーだしてくれないのでは?
もしくは片っ端から型を宣言するか。
0321デフォルトの名無しさん
NGNGこれでいいじゃないか?
0323デフォルトの名無しさん
NGNG多相型を捨てるのか?
たとえ明示的に型を宣言しても、
型変数を使うかぎりは型推論のお世話にならざるを得ないだろ。
0324デフォルトの名無しさん
NGNGえっ?
型変数に型推論は必要ないでしょ?
C++やEiffelは総称(型変数)があっても型推論は無いでしょ?
型変数も変数なんだから、外部から型を与えてあげればイイ。
0325デフォルトの名無しさん
NGNG0326デフォルトの名無しさん
NGNG0327デフォルトの名無しさん
NGNG要は実用上の問題ということ
0328デフォルトの名無しさん
NGNG(a) MLでは、型推論を使わないで明示的に型を書く「こともできる」
(b) C++では、型を明示的に書か「なければならない」
よって必然的に、少なくとも (a) >= (b)
で、C++のテンプレートライブラリとかをヘビーに使ってればすぐにわかるが、
総称型なんかを明示的に書くのは超激うざい。
よって (a) > (b)
で、型推論がいらないと言ってる今までのカキコはすべて
根本的な事項を誤解してるので、勉強してから出直してきてよし。
もっとまともな批判なら、みんなも真摯に対応すると思われ。
(今でも十分に真摯だが)
終了〜
0329デフォルトの名無しさん
NGNG> 型推論がいらないと言ってる今までのカキコ
試験の○×問題に採用しようYO!
0330デフォルトの名無しさん
NGNG# let id (x : 'a) = x ;;
val id : 'a -> 'a = <fun>
とか
# let id : 'a -> 'a = fun (x : 'a) -> x ;;
val id : 'a -> 'a = <fun>
とか。
>>328
確かに型推論がないと、これだけでもすでにうざい気が…
誰かC++で同じこと書いてみて
0331デフォルトの名無しさん
NGNGど素人です。北野さんのHPで勉強は十分でしょうか?
0332デフォルトの名無しさん
NGNG完全なものではないし、
明示的な型宣言をした方が
確実にプログラマの意図通りに動くという事は事実なので、
あくまでも補助的な手段に過ぎないともいえる。
0333デフォルトの名無しさん
NGNGSML演習
ttp://a414s1.it.nanzan-u.ac.jp/smlbook/smlwww/smlwww.html
なんてどお?
0334デフォルトの名無しさん
NGNG> 完全なものではないし、
例えば?
0335デフォルトの名無しさん
NGNG0336デフォルトの名無しさん
NGNGMLの型システムに対しては完全だろ?
0338デフォルトの名無しさん
NGNG等を探しましょう。
0339デフォルトの名無しさん
NGNGわかってから言ってくれよ。
338を探したけど、milnerの型システムで推論できない例が見つけられない。どれだ?
SMLではできない例はいっぱいあったけど、SML/NJではできるのしかなかった。
0340デフォルトの名無しさん
NGNGmilnerの型推論機構が不完全であることは前提だと思っていたが?
その話なのか?
MLの型推論の話なんだろ?
0341名無しさん@お腹いっぱい。
NGNG暗黙の型変換のない言語を普段使っているのか?
俺は暗黙の型変換の方がうっとうしいが。
継承関係にない型同士の暗黙の型変換はいらん。
0343デフォルトの名無しさん
NGNGそのままだが。
milnerの型推論が完全であるかのような話をしているので
0344デフォルトの名無しさん
NGNG人間の目にも明らかな冗長な型宣言を省略する場合に、
SML/NJの型推論がうまく機能しないケースがあると?
0345デフォルトの名無しさん
NGNG0346デフォルトの名無しさん
NGNG自動的に型推論させても必ず通る。不完全だと言ってる奴は、
「完全」の意味を勘違いしていると思われ。
もちろん、ある種の特殊な拡張は別ね。OCamlのObjectのcoercionとか。
0347デフォルトの名無しさん
NGNG型推論でも必ず通るという意味なのかな?
0348346
NGNG0349デフォルトの名無しさん
NGNGたしか、この板のどれかのスレに実例が載っていたはずなのだが・・・
見つからん。どこいったー。
でもサブタイプは型推論にとって鬼門だと聞いた時があるけどなー。
(でもサブタイプでも問題なく、期待通り推論してくれるアルゴニズムを書いていた論文があったような気が)
0350デフォルトの名無しさん
NGNGあらゆる式について型付け可能である性質という意味で
使用していたが、
その意味では当然milnerの型推論は完全ではない。
一方で、346の言うような意味において完全と言ったとしても、
結論は同じだ。
つまり、milnerの型推論で型付けできないもので、
型検査の通る式は存在する。
どちらの意味に取ったとしても不完全だ。
0351デフォルトの名無しさん
NGNGで、MLの正しい式で
・MLの処理系の型推論では型付不能
・型検査を通るがMLの処理系では型推論できない
にあてはまる具体例をそれぞれ示してくれい。
(「あらゆる」って、まさか「milnerの型推論ではC#の型付ができない」とかいう
アフォな事いってるんじゃないよな?
MLの型推論の話なんだから、MLの型推論ではMLプログラムの型付ができない
って話なんだよな?)
0352デフォルトの名無しさん
NGNG君は教えて君ですか?
0353346
NGNG何かの間違いか、その「期待どおり」の「期待」がそもそもおかしいか、どちらかと思われ。
>>350
> 一方で、346の言うような意味において完全と言ったとしても、
> 結論は同じだ。
> つまり、milnerの型推論で型付けできないもので、
> 型検査の通る式は存在する。
だから(少なくともcoreの)MLではそんな式は存在しないことが数学的に証明されてるんだってば。>>351の言うとおり。
なんつーか、こいつは真性のアフォか、わざと事実に反する仮定にもとづいて煽るためだけに発言している
としか思えないので、構っていると何ら有意義な議論ができないから、今後は放置の方向で。
0354デフォルトの名無しさん
NGNGもっとじゃんじゃんやろうよ。(w
0355デフォルトの名無しさん
NGNGToplevel input:
# fun id -> (id 123, id "abc") ;;
^^^^^
This expression has type string but is here used with type int
みたいなのかな?>期待に反する例
で、もちろん、型推論がなくても駄目なものは駄目。
# fun (id : 'a -> 'a) -> (id 123, id "abc") ;;
Toplevel input:
# fun (id : 'a -> 'a) -> (id 123, id "abc") ;;
^^^^^
This expression has type string but is here used with type int
[問] なぜでしょう。(10ドラクマ)
0356デフォルトの名無しさん
NGNGmycroft/milnerの型システムは使っていないのか?
使っていると思っていたんだが。
0357デフォルトの名無しさん
NGNG仮にそうであったとしても、
それを以ってしてアフォとか言うなよな。
2ちゃんであったとしても品性が疑われないというわけではない。
0358デフォルトの名無しさん
NGNG使っていません。MLの型システムはHindley-Damas-Milnerです。
Mycroft-Milnerの型推論はundecidableなので。
[問] 上の二つの型システムは何が違うか調べよ。(10ガバス)
0359デフォルトの名無しさん
NGNGそれを指摘して疑われるような品性だったら、ないほうが良い。
0360デフォルトの名無しさん
NGNG寛容になってあげないと、永久に普及しないよ(笑)。
もっとマターリと盛りageようYO!
0361デフォルトの名無しさん
NGNG0362デフォルトの名無しさん
NGNG> # fun (id : 'a -> 'a) -> (id 123, id "abc") ;;
id 123では 'a = int
id "abc"では 'a = string
当然型エラーだわな。
MLの言語仕様と完全に一致しているし、型推論が正しく実行されているいい例だよな。
0363デフォルトの名無しさん
NGNG型推論は正しく実行されている?
型推論できるかどうかの例なのに、
正しく実行されているかをどうして問題にする?
0364デフォルトの名無しさん
NGNGそれは勉強するときによく引き合いに出される例じゃないか。
0365デフォルトの名無しさん
NGNG0366デフォルトの名無しさん
NGNG型推論が正しく実行された結果、
問題の式には型エラーがあるという事実が
正しく推論されたわけだが、何か?
それとも君には例の式は
(正しくは fn (id : 'a -> 'a) => (id 123 , id "abc") だが)
型エラーではないと思ってるのか?
0367デフォルトの名無しさん
NGNGだから、それは型エラーが起きてあたりまえの例で、
本来型エラーが起きるべきではないのに、起きてしまう例をさがしてんだよ。
もしくはその逆。
ちゃんと話の流れを読めよ。
0368デフォルトの名無しさん
NGNG366のどこをどう読めば366が fn id => (id 123, id "abc")を
MLの型推論の欠陥だと主張していると思えるんだ?
話の流れをちゃんと読めてないのは367だろ。
0369デフォルトの名無しさん
NGNG> 俺は完全性を、
> あらゆる式について型付け可能である性質という意味で
> 使用していたが、
あらゆる式が型付け可能だったら、絶対に型エラーが出ないんだから、型検査の意味がないやんけ!
といってみるテスト。
ちなみに、どうしてもあらゆる式を型付けしたかったら、ユーザが意識してわざと
Objective Caml version 3.04
# type d = Fun of (d -> d) | Int of int | Bool of bool | String of string ;;
type d = Fun of (d -> d) | Int of int | Bool of bool | String of string
# let add (Int i) (Int j) = Int(i + j) ;;
(中略)
val add : d -> d -> d = <fun>
# let apply (Fun f) x = f x ;;
(中略)
val apply : d -> d -> d = <fun>
みたく定義すれば、任意の形無しラムダ項をMLに埋め込めるよ。たとえば
(λx. x x) (λx. x) 123
だったら
# apply (apply (Fun(fun x -> apply x x)) (Fun(fun x -> x))) (Int 123) ;;
- : d = Int 123
みたいに。だから、形無し言語で書けるプログラムなら、必ずMLでも書ける。
(Turing-completeなんだから当たり前だけど、「わりと自然に」ってことで)
もちろん、本当に実行して型エラーが出る式だったら、ちゃんと例外が出ちゃうけど。
# apply (Int 3) (Int 7) ;;
Exception: Match_failure ("", 10, 25).
とか。
0370デフォルトの名無しさん
NGNGその議論だと
# let id : 'a -> 'a = fun x -> x ;;
val id : 'a -> 'a = <fun>
# (id 123, id "abc") ;;
- : int * string = 123, "abc"
も型エラーということになってしまうぞ。0ドラクマ?(w
結論は合ってるけど、理由が違う。
0371デフォルトの名無しさん
NGNGMLではそんな例は存在しない、という結論で落ち着いたと思われ。
0372355
NGNG# let id : 'a -> 'a = fun x -> x ;;
val id : 'a -> 'a = <fun>
# (id 123, id "abc") ;;
- : int * string = 123, "abc"
はエラーにならないのに、
# (fun (id : 'a -> 'a ) -> (id 123, id "abc"))
(fun x -> x) ;;
はエラーになる理由を述べよ、って言えば良かったのかも。
意味的には
let x = 式1 in 式2
と
(fun x -> 式2) 式1
は同じだけど、MLの型システムでは扱いが違う。で、「どう違うのか?」と。
0373デフォルトの名無しさん
NGNG(fn (id : 'a -> 'a) => (id 123, id "abc")
では上記全体で'aは同一だが
let id : 'a -> 'a = fn x => x in (id 123, id "abc") end;;
では、id 123 での 'a と id "abc" での 'a は別物。
これは別に奇妙な事でも何でもなくて、
letが局所定義のための表現式だということさえわかっていれば
fun id x:'a = x ;;
(id 123, id "abc")
がエラーにならないのと同様に
エラーとなるべきではないことぐらい簡単にわかるはず。
で、これのどこがMLの型推論の不完全さを示してるわけ?
あと、>>372は
>意味的には
なんて言ってるけど、どういう意味で「意味的には」なわけ?
一方は局所変数の束縛、もう一方はラムダ束縛。全然違うじゃん。
0374373
NGNGじゃなくて
let val id : 'a -> 'a = fn x => x in (id 123, id "abc") end;;
ね。valが抜けてたわい。スマソ。
0375デフォルトの名無しさん
NGNG「正しいものは全て証明できる。」
で使う気がするけど、
ここで議論してた完全は
「プログラムに全て型付けできる」
だったのね。そんなわけないじゃん。
369がやってんのはdynamic typingでschemeとかperlで使われてる型システムだな。
実行時にマッチングするから、それが動的型チェックに対応して遅くなる。
0376373
NGNG「idは仮パラメータだが、
id 123とid "abc"の両方を処理できるidの実パラメータが存在しないことが
型的に証明されている」
という言い方もできる。
0377373
NGNG> 「プログラムに全て型付けできる」
> だったのね。そんなわけないじゃん。
え…
つまり (1 2 3)も正しく型付けしてほしかったとか
そんなヴァカな話だったのか…
違うよね? >>350
0378372
NGNG> > 意味的には
> なんて言ってるけど、どういう意味で「意味的には」なわけ?
> 一方は局所変数の束縛、もう一方はラムダ束縛。全然違うじゃん。
操作的意味論だと文脈等価で、表示的意味論だとdenotationが同じになる、
という程度のつもりだったのだが、確かにそう考えれば直感的には違うな。
なるほど。
0379デフォルトの名無しさん
NGNG意味不明
0380デフォルトの名無しさん
NGNG「実際に評価してみて実行時型エラーを起こさない、あらゆる式」のつもりだったかと。
で、350もわかっているみたいだけど、それはTuring-completeな言語では決定不能で、
自動での推論は理論的に不可能。 if 複雑な条件 then () else (1 2) みたいな場合とか。
(MLよりも高度な型システムで、ものすごく複雑な型をプログラマが書けば別だけど…)
あと、fn (id : 'a -> 'a) => (id 123, id "abc") みたいな式を型付け可能な
型システムは存在する。もちろん、MLの型システムじゃ型エラーだけど。
System Fとかpolymorphic lambda-calculusとかで検索だ。
さらに複雑な型システムなら、構成的論理と同様の証明能力がある言語もある。
Calculus of Constructionsとか。もちろん、そういう型システムでは
自動的な型推論は不可能で、人間が証明を書かないといけないんだが、
証明の正しさはチェックしてくれる。
0381355
NGNG>「idは仮パラメータだが、
>id 123とid "abc"の両方を処理できるidの実パラメータが存在しないことが
>型的に証明されている」
λx. x(SML風に書けばfn x => x、OCaml風に書けばfun x -> x)が存在するのだが…
ネタバラシをしてしまうと、MLの型システムで∀α. α → αと
ただのα → αは違う型なのに、多くの実装ではどっちも'a -> 'aみたく
同じに表示されてしまうのが混乱の元なんだよな。きっと。
別にMLの型システムが不完全だとは、俺は思ってないし言っていない。
「誰かが不完全だと思ってしまった例」を想像して挙げてみただけ。
ってもう誰が誰だか訳がわからんが。(笑)
0382デフォルトの名無しさん
NGNG試験問題の参考にさせていただきます。(藁
0383デフォルトの名無しさん
NGNG0384デフォルトの名無しさん
NGNGhttp://caml.inria.fr/ocaml/htmlman/manual036.html
0385デフォルトの名無しさん
NGNG0386デフォルトの名無しさん
NGNGMLが単にmycroft/milnerシステムだと勘違いしていただけ。
Haskellに追随しているかなという推測で話をしていた。
0387337
NGNG俺が厨房でした。ごめんなさい。
0388デフォルトの名無しさん
NGNG状態変化が記述しにくいから?
C(++,#)とかjava、もしくはperlくらい?が企業で使われていることを前提として
言ってますが。
0389デフォルトの名無しさん
NGNGミリタリー言語
0390デフォルトの名無しさん
NGNG|×|siraneeyo.gif
 ̄ ̄
0391デフォルトの名無しさん
NGNGFORTRAN,APL,HPFはどうよ?
0392388
NGNGなんで関数型言語は学問の分野に留まってて一般的に実用的な分野で
使われないのかなと。
それとも僕が知らんだけで使われてるのかな?
emacs-lispくらいしかしらんが。
0393デフォルトの名無しさん
NGNGC++, Java, C# には、関数型言語の研究成果がだんだん取り入れられているよね?
FORTRAN, APL, HPF を挙げたのは、
現在の関数型言語隆盛のきっかけを作った(?)
Jhon Backus の系統の言語で、しかも比較的メジャーだから。
0394388
NGNGどこが?研究機関を除けば手続き型の言語ばっかしだと思いますが。
javaのインターフェースは高階関数の実現として、
強引に見れば、関数型言語の成果と見られるかもしれないけど。
0395デフォルトの名無しさん
NGNG0396デフォルトの名無しさん
NGNG関数型言語隆盛: 研究開発分野での隆盛
関数型言語の成果の実用化:
Template と Generic Type、Generative Programming とか...
スマン、今疲れてるから、「マルチパラダイムデザイン」とかで探してみて。
0397デフォルトの名無しさん
NGNGという罠
0398388
NGNG>>396
どれもあんまり関数型言語とは関係ない気がするけどなぁ。
型システムは関数型とは直接関係しないでしょ。
マルチパラダイムデザインのどこが関数型言語と関係してるんだろう。
オブジェクト指向はむしろ関数型に採り入れづらい概念だと思うけどなぁ。
>>395
Javaのインターフェースは静的にかつユーザーが型を
指定する言語で高階関数を実現する手段だと思ってたけど間違い?
0399もしかして、実用分野との繋がりを持たない関数型言語研究?
NGNG>>396
○関数型言語を使った研究の研究成果(型システム方面〜他にいろいろ...)の実用化
×関数型言語の成果の実用化
0400デフォルトの名無しさん
NGNG良い言語が現場で使われるとは限らない。
COBOL や VB なんかがいっぱい使われていたりする。
そういうもん。
0402どうも話が通じない...?
NGNGもしかして、言語FPとか知らない?
0403388
NGNGそりゃわかってるけど、
別に 良い言語 = 関数型
とは言ってなくてなんで 現場では関数型言語は使われないかと。
0404デフォルトの名無しさん
NGNG0405388
NGNGしらないっす。
僕は関数型言語というとラムダ計算に基づくようなやつを思い浮かべるが
それではないと?
0406デフォルトの名無しさん
NGNG計算モデルとしてはラムダ計算は有名だ
0407400
NGNGなんで関数型言語が現場で使われないことを疑問に思うのだ?
別に良い言語だとは思わないのだろ?
とまあ、それはともかく
使われない理由は>>152-200あたりに書かれている理由ぐらいかと。
0408デフォルトの名無しさん
NGNG0409388
NGNG関数型言語はコンパイル時の最適化も命令型よりもかけやすいし、
良い言語だと思っているけどなぁ。
やっぱ、計算機に基づいてできた言語じゃなくて数学に基づいできた言語
ってのが現場で使われない原因ってことなのかな。
0410403(がんばって書いたけど読みにくくてスマソ)
NGNG・ラムダ計算をCartesian Closed Monad の形に書き直す事で、
FPと似た形式が得られる。
・代数規則によるプログラム変形をやり易い(ラムダ計算より単純)。
・データを一まとまりの構造型データとして扱う事で、
「フォンノイマン・ボトルネック」を解消できると主張.
ってな感じです。
んで、FORTRANとHPFをあえて「関数型言語」にねじ込もうとした理由は、
FP言語を「関数言語」と呼ぶならば、
そのきっかけとなったであろうFORTRAN (プロセス中心言語)や、
あるいは APL〜FP の延長線上にある並列数値計算言語 HPF ってあたりにも、
実は同じ血が流れているのではないか、と思いました。
明示的にラムダ計算を扱ってなくても、
ラムダ計算モデル(あるいはそれと等価な計算モデル)
により適切なモデリングが可能なプログラム言語を、
関数言語の仲間に入れちゃマズイっすか?
0411410
NGNG○ 実は同じ血が流れているのではないか、と思ったからです。
× 実は同じ血が流れているのではないか、と思いました。
0412388
NGNGFP言語がどうしても見つからない。
さっき見つかった気がするんだけど、その記憶の限りでは
関数呼び出しのcall-by-valueを統べて代入に置き換えてただけのような。
そうすると計算の仕方は同じになるけど、関数型言語の全ての部分式が
値を持つっていう性質は失われるし、関数型言語をコンパイルするときには
おなじことを行うわけだから、何にも新しいことを言ってないような。
あとなぜFP言語のきっかけとなっただけで、フォートランを関数型と
言えるのかがかなり疑問。FORTRANが関数型なんて解釈は聞いたことない。
schemeとかMLですらラムダ計算でモデリングできないのになぜフォートランで
できるやら。
0413デフォルトの名無しさん
NGNGモデル化できるのでは?
0414388
NGNGそれはラムダ計算と直接関係してないのでは?
ただの意味づけの仕方じゃないの?
0415デフォルトの名無しさん
NGNGJavaのインターフェイスやC++の抽象クラスや、
もっと言うと、SmalltalkのImprementedBySubclassが、
どういうふうに高階関数と関係するのか、
もうちょっと聞きたいと思うのだが。
0416388
NGNGスモールトークはよく知らないけれど、
例えば、java.util.Collectionsにあるメソッド
public static void sort(List list,Comparator c)
はML風に型を書くと
'a list -> (('a * 'a) -> boolean) -> 'a list
と型つけできて、javaでこれを実現するためのインターフェースなのでは?
と言う感じ。
抽象クラスは関係ない。
0417410
NGNG○ Monoid
× Monad
何を書いているやら>>自分
FPは、ACMのTuring賞ページあたりから辿れると思います。
>FP言語のきっかけとなっただけで、フォートランを関数型と
>言えるのかがかなり疑問
写像って意味の関数。
0418388
NGNGそれは「関数型プログラミング言語ML」の関数型と意味が違うんじゃないの?
0419410
NGNG高橋正子センセの本でも扱ってる、普通の意味だと思うけど。
0420デフォルトの名無しさん
NGNG>抽象クラスは関係ない。
だとすると、それはJavaのインターフェイスの話では無くて、ポリモルフィズムの話だと思う。
0421410
NGNG研究プロトタイプとしての関数型言語と、
その実用例としての関数言語に分けて、
関数型言語の意義を議論するつもりだったんだけど。
どうしても、MLとか型付ラムダ計算って範囲に限定したいのですか?
0422デフォルトの名無しさん
NGNG副作用のある手続きと、写像である関数(函数?)との区別の無い言語を、
関数型言語の範疇で議論するってこと?
0423388
NGNGjavaのインターフェースはポリモーフィズムを実現するものじゃないの?
ポリモーフィズムは高階関数と密接に関係してると思いますが。
410のいってる関数言語は一般に関数型言語と呼ばれるものではない気がします。
フォートランを関数型言語っていう人はいないと思うし。
関数型言語は研究のプロトタイプではなくて、それ自体で実用性を
求めてるし。
関数型を全て代入式に置き変えたら関数型の意味がない。
あと一般にいう関数型言語に型付きは関係ないです。
フォートランを関数型言語とみなした場合に関数型言語でない命令型
言語は何が残るの?
0424420
NGNG>javaのインターフェースはポリモーフィズムを実現するものじゃないの?
逆です。
ポリモルフィズムは、主に継承によるものです。
Javaのインターフェイスは、サブクラスにメソッドの実装を
強制するものです。
あるインターフェイスを継承したクラスのインスタンスは、
特定のメソッド(sortの場合は比較)をもっているしている
ことが保証されているから、静的な型チェックを通るよ、
っていう事です。
高階関数(というか、関数を渡すという意味)とは違うと思います。
どーでしょう?
0425デフォルトの名無しさん
NGNG>FP言語がどうしても見つからない。
>さっき見つかった気がするんだけど、その記憶の限りでは
>関数呼び出しのcall-by-valueを統べて代入に置き換えてただけのような。
>そうすると計算の仕方は同じになるけど、関数型言語の全ての部分式が
>値を持つっていう性質は失われるし、関数型言語をコンパイルするときには
>おなじことを行うわけだから、何にも新しいことを言ってないような。
何か、違うものを見ておられるようですね。
御参考: http://www.yfcbookshelf.com/ml_lisp_scheme.htm
http://ca.meme.hokudai.ac.jp/people/tak/fp/fp-eval.html
0426388
NGNGそれはstructural polymorphism(構造的多相性)ってやつで、
一種のポリモーフィズムですね。
MLスレッドだから、暗黙にMLを前提としてしまっていて、
MLにあるポリモーフィズムはパラメトリックポリモーフィズムというやつで
(MLには部分型がないので)sortなんかがその例です。
sortには関数を渡したいんだけど、Javaではメソッドを値として
扱えないから、interface使ってその代用をするんでしょ。
メソッドがあることの保証は意味論とは別の観点っす。
そう説明してある本も多いけど。
0427410=425
NGNG関連スレ:http://mentai.2ch.net/test/read.cgi/infosys/1017686362/l50
>>423
>あと一般にいう関数型言語に型付きは関係ないです。
>フォートランを関数型言語とみなした場合に関数型言語でない命令型
>言語は何が残るの?
関数型言語の理論だけならともかく、
関数型言語自体を、小さな枠に収めて盆栽みたいに育てた場合、
どんなメリットがあるとお考えですか?
0428388
NGNG1977年か。僕の生まれる前だ。
たしかにこのFPは関数型だと思うけど、フォートランが関数型だと呼ぶ
には至らないです。
0429デフォルトの名無しさん
NGNG議論は不要みたいですね。残念
0430388
NGNGそんなもんschemeとかMLの仕様書を見てみりゃわかるし、
linear typeとか最近の型理論が関数型を前提としてるものが多い
ことを考えればわかるでしょう?
0431424
NGNG>interface使ってその代用をするんでしょ。
はい、もちろん「代用」です。
つまり、Javaのインターフェイスを関数型言語の立場からみると、
そういうふうに見えるって事ですね?
だとすると、
>>394
>javaのインターフェースは高階関数の実現として、
>強引に見れば、関数型言語の成果と見られるかもしれないけど。
「関数型言語の成果」は、誤解を招く表現だったかもですね。
0432デフォルトの名無しさん
NGNG0433デフォルトの名無しさん
NGNG0435名無しさん
NGNG> 明示的にラムダ計算を扱ってなくても、
> ラムダ計算モデル(あるいはそれと等価な計算モデル)
> により適切なモデリングが可能なプログラム言語を、
> 関数言語の仲間に入れちゃマズイっすか?
(型なし)λ計算でいまあるほとんどの言語はモデリングできてしまいます。だ
からモデルできることが関数型である、というのはあまり意味をなしません。
MLでsmalltalkのインタプリタを書いて、「smalltalkはMLライクな言語であ
る」とはいえないでしょ?
言語が**型言語である、というのはその言語がプログラムとその実行をどのよ
うにとらえるかによって決まると思う。んで、そのとらえ方が人によっまちま
ちで、厳密だったり、そうじゃなかったりもするから、いろんな言語が存在す
るわけで。
関数型言語のおおまかなスローガンは
プログラム=関数、プログラムの実行=関数の値の計算
じゃないすかね。んで副作用が入るか入らないかでもめる、と (W
あと関数が言語中で他のデータと同様に扱えるというのも一つの基準だと思います。
0436デフォルトの名無しさん
NGNG関数型を前提としない型理論ってあるんでしょうか?
0437デフォルトの名無しさん
NGNG0438410
NGNGFPは、関数とデータを分離して考える、由緒正しい純関数型言語らしいです
0439388
NGNGラムダ計算は状態の記述ができないから、schemeのset!とかMLの参照へ
の代入みたいのはモデリングできなくて、命令型なんてほとんど状態
変化だから、ほとんどの言語はλ計算モデリングできない。のでは?
関数型の枠組だとどうか知らないけど、λには副作用はないと思う。
>>436
javaのクラス継承も部分型の理論だから、関数型にとらわれない
型理論は多くあると思います。あとflow-analysisも型でやっちゃうのも
あるから、そういうのは逆に命令型に特有なのかも。
0440388
NGNG>>関数とデータを分離して考える、由緒正しい純関数型言語
関数をfirst-orderとして扱うlambda計算は純関数型言語じゃないってこと?
0441デフォルトの名無しさん
NGNG>>427
小さな枠で厳密な議論をすれば、深いことが言えそうです。
あれもこれも追加したら体系が複雑になって、見えるものも見えなくなってしまう。
>>436
型理論をどういう意味で言っているのかちとよくわからんが、オブジェクト
指向言語やプロセス代数に対する型システムを考えると関数型が出てくる
とは考えにくいのでわ(もちろん関数型というものを定義できるかもしれんが)。
0442388
NGNG関数とデータを分離して扱うなんてどう考えても無理だ。
でもlambda計算が関数型言語じゃないなんて聞いたことないな。
0443410
NGNG別に扱う流儀(FP)
があるってだけです。
0444410
NGNG了解。
0445デフォルトの名無しさん
NGNG> ラムダ計算は状態の記述ができないから、schemeのset!とかMLの参照へ
> の代入みたいのはモデリングできなくて、命令型なんてほとんど状態
> 変化だから、ほとんどの言語はλ計算モデリングできない。のでは?
> 関数型の枠組だとどうか知らないけど、λには副作用はないと思う。
例えばCPUのエミュレータを作ることを考えるとします。ひとつひとつの命令
の副作用は、命令の実行前のレジスタ、メモリの状態から実行後の状態への関
数としてみることができます。だから、プログラムの実行はそれらをfoldした
ものになります。というぐあいにしてやればλ計算の中でCPUエミュレータが
作れます。
要は副作用の作用が関数的なら、副作用そのものを関数の操作の対象におしこ
めて、一つのおっきな関数をつくってしまえ、ってこと。
0446388
NGNGなるほど。状態を全て引数として持って行けばいいってことですね。
かなり納得しました。
0447デフォルトの名無しさん
NGNG0449388
NGNG開いた系の場合に問題があるってこと?
どんな場合っすか?
0450435
NGNG> FPは、関数とデータを分離して考える、由緒正しい純関数型言語らしいです
ガーソ、そうだったんですか...勉強ぶそくでした。
> あと関数が言語中で他のデータと同様に扱えるというのも一つの基準だと思います。
一方Cでは関数へのポインタがあるにもかかわらず関数型とはいえない...
まあスローガンからして違うのでいいのですが。
Cの関数へのポインタとMLの高階関数の違いをすぱっと言い切るには
どうすればいいんでしょうか? 人に説明するとき悩んでます。
0451388
NGNG>どうすればいいんでしょうか? 人に説明するとき悩んでます。
僕は同じと言い切ってしまいたい。
型とかそういうのを置いておけば、実装はあまり変わらないははず。
0453デフォルトの名無しさん
NGNGλ計算にもプリンタをつながなければ...ということか? >開いた系
0454デフォルトの名無しさん
NGNG関数型かそうじゃないかは
「副作用のあるものと、無いものを文法レベルで区別できるかどうか」
でわけるっていうふうに説明してるよ。
0455デフォルトの名無しさん
NGNG予測不能な外部からの入力は、λ計算でモデリングできないでしょ。
0456445
NGNG> たとえば、CPUのエミュレータの場合、I/Oポートからの入力命令があれば、>>445のモデルは破錠するでしょ。
その場合はI/Oの入力時系列も引数にいれればいいんじゃない?
要は次の状態を決めるものはなんであれ引数におしこんでしまう、と。
0457デフォルトの名無しさん
NGNGそもそもチューリングマシンでモデリング可能なものは
λ計算でもモデリング可能なはずですが。理論上は。
0458388
NGNG0459452
NGNGI/Oの入力の時系列データが存在するなら、それは閉じた系でしょう。
I/Oポートの先に計測器や人間の操作が繋がっててる場合を考えれば。
あともうひとつ、自分自身の実行時のコンテキストは、全て引数にする事は不可能、ってのも。
そろそろ寝るです。
0460デフォルトの名無しさん
NGNGそういう引数は遅延評価で必要な時に生成してやればいい。
0462445
NGNG> 予測不能な外部からの入力は、λ計算でモデリングできないでしょ。
入力データをプログラムで表すことは問題にしてません。エミュレータだって
そういう部分は結局外側の環境に全部丸投げしてますし。
問題はある言語で記述されたプログラムの入出力の関係をλ式で表せるか、と
いうことです。んで、λ計算には状態とか状態の更新という概念がないから無
理じゃないの、というのに対する答えが、状態の更新は状態から状態への関数
とみなせるから、λ計算の中でそれらの概念をモデル化できる、というもので
す。
とはいうものの、エミュレータと言ってますが、457の意味ぐらいで使ってた
ので、現実のIOに関するツッコミは予想外だった...
0463459
NGNGそういう予測不能なモノを扱うか、扱わないかが、1つの界面なんじゃないでしょうか?
扱わないっていう選択肢もあると思います。
扱うとしても、それは本来のその言語のモデルを超えた、「実用化」のための
妥協とする選択肢もあるかと。
どちらにしても、そういうものを、明示的に区別するのが関数型言語の特徴のような気がしますが、どーでしょう?
0464435
NGNG> 僕は同じと言い切ってしまいたい。
> 型とかそういうのを置いておけば、実装はあまり変わらないははず。
ように思えて実は並々ならぬ苦労が注がれているので、
やはり違うのでは...
0465デフォルトの名無しさん
NGNG外に取り出して持ち歩いたり、外から書きなおしたり出来るなら、
それは「状態と副作用」の文脈で言う状態とは違うでしょうね。
っていう事言おうとして、へんな方向いっちゃたけど、
ま、これは「状態」について、ある言語がどう定義してるか、
の問題かもしれないですけどね。
0466デフォルトの名無しさん
NGNG>>426 の以下の部分はどういう事でしょうか?
> sortには関数を渡したいんだけど、Javaではメソッドを値として
> 扱えないから、interface使ってその代用をするんでしょ。
高階関数というのは、関数の引数に関数を取れたりする事ですよね?
0467388
NGNGstatic void sort(List list, Comparator c)
の型をML風に書くと 'a list -> ('a * 'a -> boolean) -> 'a list
に対応していて、インタフェース Comparatorが
'a * 'a -> booleanに対応しているという意味です。
細かいこといえば 'a * 'a -> int なんだけれども。
0468デフォルトの名無しさん
NGNG>>388の妄想です、わすれてください。
0469デフォルトの名無しさん
NGNG高階関数とインターフェースの話は・・・
0470デフォルトの名無しさん
NGNG犬しか知らない幼児が、4本足が全部犬だと思うのと一緒さ。
0471デフォルトの名無しさん
NGNG内部関数とインナクラスが似てるだけで、
ファーストクラスの関数は関係ない。
0472デフォルトの名無しさん
NGNGMLだからOOしらなくていいってことはない。OcamlのOでしょ。
全部犬だと思ってはダメ。
0473デフォルトの名無しさん
NGNGいや、俺はWadlerが書いたことを真に受けたんだが。
0474デフォルトの名無しさん
NGNG>内部関数とインナクラスが似てるだけで、
構造的には、まったく違うぞ!!!
なんて判りきったことをつっこんでみたりしてー。
使う所は似てるけどねー。
0475デフォルトの名無しさん
NGNG0476デフォルトの名無しさん
NGNG無限ストリームを使ったキー入力の実装みたいのを想定してました。
0477デフォルトの名無しさん
NGNG0478デフォルトの名無しさん
NGNG> Subject: [Caml-list] call for English-to-Japanese translators of the O'Reilly OCaml book
翻訳者募集らしい。
0479デフォルトの名無しさん
NGNGこれの製本は売ってないの?
0480デフォルトの名無しさん
NGNG0481デフォルトの名無しさん
NGNG0482デフォルトの名無しさん
NGNG0483デフォルトの名無しさん
NGNGdatatypeがある(enum+union+structと同じことをずっと簡単にできる)
メモリの自動管理(Cには戻れん)
関数のclosureをとれる(event handlerが書きやすい)
パラメトリックポリモルフィズム(コードの使いまわしが可能)
型付きである+型システムの健全性(バグの起きる理由が減る)
STL? もう見てらんない。
....とやや煽り調で言ってみるテスト。
0484デフォルトの名無しさん
NGNGMLとかSchemeとかあるが、
これは本当か?
いまいち納得できないんだが。
0485デフォルトの名無しさん
NGNGMLは理解しないと使えないからどうかなと。
0486デフォルトの名無しさん
NGNG0487デフォルトの名無しさん
NGNGお前はHaskellやって納得しろ。
0488デフォルトの名無しさん
NGNGwww.ocaml.orgの"O'caml Intro"とかいうチュートリアルを
読んでるのですが、早速ドロップアウトしそうなので助けて
ください。
次のような関数の定義なんですが、これの型がどうして下段
のようになるのかわからんです。
#let deriv f dx = function x -> (f(x +. dx) -. f(x)) /. dx;;
val deriv : (float -> float) -> float -> float -> float = <fun>
私的には、こいつの型は、
((float -> float), float) -> (float -> float)
だと思います("(A, B)"はAとBの直積)。それから、
float -> float -> float ってどう解釈するんですか?
0489デフォルトの名無しさん
NGNGつまり float を受け取って、float->float 型の関数を
返す。
どんな関数でも引数は一つ、って思ってくれ。
# let deriv = function f -> function dx -> function x -> (f(x +. dx) -. f(x)) /. dx;;
val deriv : (float -> float) -> float -> float -> float = <fun>
って書いても一緒さ。
0490デフォルトの名無しさん
NGNGまだ理解できませんが、とりあえず説明どうもです(w
488の定義だとderivはfとdxを引数に取ることが明示されてる
わけですが、489の定義だとそうではないですよね?ということは、
deriv f;;とやったらfloat -> float -> floatが戻り、
deriv f dx;;とやったらfloat -> floatが戻り、
deriv f dx x;;とやったらfloatが戻る
ということでしょうか?
0491デフォルトの名無しさん
NGNG「カリー化」で調べてみな。
0492デフォルトの名無しさん
NGNGどうもです。勉強してみます。
# 「カリー化」で出てきた南山大学のチュートリアルは分かり易そう。
# とりあえずこっちに切り替えてSMLやってみる。
0493デフォルトの名無しさん
NGNGそうです。あとは
deriv f dx x は ((deriv f) dx) x
の事だと言う事がわかればつじつまが合うのではないでしょうか。
引数が明示されている・いないというよりも、関数型の値を作るには
基本的にλ抽象(?) (function x -> 中身) しかなくて、
let f x y = 中身 は let f = function x -> (function y -> 中身)
の省略形だと言うことかな。OCaml ではさらに fun ってのもあって、
例えば
fun x y -> 中身 が function x -> (function y -> 中身)
の省略。どういう形で書こうが意味的にはどれも一緒のはず。
(漏れも厨房なので間違ってたらスマソ)
0494デフォルトの名無しさん
NGNGなるほど。引数と関数の型の関係について、何となく(w
解った感じがします。後はfunction, let, funといった
字句の意味を抑えてみるっす。
どうもでした。
0495食いしん坊万世
NGNG0496デフォルトの名無しさん
NGNGMLのような、型のしっかりした言語でもミスは起こり得るわけで、
ましてや、C++のような言語を使って、金や命にかかわるようなプログラム
書いててだいじょうぶかぁって。オレはアマチュアだからいいけど、プロは
責任重いよな〜。
0497デフォルトの名無しさん
NGNGhttp://www.haskell.org/bio.html
あまり美味しそうには見えないよ。
0498デフォルトの名無しさん
NGNG右目と左目とで、表情が違うね。
0499デフォルトの名無しさん
NGNG静的に完全にチェックできるわけはないけど、
静的にできる部分が多ければ多い程 プログラマの負担がへると思います。
新しい言語はそういうのを意識してるのが多いし、やっぱ重要っすね。
0500デフォルトの名無しさん
NGNG折り返し地点
0501デフォルトの名無しさん
NGNG動的型宣言があるからデバッグがやりやすいとか?
0502デフォルトの名無しさん
NGNG明示的型宣言ではなくて?
0503デフォルトの名無しさん
NGNG? 静的型(宣言)のことか? そうさせてもらうぞ (W
ちと長いし、言ってることはほぼ既出だが...
MLは型付きなので、ユーザは型システムが要請する規則に従ってプログラムを書
かなければならない。だから、慣れないうちはなんだかよく分からない規則のせ
いで思ったようにプログラムが書けない、と窮屈に感じるかもしれん。それに対
してschemeには静的型の概念が無い分、言語の設計が簡潔なのでとっつきやすい。
しかし、MLでは型チェックを通ったプログラムは実行しても型エラー(例えば
Emacs lispでいうところの Wrong type argument: ...)を起こさない。MLの型シ
ステムはこれを満たすように設計されており、またこれからもそうであろう。
これをうれしいと見るか、それとも取るにたらない、と見るか。
そんなエラーはテストで取り除けるからいい、とか手で変数名に型をつけるから
いい、とかいうのであればMLは魅力的に見えないかもしれない。この辺の議論は
「型なし言語逝ってよし」スレにも議論があったと思う。
俺はプログラムが大きくなると(俺的には小さくてもだが)この手の小さなミス
が混入する可能性を排除しきれないと考える。だから、MLの型システムがこれ
を防いでくれるのは、一つのメリットだと思う。
0504デフォルトの名無しさん
NGNGみずぽの件を見てもそう思う。
自分の書いてるプログラムが原因不明のエラーを出す時なんか、デバッガ使う
よりも証明(というよりは反例探しだが)したくなるが、そもそもソケット通信
+マルチスレッドのプログラムをどう検証すればいいのかさっぱりわからん...
どんな計算系使えばいいの? どんな論理学使えばいいの?
0505デフォルトの名無しさん
NGNGどんな性質を証明したいかによると思われ。
例えばTCPソケットの状態遷移に関しての到達可能性などならCTLを使えるし、
マルチスレッドでのデッドロックを検証したければpetri-netとreachability graphだろうし。
0506デフォルトの名無しさん
NGNG静的型宣言?
静的型付きではなくて?
0507デフォルトの名無しさん
NGNG> どんな性質を証明したいかによると思われ。
「うまく動かない」ということをなんとかして確認したいのですが...(^^;
具体的には想定外の入力が起きる条件を確定したいのです。
ほぼ動いているようにみえるのですがたまに通信で想定外の入力がきて
不具合がおきてしまう。でもなかなか状況を再現できないから、
いっそのこと全部形式的に書き下して条件を見つけてしまえればなぁ、と。
動機が不純ですかね (W
> 例えばTCPソケットの状態遷移に関しての到達可能性などならCTLを使えるし、
なるへそ、これはこれでおもしろそうです。TCPにCTLが使えるというのは何か
参考になる論文とかありますでしょうか?
> マルチスレッドでのデッドロックを検証したければpetri-netと
> reachability graphだろうし。
マルチスレッドのモデルってペトリネットが定番なんでしょうか?
普通のプロセス計算ではちょっと合わないと思ったので。
reachability graphとわ何でしょうか?
くれくれ君でスマソ。
0508デフォルトの名無しさん
NGNGBoris Beizer 「ソフトウェアテスト技法」 の一読を薦める
0509505じゃないけど
NGNGAutomatic Verification of Transmission Control Protocol Using NuSMV
っていうのがあった。
ttp://www.cs.toronto.edu/~chechik/courses99/csc2108/projects/index.html
あと、検証の話があるか知らないけど、UDPの動作を
モデル化しました、みたいな論文がどっかにあった気がする。
0510507
NGNGありがとうございます。NuSMVというモデルチェッカ内でTCPの状態遷移を表現
して、ちゃんと状態遷移しますよー、とかどんなアタックがありうるか、ある
場合どんなもんか、というのを調べる話しのようです。NuSMVのホームページ
に行ったら他の例もあったので、もうちょっと検討してみます。
っと、だんだんMLからはずれてきたので何かネタをふらねば...
0511デフォルトの名無しさん
NGNGMLでRDBMSにアクセスするにはどうしたらいいかな?
0512デフォルトの名無しさん
NGNGうです.
http://www.eleves.ens.fr:8080/home/frisch/soft#postgres
0513デフォルトの名無しさん
NGNG0514デフォルトの名無しさん
NGNGなんとなく藁藁
0515デフォルトの名無しさん
NGNG>>Cの関数へのポインタとMLの高階関数の違いをすぱっと言い切るには
>>どうすればいいんでしょうか? 人に説明するとき悩んでます。
>僕は同じと言い切ってしまいたい。
>型とかそういうのを置いておけば、実装はあまり変わらないははず。
亀レススマソ。MLではfun f x = fn y -> x + yみたく、
「実行時に関数を作って返す」ことができる(ように見える)のに対して、
(普通の)Cではできない。そのために、MLやSchemeのような関数型言語では
「関数クロージャ」というデータ構造を導入して、実際には実行時コード生成なんか
せずに高階関数を実装する手法が主流。なので、別に型がなくても、実装はやや高度になる。
0516デフォルトの名無しさん
NGNGpetri-netとかよりは普通の並列プログラムに近い。
0517デフォルトの名無しさん
NGNGpetri-netとかよりは普通の並列プログラムに近い。
0518517
NGNG0519デフォルトの名無しさん
NGNG> π-calculusって計算体系があるヨ>マルチスレッド
> petri-netとかよりは普通の並列プログラムに近い。
そうかな? piのプロセス間通信に相当するプリミティブは
スレッドにはないし、逆にスレッドの生成はpiですぐに書ける?
# やろうと思えばできんことはないと思うが
piはスレッドよりは通信しあうプログラム間のモデリングに向いていると思う。
マルチスレッドは排他制御しながらグローバルな状態をスレッドが共有してい
る感じ。境界がpiほどはっきりしてない、というか。
0520517
NGNGもちろん、第一義的にはπ計算は共有メモリじゃなくてメッセージパッシングの計算体系だけど、
>>504は「ソケット通信+マルチスレッド」っていってるから両方とも必要なわけで、
共有メモリも表せるならOKかと。「マルチスレッド」だけ取り出した言い方が悪かったかな。
あと、「ペトリネットよりは近い」だけで「同じ」とまではいわない。
0521デフォルトの名無しさん
NGNG0522デフォルトの名無しさん
NGNGクロージャの分の引数が1個増えるだけってことでしょ。
そんならあまりかわらんかとおもったんだが。
でもコンてィニュエーションももらうと結構違うか。む。
0523デフォルトの名無しさん
NGNG0525デフォルトの名無しさん
NGNG> π計算に基づく言語プロセッサはありますか?
PICTというのがあるらしい。最近はNomadic PICTか?
http://lsewww.epfl.ch/~pawel/nomadicpict.html
0527524
NGNGああ、誤解だったのね。すまそ。
でも、
> クロージャもコンティニュエーションもユーザが
> 渡すわけないじゃないか。
クロージャもコンティニュエーションも1st class objectとして扱かえるのはすごく強力な武器だし、
実際ユーザプログラムの関数がクロージャやコンティニュエーションを渡し渡されすることは
そんなに珍しいことではないと思われ。
0529522
NGNG0530515
NGNG> クロージャの分の引数が1個増えるだけってことでしょ。
> そんならあまりかわらんかとおもったんだが。
「あまり変わらん」かどうかはちょっと主観的だからさておき、「引数が1個増えるだけ」よりは
もうちょっとややこしい。関数の表現がコードへのポインタだけじゃなくて、「コードへのポインタと
自由変数たちの値の組」(要するにクロージャ)になるから、一般に関数を作るところ
(fn x => ...とか)ではメモリ確保が必要だし、呼び出すところでは1段のindirectionが入る
+「引数が増える」。あと、一般にクロージャのためにmallocメモリを解放するためには
ガベコレが必要になる。解析すればallocaみたくスタックに確保できる場合もあるけど。
で、自由変数を持たない関数までそんなことをやってるととオーバーヘッドがかかるので、
自由変数を持つ関数がどの式に来てどの式に来ないか、これもコンパイラが解析したりする。
あと、自由変数を持たない関数でも、静的にアドレスがわかってれば間接ジャンプじゃなくて
直接ジャンプするとか。
長文スマン。
0531デフォルトの名無しさん
NGNGhttp://www.cis.upenn.edu/~bcpierce/papers/pict/Html/Pict.html
0532515
NGNG> クロージャのためにmallocメモリを解放する
「mallocメモリ」→「mallocしたメモリ」
> そんなことをやってるとと
「とと」→「と」
とととととととととと。
0533デフォルトの名無しさん
NGNGRemyの論文が超絶的に理解不能なんだが、他に何か読むと良いものはないか、お前ら
もしご存知でしたら教えていただけないでしょうか?(ソースコードや
コンパイルして出てくるアセンブリはもう見た)
0534デフォルトの名無しさん
NGNG0535デフォルトの名無しさん
NGNG| loop buf = if (length buf > maxLen)
then (sen (remCh, hd buf); loop (tl buf))
else (select remCh!(hd buf) => loop (tl buf)
or insCh?x=>loop (buf @ [x])
age
0536デフォルトの名無しさん
NGNGあと日本語処理関係とか。
今のところEUCにして誤魔化してるんだけど。
0537デフォルトの名無しさん
NGNG0538デフォルトの名無しさん
NGNGあたりはどうよ。俺は使ったことないけど…>日本語処理
XMLは「xml ocaml」とか「xml "standard ml"」とかで
googleすればいくつか出てくる。
0539デフォルトの名無しさん
NGNG0540デフォルトの名無しさん
NGNGFunctor
0541デフォルトの名無しさん
NGNG0543デフォルトの名無しさん
NGNG0544デフォルトの名無しさん
NGNGですので必ず行われます。
Haskellは遅延評価の性質と合わないために、
末尾再帰の最適化が自動的に行われる事はありません。
コードに細工して、なおかつコンパイラやインタプリタがそれを
拾ってくれた場合にのみ行われます。
0545デフォルトの名無しさん
NGNG多くの部分がコンパイルの過程で正格評価になるような気が・・・
0546デフォルトの名無しさん
NGNGたとえば?
0547デフォルトの名無しさん
NGNGhttp://sato-www.cs.titech.ac.jp/prism/index.html
0548デフォルトの名無しさん
NGNG例えばって、意味がわからん。
0549デフォルトの名無しさん
NGNG0550デフォルトの名無しさん
NGNGこけたので(スタックが溢れた)驚いたことがあったな。
0551デフォルトの名無しさん
NGNGIOモナドの見た目副作用を普通に使って書かれてるプログラムと、
MLで、関数型の本意ではないって事で控えめに副作用を使ってかかれた
プログラムと、どっちがどっちだろうとかは思うね。
むしろ健全に副作用を副作用として生かして最小限につかえるMLの方が?
純関数型とかいうならストリームで書けよな。
IOモナドってロジックに副作用が見え隠れするもん。
0552デフォルトの名無しさん
NGNGHaskellも好きです。嫌いじゃないです。
0553名無しさん@お腹いっぱい。
NGNGこっちでmonadの話するのも何だかなーと思うけど、
"Combinig Monads"とか、"Cmoprehending Monads"とか読んだ?
ある程度定式化できるのがmonadのよいところ。
0554デフォルトの名無しさん
NGNGそもそもMonadにしても、副作用を定式化するためにMoggiが使い始めたのを、
Wadlerあたりが今みたいな使い方を言い出したというか。
0555デフォルトの名無しさん
NGNGマニュアルとかがちゃんと無い(よなきがする)ので、
いまいちつかいかたがわかんないのだが・・
0556デフォルトの名無しさん
NGNGlet val c = channel()
in spawn(fn _ => send(c, 123));
recv c
end;
とか。って言ってから漏れの環境で試してみたらBus Error...
インストールに失敗したか?
0557533
NGNGごめん、ちょっと説明不足だったけど、
>>551の話しているprogramming techniqueの話のつもりでした。
Semanticsの方はMoggiが専門だよね。
`Monadic Encapslation of Effects: A Reviced Approach (Extended Version)'
semanticsとprogramming techniqueの両者の橋渡しにもなっていて面白いと思うよ。
0558デフォルトの名無しさん
NGNGすげえ、よくそんな論文がすぐに出てくるな。研究者の方?
http://www.research.avayalabs.com/user/wadler/topics/monads.html
にあるThe marriage of effects and monadsも同じような話だったかも。
っていうか、またMLスレじゃなくなりつつある…(笑)
0559デフォルトの名無しさん
NGNG0560デフォルトの名無しさん
NGNG0561デフォルトの名無しさん
NGNGCMLも使った事はないものの、面白そうなのである。
出せ出せだせ〜
0562デフォルトの名無しさん
NGNG>>195が「出ない」と言ったのを見た私。
それでもあなたに同意する私。
0563デフォルトの名無しさん
NGNG0565デフォルトの名無しさん
NGNG0566デフォルトの名無しさん
NGNG0567デフォルトの名無しさん
NGNG0568デフォルトの名無しさん
NGNG0569デフォルトの名無しさん
NGNG0570デフォルトの名無しさん
NGNGとかいってみるテスト。
0571デフォルトの名無しさん
NGNG0572デフォルトの名無しさん
NGNGつか、なんともいえないが。
0573あげあげ
NGNG0574デフォルトの名無しさん
NGNG0575デフォルトの名無しさん
NGNG再来年あたりのIA64拡張機能の目玉は、関数型言語primitiveの実行効率向上
とか妄想してみる
0576デフォルトの名無しさん
NGNG0577デフォルトの名無しさん
NGNG関数型言語が広まるといいにャ〜
0578デフォルトの名無しさん
NGNGジャックさんが日本語のページも作ってくれるとわれわれアホ共も
なだれ込めるのだが・・
ジャックさんは日本語が結構得意だったはず。
ああ、日本語のページがほすい。
0579デフォルトの名無しさん
NGNGhttp://wwwfun.kurims.kyoto-u.ac.jp/~garrigue/fiml/fiml.html
0580デフォルトの名無しさん
NGNGなんかうまくうごかんかった。
0581Obj.magic
NGNG0582デフォルトの名無しさん
NGNGSMLNJにソケットをつかったプログラムを移植しようとしているのですが、
普通の入出力はなんとなくわかったものの、ソケットを使う方法がよくわか
りません。
簡単なサーバアプリとクライアントアプリをとりあえず動かそうとしておりま
すが、ソケット自体どうやったらいいものかわからずにとまっています。
どなたか親切な方、もしよろしけばれば・・
0583デフォルトの名無しさん
NGNGと身も蓋もないことを言ってみるテスト
でも、なぜsmlnj?
0584デフォルトの名無しさん
NGNG0585デフォルトの名無しさん
NGNGhttp://research.microsoft.com/Projects/SML.NET/
>NEW: SML.NET has now been released.
SML.NETのぺえじ
http://www.cl.cam.ac.uk/Research/TSG/SMLNET/
ヤターって感じ。
0586デフォルトの名無しさん
NGNGもともとMLはMetaLanguageの名前のとおり、定理証明系のようなものを
作るための言語として使われていたと聞きます。
そのように使うにはどうしたらよいのでしょう。
といいますのは、今LISPで言語上に言語を作るようなことをするように
いわれているような状態なのですが、これを出来ればMLでやりたいのです。
LISPを使って、LISP上に言語を作る方法はなんとなくわかっておりますが、
MLではどうするのでしょう。
関数などを定義しておくだけでしょうか?
それともインタープリタをつくるのでしょうか。
0587デフォルトの名無しさん
NGNGこのライセンスって、良く見るBSD風のライセンスだと思うけど、
http://www.cl.cam.ac.uk/Research/TSG/SMLNET/licence.htm
こういうライセンスの場合、SML.NETでコンパイルして生成した
実行ファイルにはこのライセンスによる制約は何も課されないと
考えていいんだよね?
コンパイルによって生成されたファイルはSML.NETの一部を含んでる
わけではないので、University of CambridgeのCopyright表示などは
しなくても良いわけですよね?
0588デフォルトの名無しさん
NGNG私もよくわからないんだけど、MetaLanguageなのは、定理証明系
を記述した言語という意味じゃなくて、定理証明系において、定理証明
の過程で中間的に用いられる戦略もしくは、証明文そのものを記述する時に
使われた言語という意味なのでは?
おそらく意味論が数学的にきっちり定義されているのだと思う。
0589デフォルトの名無しさん
NGNG>>586
プログラミング言語を作るにはsyntaxとsemanticsを決めなければならない。
syntaxといってもユーザの入力するsyntaxと内部表現に対応したsyntaxはこと
なるので、ここでは内部表現の方のsyntax(これをabstract syntaxという)に
集中しよう。syntaxを決めるにあたってよく使われるのがBNFというやつだ。
例えば超簡単なプログラミング言語を考えてみた。
C ::= 0 | 1 | 2 | ...
V ::= a | b | ... | z
E ::= C | V | E + E | E - E
P ::= V <- E | print E | P ; P | while E do P end
制御構造はwhileループだけ、式には代入、加減算、表示がある。変数はなぜか26個。
もしlispだったらこの言語のプログラム
while 1 do print 0 end
を次のS式
(while 1 (print 0))
で表すんじゃないかな?
ML(ocamlですまん)で文を表現する場合はまず、次のように型宣言をするだろう。
type const = int
type var = char
type exp = Const of const | Var of var | Plus of exp * exp | Minus of exp - exp
type prog = Update of var * exp | Print of exp | Seq of prog * prog | While of exp * prog
通には冗長に見えると思うが、ここでは論点を強調するためあえてこのように
してみた。ここで強調したいのはconst,var, exp, progそれぞれの型がBNFの
非終端記号C,V,E,Pに対応していることだ。さらに、それらの終端記号の構成
方法と、対応した型の型コンストラクタが対応していることだ。たとえばBNF
は「V <- E」という文法がPの要素であるとしている。これには「Update of
var * exp」が「prog」型のデータを構成するという宣言に対応している。
だからさっきのプログラムの例は
While (Const 1, Print (Const 0))
というMLの式で表される。
Lispとの違いは構文規則と型の定義が対応しているから、もし規則に反する
文を表現しようとしたらそれが型エラーではじかれることだ。例えば
print (x <- 3)
なんて式は本来文法の文にはならない。MLではこれに対応した表現
Print (Update ('x', Const 3))
をは型エラーになる。Lispだと
(while (update "x" 3))
というS式はべつにあってもなんともないので、これを処理するプログラムの方で
弾いてやらなきゃいかん。syntaxはこんなところかな。
長くてすまん。
0590589
NGNGところがおいらは定理証明系を作ったことがないのでこっから先はよく知らん。
詳しくはPaulsonのML for the Working Programmerを見ておくれ。最後の章だっ
たかな?
PVSを使ってみた感じでは、実装したい論理の文法を定義したら多分次に証明
系を構成する要素(context, inference rule)を実装していく。んで、ゴール
をinference ruleを使って分解するためのunificationを書く。そしてそういっ
た分解手続きをプログラミングするためのライブラリを整える、つー感じかな?
勝手に妄想してみました。
MLには定理証明を実装するのにあるとうれしい機能が積極的に追加されている。
* そもそも定理証明系にエラーがあっては話しにならない。とりあえず
型エラーだけでも無くそう => MLは強い型付け
* どうも定理証明をやるとき、ひとまとまりの手順(関数)をプログラム内で再利用できれば
うれしいようだ。あるいは関数で表現できるデータ構造があるときれいに書ける
=> MLは高階関数がある
* unificationにこけたときにすぐに抜けれるとうれしい => 例外
* つーか同じ関数を別々の型で定義し直すのはつかれた => 多相的型付け
Metaであることの意味は586,588両方が正しいのではなかろうか。
定理証明系の実装っつーの普通のはプログラミング言語の実装と違う気がする。
ある形式化された論理をさらに計算機の中で形式化(実装)し、その論理の推論
規則に従って証明をする、という人間の営みを忠実に計算機の中で実現する、
というのに近い。
個人的には電卓と似たようなものだと思う。電卓は人間が「1+2+3」を紙で計
算するところをキーをパチパチうちこんで機械に計算させる。そんな感じで、
黒板の前でうんうんうなるかわりに定理証明系に最初にゴールを入れて、あと
は手でゴールを分解して証明していく。メリットは証明手続きを(ちょっとば
かし)自動化できること、あと人間のケアレスミスを排除できることかな? 電
卓でもそうだよね。
また長かった。逝ってきます。
0591589
NGNG589と590のつながりがちぐはぐなのに気づいた...
いや、プログラミング言語がつくりたいのかなーと思って589を書いたら
どうやら定理証明系が作りたさそうなのに気づいたので、こうなりました。
0592デフォルトの名無しさん
NGNG書き込んだときにはレスつかないかと思っていたので、感激しました。
MLで言語を作るとCなんかに比べるとかなりすっきり書けそうですね。
>While (Const 1, Print (Const 0))
とりあえず、こういうのを人間が直に書いて動くものをつくろうかと思います。
書き足りなかった事を書き足しますと、
作らなくてはならないものはAI関係のもので、
LISPの上に言語を構築したりするのがありがちと思われるものです。
(あまり詳しく何をするかは書き込んではいけないのでご容赦ください)
LISPには堪能ではないので聞いたままでうまく書けませんが、
LISPだと出来上がった言語は基本的にS式で記述し、それをevalなどを
使って動かすんだそうです。
新たに言語をつくるというより、言語の上に言語を乗せるほうが簡単
というような感じです。
でもMLではevalみたいなことや、マクロが無いのでLISPでやっている
ことをそのまま持ってくるのは無理かなと。
0593Super Combinator
NGNGhttp://www-2.cs.cmu.edu/Groups/AI/html/faqs/lang/lisp/top.html
辺りで実例を探せば?
Lispの方が楽な局面が多いと思うけどね。
LCFみたいなのは静的な数学が相手だからいいのだろうけど。
http://www.cs.cornell.edu/Info/Projects/SimLab/releases/release-1-0.html
とかさ。Common Lisp, CLOSをdefsystemやread macroでちょと拡張して。
0594デフォルトの名無しさん
NGNGError: syntax error: deleting EQUALOP ID
というエラーが出ます。どこが間違っているかわからないのですが、
教えてもらえませんでしょうか。
入力ストリームを出力ストリームにコピーする関数で、この関数を用いて
入力ファイルを出力ファイルにコピーするプログラムを作ろうとしています。
open TextIO;
fun copyStream ins outs =
if endOfStream ins then ()
else case input1 ins of
SOME c => (output1(outs, c);
copyStream ins outs)
| NONE = > copyStream ins outs
;
0595デフォルトの名無しさん
NGNG0596デフォルトの名無しさん
NGNGども。お騒がせしました。
0597デフォルトの名無しさん
NGNG関数InAbcOutを使って入力ファイルに処理を加えて出力ファイルに出力する
関数を作ったんですが、syntax error: deleting BAR ID LPARENと
syntax error found at RPARENというエラーがどうしても取れません。
どこが間違ってるんでしょうか・・・?
関数InAbcOutの型はval InAbcOut = fn : string -> string -> unit
で、ここまではエラーは出ていません。
fun abc nil outf =
| abc (n::L) outf = InAbcOut n outf
abc L outf
;
0598ふわふわ名無しさん
NGNG1. nil -> [] ?
2. 前者の定義のボディがないよ。 () ?
3. 後者の定義のボディは (InAbcOut n outf; abc L outf) としたいの?
0599597
NGNGリストの要素である入力ファイル名が関数の再帰呼び出しで一個ずつ減りますよね?
で、入力ファイルが無くなったら何もせずに終了、と。
前者っていうのはnilが来たときの動作ってことでしょうか?
リストの要素が無くなって空リストが来たら終了させたいんですが。。。
後者ってのは二行目以降ですよね?
InAbcOut n outfで、リストの先頭の要素に処理を施してoutfに出力した後、
abc L outfで関数abcを再帰呼び出しして、リストの次の要素に同様の処理を
再帰的に施していきたいんですが。。。
0600ふわふわ名無しさん
NGNG> 前者っていうのはnilが来たときの動作ってことでしょうか?
> リストの要素が無くなって空リストが来たら終了させたいんですが。。。
だからって何も書かなくてよい訳じゃないでしょ?
> 後者ってのは二行目以降ですよね?
> InAbcOut n outfで、リストの先頭の要素に処理を施してoutfに出力した後、
> abc L outfで関数abcを再帰呼び出しして、リストの次の要素に同様の処理を
> 再帰的に施していきたいんですが。。。
改行は式の区切りにはならないでしょ?
597 のままだと InAbcOut n outf abc L outf という式になっちゃってますよ。
どうでもいいけど、abc list outf よりは abc outf list の方がいいとおもふ。
0601デフォルトの名無しさん
NGNG> LISPだと出来上がった言語は基本的にS式で記述し、それをevalなどを
> 使って動かすんだそうです。
これをMLでやろうと思ったら、combinator(SK-combinatorとは別物)として
実装すれば良いはずなんだが、あまり参考になる文献がないな…
Haskellの世界だとparser combinatorとか、わりと有名なんだが、
MLでも同等のことができる(はず)。って、ほとんど情報量がなくてスマソ。
ちなみに589は何者^^; すごい正確な認識…
0602デフォルトの名無しさん
NGNG0603デフォルトの名無しさん
NGNGいろいろ制限あるみたいだけど。
0604デフォルトの名無しさん
NGNG#私?私に出来るならとっくにやっとる!
0605f ◆KRQhL3K2
NGNG0606デフォルトの名無しさん
NGNG0607Obj.magic
NGNGやってるんだが、なかなか進まない。
0608デフォルトの名無しさん
NGNGhttp://www10.u-page.so-net.ne.jp/dk9/mamewo/ml.html
この辺とかにあるみたいだけど?
..誰だろう?と思ったらまたしても米澤研の人だったよ (^^;
0609デフォルトの名無しさん
NGNG禿げしく遅レスだが、保守ageってことで、
健全性と完全性(狭義)を2つ合わせて完全性(広義)というぞ。
0610デフォルトの名無しさん
NGNG課題3の型を推論する機構を実装する方法がさっぱりわからん。
参考書にあがっている「プログラミング言語の基礎理論」買いましたけど、
難しすぎてぜんぜん参考にならないんですけど・・・
もうちょっとわかりやすく説明している本ってないですか?
0611デフォルトの名無しさん
NGNGMLに堪能な方からすると実にくだらぬ質問だと思います。
datatypeでラベルを使いたいのですが、どうやったらいいのか解りません。
datatype hoge =
Person of {name : string , address : string };
のようなことはどうやったら出来るのでしょうか?
(あんまりな例ですみません)
0613デフォルトの名無しさん
NGNGなんかあった気がするんだけど・・・
0614デフォルトの名無しさん
NGNGできないような気もしない事も無いけど。
できないなら、こういうときはどうすべきなのかしら。
ところで、
いまから取り組むなら
SMLが良いのでしょうかOcamlでしょうか?
あるいは、SML.NETとかF#などをいきなりはじめたりする方が良いのでしょうか?
書籍などの情報はSMLしかないですよね?
0615デフォルトの名無しさん
NGNGプリントアウトして読む。
0617名無しは無慈悲な夜の女王
NGNGhttp://www.is.titech.ac.jp/~wakita/classes/cs2-2001/handout1.pdf
0618デフォルトの名無しさん
NGNG0619デフォルトの名無しさん
NGNG0620デフォルトの名無しさん
NGNGhttp://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4/mltext/ocaml.html
# すみません五十嵐さん、紹介しちゃいました。
0621デフォルトの名無しさん
NGNGML版に、JSPのような埋め込み言語のライブラリ(?)ってあ
りますか?
Googleで「ML+html」で検索しても、もちろん当たりません(^^;
(このような埋め込みの機構って、正式名称はなんだろう?)
0622デフォルトの名無しさん
NGNGなんかそんなの前に見た気がする。
これかな
http://ellemose.dina.kvl.dk/~sestoft/msp/index.msp
ML server pages (version 1.1)
その他
http://www.cs.princeton.edu/~appel/smlnj/projects.html
Implementation work using ML
0623デフォルトの名無しさん
NGNGそういうことがOcamlで出来たら感激で鼻血が出そうだ。
0624デフォルトの名無しさん
NGNGありがとうございます。ML server pagesを使ってみます。
(正式名称は、server pages?)
0625デフォルトの名無しさん
NGNGdatatype 'a tree = Nd of ('a * (('a tree) list));
というデータ型はどういうデータなんでしょうか?
例えばaをint型とした場合、Nd(1, [Nd(1, […, …]), Nd(1, […, …]), …]);
という形になると思うんですが、通常のtree型と違ってEmptyの定義がないために、
一番先の葉の部分をどういう風に記述していいのかわかりません。
このデータ型はどういうふうに表せばいいのでしょうか?
0626無名関数
NGNG葉=子がない=子ノードリストが空
0627デフォルトの名無しさん
NGNG0628デフォルトの名無しさん
NGNGint list の例
[121, 324, 44];
[555];
[];
0629デフォルトの名無しさん
NGNGaの型がintの場合、Nd(123, なんとか)という形になって、なんとかの部分が
(('a tree) list)だから、tree型のリストになりますよね?
だから、Nd(123, [tree型のデータ, tree型のデータ, ...])となりますよね。
で、tree型のデータはNd(234, なんとか)みたいに表されるから、
626さんの説明を見ると、葉の部分は子ノードリストが空だから、nilか[]で、
つまりNd(123, [Nd(234, nil), Nd(345, nil)])とか、Nd(123, nil)
のような形になると思うんですが…。合ってますでしょうか?
…627に書いたのは間違ってましたね。空でも空リストが要りますから。
0630デフォルトの名無しさん
NGNGhttp://www.mlton.org/
0631デフォルトの名無しさん
NGNG0632デフォルトの名無しさん
NGNG実数リスト中の最大要素を計算せよって問題なんですが、、、、
fun list_max(L:real list) =
if tl(L) = nil then
hd(L)
else
if hd(L) > list_max(tl(L)) then
hd(L)
else
list_max(tl(L));
で良いのかと思ったらエラーが出るです。
何ゆえですか???
0633デフォルトの名無しさん
NGNGhttp://www.smlserver.org/
0634デフォルトの名無しさん
NGNG"tl(L) = nil" のところで = で比較しちゃってるので L の要素が
equality type でなきゃいけない。で、real は同値判定「できない」
ことになってるんでこういうエラーがでる。
こういうときは null 関数とかパターンマッチを使おう。
sml 使いが一度はハマル FAQ だね。
あと、632 のプログラムだと list_max(tl(L)) を2回計算してるんで
値の順序によっては30要素くらいでもう値が返ってこなくなるよ。
ちゃんと let とかを使おう。
fun list_max [x : real] = x
| list_max (hd::tl) =
let val tl_max = list_max tl
in
if hd > tl_max then hd else tl_max
end;
元のスタイルのままパターンマッチにしてみた。
ちなみに、real list 同士が比較できない理由だけど、
[1.0] = [1.0] を判定するためには 1.0 = 1.0 の判定が必要だよね。
real 同士が = 比較できないんだからこれは無理。
nil の場合だけ特別扱い……なんてことはしてくれない。
0635632
NGNG有難う御座います。m(_ _)m
なぞが解けました。
fun list_max(L:real list) =
を
fun list_max(L) =
にしたら L がint listになって、こっちはエラーも出ず正常に
動作したので、余計混乱していたのでした。
> ちゃんと let とかを使おう。
質問当時ML初めて二日目でしたので、letをしらないので御座いました。
634さんが書き直してくれた奴は、まだ僕の知らない文法なんですが、
頑張って解読します。
0636Obj.magic
NGNGエラー出力に改行付きで出力してすぐ flush する prerr_endline のフォーマット付きバージョンがあると
便利なので、
# let efprintf fmt = Printf.eprintf fmt; print_newline (); flush stderr
と定義したのですが、
# efprintf "foo = %d" 2;;
This function is applied to too many arguments
と怒られてしまいます。
printf.mlを参考に書き直してみても同じでした。
あると便利そうなんですが、誰か解決法をご存知の方はいらっしゃいますか?
Obj.magic ってマニュアルにも載ってないような..。
0637Obj.magic
NGNGObj.magic はわざとマニュアルに載せてません。
載せるとみんな使い出して seg fault 出した後で、
「O'Caml って type safe じゃねー。使えん。」とか言い出されると困るので。
> エラー出力に改行付きで出力してすぐ flush する prerr_endline のフォーマット付きバージョンがあると
> 便利なので、
今から *printf/*scanf マスターの Pierre Weis に会うので efprintf 頼んでおきますが、
これに限らず、機能が欲しかったら思い切って Caml-list に要望を書きこむと吉かも。
0638デフォルトの名無しさん
NGNGとりあえず
let efprintf fmt = Printf.kprintf (fun s -> prerr_endline s; "") fmt;;
で 90% くらい実現できるんじゃないかな? 返り値が () じゃなくて "" に
なっちゃうのが美しくないけど。
# これに限らず stderr が non-buffering だといいのにと思うことはありますね。
0639Obj.magic
NGNGPierre 曰く、「ワシが書いた Format.*printf を使うのじゃ」
# Format.eprintf "foo = %d@." 2
foo = 2
- : unit = ()
以上。
format string の typing は tricky なので、FAQ に載せるべきかもね。
(もう載ってるか?)
Obj.magic はマニュアルもなにも、C のキャストみたいに
無理矢理タイプを変えるもんだと思えば Ok。
type system を騙す時にやむなく使ったりする。
# (Obj.magic true : int);;
- : int = 1
# (Obj.magic 0 : bool);;
- : bool = false
# (Obj.magic "hello" : int);;
- : int = 537914958
# (Obj.magic 1 : string);;
Segmentation fault
0640636
NGNG>>639
Format.eprintf 良さげですね。
ただ、@.を付けて flush を明示しないといけないという点では変わっていない
という気も..。
>>638
> let efprintf fmt = Printf.kprintf (fun s -> prerr_endline s; "") fmt;;
> で 90% くらい実現できるんじゃないかな? 返り値が () じゃなくて "" に
> なっちゃうのが美しくないけど。
Printf と同じように使えるので今これを使わせていただいてますが、返り値が unit でないので
begin .. end 内などで使うと warning が出るのと、他の unit を返すコードと型が合わない
というエラーになることがあるのだけが問題ですね。
Format.eprintfの引数に強制的に "@." を付加するコードを書いてみましたが、
やはり同じエラーでした。うーん。
> # これに限らず stderr が non-buffering だといいのにと思うことはありますね。
そうですね。
0641デフォルトの名無しさん
NGNG一応、なんとか対戦は出来るところまでいったんですが、
Javaでいうpackageがうまく使えないので、robocodeプログラムに
MLjで作ったロボットを認識させるのが手間で。。。
どなかたうまい手をご存じないでしょうか?
具体的には、下記のソースをMLjのプロンプトから、
\ export test.MLjRobo MLjRobo
\ make
とやって出来たtest.zip を手動で解凍してすべてのファイルを
robocode\robots ディレクトリにおいています。(こうすると、robocodeに認識される。)
(* filename: test.sml *)
structure test =
struct
local open robocode; open java.awt;
in
_public _classtype MLjRobo _extends robocode.Robot {
_public _constructor(){ _super() }
_public _method run () = (
this.#setColors(Color.black,Color.blue,Color.green);
while true do (
this.#ahead(100.0); this.#turnGunRight(360.0);
this.#back(100.0); this.#turnGunRight(360.0)
))
_public _method onScannedRobot(e:ScannedRobotEvent option) = this.#fire(1.0)
_public _method onHitByBullet(e:HitByBulletEvent option) = (
case e of
SOME ev => this.#turnLeft(90.0 - ev.#getBearing())
| _ => () )
}
end (* local *) end (* struct *)
0642デフォルトの名無しさん
NGNG>>590
>PVSを使ってみた感じでは、実装したい論理の文法を定義したら
>多分次に証明系を構成する要素(context, inference rule)を
>実装していく。んで、ゴールをinference ruleを使って分解する
>ためのunificationを書く。そしてそういった分解手続きを
>プログラミングするためのライブラリを整える、つー感じかな?
てゆーか、証明アルゴリズムって実際resolutionとかtableau method
とかいうのと、あとは述語論理の場合unificationくらいでしょ。
そういえば、最近のPVSはShostak法とかいう不等式決定方法が追加した
みたいね。式の移項程度のレベルだと自動で証明できちゃうみたい。
#ちなみにPVSは、Allegro LISPでインプリメントされてます。
0643デフォルトの名無しさん
NGNG実際に証明を書いて見れ.
0644642
NGNGちなみにPVSではstrategyっていいます。
・・・って勘弁してくださいよ(笑)
>>642で書いたのはあくまで自動証明の基本ですよ。
これが即、実用レベルで使えるなんていってないっすよ。
そのうち、自分でも書いてみようと思うけど、
今はexampleの証明読んで勉強するっす。
0645デフォルトの名無しさん
NGNG0646デフォルトの名無しさん
NGNG…ってことない?
なんかシグネチャとかストラクチャとか、説明を省略しすぎ。
おれまだ入門途中で止まってる。
0647無名関数
NGNG最初はUllman本の方がええよ。
Ullman自身、関数型言語を専門にしているわけではなくて、
この本もMLのプロからは評判良くないけど、
逆にいうと、関数型言語素人と同じ視点で書かれているから取っつきやすいかも。
その後で大堀本読んだら。
0648デフォルトの名無しさん
NGNGちなみにUllman本の第1版は本当にクソ。第2版ならなんとか許せる。
翻訳は第1版しかでていない上に、訳がダメダメ。
読むならやっぱり大堀本では?
0649無名関数
NGNGどっちも厚くないし。
二冊あるだけでもましかもね。CamlやHaskellは日本語本、無いよね?
あとは雑誌や大学のゼミのレジュメぐらいかな?
そういえば大堀さんがビットかコンピュータソフトウェアだったかに
書いた記事をどっかで見たなぁ。
どっちにしても日本語で勉強するにはリソースが少なすぎるので、
遅かれはやかれ英語文献を読まざるをえないけど。
0650デフォルトの名無しさん
NGNG「訳がダメダメ」は同感。でもこの訳者、なんでたくさん訳本出しているんだろ?
あるいは、なんでそんなにお声がかかるのかな。他の訳本を読んだことないけど、
たまたまMLの訳がダメだっただけなのかな?
0651デフォルトの名無しさん
NGNG0652デフォルトの名無しさん
NGNG0653デフォルトの名無しさん
NGNG0654_
NGNGパラメーター取れるとか。
0655デフォルトの名無しさん
NGNGたとえば、Mappingという抽象データ型があって、その実装としてすでに
HashMappingとかTreeMappingとかがあるとする。
Mappingのシグネチャを使ってDictionaryという別の抽象データ型を実装
する手段をFunctorとして与えると、ただちにHashやTreeを使ったDictionary
が利用できるようになる。
0656デフォルトの名無しさん
NGNGどうも中途半端な感じがして、
いままでの言語でいいのでは?と思わせること
0657デフォルトの名無しさん
NGNGHaskellのType Classもなかなかいいよ。
>>655
まあ、別にCから乗り換える必要はないんじゃないの。
同じことをやれば、Cと同等かやや速いコードが出るし、バグは減るけど。
0658デフォルトの名無しさん
NGNG0660デフォルトの名無しさん
NGNG昔からあるじゃん
0662デフォルトの名無しさん
NGNGF#っていう、OCaml.NETみたいなのもあるヨ。
OCamlからCの関数を呼べるように、
F#からC#の関数を呼べるらしい。
http://research.microsoft.com/projects/ilx/fsharp.htm
0663デフォルトの名無しさん
NGNGなんか無責任な名前・・
0664デフォルトの名無しさん
NGNG0665デフォルトの名無しさん
NGNG0666デフォルトの名無しさん
NGNG0667デフォルトの名無しさん
NGNG気味悪いから、なんか喋れ。
0668デフォルトの名無しさん
NGNGF# の F は France の F かの?
0669デフォルトの名無しさん
NGNG0670デフォルトの名無しさん
NGNGF# は Don Syme が作ったのでケンブリッジ製です。
OCaml.NET プロジェクトは INRIA にかつてあったので、
別の名前にしたんだと思われ。
0671デフォルトの名無しさん
NGNGFunctional と言いたい所だが、実際は何かは作者しか知らんのではないか。
0672デフォルトの名無しさん
NGNGそんで、ハイブリッドだから、半音あげてるんだろ。
0673デフォルトの名無しさん
NGNGもしできるなら教えて下さい。
0674デフォルトの名無しさん
NGNG宿題か?
0675673
NGNG0676デフォルトの名無しさん
NGNGこのスレの>>2にあるリンク先の、flatに関する議論を読むべし。
0677デフォルトの名無しさん
NGNG参照透明性を失わずにする方法があるって聞いたけど
他の関数型言語では何やらそういう仕組みが備わっているみたいだし。
例えばユーザーから1〜3を選んでもらって、それに応じて処理を変えるみたいの出来る?
無理じゃない?
0678デフォルトの名無しさん
NGNG> 例えばユーザーから1〜3を選んでもらって、それに応じて処理を変えるみたいの出来る?
1. lazy evaluation & infinite list (Miranda)
2. monad (Haskell)
3. unique types (Concurrent Clean)
お好きなものをどうぞ。
0679デフォルトの名無しさん
NGNGファイルやTCP/IPなどストリームなものは1−3でよいのですがねー
イベントやキー&マウス入力等は、うまく扱えないのでは?
0680デフォルトの名無しさん
NGNGSMLではどれが使えますか?
0681デフォルトの名無しさん
NGNG0682デフォルトの名無しさん
NGNG> イベントやキー&マウス入力等は、うまく扱えないのでは?
ネタだよな?
まさか1-3を知っててそんな事言ったりはしないよな?
0683デフォルトの名無しさん
NGNGキーやマウスからの入力を
TCP/IP上のテキトーなプロトコルに変換しちゃえばいいんじゃない?
0684デフォルトの名無しさん
NGNG別にTCP/IPじゃなくても‥‥‥
再帰的に扱えるシーケンシャルなデータになってればいいのでは
0685デフォルトの名無しさん
NGNGという考えをおしすすめていけば結局キーやマウスの入力って
ストリームとして扱えるじゃん。という結論に至るのではなかろうか
0686デフォルトの名無しさん
NGNGこれ読んでください。
http://www.amazon.co.jp/exec/obidos/ASIN/0521480892/
ってか、まだ読んでないので、読んだらどんな内容か教えてけろ。
0687デフォルトの名無しさん
NGNGその本読んだよ、大学のシステムプログラムのクラスで使った。
が、その時はじめてMLを勉強したのでかなり難解であった。
っていうか、はっきりいってわからんかった。
0688デフォルトの名無しさん
NGNGエッ!
大学の授業で使ったの?
差し支えなければ大学名を教えてください。
0689デフォルトの名無しさん
NGNGアメリカのコンピューターサイエンスのクラスじゃ結構このコンカレントML
の本は使われてるって教授がいってた。その教授はカーネギーメロンで
博士号とったMLオタクだけど。
0690デフォルトの名無しさん
NGNGアメリカでは大学の授業でMLがよく使われてるのですか?
日本では東大、名大で使っていることしか知らないですけど。
0691デフォルトの名無しさん
NGNGああ、うちの学校(アメリカ)でも使ってるよ、ML。
cmu出身の先生ってとこも>>689と同じだな (藁
ちなみにその先生、一番好きなのはModula-3だったりする。
0692デフォルトの名無しさん
NGNG一番最初にとるプログラム入門のクラスが今までCだったのにMLにかわった。
0693デフォルトの名無しさん
NGNGUCバークレーとかCMU、MITなどトップの大学にいくと普通にML使ってます。
0694デフォルトの名無しさん
NGNG注文しました。
Amazonでの説明を見ると、実用的?なプログラムを例にとっていて面白そうですね。
a parallel software build system makeみたいなもんですか?
a simple concurrent window manager ウィンドウマネージャ
and an implementation of distributed tuple spaces これは何?
0695デフォルトの名無しさん
NGNGCMLの動かし方書いてあったけど。
0696デフォルトの名無しさん
NGNG最近使っていないから知らんけどSML/NJについてくるんじゃないの?
昔はコンパイル時に選べばいいだけだったよ.
0697デフォルトの名無しさん
NGNG0698デフォルトの名無しさん
NGNG0699デフォルトの名無しさん
NGNG0700デフォルトの名無しさん
NGNG0701デフォルトの名無しさん
NGNG0702デフォルトの名無しさん
NGNG0703デフォルトの名無しさん
NGNGファイルのなかみ:エロムービー
ファイルの長さ:気がすむまで
はぁはぁ。
どぴゅっ。
ふきふき。
0704デフォルトの名無しさん
NGNGWindowsAPIから外部のライブラリ(DLL等)やCOM、ActiveXが使えるやつ。
0705デフォルトの名無しさん
NGNG0706デフォルトの名無しさん
NGNG.Netだけど、
SML.Net
COMオブジェクトもtlbimpを通せば使えるのでは。
Win32APIやDLLはどうだろう。P/Invokeできるのか?
MLじゃないけど、
HaskellScript
0707デフォルトの名無しさん
NGNGF# [>>662] 、マ?
0708デフォルトの名無しさん
NGNGそれとVS.NETなんかと連携できるんかね。
できないと、周辺環境が貧弱だが。
0709デフォルトの名無しさん
NGNGメインの言語として採用するのは難しいだろうけど、
補助ツールとかスクリプトとかで。
Lispをメインで使った仕事はたまにあるよね。
0710デフォルトの名無しさん
NGNGE-lispとIPA仕事別にして。
0711709
NGNGLispでさえそれぐらいしか無いのなら、MLではなおさらかな。
>>575-577 は、やはり妄想であったか.....
0713デフォルトの名無しさん
NGNGあー、そっか。まぁしょうがないですね。
0714デフォルトの名無しさん
NGNG0715デフォルトの名無しさん
NGNG2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 138720人 発行日:2003/1/9
年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。
そんなわけで、年末に予告したIP記録ですが実験を開始しています。
「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0716デフォルトの名無しさん
NGNG0717デフォルトの名無しさん
NGNG0718デフォルトの名無しさん
NGNG0719デフォルトの名無しさん
NGNGhttp://research.microsoft.com/research/downloads/
0720デフォルトの名無しさん
NGNG0721デフォルトの名無しさん
NGNG違います。判決は訴状送達の翌日(初日不算入の原則)からとしてます。
0722デフォルトの名無しさん
NGNG違います。判決は訴状送達の翌日(初日不算入の原則)からとしてます。
0723デフォルトの名無しさん
NGNG違います。判決は訴状送達の翌日(初日不算入の原則)からとしてます。
0724デフォルトの名無しさん
NGNG0725デフォルトの名無しさん
NGNG2ちゃんねるがなくなったら一番困るのはアンチじゃないかと。
低レベルな煽りやコピペ位しか出来ない連中は、2ちゃん以外じゃなかなか受け入れてもらえんだろw
0726デフォルトの名無しさん
NGNG0727デフォルトの名無しさん
NGNG0728@719
NGNGダウンロードできなかったのは、JavaScript切ってあっただけでした
0729デフォルトの名無しさん
NGNG0730デフォルトの名無しさん
NGNG逮捕されるような書き込みをする奴は僅かだろうし
荒らしはどうせ回避策をちゃんと取って来るし
2ちゃんねらは飽きっぽいので今までと変わらんと思う
0731デフォルトの名無しさん
NGNGhttp://headlines.yahoo.co.jp/hl?a=20030109-00000021-zdn-sci
0732デフォルトの名無しさん
NGNGでも知り合いの勤めてるISPは使わないのがお勧め。
恥ずかしい事かけんもんね。
0733デフォルトの名無しさん
NGNGあ、これ内部告発じゃないか
0734デフォルトの名無しさん
NGNG2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 139038人 発行日:2003/1/10
なにやら、連日メルマガだしてるひろゆきです。
そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。
重くなって落ちたりしてもご愛嬌ってことで。。。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50
────────────────────────────
0735デフォルトの名無しさん
NGNG0736デフォルトの名無しさん
NGNG0737デフォルトの名無しさん
NGNGそれを勝手にネットに広めていいとは限らない。
0738デフォルトの名無しさん
NGNG<血液型A型の一般的な特徴>(見せかけの優しさ・もっともらしさ(偽善)に騙されるな!)
●とにかく気が小さい(神経質、臆病、二言目には「世間」、了見が狭い)
●他人に異常に干渉する(しかも好戦的・ファイト満々でキモイ)
●自尊心が異常に強く、自分が馬鹿にされると怒るくせに平気で他人を馬鹿にしようとする
(ただし、相手を表面的・形式的にしか判断できず(早合点・誤解の名人)、実際にはたいてい、内面的・実質的に負けている)
●「常識、常識」と口うるさいが、実はA型の常識はピントがズレまくっている(日本の常識は世界の非常識)
●権力、強者(警察、暴走族…etc)に弱く、弱者には威張り散らす(強い者に弱く、弱い者には強い)
●あら探しだけは名人級(例え10の長所があってもほめることをせず、たった1つの短所を見つけてはけなす)
●基本的に悲観主義でマイナス思考に支配されているため、性格がうっとうしい(根暗)
●一人では何もできない(群れでしか行動できないヘタレ)
●少数派の異質、異文化を排斥する(差別主義者、狭量)
●集団によるいじめのパイオニア&天才(陰湿&陰険)
●悪口、陰口が大好き(A型が3人寄れば他人の悪口、裏表が激しい)
●他人からどう見られているか、体裁をいつも気にしている(「世間体命」、「〜みたい」とよく言う)
●自分の感情をうまく表現できず、コミュニケーション能力に乏しい(同じことを何度も言う、知障)
●表面上意気投合しているようでも、腹は各自バラバラで融通が利かず、頑固(本当は個性・アク強い)
●人を信じられず、疑い深い(自分自身裏表が激しいため、他人に対してもそう思う)
●自ら好んでストイックな生活をし、ストレスを溜めておきながら、他人に猛烈に嫉妬する(不合理な馬鹿)
●執念深く、粘着でしつこい(「一生恨みます」タイプ)
●自分に甘く他人に厳しい(自分のことは棚に上げてまず他人を責める。しかも冷酷)
●男は、女々しいあるいは女の腐ったみたいな考えのやつが多い(他人をけなして相対的に自分の立場を引き上げようとする等)
それと、O♀はエコヒイキきつくて、冷酷だからな。
A♂の異質排除×O♀の冷酷=差別・いじめ とあいなる。
0739デフォルトの名無しさん
NGNG0740デフォルトの名無しさん
NGNGワラタ
0741デフォルトの名無しさん
NGNGまぁどーでもいいんだがw
0742デフォルトの名無しさん
NGNGオマエモナー
「法律」をカンペキに遵守していると言うなら、
六法全書ぐらい全部暗記しているんだよな。凄い香具師だ。(藁
0743デフォルトの名無しさん
NGNG0744デフォルトの名無しさん
NGNG0745デフォルトの名無しさん
NGNG0746山崎渉
NGNG0747デフォルトの名無しさん
NGNG実質的には上告はもう無理らしい。
うれしいなぁ。
0748デフォルトの名無しさん
NGNG書籍をいろいろ探してみたのですが、すくなくて・・・
どなたかよい本知りませんか?
0749山崎渉
NGNG0750デフォルトの名無しさん
NGNGプログラミング言語ML Ullman 著 アスキー出版局
プログラミング言語 StandardML入門 大堀淳 著 共立出版
Paulson本が翻訳されたらうれしいなぁ。
0751デフォルトの名無しさん
NGNGていうか、この2冊だけだろ。日本語でわ。
0752山崎渉
NGNG0753山崎渉
NGNG0754デフォルトの名無しさん
NGNG0755名無しさん@Emacs
NGNG処理系を自分で自作するような習慣が
あるのでしょうか?
0756デフォルトの名無しさん
NGNGLispは構文解析がカンタンだから、自分で作っちゃう人が多いのでは?
MLは、ちょっと手こずりそうなのかも
0757デフォルトの名無しさん
NGNG0758デフォルトの名無しさん
NGNGocaml はリスト内包表記で [1 .. n] のようには書けないようですが、
同じことをするには関数を書くしかないのですか?
let rec count n =
let i = ref n in
let list = ref [] in
begin
while !i > 0 do
list := !i :: !list;
i := !i-1
done;
!list
end
0759名無しさん@Emacs
NGNG[1 .. n] というリストが作りたいんでしょうか?
だったら、
let rec make_list current n =
if current = n then []
else current :: make_list (current + 1) n
でどうでせう。遅延評価とかは全然分からないので、聞かないで下さーい(はーと)
0760デフォルトの名無しさん
NGNGそのプログラムでは、スタックがあふれますよ。
ocaml ではそんなこと気にしないのが流儀な気もするが。
# count 100000;;
- : int list =
[1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20; 21;
22; 23; 24; 25; 26; 27; 28; 29; 30; 31; 32; 33; 34; 35; 36; 37; 38; 39; 40;
(snip)
293; 294; 295; 296; 297; 298; 299; ...]
# make_list 0 100000;;
Stack overflow during evaluation (looping recursion?).
ところで、こんなリストを生成する関数はライブラリにはないの?
0761デフォルトの名無しさん
NGNG型推論もさることながら、
もっと手前構文解析のところも気になります。
特に演算子を定義する部分はいったいどうやってるのかと。
…え?ソースを読め?
0762名無しさん@XEmacs
NGNG関数型言語らしくいきましょうか
let make_list s e =
let rec loop lst n =
if n > e then
lst
else
loop (n::lst) (n+1)
in
List.rev (loop [] s);;
って末尾再帰の最適化してくれるよね(?)
0763デフォルトの名無しさん
NGNG…と自分で書いているウチに答えが判った気がしてきた。
直に終端記号で演算子を扱わないでおいて、
優先度は決まった数しかないから優先度ごとに
「演算子優先度n」という非終端記号を前もって用意しておけばいいのかな。
あとは変数名や関数名と同様に対応付ければいいだけ?
0764デフォルトの名無しさん
NGNG[< 'n ; gen (n + 1) >]
;;
0765デフォルトの名無しさん
NGNGそれって ocaml ですか? syntax errorって言われるのですが。
0766デフォルトの名無しさん
NGNG#load "camlp4o.cma";;
してから。
#load "camlp4o.cma";;
let naturals =
let rec gen n = [< 'n ; gen (succ n) >] in gen 0
;;
let _ =
let rec go_ahead () =
Printf.printf "%d\n" (Stream.next naturals);
go_ahead ()
in
go_ahead ()
;;
とでもやってみるべしべし
0767デフォルトの名無しさん
NGNGわざわざ List.rev をする必要はなし
let make_list from_idx to_idx =
assert (to_idx >= from_idx);
let rec loop prev_list prev_count =
if prev_count >= from_idx then loop (prev_count :: prev_list) (pred prev_count) else prev_list
in
loop [] to_idx
;;
0768デフォルトの名無しさん
NGNG0769767
NGNGとかなら一行で書けるかな。
0770767
NGNG0771デフォルトの名無しさん
NGNGよくわからんくてなかなか手をだせない。
0772デフォルトの名無しさん
NGNG関係ないけど、
concurrent ととなると最近は clean がメジャーなのかな。
caml にもあったよね。
0773デフォルトの名無しさん
NGNGConcurrent Haskellも有った筈。
0775デフォルトの名無しさん
NGNGhttp://www.google.co.jp/search?q=concurrent-ml 約1,620件
http://www.google.co.jp/search?q=concurrent-haskell 約1,170件
http://www.google.co.jp/search?q=concurrent-caml 約55件
0776デフォルトの名無しさん
NGNGどなたか解説して下さい。
Objective Caml version 3.06
# let id x = x;;
val id : 'a -> 'a = <fun>
# let id2 = id id;;
val id2 : '_a -> '_a = <fun>
# let id3 x = id (id x);;
val id3 : 'a -> 'a = <fun>
どうして、id2 は '_a になる?
0777デフォルトの名無しさん
NGNG0778デフォルトの名無しさん
NGNGここをみると解決。
ttp://www.taplas.org/~oiwa/ja_JP.ISO-2022-JP/lecture/ocaml/2001/misc/valuerestriction.pdf
0779デフォルトの名無しさん
NGNGhttp://science.2ch.net/test/read.cgi/rikei/1046173479/
0780デフォルトの名無しさん
NGNG0781デフォルトの名無しさん
NGNG0782デフォルトの名無しさん
NGNG0783デフォルトの名無しさん
NGNG0784デフォルトの名無しさん
NGNG0785デフォルトの名無しさん
NGNG0786デフォルトの名無しさん
NGNG0787デフォルトの名無しさん
NGNGそりゃスタックマシンだ
0788デフォルトの名無しさん
NGNGOCaml で、module A, B, C が存在して、
A は、B にのみ使わせたいとき、それを実現する方法を教えて下さい。
0789デフォルトの名無しさん
NGNGhttp://caml.inria.fr/oreilly-book/html/index.html
0790デフォルトの名無しさん
NGNG処理系で簡単に判別できそうな気がするのですが、プログラミングの負担になるだけなのでは?
0791デフォルトの名無しさん
NGNG0792デフォルトの名無しさん
NGNG例えば f が型 int -> int を持つ自由変数のとき、
let rec f = f 1 と let f = f 1 は全く意味が違う。そもそも
前者は意味をなさない。
ある変数が自由変数かどうかはコンパイラはすぐに分かるが、
それが自由変数であるべきか否かというのは、
コンパイラには分からないのだ。
だから rec は必要。understand?
0793デフォルトの名無しさん
NGNGごめん意味不明。言いたいことは分かると思うけど。
「例えば f が型 int -> int を持っているとき」
に訂正。
0794デフォルトの名無しさん
NGNG今いちピンとこないのですが、…
SML の場合は関数が再帰かそうでないかで区別しないのに caml では区別するのは、
SML が関数と変数を区別するのに対し caml は区別しない事に依存するのでしょうか?
対応表:
宣言\言語|SML|Caml
変数 |val|let
非再帰関数|fun|let
再帰関数|fun|let rec
0795デフォルトの名無しさん
NGNGSML でも val を使って関数を束縛できるんですが御存じない?
その場合再帰関数には val rec を使うのですけれども。
0796デフォルトの名無しさん
NGNGlet f = ...
と書いた場合は、f が ... の中で束縛されていないのに対し、
let rec f = ...
と書いた場合は、f が ... の中で束縛されていることに注目するのが
よろしいかと。
ML である以上、関数と変数を区別するということの方がピンと来ません。
0797デフォルトの名無しさん
NGNGいろいろありがとうございます。
関数型言語では変数と関数を区別しないっていう事は理解できるのですが、
じゃ SML の fun って、いったい何?…という疑問が残ります。
再帰関数でもそうでなくても fun でいいのなら、その方が考えなくて済むから楽じゃん?
caml でも採用しる!?
0798デフォルトの名無しさん
NGNGcaml でも、非再帰関数を let rec で束縛することは可能です。
その意味では、caml でも再帰関数と非再帰関数を区別しません。
また、やろうと思えば、後述しますが、let のみで再帰関数を
定義することも可能なのです。
>>796 で言いましたが、... の中で、f が束縛されているかどうか
の違いが rec なのであって、それ以上のことは何もないのです。
そして、>>792,>>793 でも言いましたが、caml は自由変数を許しているので
rec の有無で意味が変わりうるのです。
おそらく以上のことは SML にも当てはまると思われ。SML は caml に
比べてごたごたしているのであまり触ってないけれども。
ちょっと理論的なことを言うと、ラムダ計算では再帰関数は不動点を使って
表現することも可能 (Y combinator でググれ) で、Y combinator の引数の
与えようによって再帰にも非再帰にも出来る。λ計算の立場からは、
再帰か否かなんてことは、全く意味が無い。つまり、両者の区別は要らない。
0799デフォルトの名無しさん
NGNGまあいいや。Y combinator でググれば答えは書いてある。
でも、-rectypes しないと caml では型エラーが出るので
そこんとこよろしく。
0800800 get!
NGNG0801デフォルトの名無しさん
NGNG1. 自由変数の判断の為 rec の有無で意味が変わりうる
2. 再帰関数の宣言には普通 rec が必要だが、非再帰関数の場合 rec を付けても付けなくてもいい
3. SMLの fun は let rec の短縮形(たぶん)
4. Y-combinator を使えば再帰関数も rec なしで宣言できる
…というあたりでしょうか。
Y-combinator は ruby-list でも話題になってたんですね。
どうもありがとうございますた。
0802デフォルトの名無しさん
NGNG0803デフォルトの名無しさん
NGNG再帰で躓いているんじゃなくて、再帰の書き方でちょっとした
疑問を持っただけだと思いますが。
scheme をやったところで、scheme の場合、rec がずっと
ついているようなものだから、この疑問はでで来なかった筈。
0804デフォルトの名無しさん
NGNG0805デフォルトの名無しさん
NGNG0806デフォルトの名無しさん
NGNG0807デフォルトの名無しさん
NGNG0808デフォルトの名無しさん
NGNG(処理系はwindows用であればなんでもかまわないです)
もしできるなら、それをC言語とかで利用したいんです。
0809デフォルトの名無しさん
NGNGでも普通逆だろ。ML で C 使うんじゃないのか。
0810デフォルトの名無しさん
NGNGありがとうございます。
いや、MLで作ったプログラムを外部から利用できたら
面白いなと思いました。
トランスレーターとかはMLの方が書きやすそうなので。
0811デフォルトの名無しさん
NGNGfreeで解放するか GCで解放するかが問題になると思われるので注意。
0812デフォルトの名無しさん
NGNG0813デフォルトの名無しさん
NGNGSML には callcc というのがあるみたいだけど。
http://merd.net/pixel/language-study/syntax-across-languages/
0814デフォルトの名無しさん
NGNG0815名無しさん@Emacs
NGNGその辺いかがですか? >> ML 使いのみなさん
日常的なスクリプティングも ML で済ませてる方いらっしゃいます?
;; ML があれば C 言語は要らないかも知れないけど、scheme は手放せないかも。
0816デフォルトの名無しさん
NGNG0817へたれ
NGNG程度の、安心より手軽さが重要な、アドホックなプログラムを指したつもりです。
そういうコードを書く時は、いちいち型を意識するのは面倒ですよね。もしかして
ML はそういった用途には向いてないのかなと思いました。対話的な開発環境が
あるので、書き捨てスクリプトを作る用途も意識した言語かなと思っていたのです
が。
型推論もありますが、面倒なのは型を記述する事では無く、型を意識してコードを
書く事なのであまり助けにならないように思います。型推論はもっと別の目的の為
にあるのかなぁと。
そんな事は無い、あらゆる場面で ML を使っていると言う方がいらっしゃったら
是非ご意見を聞かせて下さい。
0818デフォルトの名無しさん
NGNG>型を意識してコードを書く事なので
schemeで書くときだって型は意識するでしょ。
MLではさらに型の妥当性までチェックしてくれるよ。
ヒントになる式が含まれてれば。
0819デフォルトの名無しさん
NGNG型を意識しないでプログラムを書く方が異常。型を意識していないなら、
変数の中のデータも意識していないことになる。
もちろん、そんなヤツはいない。
MLで小さいプログラムを書く時に面倒なのは、コアーションがないことぐらいでは。
そしてそんな小さいプログラムでは、あまりコアーションを必要としない。
0820へたれ
NGNGscheme も常識的な範囲で (+ 2 "foo") とかは出来ませんが、print_string とか、+. とか、
リストの要素の型は同じでないといけない等、 ML(O'Caml) は強く型を意識させられる
言語だなと感じました。それがありがたい局面は多々あると思いますが、小プログラムを
作る時には邪魔に感じるのではという疑問を感じました。
私はまだ ML の勉強を始めたばかりですので、識者の皆さんのお話を聞けたらと思いました。
おかしな事を言っていたら済みません。
0821かおりん祭り
NGNG〜oノハヽo〜 / ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ^▽^) < こんなのがございまーす♪
= ⊂ ) \_______
= (__/"(__) トテテテ...
0822デフォルトの名無しさん
NGNG>小プログラムを作る時には邪魔に感じるのではという疑問を感じました。
そういう事はお勉強終わってから言え。
0823デフォルトの名無しさん
NGNG他の言語の感覚でいると。
0824デフォルトの名無しさん
NGNG# [`Int 3; `String "fugahoge"];;
- : [> `Int of int | `String of string] list = [`Int 3; `String "fugahoge"]
polymorphic variants というものもありますが?
(cond ((string? x) (anonfun1 x)
(int? x) (anonfun2 x)
...
))
が
match x with
| `Int x -> anonfun1 x
| `String x -> anonfun2 x
| ...
となる。
リストを作るときが面倒かもしれないけどね。
0825デフォルトの名無しさん
NGNG0826デフォルトの名無しさん
NGNG0827デフォルトの名無しさん
NGNG0828デフォルトの名無しさん
NGNG0829デフォルトの名無しさん
NGNG0830デフォルトの名無しさん
NGNGしょんべん漏らすほど感動した
0831デフォルトの名無しさん
NGNGModeling Language !?
0832デフォルトの名無しさん
NGNG概して sml より ocaml の方がコードサイズが小さい様ですが、何でですか?
行数での比較なので正確ではないですが、ほとんどのテストで ocaml が短く、
Regular Expression Matching では smlnj:767,mlton:765 に対し ocaml:32
と20倍以上の差があります。
プログラマのスキルの差なのかな…にしては差がありすぎると思うのですが
0833デフォルトの名無しさん
NGNG> と20倍以上の差があります。
OCaml には Str module が有って、正規表現が書けるのだけど、
SML には正規表現ライブラリが無いのかも。しらないけど。
それはともかく、OCaml より SML の方がごちゃごちゃしてるのは事実。
0834デフォルトの名無しさん
NGNG0835デフォルトの名無しさん
NGNGそれとも処理系の実装の為に?
0836デフォルトの名無しさん
NGNGコードを読め。SML は Thread や Mutex を、このコードの中で
簡単に実装しているからだ。当然コードは膨れ上がる。OCaml には
Mutex も Thread も module としてある。それを使えば当然コードは
短くなる。
> OCamlが速いのは、言語仕様の為に?
> それとも処理系の実装の為に?
両方。関数型言語は tail recursion が仕様として義務づけられて
いたりするものもあるので、Ackermann's Function や Fibonacci Numbers
等では高得点を出しやすい。逆に、ハードウェアをフルに活用すればそれだけ
得点が出る Matrix Multiplication 等は C の方が速い。
ちなみに、OCaml は GC の為に 1bit だけ値にタグを付けているので、
引き算するときは、
sub eax, ebx
incr eax
の様なコードを吐かざるを得ないので、遅くなる。足し算は lea 命令で
一命令で頑張っているみたい。
OCaml は実装もかなり頑張っている。(それでも inline 展開がかなり保守的で、もっとやってくれても良いのに
と思うこともある)
0837デフォルトの名無しさん
NGNGsmlnjやmltonには、それ用のモジュールが準備されてないって事でつか?
0838山崎渉
NGNG0839デフォルトの名無しさん
NGNG[(a1, bn); (a2, bn - 1); ...; (an, b1)] を返す関数を書きなさい。ただし、
* nをあらかじめ知ることはできない
* 与えられた二つのリスト以外のリストを使ってはならない
* 再帰呼び出しは高々(n + 1)回しか行ってはならない
* 全体の計算量はO(n)でなければならない
0840デフォルトの名無しさん
NGNG0841山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0842山崎渉
NGNG( ^^ )< ぬるぽ(^^)
0843デフォルトの名無しさん
NGNG0844デフォルトの名無しさん
NGNGfun sp L M =
let
fun rev [] = []
| rev (x::xx) = (rev xx) @ [x]
fun sp1 [] [] = []
| sp1 [] x = raise SpError
| sp1 x [] = raise SpError
| sp1 (x::xx) (y::yy) = [(x,y)] @ sp1 xx yy
in sp1 L (rev M)
end
;
これじゃあいや、ということね?
0845デフォルトの名無しさん
NGNGはい、ぜんぜんだめ。
0846デフォルトの名無しさん
NGNG0847デフォルトの名無しさん
NGNG0848デフォルトの名無しさん
NGNG答えのリストが作れねーのですけど。
# Ocaml
let f al bl =
let rec g al bl =
match al with
| [] -> ( [], bl )
| a1::al ->
match g al bl with
| _, [] -> failwith "hoge"
| pl, b1::bl -> ( (a1,b1)::pl, bl )
in
fst (g al bl)
ってこと?
0849デフォルトの名無しさん
NGNG0850デフォルトの名無しさん
NGNG0851デフォルトの名無しさん
NGNG0852デフォルトの名無しさん
NGNG0853デフォルトの名無しさん
NGNGProject: OCaml Eclipse Plugin
http://sourceforge.net/projects/ocaml-eclipse/
F#はだめぽ
0854デフォルトの名無しさん
NGNG0855デフォルトの名無しさん
NGNG0856デフォルトの名無しさん
NGNG(* OCaml *)
let f =
let rec g c l = function
| [] -> c l
| hd::tl ->
let h = function
| [] -> assert false
| hd2::tl2 -> (hd2, hd)::(c tl2)
in g h l tl
in g (fun _ -> [])
のほうが良くない?
「与えられた二つのリスト以外のリストを使ってはならない」という条件が曖昧だけど
途中でペアを返すのは微妙かと。
これだと末尾再帰になるし (やることは変わらんので実行速度も変わらんかも知れないけど) 。
>>848 が間違いだとはいわないけどね。
大して自信があって言ってるわけではないです。
この発言に間違い (やそれに準ずるもの) の指摘は
勉強になるので歓迎です。
0857デフォルトの名無しさん
NGNGこれって効率いいの?
>>848 の方がいいとおもうんだけど。
> 「与えられた二つのリスト以外のリストを使ってはならない」という条件が曖昧だけど
let f xs ys = List.combine xs (List.rev ys)
とは書くなってことでしょ。
0858デフォルトの名無しさん
NGNGそれって末尾再帰で基本的に書けない map を
以下のようにして書いて、末尾再帰だ!って言ってるだけでしょ。
let map1 f xs =
let rec iter g xs = match xs with
[] -> g []
| x::xs -> iter (fun ys -> g (f x :: ys)) xs in
iter (fun x -> x) xs
0859デフォルトの名無しさん
NGNG末尾とはいえ、再帰関数だし。
0860デフォルトの名無しさん
NGNG(define (f a b)
(define (g a b)
(if (null? b) a
(let ((x (g a (cdr b))))
(set-cdr! b (car b))
(set-car! b (car x))
(set-car! x b)
(cdr x))))
(g a b) a)
0861デフォルトの名無しさん
NGNGexception NotSameLength;
fun f1 x y =
let fun g [] y = ([], y)
| g (x::xs) y =
let val z = (g xs y)
in if #2(z) = [] then raise NotSameLength else
((x,hd(#2(z))) :: #1(z), tl(#2(z)))
end
val t = g x y
in if #2(t)<>[] then raise NotSameLength else #1(t)
end;
0862デフォルトの名無しさん
NGNG>>852 ??
0863デフォルトの名無しさん
NGNGval emptySet = fn n => false;
fun singleton n = (fn x => x = n);
fun insert S n = fn x => x = n orelse S x;
fun member S n = S n;
fun union S T = (fn x => S x orelse T x);
fun intersection S T = (fn x => S x andalso T x);
fun difference S T = (fn x => S x andalso not (T x));
下のようになりました。このWarningはどういう意味ですか?
それとこの解答を添削してください。
2_22.sml:3.30 Warning: calling polyEqual
val singleton = fn : ''a -> ''a -> bool
2_22.sml:4.28 Warning: calling polyEqual
val insert = fn : (''a -> bool) -> ''a -> ''a -> bool
0864デフォルトの名無しさん
NGNGそんな感じの午後。
0865デフォルトの名無しさん
NGNGそれが通常の神経だ。ML最強。
0866デフォルトの名無しさん
NGNG0867デフォルトの名無しさん
NGNG0868デフォルトの名無しさん
NGNGみんなで使って流行らせよう
0869デフォルトの名無しさん
NGNG書きやすくなってほしい。書きにくすぎ。
今後は関数型も命令型も書きやすい言語が最強。
0870デフォルトの名無しさん
NGNG0871山崎渉
NGNGピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0872デフォルトの名無しさん
NGNG放置しようとも思ったんだが
http://www.cis.ksu.edu/~allen/sml/sml-emacs.html
0873デフォルトの名無しさん
NGNGありがとう。でも放置なんて・・・
0874デフォルトの名無しさん
NGNGsml-mode で検索すればすぐに見つかるのだから、その検索さえしなかった
ものは放置で十分なのだ
0876デフォルトの名無しさん
NGNGjavaやc++とどのくらい歴史的に若いというか新しい物なのかわかりますか?
0877デフォルトの名無しさん
NGNG0878デフォルトの名無しさん
NGNGC with Classes 1980-
C++ 1983-
Java 1990-
ML 1973-
SML 1984-
Caml 1987-
OCaml 1996-
0879デフォルトの名無しさん
NGNG>C with Classes 1980-
なにそれ!
0880デフォルトの名無しさん
NGNG最も若い歴史を持つ言語処理系かと思った。
0881デフォルトの名無しさん
NGNGC with Classesも知らないの? C++の前身でしょ?
0882デフォルトの名無しさん
NGNG一番若いのはConcurrentCleanかな。
0883デフォルトの名無しさん
NGNGObjectiveCは?
0884デフォルトの名無しさん
NGNGなにをとんちんかんなことを。
Objective CとC++は元がCであること以外はほとんど関係ないでしょ?
0885デフォルトの名無しさん
NGNGOCamlより最先端というのが、オブジェクト指向サポートと結びつけるのもどうかと思うが、
なんとなく納得
0886デフォルトの名無しさん
NGNG最左?
0887デフォルトの名無しさん
NGNG調べたら遅延評価だった。Haskellみたいなもんだね。
0888デフォルトの名無しさん
NGNGjavaって1995年じゃなかった?
0889デフォルトの名無しさん
NGNGCLEANは、デフォルトでは、遅延言語である。
…
型定義に正格性注釈を使用することによって、データ構造と関数の評価順序を、遅延から正格に変更できる。
http://sky.zero.ad.jp/~zaa54437/programming/clean/LanguageReport20/Chap10.html
0891デフォルトの名無しさん
NGNGそのマニュアルわかりにくすぎ
0892デフォルトの名無しさん
NGNG登録してみたら得したよ(^^)v
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
★http://endou.kir.jp/betu/linkvp/linkvp.html
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
0893デフォルトの名無しさん
NGNGクラスはクラスでも型クラスなのでOOPのクラスとは違う
0894デフォルトの名無しさん
NGNG0895デフォルトの名無しさん
NGNG0896デフォルトの名無しさん
NGNGおれもあれずっと読んでたら頭痛くなってきた。
わざと難解な表現使ってるとしか・・・
0897デフォルトの名無しさん
NGNG0898デフォルトの名無しさん
NGNG最初は読んでも分からんよ。
0899898
NGNG0900デフォルトの名無しさん
NGNG0901デフォルトの名無しさん
NGNGそのページのホームを見ようとしても、
検索エンジンで見ようとしても、しよう
としたとたんにすぐ IE になにも表示
されなくなる・・・・なんでだろう。
0902デフォルトの名無しさん
NGNG0903デフォルトの名無しさん
NGNG0904デフォルトの名無しさん
NGNGウチではちゃんと見れるが
>>903
まだ早いでは
0905デフォルトの名無しさん
NGNG内容以上に訳が解り難いんだと思う。最初の段落だけでも、
>全種の効率性の詳細に悩むことなく、
>意味している
>時間及び/又は領域において
とか。
最初の文は「関数型言語でのプログラミングでは、効率性に関する細々とした事に心を奪われずアルゴリズムに集中することが重要である」
位に変えてしまえば、少しは読みやすくなろ。
(とは言っても草稿版らしいし、訳者も忙しいだろうし、仕方なかろうとも思う)
0906デフォルトの名無しさん
NGNG0907デフォルトの名無しさん
NGNG0908デフォルトの名無しさん
NGNG読み易いかもしれんが、それは誤訳のような気がするのだが。
0909デフォルトの名無しさん
NGNG0910905
NGNG原文
>Programming in a functional language means that one should focus on algorithms
>and without worrying about all kinds of efficiency details.
直訳してみた
「(不特定単数の)関数型言語でプログラムを組む事は(不特定主体が)アルゴリズムに
注目すべきべきであって全種の効率に関する詳細に関しては心配すべきでないことを意味する。」
書き換えたのが905。
そんなに間違ってる?
0911デフォルトの名無しさん
NGNG可能性乃至は蓋然性について語っているのではなかろうか。
つまり、関数型言語のプログラミングに限らずとも、
アルゴリズムにのみ集中できることは重要なのであって、
そのことを関数型言語でのプログラミングに限って語る実益はそれほど多くない。
むしろ重要なのは、
関数型言語でのプログラミングの場合、他のパラダイムの言語とは異なり、
プログラミング=アルゴリズムそのまま
という関係がかなりの可能性蓋然性をもって成り立つということだと思われる。
従って、そうであると、効率性を度外視したプログラムがたまに出現し得るので、
それを考慮するために色々作りました、とそういうことをいっているのだと思われる。
0912905
NGNGありがとう。
shouldとmeanが巧く読めなくて適当に書いた(で、少し虚勢を張ってみた)んですけど、ずばりそこを間違えていたのね。
訳に関してだけでなく、自分の知識の為にも、とても参考になりました。
直訳の範囲を逸脱するなら、ちゃんと知っている人が書かないとやっぱり駄目ですね。
重要な所への配慮が欠けてしまいます
0913デフォルトの名無しさん
NGNG0914デフォルトの名無しさん
NGNG0915デフォルトの名無しさん
NGNGマニュアルを見てもわかりませんでした。
見落としているだけかな・・・。
0916デフォルトの名無しさん
NGNGコピペ?
0917デフォルトの名無しさん
NGNG逃げの一手。
let x = ref 10;;
class c =
object
method get_x = !x
method set_x = fun y -> x := y
end
とか。試してないから合ってるかどうかわかんないけど。
0918デフォルトの名無しさん
NGNGhttp://caml.inria.fr/ocaml/htmlman/manual005.html
>#class adjusted_point x_init =
> let origin = (x_init / 10) * 10 in
> object
> val mutable x = origin
> method get_x = x
> method get_offset = x - origin
> method move d = x <- x + d
> end;;
とあるから、破壊代入できるような静的メンバ変数が欲しいなら
class c =
let x = ref 10 in
object
method get_x = !x
method set_x = fun y -> x := y
end
などとするほうがよいかと。外から隠せるし。
ところで破壊代入ってどうなんですかね。
関数型とオブジェクト指向と破壊代入って
そのうち任意の 2 つはそこそこ相性がいいと思うんだけど
3 つ揃うとどうかなぁと思うことが何度かあるです
みなさんどう思いますか?
0919915
NGNGそれによると>>918のようにやっているみたいです。
>>918のように書くとてっきりインスタンスごとに値が用意されちゃって
ふつうのメンバ変数のようなものになるのかと思っていました。
どうもまだ基本的なところがわかっていないようです。
ありがとうございました。 >917,918
0920デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1054523453/
↑
こんなスレできてたんですね。
次スレに使うとか >>903
0921デフォルトの名無しさん
NGNGいやです。
F# の話題に限定してはいけない。ここは ML スレだ。
OCaml も SML もありなのだ。
0922デフォルトの名無しさん
NGNGlet rec foo_a n f a =
if n=0
then a
else foo_a (n-1) f (f a)
let foo_b n f a =
let rec iter n a =
if n=0
then a
else iter (n-1) (f a) in
iter n a
foo_b より foo_a の方が速いのなぜですか。
もっといい書き方はありますか。
0923デフォルトの名無しさん
NGNGx86 の話だけど。
foo_a の中で f を呼ぶ時はオーバヘッドがかからないのだけど
foo_b の中で f を呼ぶ時はオーバヘッドがかかっている。
以下をみれば自明。
Tmp__iter_64:
subl $8, %esp
(中略)
.L100:
movl %eax, 0(%esp)
movl %ecx, 4(%esp)
movl 12(%ecx), %edx
movl (%edx), %ecx
movl %ebx, %eax
movl %edx, %ebx
call *%ecx
(以下略)
mp__f1_56:
subl $8, %esp
(中略)
.L103:
movl %eax, 0(%esp)
movl %ebx, 4(%esp)
movl (%ebx), %edx
movl %ecx, %eax
call *%edx
(以下略)
0924デフォルトの名無しさん
NGNG0925デフォルトの名無しさん
NGNGfun rev [] = []
| rev list = rev (tl list) @ [hd list];
と定義して、
- rev [];
とするとこうなるのですが、どうすればいいのでしょうか。
stdIn:66.1-66.7 Warning: type vars not generalized because of
value restriction are instantiated to dummy types (X1,X2,...)
val it = [] : ?.X1 list
0926デフォルトの名無しさん
NGNGこの際、キャメルと呼んでしまおうか。
0927デフォルトの名無しさん
NGNG0928デフォルトの名無しさん
NGNG0929デフォルトの名無しさん
NGNG当方Macでsml/njにて弄ばれていますが,mi(テキストエディタ)とterminal行ったり来たりでは
どうも使いにくい.emacsにsml-mode入れても,なんとなくしっくり来ないし.
Smalltalkのbrowserみたいなの(teikadeみたいなのでもエエや)があれば便利なんだけどなぁと無い物ねだりしてます……
0930デフォルトの名無しさん
NGNGEmacs+sml-modeです。インデントがよくわかりません。
0931山崎 渉
NGNG__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0932デフォルトの名無しさん
NGNGhttp://www5a.biglobe.ne.jp/~sasagawa/MLEdit/
0933山崎 渉
NGNG__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0935デフォルトの名無しさん
NGNG擬似乱数の使い方は試行錯誤でなんとかなったものの、
(擬似乱数の初期化用の)現在の時間の取得方法が分かりませんでした。
どうやればいいんでしょうか?
0936デフォルトの名無しさん
NGNGhttp://www3.free-city.net/home/espresso/princess/peach.html
0937デフォルトの名無しさん
NGNGTime.now ();
のことかな。
0938デフォルトの名無しさん
NGNG0939デフォルトの名無しさん
NGNGうちのには Time モジュールってのは無いようです。
Objective Caml version 3.06 なんですけどね...。
>>938
それでいけました!
self_init...そんな関数名、思いつかんわけだ。
ありがとうございました。
0940デフォルトの名無しさん
NGNGリファレンス見れば載ってるでしょ?
0941デフォルトの名無しさん
NGNGhttp://caml.inria.fr/ocaml/htmlman/index.html
発見。これですか。
http://caml.inria.fr/ocaml/htmlman/libref/Random.html
なるほど。Random.self_init も載ってますね(当たり前だ)。
今から DL して家宝にします。
0942デフォルトの名無しさん
NGNG0943デフォルトの名無しさん
NGNG0944デフォルトの名無しさん
NGNG0945デフォルトの名無しさん
NGNG今でもMLで開発されてるんじゃないの?
MLで書かれた定理証明系の教科書も出てたと聞いた様な。
0946デフォルトの名無しさん
NGNG0947デフォルトの名無しさん
NGNG0948デフォルトの名無しさん
NGNG定理証明システムという名のソフトウェアは
何で書かれているのかが問題となるようなものなんですか?
そんなことは無いでしょう。
0949デフォルトの名無しさん
NGNG話の流れをよくよみましょう ;-p
0950デフォルトの名無しさん
NGNG僕も >>944 以降の話の流れがよくわかりません。
教えてください。
0951デフォルトの名無しさん
NGNGヒットしますが、関係ありません?
0952デフォルトの名無しさん
NGNGありがとうございます。関係あります。
過去ログ読んで、自分なりに少し考えてから出直してきます。
0953デフォルトの名無しさん
NGNG0954デフォルトの名無しさん
NGNG0955デフォルトの名無しさん
NGNG0956デフォルトの名無しさん
NGNG>>954は削除人
0957山崎 渉
NGNG0958デフォルトの名無しさん
NGNGStandard MLを大堀先生の本で12章ぐらい(ストラクチャとかモジュール)
まで勉強したんですが、OCamlの方が評判よさそうなので
、そんなに差がないなら乗り換えようかと。
0959デフォルトの名無しさん
NGNG0960デフォルトの名無しさん
NGNG0961デフォルトの名無しさん
NGNG制服着用のままフェラ、本番をこなしてくれます。
性格の非常にいい子で撮影者のなすがままです。
テレクラでキャッチしたようですがこんないい子がいるのならいってみようかなー。
http://www.geisyagirl.com/
0963デフォルトの名無しさん
NGNG0964デフォルトの名無しさん
NGNGのOJUGってOcaml Japan User Groupの略なの?
0965デフォルトの名無しさん
NGNG変数、関数にできるだけchar、intを使い、floatなどをさける。
と書いてあるんだけど、ocamlでも
# float_of_int(3) +. 3,4;;
- : float = 6.4
とするよりも
# 3 + int_of_float(3.4);;
- : int = 6
としたほうがいいの?
後者のほうが+の後に点をつけなくてすむから楽だし
それで実行速度があげればいいんだけど。どうだろうか。
0966デフォルトの名無しさん
NGNG計ってみれば?
0967デフォルトの名無しさん
NGNG0968デフォルトの名無しさん
NGNGその 2 つのコード、返す値が int と float で異なるけどいいの?
なにをしたいのかよくわかんない。
とりあえず cygwin port の ocaml インタプリタで以下のコードをそれぞれ 10000000 回走らせて大体の時間を計ってみました。
float_of_int(3) +. 3,4 -- 4.0 秒
3 + int_of_float(3.4) -- 3.4 秒
float_of_int (3 + int_of_float(3.4)) -- 4.7 秒 (参考)
つまり (結果的には) 後者の方が速いってことですね。
ただし C の場合で float より char, int を使ったほうが速くなるというのとは、
速くなる理由がやや違って、ocaml ではガベージコレクタが int を特別扱いしているためかなと思います。
蛇足。ocaml の float は C でいう double の精度を持ってますよ。
0969デフォルトの名無しさん
NGNG俺のためにありがとう。
じゃあ、ここ↓のネイティブコードってどうやって使うんですか?
http://caml.inria.fr/oreilly-book/html/book-ora068.html
ocamlcでコンパイルしたらexeファイルが出来上がるので使えるのですが
ocamloptだと.cmiファイルと.cmxファイルしかできません。
0970山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0971デフォルトの名無しさん
NGNG0972デフォルトの名無しさん
NGNG./test.ml で実行できるのですが
#!/bin/sh
./test.ml
というスクリプトが実行できません(test.ml が sh として実行されているようです)。
明示的に /usr/local/bin/ocaml test.ml と書けば問題無いのですが、どうすれば上のスクリプト
を実行できるでしょうか。ocaml を cgi として使いたいです。
0973デフォルトの名無しさん
NGNG一番簡単なのは test.ml をコンパイルしてしまうことです。それなら
動きますよ、多分。その方が早いし。
シェルスクリプトになってしまう理由は謎。だれか教えてプリーズ。
こっちの環境では ./test.ml で実行しようとしても sh として
実行されてしまった。
strace ./test.ml とすると、execve で Exec format error と
言われてこけてしまっているみたい。分かったのはそれだけ。
0974デフォルトの名無しさん
NGNGコンパイルしたら動くんですけど、めんどくさいんですよね。
sh でも csh でも tcsh でも ./test.ml だとシェルスクリプト
として実行されてしまいました。zsh が例外のようです。
0975デフォルトの名無しさん
NGNGocamlmktop -custom -o mocaml
して mocaml 使えばよいみたいです。
0976デフォルトの名無しさん
NGNG#!/bin/sh
# (*
exec ocaml "$0" "$@"
*)
load "stdlib.cma";;
print_string "Hello, world!\n";;
shell$ chmod a+x hello.mls
shell$ ./hello.mls
Hello, world!
shell$
ocamlfind(findlib, topfind)を使うなら
shell$ cat hello2.mls
#!/bin/sh
# (*
exec ocaml "$0" "$@"
*)
use "ocamlfind";;
#require "stdlib";;
print_string "Hello, world!\n"
shell$
ocamlfindを使えば依存関係も-I指定もいらないので楽。
レス数が950を超えています。1000を超えると書き込みができなくなります。