トップページ⇒tech
984コメント380KB

let t = 関数型プログラミング言語ML 2

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
関数型言語 ML(OCaml/SML)についてのスレッドです。
ML は比較的学びやすく、関数型言語を学んでみたい人にもお奨めです。
ML の魅力に取りつかれた人も、ML をこれから学ぶ人もどうぞ。

参考リンク集 http://www.gin.or.jp/users/daikoku/lang/func/ml.htm
初級 ML 講座 http://www.gin.or.jp/users/daikoku/ml/default.htm
SML 演習 http://a414s1.it.nanzan-u.ac.jp/smlbook/smlwww/
OCaml http://www002.upp.so-net.ne.jp/mamewo/ml.html
OCaml 入門 http://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4/mltext/ocaml.html
OCaml.org http://www.ocaml.org/
OCaml.JP http://ocaml.jp/
SML/NJ http://www.smlnj.org/
Caml http://pauillac.inria.fr/caml/
0002デフォルトの名無しさんNGNG
前スレ http://pc2.2ch.net/test/read.cgi/tech/1012445015/
0003デフォルトの名無しさんNGNG
乙って言ってほしい?
0004デフォルトの名無しさんNGNG
let ってなんか
いんぽぺろぺろだな
0005デフォルトの名無しさんNGNG
Caml とかもスレタイに入れておくと検索しやすかったのに、と言ってみるテスト。
いや、なにはともあれ乙。>>1
0006デフォルトの名無しさんNGNG
スレタイトルが(笑
haskell新スレの「再帰事件」の教訓を生かしたか(笑
0007デフォルトの名無しさんNGNG
JIS BASICみたいだね < let
0008デフォルトの名無しさんNGNG
>>7
BASIC の let って、破壊的代入だよね
0009デフォルトの名無しさんNGNG
3.07 のβ版が出たみたいですね。
0010デフォルトの名無しさんNGNG
>>9
3.06 の時はリリース後発覚したバグが結構あったので
今回は一応慎重を期しておるのです。
0011デフォルトの名無しさんNGNG
SWIG でフンジャラムンジャラしてる OCaml ユーザはいるのかな。GUI とか。
0012デフォルトの名無しさんNGNG
今は LablGTK で間に合ってるなぁ。
SWIG で QT binding for OCaml 誰か作ってよ。
0013デフォルトの名無しさんNGNG
wxhaskellならあるぞい。
http://wxhaskell.sourceforge.net/
0014デフォルトの名無しさんNGNG
To run programs that use the LablTK GUI, the directory where the
DLLs tk83.dll and tcl83.dll were installed (by the Tcl/Tk
installer) must be added to the PATH environment variable.

To compile programs that use the LablTK GUI, the directory where the
libraries tk83.lib and tcl83.lib were installed (by the Tcl/Tk
installer) must be added to the library search path in the LIB
environment variable. E.g. if Tcl/Tk was installed in C:\tcl, add
"C:\tcl\lib" to the LIB environment variable.

以上を呼んだのですがpathの追加方法がよくわからないので
どなたか、わかりやすく説明していただけないでしょうか。
0015デフォルトの名無しさんNGNG
>>14
激しく板違い。というか、まず google
0016山崎 渉NGNG
(^^)
0017デフォルトの名無しさんNGNG
Ocaml PXP Memo
http://pitsaw.riken.go.jp/ocaml-pxp.html
0018デフォルトの名無しさんNGNG
Caml Mailing List Interface
http://caml.inria.fr/bin/wilma/caml-list
Developing applications with Objective Caml
http://caml.inria.fr/oreilly-book/html/index.html
O'Caml用XMLパーサ:PXP
http://www.ocaml-programming.de/programming/pxp.html
OCaml libplot interface
http://ocamlplot.sourceforge.net/
Unicode ライブラリ
http://camomile.sourceforge.net/index.html.ja.jis
Ocamlnet
http://ocamlnet.sourceforge.net/
OCamlSDL
http://ocamlsdl.sourceforge.net/home.html
CAML系言語
http://www.carc.aist.go.jp/~masatomo/caml.html
F#
http://research.microsoft.com/projects/ilx/fsharp.aspx
LablGTK
http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgtk.html
mlgtk
http://cristal.inria.fr/~cuoq/mlgtk.html
0019デフォルトの名無しさんNGNG
Active-DVI
http://pauillac.inria.fr/advi/index-en.html
0020デフォルトの名無しさんNGNG
☆★ 新商品 ゾク・ゾク 入荷!! 急げ〜!! ☆★☆
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★ 送料激安!  スピード発送!  商品豊富!   
★☆      http://www.get-dvd.com        
☆★ 激安DVDショップ 「GETDVDドットコム」 
★☆      http://www.get-dvd.com        
☆★ 今すぐアクセス Let’s Go!   急げ! 
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
0021デフォルトの名無しさんNGNG
WindowsでML系使ってる人いる?
0022デフォルトの名無しさんNGNG
Ocaml使っとります
0023デフォルトの名無しさんNGNG
このスレ最低だな。誰も書き込まん。
0024デフォルトの名無しさんNGNG
おお!

実務ですか?
ゲーム作ってる人、いないかなあ
0025デフォルトの名無しさんNGNG
趣味です。
ゲームといえばOCamlSDL
http://ocamlsdl.sourceforge.net/home.html
0026デフォルトの名無しさんNGNG
http://sourceforge.net/
キーワード「Ocaml」でひっかかるとこ全部見れば
どれだけマイナーな言語かよくわかる。
0027デフォルトの名無しさんNGNG
マイナーは百も承知だと思うがなあ・・・
0028デフォルトの名無しさんNGNG
マイナーだけど使える匂いがプンプンする。
0029デフォルトの名無しさんNGNG
フランスじゃあメジャーさ!
0030デフォルトの名無しさんNGNG
アメリカじゃないのか・・・
0031デフォルトの名無しさんNGNG
MLって教育用言語なの?
0032デフォルトの名無しさんNGNG
教育用はPascal
0033デフォルトの名無しさんNGNG
おフランスでは教育にも使いますのよ
おほほほほほ
0034デフォルトの名無しさんNGNG
貴族英才教育:ML
一般教育:Pascal
貧民:C
0035デフォルトの名無しさんNGNG
使うリソースの量に比例してるのか。
〆(.. )メモメモ
0036山崎 渉NGNG
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
0037デフォルトの名無しさんNGNG
フランスじゃあメジャーさ!
0038デフォルトの名無しさんNGNG
caml と ocaml はどのくらい違うの?
0039デフォルトの名無しさんNGNG
お!って言うぐらい違う
0040デフォルトの名無しさんNGNG
caml は ocaml に吸収されましたと言っても過言では無い様な
0041デフォルトの名無しさんNGNG
>>33
なぜかワラタ
0042デフォルトの名無しさんNGNG
wikiできてたんですね。
http://wiki.ocaml.jp/
0043デフォルトの名無しさんNGNG
もっと広めていく努力をすべきでは?
おそらくこのプログラム板の中でさえも
過半数はメーリングリストの略だと思っているだろう。
どんどんageてOcamlの凄さを伝えていこうぜ。

>>42
よっしゃ。早速俺のサイトで使うぞ。
PukiWiki(PHP)にしようかと思っていたけどやめだ。
0044デフォルトの名無しさんNGNG
>>42はPukiWikiでつよ
0045デフォルトの名無しさんNGNG
OCamlWiki は作りたいんだけど時間がなぁ。何か面白いアイデアがあったら希望。
世間でいうところの plugin は適当なインタフェースを定義しておけば
Dynlink module でなんとかなると思うし。
ocamlopt でコンパイルできなくなるけど。

それとも dlopen とか使った方がよい?
0046デフォルトの名無しさんNGNG
dlopen系は今のOSならほとんど使えるから、そっちの方が良いかと。
0047デフォルトの名無しさんNGNG
以前SML/NJやったことあったのでちょっとOCamlにも手を出してみた。
MLをオブジェクト指向にした意味ってあるの?
0048デフォルトの名無しさんNGNG
GUIが書きやすい
0049デフォルトの名無しさんNGNG
OCamlは別にオブジェクト指向にしか書けないわけでもないし,
モジュールがあれば十分だという人にはオブジェクト指向な部分は無用。
だから,何がうれしいのかと聞かれたら
オブジェクト指向なコード"も"書けるっちゅうとこではなかろうか。
使いたければ使え,使いたくなければ使うな,と。
要するにオブジェクト指向の部分はオプションだ。
0050デフォルトの名無しさんNGNG
URLが変わりました。

MLのリンク集
旧: http://www.gin.or.jp/users/daikoku/lang/func/ml.htm
新: http://www.summa.jp/lang/func/ml.htm

初級ML講座
旧: http://www.gin.or.jp/users/daikoku/ml/mlkouza.txt
新: http://www.summa.jp/tutorial/plain/mlkouza.txt

0051デフォルトの名無しさんNGNG
OCaml の beta2 出ましたね。
object は、状態を持ってしまうものを隠蔽するのに利用すると
結構使いやすい様な気がします。object は確かにいらないことは
いらないけど、状態を持たせた方が自然なものを functional に
するよりも、object にして隠蔽してしまうことはよくやります。
0052デフォルトの名無しさんNGNG
Caml/OCaml って何て読むんでつか?
0053デフォルトの名無しさんNGNG
(おー)きゃむる
0054デフォルトの名無しさんNGNG
らくだ同じのキャメルらしいぞ。
0055デフォルトの名無しさんNGNG
キャムルだけど、実際の(日本語の)会話では「ム」の母音は消えて「キャmル」
になってるかな。もともとそういうものだという意識もあるのだろうけど、
「ム」の母音を出すようにすると意外とめんどくさい。



0056デフォルトの名無しさんNGNG
ラクダの発音がキャメルに聞こえるやつは英語の発音勉強しなおせ。
0057デフォルトの名無しさんNGNG
キャモーだろ。
0058デフォルトの名無しさんNGNG
あなたは子音のlが聞こえないんですね;)
0059デフォルトの名無しさんNGNG
キィヤァムェエルゥ
0060デフォルトの名無しさんNGNG
あぽー
りろー
きゃもー
0061デフォルトの名無しさんNGNG
りろーは little?

Caml の発音の話題は、以前 ML でも出てたな。
0062デフォルトの名無しさんNGNG
(脳内読み)

OCaml → 岡村
0063デフォルトの名無しさんNGNG
Ocaml広めたいならスレタイ変えなきゃだめだ。
このスレ見切って「関数型言語Ocaml」で新スレたてれ。
0064デフォルトの名無しさんNGNG
関数型言語岡村
オブジェクト指向言語志村
0065501NGNG
科学技術計算用言語 焔(火村)変形
0066デフォルトの名無しさんNGNG
>>63
F#相談室 はダメでつか?
http://pc2.2ch.net/test/read.cgi/tech/1054523453/
0067デフォルトの名無しさんNGNG
F# に限定されてもなぁ。
>>63 言いだしっぺが立ててよ
0068向こうがdat落ちしたので再度カキコNGNG
OCaml の勉強をしようと思って、手始めに↓をOCamlに翻訳しようと思っていきなり挫折

ttp://www.miv.t.u-tokyo.ac.jp/~yabuki/tip/lisp/unknowable/godel.html

どなたか知恵を与えていただけないでせうか
0069デフォルトの名無しさんNGNG
http://www.miv.t.u-tokyo.ac.jp/~yabuki/tip/lisp/unknowable/godel.html
0070デフォルトの名無しさんNGNG
皆さんこのスレを見てください。
真性アフォの>>1がいますw

ちゃーちゃーん山崎一番
http://pc4.2ch.net/test/read.cgi/swf/1062307555/

このスレを>>1-10までじっくりと読んでみてくださいね。
是非とも記念カキコをageでしていって下さいね。
0071デフォルトの名無しさんNGNG
let _ = cygwin でビルドした OCaml でプログラムを書こうとする

Uncaught Exception ocamlbrowserがない
0072デフォルトの名無しさんNGNG
>>52
あるフランス人は
かめる
って読んでいたような記憶が。
0073デフォルトの名無しさんNGNG
>>51
状態を持ってるものはADTで書きゃいーじゃん
dynamic dispatch とか使わねーならADTでじゅーぶん
0074デフォルトの名無しさんNGNG
ADT を使うか object を使うかは宗教論争になりがちだー。
もちろん object の方が色々出来るんだけど ADT で十分なものは ADT で良さそう。
0075デフォルトの名無しさんNGNG
>>71
tk 入ってないんでしょ
0076デフォルトの名無しさんNGNG
>>68
scheme を真似して、quote の代わりに lazy evaluation を使えば?
(なんのこっちゃ)
0077デフォルトの名無しさんNGNG
>76
ありがとうございます

それは最初に考えてみたのですが、lazy にした関数の部分評価
(Schemeでの"quasiquote", "unquote"に相当)する方法が解りません
多分 Lazy module の使い方がまだピンと来ていないのだと思います
やっぱり勉強が足りませんでしょうか
0078デフォルトの名無しさんNGNG
うーん。これってMLの型理論では型がつかないんだっけ?
0079デフォルトの名無しさんNGNG
>>77
参考までに`(is-unprovable (value-of (',x ',x)))
このS式のquasiquoteを展開するとこうなる。
(mac`(is-unprovable (value-of (',x ',x))))
=>
(cons
 'is-unprovable
 (cons
  (cons
   'value-of
   (cons
    (cons
     (cons 'quote (cons x '()))
     (cons (cons 'quote (cons x '())) '()))
    '()))
  '()))
schemeはこの展開形からリストを新規作成してるだけなので、
部分評価とはちょっと違う気がする。(結果としてそう見えるんだけど)
0080デフォルトの名無しさんNGNG
>>78
let g x = is_unprovable (x x)
g g
ではいかんのかな?
あ、-rectypes オプションつけて。
0081デフォルトの名無しさんNGNG
>78
こういうメタな構造の値をMLの型理論で扱うのはやっぱり難しいのでしょうか?
>79
「部分評価」とは言いますが、どっちかというと「部分未評価」という感じなんですね(違う?)
勉強になりました

おやすみなさいです
0082デフォルトの名無しさんNGNG
lazy でやるなら is_unprovable の中にも Lazy.force を書く必要があるよな
その場合は
let g x = is_unprovable (lazy (x x))
とかやればいいのかな
008371NGNG
>>75
cygwin に入ってるtcl/tk(tcltk 20030901)は入ってんだけど・・・。
それじゃダメ?
すれ違いならすんません。
0084デフォルトの名無しさんNGNG
確認したいことは g g が g の不動点になってるってことなんだよね?
・・・あってる?
(g g) = is_unprovable (g g)
008588NGNG
って、MLで不動点になってるかどうか調べる方法ってあるのかなぁ、と。
008668NGNG
>80
"-rectypes" はまだよく分かっていませんが興味深く感じます
時間がありましたらいろいろ試してみようと思います(済みません、今日は遊べません)
>82
困った事に、そこからさらに部分評価させる方法が解らないのです
>84
ちょっと違うと思います
(g g) を評価すると isUnprovable( valueOf( X( Hold( X ) ) ) ) の形で評価されます
この X を評価すると (g g) を評価したものと同じになる、ということです
しいて言えば X = (g g) とすると X = isUnprovable( valueOf( X( Hold( X ) ) ) )
となるという感じでしょうか?高階関数の未評価引数を省略しているので判り難いのですが
>85
それも解らない事の一つです
0087デフォルトの名無しさんNGNG
ちょっと実験してみた。

# let f = fun x -> x;;
val f : 'a -> 'a = <fun>
# let g = fun x -> x;;
val g : 'a -> 'a = <fun>

としとくと、
# f = f;;
- : bool = true
# (f,g) = (f,g);;
- : bool = true

ってなったから、うまいこと自前で遅延評価を作ってやれば比較はできるんじゃない?
ただし、
# (f = g);;
Exception: Invalid_argument "equal: functional value".
だし、
# (lazy (f 0)) = (lazy (f 0));;
Exception: Invalid_argument "equal: functional value".
だし。
0088デフォルトの名無しさんNGNG
>87
なるほど、評価前の関数でも比較可能なのですね

# (f g)=(g f);;
Exception: Invalid_argument "equal: functional value".

うむむ

しかし、遅延評価は自前で用意する必要がありそうなのですね

大変参考になります
0089デフォルトの名無しさんNGNG
ocamlでlablglを使おうとしてインストールをしたのですが、
付属のサンプルプログラムの中のdouble.mlを実行すると
即座にぶちっと落ちてログイン画面に戻ってしまいました。
ほかのサンプルプログラムは全て実行できたのですが・・・。
何が問題なのか見当のつく方はいらっしゃいませんか。

RedHat9上で
http://caml.inria.fr/ocaml/distrib.html
にあるRedHat9向けのRPMを使っています。
lablglは
http://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/lablgl.html
にあるlablgl-0.99.tar.gzです。
009089NGNG
あまりにも反応がなくさみしいのでアゲてみる。

同じ環境でlablglをうまく使えている人がいるならば、
lablglをコンパイルするときのMakefile.configを拝見しとうございます。
0091デフォルトの名無しさんNGNG
っつ〜かさ・・・
ocaml インタープリタ syntax error 出しただけでこけちゃうんですけど・・・
(3.06 cygwin) どなたか簡単な対処法ご存知でない?
opt にしてないんだけどな・・・
0092デフォルトの名無しさんNGNG
>>91
そんなことないんだけど。recompile してみたら?
0093デフォルトの名無しさんNGNG
(* はじめて書いたOCamlプログラム、ありがちなマンデルブロート描画。*)
#load "stdlib.cma";; #load "graphics.cma";; open Complex;; open Graphics;;

let rec mandel z c n = if n > 63 then 64 else if (norm z) > 2.0 then n else
mandel (add (mul z z) c) c (n + 1);;

let col n b = if (n land (1 lsl b)) = 0 then 0 else 15 lsl (b * 4)
let color n = (col n 0)+(col n 1)+(col n 2)+(col n 3)+(col n 4)+(col n 5);;

let dx, dy={re=(0.5/.200.);im=0.}, {re=0.;im=(0.5/.200.)}
let rec draw_x x y z = set_color (color (mandel {re=0.;im=0.} z 0)); plot x y;
if x<200 then draw_x (x+1) y (add z dx)
let rec draw y z = draw_x 0 y z ; if y<200 then draw (y+1) (add z dy);;

open_graph " 201x201";;
draw 0 {re=(-1.6);im=(-0.1)};;
wait_next_event [Button_down];;
close_graph();;
0094デフォルトの名無しさんNGNG
>>93
"graphics.cma"がないと言われる。windowsだから?
0095デフォルトの名無しさんNGNG
cygwin だからじゃない?
009693NGNG
>>94
レスありがとう。反応があって嬉しい。

こちらもwindowsです。(WIN98SE + Ocaml3.06 Native MS)
以下を確認してくださいです。

(1)インストールディレクトリ\LIB に"graphics.cma"があるか。
(2)上のディレクトリを環境変数 OCAMLLIB にセットする。(95,98,MEの時)
(3)93>>のレスの内容を丸ごと"mandel.ml"という名前で、適当なディレクトリに保存して、
MS-DOS(CMD)プロンプトから "ocaml mandel.ml"で実行する。(必要ならパス付きで)

それから終了はウインドウ上をクリックです。そのまま窓を閉じると悲しい
状態になることがあります。
009793NGNG
>>95
ほんとだ。 Readme.win に、

              Native_MS  Native_MinGW  Cygwin
The_Graphics_library      yes      yes      no

とありますね。
0098デフォルトの名無しさんNGNG
なるほど。確かにこちらの環境はcygwinです。
README.win32をみるとNative MS, Native MinGW, cygwinは
どれも一長一短ですね。
unix libraryがpartialでなければ迷わず再コンパイルするところですが…。
0099デフォルトの名無しさんNGNG
便乗質問。
ocamloptで、Graphicsを使うと
(環境変数INCLUDEを見てくれてないのか)gdi32.lib等が見つからないと言われますが、なんででしょうね?
Win32 Native版です。
0100デフォルトの名無しさんNGNG
>>99
自分の環境では言われないんだけど。
本当に path あってる? あるいは、どうやって追加している?
0101デフォルトの名無しさんNGNG
>>100
PATHはC:\Program Files\Objective Caml\bin、
gdi32.lib等はC:\Program Files\Microsoft SDK\libにありますが、
INCLUDEに追加しても-Iや-cclibに渡しても見てくれません、という状態です。

仕方ないから使う*.libだけコンパイルするディレクトリにコピー…
■ このスレッドは過去ログ倉庫に格納されています