関数型プログラミング言語ML
■ このスレッドは過去ログ倉庫に格納されています
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なにしろ全角英数・・・・・
■ このスレッドは過去ログ倉庫に格納されています