let t = 関数型プログラミング言語ML 2
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
NGNGML は比較的学びやすく、関数型言語を学んでみたい人にもお奨めです。
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デフォルトの名無しさん
NGNG0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNGいんぽぺろぺろだな
0005デフォルトの名無しさん
NGNGいや、なにはともあれ乙。>>1
0006デフォルトの名無しさん
NGNGhaskell新スレの「再帰事件」の教訓を生かしたか(笑
0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNGBASIC の let って、破壊的代入だよね
0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNG3.06 の時はリリース後発覚したバグが結構あったので
今回は一応慎重を期しておるのです。
0011デフォルトの名無しさん
NGNG0012デフォルトの名無しさん
NGNGSWIG で QT binding for OCaml 誰か作ってよ。
0013デフォルトの名無しさん
NGNGhttp://wxhaskell.sourceforge.net/
0014デフォルトの名無しさん
NGNGDLLs 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激しく板違い。というか、まず google
0016山崎 渉
NGNG0017デフォルトの名無しさん
NGNGhttp://pitsaw.riken.go.jp/ocaml-pxp.html
0018デフォルトの名無しさん
NGNGhttp://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デフォルトの名無しさん
NGNGhttp://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デフォルトの名無しさん
NGNG0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNG0024デフォルトの名無しさん
NGNG実務ですか?
ゲーム作ってる人、いないかなあ
0025デフォルトの名無しさん
NGNGゲームといえばOCamlSDL
http://ocamlsdl.sourceforge.net/home.html
0026デフォルトの名無しさん
NGNGキーワード「Ocaml」でひっかかるとこ全部見れば
どれだけマイナーな言語かよくわかる。
0027デフォルトの名無しさん
NGNG0028デフォルトの名無しさん
NGNG0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNG0031デフォルトの名無しさん
NGNG0032デフォルトの名無しさん
NGNG0033デフォルトの名無しさん
NGNGおほほほほほ
0034デフォルトの名無しさん
NGNG一般教育:Pascal
貧民:C
0035デフォルトの名無しさん
NGNG〆(.. )メモメモ
0036山崎 渉
NGNG│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNG0040デフォルトの名無しさん
NGNG0041デフォルトの名無しさん
NGNGなぜかワラタ
0042デフォルトの名無しさん
NGNGhttp://wiki.ocaml.jp/
0043デフォルトの名無しさん
NGNGおそらくこのプログラム板の中でさえも
過半数はメーリングリストの略だと思っているだろう。
どんどんageてOcamlの凄さを伝えていこうぜ。
>>42
よっしゃ。早速俺のサイトで使うぞ。
PukiWiki(PHP)にしようかと思っていたけどやめだ。
0044デフォルトの名無しさん
NGNG0045デフォルトの名無しさん
NGNG世間でいうところの plugin は適当なインタフェースを定義しておけば
Dynlink module でなんとかなると思うし。
ocamlopt でコンパイルできなくなるけど。
それとも dlopen とか使った方がよい?
0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNGMLをオブジェクト指向にした意味ってあるの?
0048デフォルトの名無しさん
NGNG0049デフォルトの名無しさん
NGNGモジュールがあれば十分だという人にはオブジェクト指向な部分は無用。
だから,何がうれしいのかと聞かれたら
オブジェクト指向なコード"も"書けるっちゅうとこではなかろうか。
使いたければ使え,使いたくなければ使うな,と。
要するにオブジェクト指向の部分はオプションだ。
0050デフォルトの名無しさん
NGNGMLのリンク集
旧: 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デフォルトの名無しさん
NGNGobject は、状態を持ってしまうものを隠蔽するのに利用すると
結構使いやすい様な気がします。object は確かにいらないことは
いらないけど、状態を持たせた方が自然なものを functional に
するよりも、object にして隠蔽してしまうことはよくやります。
0052デフォルトの名無しさん
NGNG0053デフォルトの名無しさん
NGNG0054デフォルトの名無しさん
NGNG0055デフォルトの名無しさん
NGNGになってるかな。もともとそういうものだという意識もあるのだろうけど、
「ム」の母音を出すようにすると意外とめんどくさい。
0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNG0058デフォルトの名無しさん
NGNG0059デフォルトの名無しさん
NGNG0060デフォルトの名無しさん
NGNGりろー
きゃもー
0061デフォルトの名無しさん
NGNGCaml の発音の話題は、以前 ML でも出てたな。
0062デフォルトの名無しさん
NGNGOCaml → 岡村
0063デフォルトの名無しさん
NGNGこのスレ見切って「関数型言語Ocaml」で新スレたてれ。
0064デフォルトの名無しさん
NGNGオブジェクト指向言語志村
0065501
NGNG0066デフォルトの名無しさん
NGNGF#相談室 はダメでつか?
http://pc2.2ch.net/test/read.cgi/tech/1054523453/
0067デフォルトの名無しさん
NGNG>>63 言いだしっぺが立ててよ
0068向こうがdat落ちしたので再度カキコ
NGNGttp://www.miv.t.u-tokyo.ac.jp/~yabuki/tip/lisp/unknowable/godel.html
どなたか知恵を与えていただけないでせうか
0069デフォルトの名無しさん
NGNG0070デフォルトの名無しさん
NGNG真性アフォの>>1がいますw
ちゃーちゃーん山崎一番
http://pc4.2ch.net/test/read.cgi/swf/1062307555/
このスレを>>1-10までじっくりと読んでみてくださいね。
是非とも記念カキコをageでしていって下さいね。
0071デフォルトの名無しさん
NGNGUncaught Exception ocamlbrowserがない
0072デフォルトの名無しさん
NGNGあるフランス人は
かめる
って読んでいたような記憶が。
0073デフォルトの名無しさん
NGNG状態を持ってるものはADTで書きゃいーじゃん
dynamic dispatch とか使わねーならADTでじゅーぶん
0074デフォルトの名無しさん
NGNGもちろん object の方が色々出来るんだけど ADT で十分なものは ADT で良さそう。
0075デフォルトの名無しさん
NGNGtk 入ってないんでしょ
0076デフォルトの名無しさん
NGNGscheme を真似して、quote の代わりに lazy evaluation を使えば?
(なんのこっちゃ)
0077デフォルトの名無しさん
NGNGありがとうございます
それは最初に考えてみたのですが、lazy にした関数の部分評価
(Schemeでの"quasiquote", "unquote"に相当)する方法が解りません
多分 Lazy module の使い方がまだピンと来ていないのだと思います
やっぱり勉強が足りませんでしょうか
0078デフォルトの名無しさん
NGNG0079デフォルトの名無しさん
NGNG参考までに`(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デフォルトの名無しさん
NGNGlet g x = is_unprovable (x x)
g g
ではいかんのかな?
あ、-rectypes オプションつけて。
0081デフォルトの名無しさん
NGNGこういうメタな構造の値をMLの型理論で扱うのはやっぱり難しいのでしょうか?
>79
「部分評価」とは言いますが、どっちかというと「部分未評価」という感じなんですね(違う?)
勉強になりました
おやすみなさいです
0082デフォルトの名無しさん
NGNGその場合は
let g x = is_unprovable (lazy (x x))
とかやればいいのかな
008371
NGNGcygwin に入ってるtcl/tk(tcltk 20030901)は入ってんだけど・・・。
それじゃダメ?
すれ違いならすんません。
0084デフォルトの名無しさん
NGNG・・・あってる?
(g g) = is_unprovable (g g)
008588
NGNG008668
NGNG"-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なるほど、評価前の関数でも比較可能なのですね
# (f g)=(g f);;
Exception: Invalid_argument "equal: functional value".
うむむ
しかし、遅延評価は自前で用意する必要がありそうなのですね
大変参考になります
0089デフォルトの名無しさん
NGNG付属のサンプルプログラムの中の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です。
009089
NGNG同じ環境でlablglをうまく使えている人がいるならば、
lablglをコンパイルするときのMakefile.configを拝見しとうございます。
0091デフォルトの名無しさん
NGNGocaml インタープリタ syntax error 出しただけでこけちゃうんですけど・・・
(3.06 cygwin) どなたか簡単な対処法ご存知でない?
opt にしてないんだけどな・・・
0092デフォルトの名無しさん
NGNGそんなことないんだけど。recompile してみたら?
0093デフォルトの名無しさん
NGNG#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"graphics.cma"がないと言われる。windowsだから?
0095デフォルトの名無しさん
NGNG009693
NGNGレスありがとう。反応があって嬉しい。
こちらも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"で実行する。(必要ならパス付きで)
それから終了はウインドウ上をクリックです。そのまま窓を閉じると悲しい
状態になることがあります。
009793
NGNGほんとだ。 Readme.win に、
Native_MS Native_MinGW Cygwin
The_Graphics_library yes yes no
とありますね。
0098デフォルトの名無しさん
NGNGREADME.win32をみるとNative MS, Native MinGW, cygwinは
どれも一長一短ですね。
unix libraryがpartialでなければ迷わず再コンパイルするところですが…。
0099デフォルトの名無しさん
NGNGocamloptで、Graphicsを使うと
(環境変数INCLUDEを見てくれてないのか)gdi32.lib等が見つからないと言われますが、なんででしょうね?
Win32 Native版です。
0100デフォルトの名無しさん
NGNG自分の環境では言われないんだけど。
本当に path あってる? あるいは、どうやって追加している?
0101デフォルトの名無しさん
NGNGPATHはC:\Program Files\Objective Caml\bin、
gdi32.lib等はC:\Program Files\Microsoft SDK\libにありますが、
INCLUDEに追加しても-Iや-cclibに渡しても見てくれません、という状態です。
仕方ないから使う*.libだけコンパイルするディレクトリにコピー…
0102デフォルトの名無しさん
NGNGどなたかご存知でしたら教えてください。
代入文の集合を解析して変数の依存関係を表すグラフを求めたいと思っています。
例: 代入文の集合が{a = b, c = z, b = y}ならば
a --> b --> y c --> z
のようなグラフです。
ノード数は巨大ですがエッジの数は少ないので、できれば各ノードごとに
サクセッサリストを持たせてグラフを表したいのですが、Cのように、
ノードのアドレスを求めてそのリストを作ることは可能でしょうか?
また、こういうグラフの実装についての文献などありましたら
教えていただければ幸いです。
010399
NGNG0104デフォルトの名無しさん
NGNGコンパイラの教科書の、フローグラフとかいうところを読みましょう。
0105102
NGNGええと、データフロー解析のアルゴリズムが知りたいのではなく、
ノードへの参照リスト(もしくはそれに類するもの)を用いたMLでの
グラフの実装方法についてお聞きしたかったのですが。
0106デフォルトの名無しさん
NGNG破壊的代入が無いことを良しとするFPでは、
オブジェクトの要素が「後から変わる(破壊的代入)事」を心配しないので、
オブジェクトの内部表現はすべてpointer(のはず)ですよ。
Succ listにSuccなオブジェクトをaddすりゃいいんでないの?
0107デフォルトの名無しさん
NGNG複数のノードのsuccessorとなるノードはどうする?
0108デフォルトの名無しさん
NGNG名前が実体じゃなくて102の言い方でいえばpointerなんだよ?
0109デフォルトの名無しさん
NGNGお答えいただきありがとうございます。
破壊的代入をしないというのは、グラフを更新するたびに新しくグラフを
作り直すということでしょうか。
その方針で少し書いてみたのですが、サクセッサリストにノードを
直接追加すると、それはすべてコピーされた別の実体になります。
そのため、ノード情報が必要になるたびに、ノード名をキーにオリジナルノード
を検索する悲惨なプログラムになってしまいました。
これならサクセッサリストは単なるキーの集合にした方がましな気がします。
もっといい方法はないものでしょうか…。
以下がそのプログラムです。
0110デフォルトの名無しさん
NGNGtype graph = node list
(* 名前nameのノードか? *)
let is_node name n = let Node(id, _) = n in id = name
(* グラフgから名前nameのノードを探す。なければ追加する *)
let get_node g name =
try (List.find (is_node name) g, g)
with Not_found -> let n = Node(name, []) in (n, n::g)
(* グラフgの名前idのノードをnに更新する *)
let update_graph g id n =
List.fold_left (fun g' x -> if is_node id x then n::g' else x::g') [] g
(* n1のサクセッサにn2を追加する *)
let add_succ n1 n2 g =
let Node(id1, succ_list) = n1 in
let Node(id2, _) = n2 in
try let _ = List.find (is_node id2) succ_list in g
with Not_found -> update_graph g id1 (Node(id1, n2::succ_list))
(* 代入文 e1 = e2を処理し依存グラフを更新する *)
let process_assign stmt g =
let (left, right) = stmt in
let (n1, g') = get_node g left in
let (n2, g'') = get_node g' right in
add_succ n1 n2 g''
0111デフォルトの名無しさん
NGNG(* 名前idのノードの依存元ノード集合を求める *)
let get_depend id g =
let visited_list = ref [] in
let rec get_depend2 id' =
if List.mem id' !visited_list then [] else
(visited_list := id'::!visited_list;
let n' = fst (get_node g id') in
let Node(_, succ_list) = n' in
if succ_list = [] then [n'] else
let succ_list' = List.map (fun (Node(x,_)) -> x) succ_list in
List.concat (List.map get_depend2 succ_list')) in
get_depend2 id
うーん…。
0112106
NGNG# let a = "abc";;
# let b = "abc";;
# a = b;;
- : bool = true (* aとbの内容比較なら真 *)
# a == b;;
- : bool = false (* aとbのポインタ比較なら偽 *)
# let x = [];;
# let y = a :: x;; (* List xにaをadd *)
val y : string list = ["abc"]
# List.hd y;;
- : string = "abc";; (* yの先頭要素は"abc" *)
# (List.hd y) = a;;
- : bool = true (* yの先頭要素とaの中身は同じ *)
# (List.hd y) = b;;
- : bool = true (* yとbも中身は同じ *)
# (List.hd y) == a;;
- : bool = true (* yとaのアドレスは同じ *)
# (List.hd y) == b;;
- : bool = false (* yとbのアドレスは別 *)
結果List x(空だけど)にaをaddした結果できた要素"abc"は
aが指している"abc"と同じで、bが指している"abc"とは別。
==演算子使って実体の場所(ようはアドレス)が同じか見てみた?
つか単一名前空間なら(List.findで探すようなものなら)、
Hashとかつかったほうが良くないですか?
OcamlにはHashtblモジュールがあったはず。
0113106
NGNG破壊的〜という下りの話は、ある束縛された値が後から変更されるという事を
言語として美しいとしていない(推奨していない)ので、考えていない故に、
後から束縛された値が使われる場合、ポインタを渡してしまうという
関数型言語の実装に見られる話です(個人的見解なので嘘かもしれませんが)。
すなわち、Ocaml的に書けば
# let x = "a";;
# let y = x;;
上のx, yならxの値が永遠に"a"であるなら、yが同じ場所さしてても問題ないでしょ?
xの値が変わってしまう場合に、単にポインタを複製する場合は「
xの値を変えるとyの値も変わる」という不思議な現象が発生しますが。
Cなどの場合は、意味論の面で実体コピーかポインタ複製かの問題が
ついて回りますが、関数型言語は「ないことにしている!」のです。
# で、mutable fieldを持つ構造体とかの複製つくるときにはまるのです…
0114デフォルトの名無しさん
NGNG組替えを末尾的に行う事でそれの参照を限定すれば、
複製による更新が破壊的更新になったとしても問題は発生しない。
という理論による最適化はMLで行ってるんだっけ?
なんていう名前だか忘れたけど。
0115106
NGNGML系言語はまともに実装した事(設計すらも)ないからよくわかんないや。
0116デフォルトの名無しさん
NGNG> え?コピーされちゃう?Ocamlだよね?そのリストみた感じだと。
すみません。
「コピーされてしまう」というのは誤解を招く表現でした。
正確には「ノードの情報を更新するためには、もとのノードをコピー
して情報を更新した、新しいノードを作らざるを得ない」ということです。
>>110ではノードを(ノードID, サクセッサリスト)のペア、グラフを全ノードのリスト
で表現しているため、たとえばノードaのサクセッサリストにノードbを追加しようと
思ったら、新しくノードaを作り直し、古いaを新しいaに置き換えたグラフを作り直す
必要があります。
> with Not_found -> update_graph g id1 (Node(id1, n2::succ_list))
このとき、aが他のノード(たとえばc)のサクセッサリストに入っていても、
それは古いaのままなので、cのサクセッサを再帰的にたどる処理では、
グラフのノードリストから最新のaを検索してそのサクセッサリスト
をたどらざるを得ません。だったらノードIDでサクセッサリストを管理
するのと変わらないなあ、ということです。
0117デフォルトの名無しさん
NGNGHashを使ったほうがいいというのは、ご指摘の通りです。
まだocamlを使い始めたところなので、ライブラリをよくみてませんでした。
それと、
> # で、mutable fieldを持つ構造体とかの複製つくるときにはまるのです…
ひょっとしてmutable fieldを使うと破壊代入ができるのでしょうか。
ちょっと調べてみます。
0118デフォルトの名無しさん
NGNGlet test n m =
match m with
n -> 0
| _ -> 1;;
こんな感じにすると3行目のnというのが1行目で引数に与えるnと
違うnとしてマッチしてしまう(どんなmでも3行目でマッチしてしまう)
ようなのですが、これを何とか同じnとして認識させる方法はないでしょうか?
0119デフォルトの名無しさん
NGNGmatchを使う理由がよく分かりませんが、以下のように書けます。
let test n m = match m with
n' when n' = n -> 0
| _ -> 1
0120デフォルトの名無しさん
NGNGwhenなんてはじめて知りました。
ありがとうございます。
0121102
NGNGこれで実現できそうです。
type node = { id : string; mutable succs : node list }
type graph = { mutable nodes : node list }
let add_succ n1 n2 =
n1.succs <- n2 :: n1.succs
let add_node g n =
g.nodes <- n :: g.nodes
これなら実体の間でリンクが張られているので、サクセッサも
直接たどれます。
どうもお騒がせしました。
0122デフォルトの名無しさん
NGNG0123デフォルトの名無しさん
NGNG代入を使うプログラムを書くのに使える機能だったら
http://caml.inria.fr/oreilly-book/html/index.html の
"Chapter 3 Imperative Programming"ってとこにまとめて書いてあるよん。
0124デフォルトの名無しさん
NGNGMLを少し使ってみたいのだが、どんな処理系がいいか誰か教えてくれないか?
OSとしては、XPとLinuxを使いたい。
それと、MLの有償の処理系はあるのかな?
ついでに聞くが、Lispみたいな古い意味での関数型?言語と、MLとの使い勝手の違いや、MLの将来性についても誰か
詳しい人いたら教えてくれないかな。
0125デフォルトの名無しさん
NGNG期間限定のため早めにどうぞ。
無料動画をみてください。
http://38.114.137.83/index.html
0126デフォルトの名無しさん
NGNGOCaml を使いましょう。SML よりは書きやすいはず。
有償の処理系は聞いたことがありません。無償の処理系で十分なレベルなので
それを使いましょう。
ML は十年未来の言語です。言語の研究の成果が実際に使われている言語に
利用されるにはかなりかかります。 ML は研究者レベルでは現在常識レベル。
従って、実用レベルで常識になるには後十年ぐらいかかるでしょう。
ML とか Haskell とかやると世界が変わります。その体験を是非。
0127102
NGNGご紹介ありがとうございます。
まだintroをちょっと見ただけですが、functionalに書きにくい例として
行列の積があがっていました。
グラフのデータ型や操作の定義を試行錯誤していて思ったのですが、
帰納的でない操作がある場合、functionalなスタイルできれいに書く
のは難しくなるのかもと思いました。
そもそもグラフの場合はデータ構造すら帰納的に書けませんが…。
0128106
NGNGああ、なるほど。そういうことか。
問題提起部分およびコードをほとんど読まずに返事してたので
的外れですまんかった。
ただ、そのグラフはそれでいいのか?
巡回してしまう依存グラフは後の解析時に問題にならない?
# (a=b, c=z, b=y, y=a)等、巡回パターンになるよね
なんの解析をするかによるんだろうけど、普通変数依存なんかの解析は
Static Single Assignmentを使って解析を行うと思うよ。
Semanticsな話になるんだけど、たとえばC的な文法で
void foo(void) {
a = b;
c = z;
b = y;
}
の場合、変数依存を書き出せば{a = b, c = z, b = y}となるけど、
a->b->yとしちゃうと、aがあたかもyであるかのようになってしまうので
都合が悪い(たとえば定数の畳み込みをしようと思ったりした場合とか)
SSA形式なら、102が直面している問題そのものが起こらないんじゃないかな。
またもや的外れならごめん。
MLとまったく関係ないのでsage...
0129102
NGNG> 巡回してしまう依存グラフは後の解析時に問題にならない?
そうですね。
111ではvisited_setを使ってすでに訪れたノードをチェックしてましたが、
ほんとはサイクルを検出した時点でunifyすべきですね。
ちなみに解析の目的はポインタの指示先の計算です。
SSAは使ってみたいと思っているのですが、まだ配列やポインタ間接参照式の扱いが
よく分かってなくて…。ocamlコンパイラでも使ってるなら、勉強がてらソースを
読んでみようかな。
0130デフォルトの名無しさん
NGNGSSAにすると、サイクル自体が存在しなくなるので、Nodeを作成した段階での
succ listが決定的になるからsucc listをmutableにする必要がなくなる(はず)。
個人的見解だけど、状態変数以外でmutable(ref)を使うのはお勧めしないな。
今回のmutable変更はソースすっきりで素敵に見えるけど、大抵、状態変数以外で
mutableにした方がきれいにまとまる〜ってときはアルゴリズム側に問題があったり
するし、後々いらぬバグに悩まされる事がおおい。
# 余計なお世話かな…
ocamlコンパイラはソースを斜め読みした感じだとSSAは使っていなくて、
それゆえかどうか分からないけど、mutableをclassを通して使ってるね。
ocamlopt --helpすると分かるけど、マニュアルにないオプションがいっぱいあるんで、
コンパイラ系の勉強をしているなら、-drawlamda、-dlambda、-dcmm等、
path途中の情報を見てみると良いかも。
ところで、この中間表現等をまとめてるページとかないのかな。
0131デフォルトの名無しさん
NGNG0132デフォルトの名無しさん
NGNG0133デフォルトの名無しさん
NGNGOCamlにはこの他にもソースに付属するcaml-mode.elというのがあります。
みなさんはどちらをどういう理由で使っておられるのでしょうか?
ちなみに私の場合はWindowsバイナリ版にcaml-mode.elが付いておらず、
先に見つけたのがtuareg-modeだったというだけかも。
ところで、caml-mode(とOCamlの最新版のみ?)にある、
-dtypesオプションをつけてコンパイルしたソースを開いて
C-c C-tとやるとカーソル位置の式の型を表示してくれるという
機能が小粋に思える今日この頃です。
ソースを編集したらコンパイルしなおさないといけないのが不便で
tuareg-modeから乗り換えるには至ってないのですが。
0134デフォルトの名無しさん
NGNG自分は tuareg-mode を使っております。
mod_ocaml はものすごいセキュリティーホール (任意の OCaml の式が実行可能)
があったんですが、直ってるんでしょうか。follow してないけど。
0135デフォルトの名無しさん
NGNGどうやって作り、何に使うんだっけ?
0136デフォルトの名無しさん
NGNGtype 'a option =
| None
| Some of 'a
let f ?x () = match x with
Some y -> y
| None -> 0
let f ?(x = 0) () = x
0137135
NGNG自分はSMLNJ使ってるのでちょっと戸惑ったけど、後半のは
fun f (NONE) = 0
| f (SOME x) = x;
って意味でいいんですよね。
しかしこれってどういう使い道があるんだろう。
空列と空集合を明確に区別したい時とかかな‥
0138デフォルトの名無しさん
NGNGコマンドライン文字列をパーズしたときに、
-p password ってあったら SOME("password") にして
-p だけだったら SOME("") にして、
そもそも -p がなかったら NONE
とか。
勿論、optionを使うところは全部例外を使った実装に
置き換えられないことはないんだけど、optionの方が
素直な場面は結構ある気がする。
0139inaian
NGNGこういった課題があるんですがわからないでしょうか??
rubyでなんです。
これができないと単位取れません。
適当でもいいんでお願いします。
0140デフォルトの名無しさん
NGNG人に聞く前に、
どうやったらnに一番近いmの倍数を求めることができるか
ruby使わなくていいから、自分で考えて日本語で説明してみろ。
0141102
NGNGlet nb n m =
let r = n mod m in let q = n / m in
if r > m - r then (q + 1) * m else q * m
0142デフォルトの名無しさん
NGNG0143デフォルトの名無しさん
NGNGhttp://pc2.2ch.net/test/read.cgi/tech/1064541405/
の851で答えもらってるぞ ♥
0144デフォルトの名無しさん
NGNGsyntax error しただけでインタプリタとかコンパイラがこけてしまいます。
インストール時にも ocamldoc がうまく入らなかったり、
(same file とか言って怒られて make が止まります)
tkをどこから持ってきたらいいのかわからず、ocamlbrowser もコンパイルできません。
もう何がなにやら・・・。
どなたか解決の糸口だけでも教えてもらえませんでしょうか。
0145デフォルトの名無しさん
NGNG0146デフォルトの名無しさん
NGNGそうおっしゃらずに・・・
自分もできれば FreeBSD で済ませたいところを我慢しているのです・・・
ocamlbrowser は ActiveTcl を使えば何とかなりました。
それでもコンパイルエラーが出ますが、軽微な修正で何とかなりました。
ocamldoc も無事入りました。
が、肝心のインタープリタがこける問題はどうしても直りません。
しばらくは minGW 版のバイナリで我慢します・・・。
0147デフォルトの名無しさん
NGNGlet nb n m =
let distance a b = if a > b then a - b else b - a in
let rec nb_rec n m i min_dist =
if i / m = 0 then
if (distance i n) < min_dist then nb_rec n m (i+1) (distance i n)
else nb_rec n m (i+1) min_dist
else
if i > n + min_dist then min_dist else nb_rec n m (i+1) min_dist
in
nb_rec n m 0 m
ぐらいがちょうどいい解じゃないでしょうか。
0148デフォルトの名無しさん
NGNG0149デフォルトの名無しさん
NGNGUnix モジュールをフルに使いたくて・・・。
どのあたりまでサポートされているのかよくわかってはいないのですが・・・。
0150デフォルトの名無しさん
NGNGマニュアルに書いてある。
↓このページの一番下に使えないor不完全な関数のリストがある。
ttp://caml.inria.fr/ocaml/htmlman/manual035.html
0151デフォルトの名無しさん
NGNG0152デフォルトの名無しさん
NGNG0153デフォルトの名無しさん
NGNG0154デフォルトの名無しさん
NGNGObjective Camlの最新版をWin98にVC++コンパイル
ヴァージョンー>InstallExeにてインストールしました。
残念ながら日本語の文字列が文字化けします???
ひとつ教えて頂きたいのですが、
EUCやSJIS変換コードをCamlのライブラリーに入れたら
日本語が使えるようになるのでしょうか?
どなたかどのパッケージを、どうしたら
日本語が使用できるようになるのか
ご教示願います。
0155デフォルトの名無しさん
NGNGLispで書かれたOSみたいですね。しかもVM上でしか動かない…
各言語を比較してるサイトでOCamlがCをいろんな面で越えてたんで
OCamlでOSを書いてみようかと思うんだけど。
0156デフォルトの名無しさん
NGNG一応完結したようですね。
http://homepage3.nifty.com/Aransk/
0157デフォルトの名無しさん
NGNG釣れますか?
0158デフォルトの名無しさん
NGNG0159デフォルトの名無しさん
NGNG0160デフォルトの名無しさん
NGNGその上を ML で書くようにすればまあなんとかなるだろう(多分)
0161デフォルトの名無しさん
NGNG>プログラム板のあちこちで話題になっていた、ここの関数型言語論も
>一応完結したようですね。
>http://homepage3.nifty.com/Aransk/
外側のNILと内側のNIL間の関数構造という着眼点はまあまあ。
しかし、JavaWorkShopではコードを書き過ぎて、哲学派の顰蹙を買い
FunctionalLanguageではコードが少な過ぎて、プログラム派に
とっては抽象論過ぎる。これまで水と油であったものを融合しよう
という心意気だけは理解できるが。
0162デフォルトの名無しさん
NGNG内側と外側のnil?
0163デフォルトの名無しさん
NGNGLIST構造の一番内側というか後ろに()空のNILがあり、一番外側の
括弧の外はNILだとこのHP作者は言いたいのでしょう?
http://homepage3.nifty.com/Aransk/
0164デフォルトの名無しさん
NGNG0165デフォルトの名無しさん
NGNG前回の板かなんかで「OCamlはもちろん日本語も
通ります!」って調子の良い発言していたのが
いたはずだが?
0167デフォルトの名無しさん
NGNG君が教えればいいんでない?
0168デフォルトの名無しさん
NGNG悪い。関数型言語で何もせずに日本語が通るのは
ACLとSCMしかワシャア知らんですたい。MLではF#
とMLJぐらい?使ったこと無いけど・・。
0169デフォルトの名無しさん
NGNG貴方ひょっとして、この86番さん?
>86 名前: 83 投稿日: 02/02/05 06:44
>> 84
>もちろん日本語は通ります。
>EUCならば変数名にすらできます。
>(そんな面倒なプログラミングはしないけど)
結構こだわるタイプか??(藁)
0170デフォルトの名無しさん
NGNGEUCのstringは使えるよね?
0171デフォルトの名無しさん
NGNGみんな LablGtk 使っているのかな。
0172デフォルトの名無しさん
NGNG0173デフォルトの名無しさん
NGNG0174デフォルトの名無しさん
NGNG154番です。
例えば:
# print_string "Hi";;
と英文でToplevelに文字列を入力する。
と、
Hi- : unit = ()
まともにHiが返ってきますよね?
ところが、
# print_string "今日は";;
と日本語の文字列を入力すると:
今日は- : unit = ()
ギョエー!!!まともに返って来た!
信じてください。Ocalmをインストールした直後は
確か、\142F\236G・・・とか完全に文字化け
していたんです。ホントなんですぅ。
でもってすっかり日本語はダメだって
信じてしまった。(168番さんの発言もあったし
・・とか早速、人に転嫁する。良い性格?)
でもお騒がせしました。
穴があったら入りたい。汗汗汗。
今後決してこのような無様で頓珍漢な質問を
この板で発言するようなことは、絶対に
「またやります!」ので。
これにめげずにOcalm頑張ります。(WWW)
0175デフォルトの名無しさん
NGNGhttp://pauillac.inria.fr/caml/oreilly-book/html/index.html
全ページ公開しています。
(スゴイボリューム!誰か日本語訳してくれないかなぁ。)
それにしてもLispやSchemeの本でも全ページ
WEB公開しているのがあります。(グレアムやディビック)
Rubyも最初のRUBY本ぐらいやったらどうかねぇ?(Matsz)
例えば、欧米の大学にマイクロソフトなんかで開発の
最先端に従事しているエンジニアなんかが招聘され、
講師でバリバリKnowHowを学生や研究スタッフに
教えたりする。C#を作ったヒジェルバーグとか。
(給料が違い過ぎるので現実的ではないが、特に
日本では、藁)
そこの研究室が画期的なソフトや開発手法を発表
したりするとか、ヴェンチャーを立ち上げたり
すると企業の研究所と大学の研究室の存在意義
とか有償、無償区分とかよう分からんような
気がする。
先に述べたOCaml本なんか普通の有償ソフトに
ついているマニュアルなんかを完全に凌駕している。
0176デフォルトの名無しさん
NGNGこの文体には見覚えが・・・
本人?
0177デフォルトの名無しさん
NGNGMatsz ではなく Matz。
あと、Ruby 界隈では PragmaticProgrammers の本が全文公開されてます。
0178デフォルトの名無しさん
NGNG肴にされた168番です。(笑い)
# "Hi";;
- : string = "Hi"
# "今日は";;
- : string = "\141。\147\250\130ヘ"
コリャ?どうしてこうなるの?(大笑い)
0179175
NGNG>この文体には見覚えが・・・
>本人?
MatzがMatszなんてわざと間違えるわけないでょう?(笑い)
>177
>Matsz ではなく Matz。
失礼しました。ご指摘深謝。
>あと、Ruby 界隈では PragmaticProgrammers の本が全文公開されてます。
英語はどうも・・・やはり日本語で読みたいと思いませんか?
0180デフォルトの名無しさん
NGNG0181デフォルトの名無しさん
NGNG文句があったら自分で書いて公開しろよボケ。
日本でもSRAの石井さんが書いたPostgreSQLやPHPの本はPDFが公開されていたと思うぞ。
後者は共著だったような。
情報狭いくせに日本語としてつながりがおかしい愚痴を垂れ流すだけなら独り言板にでも行け。
このスレ的に意味があるのは最初の3行だけだしそれすら禿しく既出。
0182デフォルトの名無しさん
NGNGエスケープされてるだけですが
# let s = "なにか文句でも?";;
val s : string =
"\164\202\164\203\164\171\202\184\182\231\164\199\164\226\161\169"
# print_endline s;;
なにか文句でも?
- : unit = ()
0183デフォルトの名無しさん
NGNG=> "\244\312\244\313\244\253\312\270\266\347\244\307\244\342\241\251"
irb(main):002:0> puts(s)
なにか文句でも?
=> nil
irb(main):003:0>
0184デフォルトの名無しさん
NGNG>エスケープされてるだけですが
エスケープされてるって、・・・絶句。(笑い)MLでは日本語が通るってことは
エスケープ文字も含むのでしょうか?(^^; 例えば:
# print_string "baka";;=> baka- : unit = ()
# print_string "馬鹿";;=> 馬鹿- : unit = ()
これはOK! でも、
# let baka = "baka";;=> val baka : string = "baka"
# baka;;=> - : string = "baka"
# let baka = "馬鹿";;=> val baka : string = "\148n\142ュ"
# baka;;=> - : string = "\148n\142ュ"
Charなら分かるが、同じstringでこれはちと面白過ぎると思いませんかね?
さらに細かいことを言えば、FontがDefaultでCourierになっており、立ち
上げる度に元に戻るところなんか、いかにもフランス的な感じがしませんか?
OCamlやSMLに文句言ったりケチをつけたりする気は全く「あります。!」(笑い)
可愛さ、あまってですよぉ。一応これでもOCamlマンセイ派のつもりです。
0185デフォルトの名無しさん
NGNG>スキャンしてnyで垂れ流せよ
NewYorkではなく、Parisの間違い?(^^;
>>181
>文句があったら自分で書いて公開しろよボケ。
文句はありません。でも既に書かれているものを公開した方が早いんで無いかい?
>日本でもSRAの石井さんが書いたPostgreSQLやPHPの本はPDFが公開されていた
>と思うぞ。後者は共著だったような。情報狭いくせに日本語としてつながりが
>おかしい愚痴を垂れ流すだけなら独り言板にでも行け。
日本語のつながりがおかしいのは最近OCamlを始めたのが原因か?(笑い)また
単なる愚痴じゃなく、今売り出し中のRubyのMatzに要望しておるだけです。
(但し日経バイトに載ったMatzのコンピュータ言語論にはガッカリした、前田さんの
卒論の方がはるかに良かったと思いませんか?ー>情報の広い181番さん!)
ところで貴方には何の期待もしておりませんのでご安心下さい。ただこのいかにも
2チャンネルらしいオモロイレスには笑えたが。(大藁)
>このスレ的に意味があるのは最初の3行だけだしそれすら禿しく既出。
禿るほど老けとらんのですが。ただこの文章の意味が理解できるほど幼稚では
ないだけ。(^^;
0186デフォルトの名無しさん
NGNGこら、こらぁ!いつも他所サマでは調子に乗るな!って
言っとろうがぁ。(^^;
ここはAwayじゃけん、観客をカッカさせちゃ悪かろう。
・・・とか、ますます煽ったりしてね。(大藁藁)
0187デフォルトの名無しさん
NGNGあなたが日本語下手なのは昔からでしょ。(笑い)
Matzに対する要望ならこんなところに書かずに、
本人にメールでも送ればいいのではないですか?(そんな
勇気ないのかな。大笑い)
日本の大学でも哲学的、論理的な文章を教えないようで、(東大、京大
でさえもしても他大学においてや、)
ソシュールとレヴィストロースのポストモダン区別もわからないようで。(笑い)
人間関係と言うものは代数的構造に置きかえらるもので、今回のことも
さもありなん。(笑い)アーベル群の単位元である空=零=逆写像との原点にあたるのです。
ゾロアスター教のアフラマツダ=ツァラトゥストラ=大日如来。ゾロアスター教の2元論。
つまり、アフラマズダとその逆関数としてのアーリマンの対立の特異点なのです。
車メーカーのマツダがMazudaなのはアフラマズダからにちなんでです。マツダと言う苗字は、
ともても、暗喩的でしょ。(笑い)
ツァラトゥストラはかく語りきをかいた。ゲーテはフリーメイソンでIQ200だったそうです。
そんなわけで馬鹿の壁にはばまれた抽象的思考の苦手な日本のプログラマーには難しいのであります。
話しは戻って荒らしいるつもりなのでしょうか?(笑い)
0188デフォルトの名無しさん
NGNGどうせ書くならごるごるもあみたいに面白いこと書けよ。
0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNGttp://homepage3.nifty.com/Aransk
0191デフォルトの名無しさん
NGNG0192デフォルトの名無しさん
NGNG言語理論に詳しそうなので期待しよう。
0193デフォルトの名無しさん
NGNGとっくに自作自演がばれているとなぜ気がつかないのだ? このスレで「(笑い)」
なんて書いてるのおまえ(とおまえをネタにしてるやつ)だけだぞ。
0194デフォルトの名無しさん
NGNG0195デフォルトの名無しさん
NGNG>「馬鹿は放置」
というより基地外だけどね
0196デフォルトの名無しさん
NGNG> >「馬鹿は放置」
> というより基地外だけどね
というよりキテガイだけどね
0197デフォルトの名無しさん
NGNG新興宗教とかに簡単に引っ掛かりそうな壊れっぷりだよな
とにかくモノを知らんのには唖然
0198デフォルトの名無しさん
NGNG書き込む前に、1時間ほどおいてみてください。
0199デフォルトの名無しさん
NGNGついででいいから、MLの話もしていきませんか〜。
コンパイラのソース解読とか。
0200デフォルトの名無しさん
NGNGprint_stringとインタプリタの文字列表示の実装が違うから。
インタプリタでは、制御コードとかを直接出力しないようになっている。
文字列を1文字ずつ見ていって、標準文字 or 記号 or フランス語に含まれる一部の文字(アクサン等を含む)
でなければエスケープして出力。
print_stringは一切の変換を行わずに直接出力。
これを変えたければ#install_printerとかソースコード/toplevel/で調べてみてくれ。
0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNGみんながんばって沈黙してたのに、我慢できなかったんだね
よしよし
0203デフォルトの名無しさん
NGNG>あなたが日本語下手なのは昔からでしょ。(笑い)
ギョエー!過去を知る貴方はひょっとして?茶々様か?(謎)
>Matzに対する要望ならこんなところに書かずに、
>本人にメールでも送ればいいのではないですか?(そんな
>勇気ないのかな。大笑い)
セレブな方に弱くて…Cマガのフィンローダさんでも緊張したぐらいです。汗
>日本の大学でも哲学的、論理的な文章を教えないようで、(東大、京大
>でさえもしても他大学においてや、)
特に米研はひどいって噂ですよねぇ?(藁藁)
>ソシュールと(中略)日本のプログラマーには難しいのであります。
相変わらず頭脳の回転に言葉が追い付かないクセは直りませんねえ?
アボートしているの?(大笑い)
>話しは戻って荒らしいるつもりなのでしょうか?(笑い)
いえ最近「真摯に」コンピューター言語に嵌っております。キッパリ
0204デフォルトの名無しさん
NGNG>なんだこいつ。分裂病か?
>どうせ書くならごるごるもあみたいに面白いこと書けよ。
真面目に書いて支離滅裂なところを評価して上げなさいよ。(藁)
0205デフォルトの名無しさん
NGNG>>185>>187 こいつらネタだよね? ま、何にしても以後スルーだな。
え?スループットって?
>>190
ttp://homepage3.nifty.com/Aransk
宣伝しちゃダメだって、早速OCamlを追加したみたいだよ。無視、蟲、蒸し。
0207デフォルトの名無しさん
NGNG>なんか変わった人が来たなあ。
>言語理論に詳しそうなので期待しよう。
Googleで検索:
http://www.google.com/search?q=Aransk&ie=UTF-8&oe=UTF-8&hl=ja&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja
わざわざスレまで立っていた!
http://jbbs.shitaraba.com/bbs/read.cgi/business/28/1050050866/
かなり評判のような?良い悪いは別にして・・(藁)
0208デフォルトの名無しさん
NGNG>とっくに自作自演がばれているとなぜ気がつかないのだ? このスレで「(笑い)」
>なんて書いてるのおまえ(とおまえをネタにしてるやつ)だけだぞ。
自作自演がミエミエなんだよぉ!
0209デフォルトの名無しさん
NGNGでも優越感に浸りながら皆さん結構楽しんでいるでしょう?
(笑い)
>198
>お願いです。客観的に自分を見てください。
>書き込む前に、1時間ほどおいてみてください。
その一時間でさらに分量が増えたらどうするの?
>199
>ついででいいから、MLの話もしていきませんか〜。
あのぉ。MLの話しをしているつもりなんですがぁ。
0210デフォルトの名無しさん
NGNG>理由は簡単、
有り難う御座いました。了解です。
それにしても、たったこれだけのことを聞くのに
スゴイ手間食うんだね。国立大学の研究予算取り並か?
(大笑い)
0211デフォルトの名無しさん
NGNG\ |三|ミl─( ゚ ∀ ゚ )─ | 田田 |�п_ /" _
. \ .|三|ミl三三三三|\ | 田田 |幵�л / 時の鐘
岩槻 \ |三|ミl三三三三| | 田田 |幵幵| / /\
人形 \三|ミl三三三三| | 田田 |幵幵| / /---.\
\ │ /\|ミl三三三三| | 田田 |幵幵| /  ̄"''\/|| ■ |||\
/ ̄\ \l三三三三| | 田田 |幵幵|_/川越祭 i||゚ ∀ ゚||i ̄"''
.( ゚ ∀ ゚ )─ \..三三三| ∧∧ ∧∧.|幵幵/Λ Λ/ ̄"''\ / ̄"''\
(∩∩) \ 三三|(.゚∀゚,≡,゚∀゚) -''"/ ( ゚∀゚_)|| ̄ |_ _|.|| ̄ ̄|__||
∧∧ ∧∧ \==.|. ∧∧∧∧∧/. /〔 祭 〕〕⊃~~~~~~~~~~~~~~
( ゚ ∀ ゚ ) ( ゚ ∀ ゚ ) \..|< さ > /二二ヽ/ ̄"''
(∩∩) (∩∩) < . の い >/ /\」;; 古都川越
――――――――――― < 予 た .>――――――――――――
/ ̄\ < 感 ま > 花の秩父
| 十 :::| < !!!! の > +++++++
ウマイ、ウマスギル!| 万 :::| < > *******++++++++ 秩父夜祭
| 石 :::| /∨∨∨∨∨ \ ******゚∀゚*+*** Λ Λ
\_/ /甲武信岳2475m \ ********+**** ( ゚∀゚_)
┏━━━━━━━━━┓ / ,-ー-、_ \*+***++**** /〔 祭 〕〕⊃
┃さ い た ま 銘 菓 .┃./ /::`v-、' ::':::::.\、 \ 秩父芝桜 /二二ヽ
┃_|_ ┬─ ┬─ ┃/ /::' ::丶 ,-へヘヘ、 \ ..、、。_.._..
┃ | .ノフ ノ口 . /-´::'' :::`/ ::':::\ \、/..●..●●●●\
┃ 食曼 豆頁 __/ 雲取山2017m 両神山1723m\ \●●●゚∀゚●●‘
┗━━━━━━━━/. いずれも日本百名山 ::'::\. \●●吉見百穴
0212デフォルトの名無しさん
NGNG何一人で錯乱してんの?スレ違いですよ.
0213デフォルトの名無しさん
NGNG0214デフォルトの名無しさん
NGNGそこまでして宣伝したいか?
0215デフォルトの名無しさん
NGNG0216デフォルトの名無しさん
NGNG0217デフォルトの名無しさん
NGNG0218デフォルトの名無しさん
NGNGこんなことしてても値は返ってこねぇ
0219デフォルトの名無しさん
NGNGとうとうOCamlのプログラムまで
調子に乗って書き出しちゃったよ。┓(´_`)┏
http://homepage3.nifty.com/Aransk/
誰か早く別ネタ振りなよ。
0220デフォルトの名無しさん
NGNGって言う、ユーザーに誤解を与えかねない言語に対する「安易な耽溺」に意義
申立てをしたかったんじゃないだろうか?
確かに五十嵐先生の OCaml入門にもはっきり「コメント,文字列定数として
日本語を用いることができる.しかし,文字列に関しては,文字数などが正しく
認識されないのでできれば使わない方が無難である.」と書かれている。
またいくら贔屓目に見ても、「print_stringとインタプリタの文字列表示の実装
が違うから。インタプリタでは、制御コードとかを直接出力しないようになって
いる。文字列を1文字ずつ見ていって、標準文字 or 記号 or フランス語に含ま
れる一部の文字(アクサン等を含む)でなければエスケープして出力。
print_stringは一切の変換を行わずに直接出力。」
これで「勿論日本語は通ります。」とは普通言わないよね?単に言語に対する
贔屓の引き倒しが気になるタイプじゃないの。
0221デフォルトの名無しさん
NGNG「彼」、って君本人じゃないのか
0222デフォルトの名無しさん
NGNG(大笑い)
0223デフォルトの名無しさん
NGNG(大笑い)
0224デフォルトの名無しさん
NGNGそろそろ消えてください
0225デフォルトの名無しさん
NGNGこれほど笑えるのは久し振り。
0226デフォルトの名無しさん
NGNGこれもアンタの仕業じゃないの?
http://messages.yahoo.co.jp/bbs?.mm=GN&action=m&board=2000083&tid=bcgnaea4ka4ja4ca4fa4dba47a4a4a5wa5ma50a5ia5e08c08la4oa1a9&sid=2000083&mid=32
0227デフォルトの名無しさん
NGNG0228デフォルトの名無しさん
NGNG日本語が通らない方がいらっしゃったのですね
0229デフォルトの名無しさん
NGNGこれ全部一人で書いてる!なんて不気味なことはないよね?
常連はひたすら沈黙を守るのみ。って発言しちゃマズイか(藁藁)
0230デフォルトの名無しさん
NGNG戻りましょう。(藁)
五十嵐先生の入門書に、以下Quote:
# let one = 1;;
val one : int = 1
# let two = one + one;;
val two : int = 2
# let one = "One";;
val one : string = "One"
# let three = one ^ one ^ one;;
val three : string = "OneOneOne"
この場合,one の値は 1 から "One" に更新されたわけではなく,
同じ名前の変数宣言により前の宣言が隠されて見えなくなっただけ
なのである.そもそも前の宣言と型が一致していないことに注意.
以上Unquote:
ここでint = 1は新たに束縛されたstring = "One"によって
隠蔽されている「だけ」とある。そこで質問です。
int =1を再度呼び出すにはどうしたら、良いのでしょう?
(もう一度 # let one = 1;;は無しで、(W)
まさか?super oneとか?それとも?cadr one!とか?(藁藁)
密かにガーベージコレクションにかかって実は抹殺されている!
とか???(大藁藁)
0231デフォルトの名無しさん
NGNG0232デフォルトの名無しさん
NGNGもう見えない。見えない。そいつなんか見えない。
俺の視界には入らない。
0233デフォルトの名無しさん
NGNG0234デフォルトの名無しさん
NGNGなどを閉じ括弧も入れてNGワード登録しる
0235デフォルトの名無しさん
NGNGhttp://www.taplas.org/~oiwa/
0236デフォルトの名無しさん
NGNGこんなもんなのかな。
0237デフォルトの名無しさん
NGNGほかの言語でも。
0238デフォルトの名無しさん
NGNG230の疑問はOCaml初心者には当然と思うが?
皆さん、実はこの板における、お囃子社中?
本当はOCaml分かっている人間はこの板には一人しか居らず
その人は論文の締め切りに追われてカキコする暇が
無いとか?案外これ当たってないかい?(藁、藁)
0239デフォルトの名無しさん
NGNGこのページの作者にメールして見たら?(笑い)
http://homepage3.nifty.com/Aransk/
0240デフォルトの名無しさん
NGNGそうだね
そうしたら?(藁)
0241デフォルトの名無しさん
NGNGhttp://www.swig.org/
これ試して見た?自分ではやってないけどさ
0242デフォルトの名無しさん
NGNG# let x = 3 in;;
val x : int = 3
# let x = 4 in;;
val x : int = 4
# x;;
- : int = 4
# end;;
# x;;
- : int = 3
きっと余り嬉しくないだろうが。
0243デフォルトの名無しさん
NGNG自分がどこまで書いたかすぐに分からなくなりそうだ。
0244デフォルトの名無しさん
NGNG0245デフォルトの名無しさん
NGNG早速作者にメールしました!
論文の締め切りに追われておられるとの
ことです。やっぱり誰か?と一緒で要領が
悪いのか?それとも、頭自体が悪いのか?(藁藁)
0246デフォルトの名無しさん
NGNGご教示,誠に有り難く、このように嬉ばしい
結果がお蔭様で…??
# let x = 3 in;;
Characters 12-14:
let x = 3 in;;
Syntax error
# let x = 4 in ;;
Characters 13-15:
let x = 4 in ;;
Syntax error
# x ;;
Characters 0-1:
x ;; ^
Unbound value x
# end ;;
Characters 0-3:
end ;; ^^^
Syntax error
# x ;;
Characters 0-1:
x ;; ^
Unbound value x
ひょっとしてOCamlじゃなくてSML/NJかHaskellと
誤解されておられませんでしょうか?(藁)
0247デフォルトの名無しさん
NGNG馬鹿の一つ覚えで成り済ましに走る人はもっとウザいです。
つーか成り済ましが出るとスレの流れが停滞するからやめて
0248デフォルトの名無しさん
NGNG0249デフォルトの名無しさん
NGNG0250デフォルトの名無しさん
NGNGつうかさ、キチガイいじるくらいしかネタがないのがこのスレの悲しいところだな。
で、ネタがないので >>200 とか >>242 が我慢しきれなくなって答えちゃう。
で、またキチガイ出現。このループ。
0251デフォルトの名無しさん
NGNG皆さんをいじるつもりはありません。(藁)
が、皆さんのTopLevelではエラー無しで動いているのでしょうか?
比較的?マトモに見える、244さん!どう?
0252デフォルトの名無しさん
NGNG0253デフォルトの名無しさん
NGNG0254デフォルトの名無しさん
NGNG#trace f;;
で f を追跡できますけど、
let f () =
let g () = ... in ... g()
などのような、関数内で定義された関数を追いかけるにはどうすれば良いのでしょうか
0255デフォルトの名無しさん
NGNG0256デフォルトの名無しさん
NGNGこの板の冒頭:
>ML をこれから学ぶ人もどうぞ。
こう書かれております。
最近の新人は実に可愛げのないのが多い。
それは良〜く分かる。(藁藁)
「極度に!」可愛げのない彼の質問だが、
初心者に良くありがちな勘違いだと思う。
お二方には常識かも知れんが、ここは一つ
ビギナーでもTopLevelで動かせるプログラムを
示してやって下さらんか?
0257デフォルトの名無しさん
NGNG附属の stdlib なら動くんですが、これを ocaml-3.07 のものに入れ替えると
Syntax horror って怒られるんですよ. 文法が変っちゃったからですかね?
test@local:/tmp/ocamlexc[177]> gmake install
./bin/makelibcme
Analysing: stdlib/pervasives.ml ...
Characters 1036-1038:
Syntax horror
DONE
Analysing: stdlib/list.ml ...
Unbound (while scoping) module Pervasives
DONE
0258デフォルトの名無しさん
NGNG多分無理です……。あきらめてください。
>>255
なんで要るの? この場合別に書く必要ないでしょ (書いてもいいけど)。
let g () = ... g() じゃなくて let g () = ... *in* ... g() なんだから。
笑ったつもりが笑われる罠。突っ込むならもっと勉強してくれ。藁ダメゼッタイ。
rec つけると最適化に抑制がかかるので不要なら rec をはずそう。
>>256
let rec foldr f v = function
[] -> v
| x :: xs -> f x (foldr f v xs);;
foldr (+) 0 [1;2;3;4;5;6;7;8;9];;
とかやって遊んでください。
というか、冒頭のリンクの中にいっぱいいっぱいいーっぱい例があると思うんだけど。
まあ最初は print_endline "Hello, World!";; とかやってください。
>初心者に良くありがちな勘違いだと思う。
いや、ゼッタイないから。普通に勉強したぶんにはその発言はゼッタイないから。
>>257
ごめんなさい。使ったことないです。
(藁) のせいでスレ荒れまくり。あーあ。
0259デフォルトの名無しさん
NGNG> rec つけると最適化に抑制がかかるので不要なら rec をはずそう。
あ、そーなんだ。byte でも opt でも?どれくらい違う物なんだろ。
0260デフォルトの名無しさん
NGNG覚えてないけど。
0261デフォルトの名無しさん
NGNGざっと ocamlexc 見てみた。
external 関数 (C 言語等の関数を呼出すための物で ML での定義が無いもの)
の exception raising 情報は、ML のソースが無いんだから分析しようが無い。
型情報のなかに明示する必要がある。ocamlexc の stdlib/pervasives.ml を
見てもらえばわかるけど、ocamlexc では external な値の型宣言の文法が
変更されていてこの情報を書き込む事になってる。この文法は正式な ocaml
にはもちろん入っていないので syntax error になる。
と言うわけで 3.07 の stdlib/*.ml の external 宣言の部分を書き直せば
動くんでないかい? let module 構文がサポートされてないから
その辺りも拡張しないといけないが、まあ、いい演習だと思って
自分でやるか、 Francois Pessaux にメールを書いてちょーだい。
0262デフォルトの名無しさん
NGNG0263デフォルトの名無しさん
NGNG0264デフォルトの名無しさん
NGNG0265デフォルトの名無しさん
NGNG>(藁) のせいでスレ荒れまくり。あーあ。
貴方は今、巧みに論点をずらそうとしましたね?
(藁藁)
0266デフォルトの名無しさん
NGNGいや他の研究室の方々は優秀です。キッパリ
落研と並んで泣く子も、「笑う」あそこだけです。(藁)
0267デフォルトの名無しさん
NGNGSML初心者の質問を一つ:
何故?マイナスを表わすのにチルダ「~」記号なんでしょうか?
まさか!プロンプトがマイナス記号だったからとか
ふざけた理由じゃないでしょうね?(藁)
0268デフォルトの名無しさん
NGNG二項演算子が ~ でなくて - であることに
質問者がどういう考えを持っているのか、逆に訊きたい。
0269デフォルトの名無しさん
NGNGワタクシ、質問は好きだが、されるのは好まない。
が、…
まさか!中置演算子だからプロンプトと間違えようがない。
なんて応えを期待してはいないでしょうね?(藁藁)
0270デフォルトの名無しさん
NGNG二項マイナスと区別する事にした理由と、なぜ Caml では二つの
区別がないが、時々 (-1) のように括弧が必要かわかるんだけど。
思考停止して質問だけ、そう言うのは「真摯な質問」とは言えんな。
0271デフォルトの名無しさん
NGNGlindows の開発(の多分一部だろうけど)に O'Caml が使われてるんだそうな。
ttp://lists.debian.org/debian-ocaml-maint/2003/debian-ocaml-maint-200311/msg00048.html
0272デフォルトの名無しさん
NGNG符号と演算子を区別できたら字句解析やりやすいからね
0273デフォルトの名無しさん
NGNGいよいよOcamlの時代到来ってことですかね!
0274デフォルトの名無しさん
NGNGでも実は OCaml では単項マイナスは (~-) として定義されていて、
syntax sugar として -3 の様な表記も認めている。
だから f 2 ~-3 等が通る。
(+) 2 -3 と (+) 2 ~-3 で確認してみよう。
Pervasives.ml では
external (~-) : int -> int = "%negint"
と書かれている。
0275デフォルトの名無しさん
NGNGご丁寧なるご解説有難う御座います。
お陰様で単項演算子、符号等の仕組みも分からぬ
初心者にとりましては、何よりのご教示で御座いました。
で、…
再帰的?に小生質問の趣旨を明確に致します。
>符号と演算子を区別できたら字句解析やりやすいからね
こ、これは、あまりにも、人間の言語的感覚に反しておりません
でしょうか?と小一時間問い詰めたい訳であります。
つまりあの高踏的でもって鳴るSchemeで「さえ」、単項マイナスは
「-」であります。あの前置演算子でも(+ 1 2 3)人間の理解の
範囲です。後置演算子(Forth?)でも( 1 2 3 +)分かる!、いや
日本的と称しても良いでしょう。つまり語尾に拠って大逆転
が有り得る。(藁藁)
しかるに「~3」これを誰が理解し得ようか?と問いたい訳です。
MLやった奴は誰でも知ってる!って?そりゃ。まあ…。(藁)
数ある他の言語に対して、パーサーを一寸いじれば済む問題を
なぜ敢えて異を唱えて「~」こんな想像を絶する符号しか
使用を認めないのか?OCamlスタイルも簡単に可能な訳でしょう?
確かにこれはSML言語仕様コミッティーの問題であります。
単なる初心者が容喙する話しではないかも知れません。しかし
SMLの更なる発展を祈念致しまして、敢えて一言申し上げた次第
であります。(大藁藁)
0276デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
NGNG>でしょうか?と小一時間問い詰めたい訳であります。
お逝きなさい!
関数適用が f x y という形であるので単項と二項の区別がどうしても
必要なのだ。区別しなければ次の式はどのように解釈するのだ。
f 1 - 1
f 1-1
f 1 -1
数字だけならともかく、変数が入ったら?
f x - y
f x-y
f x -y
パーザをちょっといじれば済むって?
どこをちょっとだけいじれば済むのかな?
勘違いしているかもしれないから言うけど
OCaml で (+) 2 -3 は型エラーですよ。(+) 2 ~-3 は通るけど。
0278デフォルトの名無しさん
NGNG貴方は今、ネット・テクニック「だけ」で論点を
ずらしましたね?サーバー容量だけ食って不可価値は
極端に低い発言と思う。自分でさあ、この板の質を
落としているのに気付かないのかねぇ、この人?
0279デフォルトの名無しさん
NGNGあなたは f x-y がどのように関数適用されるべきとお考えで?
1. f x (-y)
2. f (x-y)
3. (f x) - y
今の実装は 3 ですがね。
f の型を見て決定、っていうのはなしですよ。というか、無理ですよ。
構文解析が決まらないと型が決まらないんだから。
0280デフォルトの名無しさん
NGNG無駄な部分を除くと 1/10 以下に圧縮可能な発言はやめなさい。
屑だから。
0281デフォルトの名無しさん
NGNG>不可価値は極端に低い
それは間違いだ。「不可」価値は異常に高い。
0282デフォルトの名無しさん
NGNG0283デフォルトの名無しさん
NGNGカリー化って本家は、Haskell Curryでしょう?
で、Haskell98Reportを以下Referします。
The special form -e denotes prefix negation, the only
prefix operator in Haskell , and is syntax for negate (e).
The binary - operator does not necessarily refer to the
definition of - in the Prelude; it may be rebound by the
module system. However, unary - will always refer to the
negate function defined in the Prelude. There is no link
between the local meaning of the - operator and unary
negation.
Prefix negation has the same precedence as the infix
operator - defined in the Prelude (see Table 4.1).
Because e1-e2 parses as an infix application of the binary
operator -, one must write e1(-e2) for the alternative
parsing. Similarly, (-) is syntax for (\ x y -> x-y),
as with any infix operator, and does not denote (\ x ->
-x)---one must use negate for that.
小生は単にチルダ「~」これが気に入らんと言う実に不可価値の
「ある」主張をしておるのです。negateなら誰でも理解出来るで
しょう?しかしチルダって、べき乗か?ひょっとすると虚数か?
ひどいのはゴミか?とかさぁ(藁藁)言語学的に無理があると
申しておるのです。あまりゴチャゴチャ言うようならこのML板に
居座るからね。(大藁藁)
0284デフォルトの名無しさん
NGNGナッゲーヨ!
英語を引用すれば誤魔化せるって考えてんじゃない?
内容理解してんだろうねぇ、この人!
0285デフォルトの名無しさん
NGNGこんな勘繰りするぐらいなら、2ちゃんに来なきゃ良いのに・・・。
0286デフォルトの名無しさん
NGNGというレスがいけないんだよな……。
0287デフォルトの名無しさん
NGNG0288デフォルトの名無しさん
NGNGというレスもいけなんでしょうね……。
0289デフォルトの名無しさん
NGNG0290デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNG小生は単にチルダ「~」これが気に入らんと言う実に不可価値の
「ある」主張をしておるのです。invert なら誰でも理解出来るで
しょう?しかしチルダって、べき乗か?ひょっとすると虚数か?
ひどいのはゴミか?とかさぁ(藁藁)言語学的に無理があると
申しておるのです。
という主張を >>283 は批判してください。
殆どの言語はこういう変なものがあると思うんだけどな。
0292デフォルトの名無しさん
NGNG((これがλだ!(x y) (+ x y)) 1 2)
=> 3
0293デフォルトの名無しさん
NGNG0294デフォルトの名無しさん
NGNGdefine-macro だって?
贅肉だらけの糞言語使ってるのな(プ
0295デフォルトの名無しさん
NGNGASCIIコード表に適当な記号が無いのだから、仕方のない事なんだよ。
それでも、というならパーサー弄るなりして適当に変えれば良いこと。
0296デフォルトの名無しさん
NGNG0298デフォルトの名無しさん
NGNG0299デフォルトの名無しさん
NGNG0300デフォルトの名無しさん
NGNGある事は痛いほど伝わってくるが。
0302デフォルトの名無しさん
NGNGそれにしてもキチガイさんは一体何がしたいのやら…
0303デフォルトの名無しさん
NGNG0304scheme使い
NGNGLISPでいうdefunがfun。
0305scheme使い
NGNG0306デフォルトの名無しさん
NGNG0307デフォルトの名無しさん
NGNGLISPでいうlambdaがfun
LISPでいうdefunはlet変数名の後に引数を続けるだけ(高階)。
0308デフォルトの名無しさん
NGNG0309デフォルトの名無しさん
NGNGあ,なるほど
そう言えば使った覚えがある
0311デフォルトの名無しさん
NGNG>パーサー弄るなりして適当に変えれば良いこと。
ほらぁ。出たでしょ。
チルダが嫌いとか、言ってた「彼」は結局この言葉を聞くのを
執念深く待っていたんじゃないかな?
ここにタムロしておられる方々は「ファインマン計算機科学」
を読んだこともないようだ!畏れ多くも「元号」を大学名した
ような大学の関係者じゃないのかな?(藁藁)
0312デフォルトの名無しさん
NGNG例えばList.mapの様な処理をする場合、
先頭を処理して、末尾を再帰的に処理する
let rec map f = function
[] -> []
| a::l -> let r = f a in r :: map f l
(* list.ml from ocaml 3.07 *)
やり方と、無理矢理末尾再帰にする
let map f ls =
let rec this_iter xs result =
match xs with
[] -> result
| hd :: tl -> this_iter tl (f hd :: result)
in
List.rev (this_iter ls [])
やり方の2通り考えられますが、
(注:副作用がfにあった場合後者は直感的でない動作をする)
コスト的にはどうなんでしょうか。
末尾再帰でスタックにアドレスを積まない分、List.revのオーバーヘッドが加わり
メモリも余分に食う、となりますが、メモリ使用量の点からはどうなんでしょう。
メモリ使用量をプロファイリングする方法はocamlにありましたっけ?
0313デフォルトの名無しさん
NGNG見苦しい
0314デフォルトの名無しさん
NGNGlet rec map1 f = function
[] -> []
| x :: xs -> (f x) :: (map1 f xs)
;;
(* CPS 変換 *)
let map2 f lst =
let rec map2_sub k f = function
[] -> k []
| x :: xs ->
let t = f x in
map2_sub (fun y -> t :: y) f xs
in
map2_sub (fun x -> x) f lst
;;
(* adhoc tail-call *)
let map3 f lst =
let rec map3_sub f result = function
[] -> result
| x :: xs -> map3_sub f ((f x) :: result) xs
in
map3_sub f [] (List.rev lst)
;;
どれが早いでしょう。
0315デフォルトの名無しさん
NGNGlet rec iter i l =
if i < n then iter (succ i) (0 :: l)
else l
in
iter 0 []
;;
let test f lst =
let begin_time = Unix.gettimeofday () in
for i = 0 to 1000 - 1 do
f (fun x -> x + 1) lst
done;
let end_time = Unix.gettimeofday () in
end_time -. begin_time
;;
let _ =
let lst = make_list 1000 in
Printf.printf "map1 : %f\n" (test map1 lst);
Printf.printf "map2 : %f\n" (test map2 lst);
Printf.printf "map3 : %f\n" (test map3 lst);
;;
自分の環境 x86 Pen4 2.4CGHz での結果。
map1 : 0.194000
map2 : 0.209000
map3 : 0.298000
でも map1 は make_list 10000 にすると stackover flow で落ちる。
0316デフォルトの名無しさん
NGNGocamlopt だと
map1 : 0.034000
map2 : 0.010000
map3 : 0.034000
となった。CPS 変換ばんざい。
0317デフォルトの名無しさん
NGNG0318デフォルトの名無しさん
NGNGだったら英語の慣習から"!"は?"."も";"も可笑しっていう話になるだろ。
そもそもどの分野の言語学なんだ?意味論?記号論?比較言語学?
どの分野の言語学でどう可笑しいかバックボーンとなる理論を元に説明してくれないと。
0319デフォルトの名無しさん
NGNG可能な議論としか思えないのでどうも参加する興味を覚えない。
別にそういう方向性でマッタリ雑談するのが悪くはないが、
プログラミング言語相手の議論であまりに形而上的な話をしてもねー。
0320デフォルトの名無しさん
NGNG曖昧な発言ばかりだな
0321デフォルトの名無しさん
NGNG思っても言わないほうが良かったんじゃないか?恥を知ってるなら
とっくに消えてるだろうしさ…。
0322デフォルトの名無しさん
NGNG言語デザインに関わってると、新しい lexical symbol とか予訳語を入れる時、
製作チーム間で意見の違いが結構ある。まあ、議論の結果、最終的には
大体コードを書く奴の意見が通るみたいだ。
一般ユーザーはまあブチブチと後で文句を言うしかないわけだが。
SML で何故 ~ が採用されたか、逸話かなんかあれば聞きたい。
他の候補とかはなかったのかな? _ とか、、、
Caml なんかもう使われてない文字ってほとんどないんじゃない?
拡張して何か新しい事しようと思ったら大変だ。あと、 $%\_ 位かな?
後はもう組合せしかないよね。括弧類も既に ( { [ [| < [< とか、もう大変。
0323デフォルトの名無しさん
NGNG誰も演算子の記号なんかに興味ないのって、まだわかんないの?
個人で調べてくれよ。
どうしても知りたきゃSMLの開発側に直接問い合わせるとか、
サポートMLで聞いてみるとか。その方が早いし確実だろ?
0324デフォルトの名無しさん
NGNG0325デフォルトの名無しさん
NGNGそれが素直な話題提供ってもんだろうが。
おまえのやってることはただの粘着荒らし。
0326デフォルトの名無しさん
NGNGんなこと言ったらこのスレの内容ってほとんど
本家 ML でやりゃいい事ばっかじゃない?
(もしかしてこれは禁句なの?)
まー演算子の話はもう終りでしょう。
0327デフォルトの名無しさん
NGNGAPL キーボード使えば…
0328デフォルトの名無しさん
NGNG>お逝きなさい!関数適用が f x y という形であるので単項と二項の区別が
>どうしても必要なのだ。
逝かないのね?どうしてもこのレベルから先に逝かない。
せめて、ttp://www.r.dl.itc.u-tokyo.ac.jp/~nakagawa/infoDB/dvildic.html
この程度の陳腐なユーモアも無いのね?(藁藁)
OCamlにおいて何故チルダ~がマイナス単項演算子として
使用されているのか?チルダである必然性は何か?と
問われれば、当然「必然性は無い。」が正解でしょう。(藁)
何故必然性が無いのか?第一に考慮すべきはチルダ以外でも
マイナス符号でも言語実装としては可能である。これでしょう?
>単項と二項の区別がどうしても必要なのだ。
こんなものは言語実装にとって何の障害にもならない。
ファインマン計算機科学でプログラミング言語レベルから
ハードまで13層の階層があることを勉強されたでしょう?
つまり、プログラミング言語レベルはHumanInterfaceなんです。
例え関数がカリー化されようが、何されようが、実装に不可能は
無いのです。まずそれがピンと来るべきであります。
言語実装に不可能が無いにも関わらず、何故このような多様性が
生じるのか?これは日常言語の語彙とは違います。例えば「文化」、
中国語でも同じ「文化」です。しかし意味は歴史や風土から当然
違っております。日本は文化祭のイメージ、中国では文化大革命の
イメージ?かどうかは分かりませんが少なくとも、裸踊りが中国では
顰蹙を買うのであります。
しかしコンピュータ言語の意味は一意であります。ハード(物質)レベルで
同等であります。それにも関わらず何故語彙を敢えて変化させるのか?
このような疑問がどうして問われないのか?
>問うことは、それを問いうる、問うべき、とみなした
>ということにおいてすでに、問いの存在を認めない者たちとは
>違う認識水準を示してしまうことになる。
とまあ、本日はこれまでに致しましょう。(藁藁)
0329デフォルトの名無しさん
NGNG↓
そこで値の負数をとる単項演算子と引き算の2項演算子のシンボルは別にしたい。
↓
〜というシンボルをnegateの機能にあてる事自体には必然性はない。
だが引き算演算子と違うシンボルである必然性は「言語の方針として」存在する。
あと>>328、君はソーカルが批判するような自然科学をでたらめに引用する人文系
学者のような匂いがする。なんとなく。
0330デフォルトの名無しさん
NGNG>あと>>328、君はソーカルが批判するような自然科学をでたらめに引用する人文系
>学者のような匂いがする。なんとなく。
しかもその素養足るべき人文系ですら!
0331デフォルトの名無しさん
NGNGなる思いつきを必死になって権威づけようとしてるだけ。いずれにしろ、不毛。
0332デフォルトの名無しさん
NGNGこないだ日本に久々に帰った時に書店の本棚にあったのを見掛けたけど、、、
そもそも、教科書読んで勉強した事ないので、、、
0333デフォルトの名無しさん
NGNGCaml の floating point operator とかを使い始めたら
このスレがどうなるのか、とっても心配。
と書いて彼にもうちょっと勉強させてみるテスト。
0334デフォルトの名無しさん
NGNG彼の理論だと割り算記号に : を使っている国では、どうして割り算が / なんだ、
とか文句を言い始めますね。>>329 の言うとおり記号に必然性はないのです。
たまたま、コンピュータの言語と人間の言語が一致するだけで。
ML の - のように都合が一致させると都合が悪いときは (f x -y を f x (-y)
の意味で書いてしまうなど、明らかな間違いを誘発する。) 別にしたほうが
よい、という設計方針であるわけ。
> しかしコンピュータ言語の意味は一意であります。
いくら一意でも、自然な意味で一意になるかどうかは疑問。
f x-y をどの意味にとるかは、(f x)-y も f (x-y) も自然に見える(かもしれない)。
意味が一意だからと言って自然に一意になると思っているのかしら。
328 は異論をぶつける前に自らに与えられた批判に答えてみなさい。
328 には無理だと思いますが。
ところで、「お逝きなさい!」はスカイハイのパロディだと思うのですがいかが。
0335デフォルトの名無しさん
NGNG必然,必然ってマトリックスを思い出したよ
> 何故必然性が無いのか?第一に考慮すべきはチルダ以外でも
> マイナス符号でも言語実装としては可能である。これでしょう?
「可能である」ことと「すべき」ことは違うんだよ
符号の - と二項演算子の - が字句的に区別できれば字句解析の「効率」が上がる
字句的な区別がなくても字句解析は「可能」であるがね
> つまり、プログラミング言語レベルはHumanInterfaceなんです。
で,符号が ~ だからって人間側に不都合はあるの?
屁理屈なしで,あなたは不都合に感じてるの?
0336デフォルトの名無しさん
NGNGキチガイに言っても通じないか!
0337デフォルトの名無しさん
NGNGファインマン計算機科学ってそんなに有名なの?
ファインマン物理学なら聞いたことがあるけど
計算機科学ではノイマンとかチューリングとかシャノンしか知らないや
この界隈に入ったせいでカリーの名前は知ったけど
0338デフォルトの名無しさん
NGNGご冗談でしょう。
大して有名じゃないよ、物理の世界では有名だけど。さらに彼のエッセイのほ
うがもっと有名かも。
0339デフォルトの名無しさん
NGNG関数型やってる人の評価を知りたいです。
0340デフォルトの名無しさん
NGNG0341デフォルトの名無しさん
NGNG黙って去ればいいだけじゃないか?なんでそこまで必死なんだ?
0342デフォルトの名無しさん
NGNGプログラマーの壷とか読んでるのかな。
0343デフォルトの名無しさん
NGNG遅レスごめんなさい。そして助言ありがとうございます。
> external 関数 (C 言語等の関数を呼出すための物で ML での定義が無いもの)
> の exception raising 情報は、ML のソースが無いんだから分析しようが無い。
なるほど。external 関数に例外の型情報を付けてやる必要があるんだ...。中
身も見ずに質問して失礼しました。
> と言うわけで 3.07 の stdlib/*.ml の external 宣言の部分を書き直せば
> 動くんでないかい? let module 構文がサポートされてないから
> その辺りも拡張しないといけないが、まあ、いい演習だと思って
> 自分でやるか、 Francois Pessaux にメールを書いてちょーだい。
再帰 module のサポートにも挑戦してみたいとは思いますが、初心者の私には
ちと厳しい。
3.07 の標準ライブラリでは件の構文は使われてませんよね? 現状自作の拙い
プログラムの例外漏れをチェックできれば十分なので、とりあえず external
に対処してみます。*もしうまくいけば* share できるようにします。
どもでした。
0344デフォルトの名無しさん
NGNGの鍵あけの話を読んで、「総当たりって結構大切だな」と、オモタ。
0345デフォルトの名無しさん
NGNG読んだことないな、結構最近の本だし(1999)。
google で「ファインマン計算機科学 site:ac.jp」で検索してみたけど
49 件、うーん。
0346デフォルトの名無しさん
NGNG> 符号の - と二項演算子の - が字句的に区別できれば字句解析の「効率」が上がる
> 字句的な区別がなくても字句解析は「可能」であるがね
字句解析の効率っつーか、MLの当初の目的である「処理系開発言語」としては
自然言語との一致よりも構文の見通しの良さを取ったってことだと思う。
328は言語設計者が取ったトレードオフを理解しないまま吠えてるアフォということで。
0347デフォルトの名無しさん
NGNGキチガイの考え無し文章を何ら補強するものではないです。
しかし数学板以外で屑哲を観察できるとは思わなかったよ。
0348デフォルトの名無しさん
NGNG> しかしコンピュータ言語の意味は一意であります。ハード(物質)レベルで
> 同等であります。それにも関わらず何故語彙を敢えて変化させるのか?
はあ?アフォですか??
プログラミング言語ごとにsymbolの持つsemanticsは異なっているぞ。
それこそ「-」がいい例じゃないか。
これでわからなければ、prologの「!」とCの「!」の意味の違いを調べろ。
自分がどんなにマヌケな事を言っているか、よくわかるから。
ちなみにプログラミング言語がturing machine compatibleであることと
semanticsの同一性は、全く異なる問題だ。
もちろんsyntaxの同一性も、lexical definitionの同一性も、
上記2つのどちらとも異なる問題だ。ちゃんと区別して使え。
その上で、プログラミング言語の計算モデルと言語設計について考えろ。
> このような疑問がどうして問われないのか?
君ほどバカじゃないから。
0349デフォルトの名無しさん
NGNG0350デフォルトの名無しさん
NGNG>「言語の方針として」存在する。
「構文解析の効率性として」人間の言語感覚に反して
存在するでしょう?(藁)
>匂いがする。
って?香水やオーデコロンなんて一切つけてませんが。(藁)
>>330,331,336,341,342
ワルイ!内容が無さ過ぎて反論しようがない。(藁)
>>332,337,338,339,345,347
おいおい、冗談はやめてよぉ。それともホントに湘南か??
関数型言語の原典はファインマン計算機科学に書いてある
不可逆計算エントロピーの理論でしょう?
SICPにもちゃんと引用してあったはずだが…。
>>333
> reference とか array access とか、object とか、
>Caml の floating point operator とか
MLならFunctor,HaskellはMonad,SchemeはCall.CCでしょう?
(いくらなんでも「reference とか array access とか、
object とか」はヤメテ欲しかったなぁ。人文系でも
知っていると思うよ。藁藁)
>>334
>意味が一意だからと言って自然に一意になると思っているのかしら。
誰かが意味するものと意味されるものの関係性を決定しない
限り「自然に」どんな言語も形成されない。(ワラワラ)
0351デフォルトの名無しさん
NGNG良くご自分の発言を再度読んで見て下さい。マトリックスまで
引用した努力は認める。切ないほど、気持ちは伝わってくる。
(泣ける)
が、論理的反論を形成しているとは、とても思えないが・・
それとも賛意を表明しておられるのでしょうか?(藁)
>>348
どうも、レベルが揃ってないなぁ。
少なくとも、
ファインマン計算機科学、コンピュータの構成と設計(上,下)
アルゴリズムとデータ構造、プログラミング言語の概念と構造、
SICP、コンパイラの構成と最適化、程度はイロハのイ!
関数型言語なんだから、それにプラスしてエージェントアプローチ、
とかベクトル量子化と情報圧縮なんかは既に「卒業した」レベルで
話してくれないと、こちらがつまってしまう。
これは皆さんに言えるが視野があまりにも基礎レベルで
狭窄してないかい?
無茶苦茶、常識的な話しをさも偉そうに吼えておられるが、
それが一般ROMに受けると考えておられるのか?
ひねろう、工夫しよう、と言うサービスセンスが全く
感じられない。それではマクドナルドのバイトにも
なれないよ。(藁藁)
0352デフォルトの名無しさん
NGNGレベルが違うもの同士がやっても話が
合う訳がない。
どちらがどうのとは言わないが…(藁藁)
0353デフォルトの名無しさん
NGNG鳴いていたあのML板か?
0354デフォルトの名無しさん
NGNG> 関数型言語なんだから、それにプラスしてエージェントアプローチ、
> とかベクトル量子化と情報圧縮なんかは既に「卒業した」レベルで
意味不明。それらと関数型言語との関連を述べよ。
前半も知っている本の名前をずらずら並べただけにしか見えないし。
0355デフォルトの名無しさん
NGNGそこに突っこんじゃダメ!
0356デフォルトの名無しさん
NGNGさて、またもやスレの話題と関係無いネタを持ち出して煙に巻こうとしてますが
一体何がしたいんですか?意味もなく「俺はお前らより頭がいいんだい!」と必死で
主張するのは勝手ですが、勝手にいろいろな用語について言及しながら
論点をずらし続けていくだけなら、どこかよそでやってもらえませんか?
で、ただの日本人のあなた様の言語感覚に、CとPrologの"!"はマッチしてるの?
0357デフォルトの名無しさん
NGNG>「構文解析の効率性として」人間の言語感覚に反して存在するでしょう?(藁)
言語の方針です。単項と二項演算子に同じシンボルが割り当てられると、人間に
とっても見通しの悪い場合があります。例はこれまでに出てきていると思いますが。
0358デフォルトの名無しさん
NGNG> MLならFunctor,HaskellはMonad,SchemeはCall.CCでしょう?
まるで違う3つのものを並べて何が楽しいのだろうか・・・
0359デフォルトの名無しさん
NGNG> しかしコンピュータ言語の意味は一意であります。ハード(物質)レベルで
> 同等であります。それにも関わらず何故語彙を敢えて変化させるのか?
この人はプログラミング言語によっては意味が実装依存な部分があることを
知った上でこんな戯事を言っているのだろうか?
0360デフォルトの名無しさん
NGNG> MLならFunctor,HaskellはMonad,SchemeはCall.CCでしょう?
全くわかってないな
0361デフォルトの名無しさん
NGNGもう死んだら?>藁厨
0362デフォルトの名無しさん
NGNG> 関数型言語の原典はファインマン計算機科学に書いてある
> 不可逆計算エントロピーの理論でしょう?
> SICPにもちゃんと引用してあったはずだが…。
引用されてないようだが?
http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-36.html#%_chap_Temp_849
0363デフォルトの名無しさん
NGNG同じ操作に対してなぜ異なる言語表現(-,~)がなされるのか、という問いかけ?
一般性レベルの答えでは、プログラム言語自体が言語設計者の認識の表現
だから、ということになると思うよ。
0364デフォルトの名無しさん
NGNGこれの新スレをだれか立てませんか。
0365デフォルトの名無しさん
NGNG無事dat落ちしたみたいね。
でも何故ここで云う……?
0366デフォルトの名無しさん
NGNG> 不可逆計算エントロピーの理論でしょう?
それは量子コンピュータの話だろ?
0367デフォルトの名無しさん
NGNG関数型はλ計算やコンビネータなどの計算論が基礎だと思うが。
0368デフォルトの名無しさん
NGNGlisp スレにしようかどっちか迷ったんだけど。
0369デフォルトの名無しさん
NGNGどっちにしろスレ違いなので、続きは↓でお話下さいな
http://pc2.2ch.net/test/read.cgi/tech/1033623291/
0370デフォルトの名無しさん
NGNG0371デフォルトの名無しさん
NGNG0372デフォルトの名無しさん
NGNG0373デフォルトの名無しさん
NGNG型理論なんかももう基礎ですよね。
>>370
みんな馬鹿をたたきたくてしかたないんですよ。みんな楽しいんです(多分)
0374デフォルトの名無しさん
NGNGどっかの大学のプログラミング課題で作られたんじゃないかな。
いろんな専門用語や書名が文脈自由にでてくるのもこれで説明がつく。
チューリングテストは失敗でしたね>作者
0375デフォルトの名無しさん
NGNGまた匂いを曲解(本人はユーモアと信じて疑わない)されるかもしれないが。
0376デフォルトの名無しさん
NGNG> チューリングテストは失敗でしたね>作者
すまん
俺には人間らしく見える
0377デフォルトの名無しさん
NGNG0378デフォルトの名無しさん
NGNGねじくれているあなたに言われてもなあ……
0379デフォルトの名無しさん
NGNG同じことを繰り返すあたり、stateless な実装で ML で再現しやすそうだ。
……私にも人間に見えるけれども。
0380デフォルトの名無しさん
NGNG0381デフォルトの名無しさん
NGNG0382デフォルトの名無しさん
NGNG0383デフォルトの名無しさん
NGNG0384デフォルトの名無しさん
NGNG>>Caml の floating point operator とか
>MLならFunctor,HaskellはMonad,SchemeはCall.CCでしょう?
もともとは ML で記述がちょっと変なもの(他の言語と違うもの)を集めただけでしょ。
演算子の話をしてたんじゃないの?
完全に文脈が無視されているようで如何にも人工無能らしい。
0385デフォルトの名無しさん
NGNG0386デフォルトの名無しさん
NGNG……ハズなんだけどなあ。
またこれで閑古鳥の ML 板に逆戻り。
0387デフォルトの名無しさん
NGNG…名無しにもどって荒らすくらいはやるかもしれんな。
0388デフォルトの名無しさん
NGNG0389デフォルトの名無しさん
NGNGエージェントアプローチも知らん??
>関数型言語との関連を述べよ。
ってか?この本15,000円もするの知ってた?(藁)
関数言語やってる人でこの有名な「人工知能」の本
知らんってか?
「人工無能」の集まりじゃないのか?(藁藁)
>論点をずらし続けていくだけなら、どこかよそでやってもらえ
>ませんか?
論点をずらしたのは、「カリー化って知ってる?」のオッサン
でしょう?
「お逝きなさい!
関数適用が f x y という形であるので単項と二項の区別がどうしても
必要なのだ。区別しなければ次の式はどのように解釈するのだ。
f 1 - 1
f 1-1
f 1 -1
数字だけならともかく、変数が入ったら?
f x - y
f x-y
f x -y」
こんな単項だ二項だとかの低レベルの話に延々と付き合った
こちらも確かに責任はある。しかし普通、新人は先輩が
「たとえ」低レベルでも「義理」で付き合わざるを得ない。
この辺りは是非理解してもらいたい。キッパリ
0390デフォルトの名無しさん
NGNG先輩がこんな基礎的なことを再度勉強して出なおせ!と仰る。
しかも、MLや関数型言語に特有な機能でも概念でもなんでもない?
そこで已む無く「純真な」新人としては、
「せめて」
>MLならFunctor,HaskellはMonad,SchemeはCall.CCでしょう?
このように各言語特有で難度はそう高くはないが、一般的な
手続き型の言語からは差異性の高いものを列挙したまで
のことです。その程度のレベル差も皆さん方は理解出来ない
のでしょうか?まさに園児並の幼稚さか。(藁)
マイケルジャクソンみたいに、幼児虐待に問われたり
してね?(大藁藁)いや猿児だから大丈夫か?
今度は動物虐待って!!!(ア、アゴが外れそう…藁藁)
>> SICPにもちゃんと引用してあったはずだが…。
>引用されてないようだが?
って、まず貴方自身がちゃんと読んでから中味を…藁。
>この人はプログラミング言語によっては意味が実装依存な部分がある>ことを知った上でこんな戯事を言っているのだろうか?
この人は.NetのCLRやJAVAのVM環境を知った上で…(藁藁)
以上、新人故の「歯に衣を着せた」迂遠な表現ではありますが、
その意のあるところを是非お汲み取り頂きたく。
決して皆さんを馬鹿にしてはおりません。キッパリ
あまりの聳え立つ絶壁を見「下ろして」呆然と…(藁藁)
0391デフォルトの名無しさん
NGNG「何故?SMLにおいてはチルダを単項マイナスに使用したのか?」
これが、原点であります。その後、中川先生のHPも紹介し、
密かにメッセージを送ったにも関わらずどなたも、誰一人として、
コーパスの「コ」の字も出なかった。クラス設計を間違えて
メソッドを全てPrivateにしてあるんじゃないの?
それを自己中、独クラスと言います。(藁藁)
コーパスって?新興宗教じゃないよ!隠れマルコフモデルは
知らなくても、確率的言語モデルぐらいはご存知でしょう?
つまり日常言語の分析に使用するモデルをSMLとOCALMの言語仕様
に適用し、その差異と機能を解析してみたらどうでしょうか?
との提案が本来の趣旨であります。
そして「真の」狙いは、OCALMにおけるオブジェクト指向的仕様が
如何に関数型言語の理念からかけ離れた不整合なものであるか、
またモジュールFunctor機能こそ、その正統を継ぐべきもので
あることを証明することにあります。
まさに、ここML板においてなされるに相応しい議題では
ないでしょうか?
(単項演算子とかカリー化も関数型言語においては
実に良いポイントとは思いますが、…今さら遅いって?藁藁)
付随的に、あくまで付随的な意図として、先輩諸兄姉の無知蒙昧
ぶりがチラッと、いやドヴァっと?…It's Joke,Eliza!
Of course?(laugh,laugh,laugh)
0392デフォルトの名無しさん
NGNG> OCALM
ネタ?
0393デフォルトの名無しさん
NGNG> このように各言語特有で難度はそう高くはないが、一般的な
> 手続き型の言語からは差異性の高いものを列挙したまで
>
> >> SICPにもちゃんと引用してあったはずだが…。
> >引用されてないようだが?
> って、まず貴方自身がちゃんと読んでから中味を…。
>
> >この人はプログラミング言語によっては意味が実装依存な部分がある
> >ことを知った上でこんな戯事を言っているのだろうか?
> この人は.NetのCLRやJAVAのVM環境を知った上で…
0394デフォルトの名無しさん
NGNG> これが、原点であります。その後、中川先生のHPも紹介し、
> 密かにメッセージを送ったにも関わらずどなたも、誰一人として、
> コーパスの「コ」の字も出なかった。コーパスって?
> 隠れマルコフモデルは知らなくても、確率的言語モデルぐらいはご存知でしょう?
> つまり日常言語の分析に使用するモデルをSMLとOCALMの言語仕様
> に適用し、その差異と機能を解析してみたらどうでしょうか?
> との提案が本来の趣旨であります。
> そして「真の」狙いは、OCALMにおけるオブジェクト指向的仕様が
> 如何に関数型言語の理念からかけ離れた不整合なものであるか、
> またモジュールFunctor機能こそ、その正統を継ぐべきもので
> あることを証明することにあります。
> まさに、ここML板においてなされるに相応しい議題では
> ないでしょうか?
> (単項演算子とかカリー化も関数型言語においては
> 実に良いポイントとは思いますが、)
余計なものを簡単に取り除いたらこんなものか
0395デフォルトの名無しさん
NGNGSICP はまともな文書なんだから reference だけで引用されてるかどうか分かる
> >この人はプログラミング言語によっては意味が実装依存な部分がある
> >ことを知った上でこんな戯事を言っているのだろうか?
> この人は.NetのCLRやJAVAのVM環境を知った上で…
非存在証明なんだから反例なんかじゃ答えになってない
> 確率的言語モデルぐらいはご存知でしょう?
> つまり日常言語の分析に使用するモデル
すまんね.自然言語は専門外
> 「何故?SMLにおいてはチルダを単項マイナスに使用したのか?」
> これが、原点であります
(中略)
> まさに、ここML板においてなされるに相応しい議題では
> ないでしょうか?
今まで「モジュールFunctor機能」なんて一言も発してなかったな
その脈絡のなさ,まさに「無能」か
0396デフォルトの名無しさん
NGNGどうでもいいけど…
> エージェントアプローチも知らん??
> >関数型言語との関連を述べよ。
> ってか?この本15,000円もするの知ってた?(藁)
> 関数言語やってる人でこの有名な「人工知能」の本
> 知らんってか?
> >論点をずらし続けていくだけなら、どこかよそでやってもらえ
> >ませんか?
> 論点をずらしたのは、「カリー化って知ってる?」のオッサン
> でしょう?
0397デフォルトの名無しさん
NGNG> 関数言語やってる人でこの有名な「人工知能」の本
> 知らんってか?
これか
人工知能はLispの応用分野の一つに過ぎん
方法論自体が未知のものを扱うのにLispは都合がよかったからな
関数型言語→人工知能という発想はもう古い
0398デフォルトの名無しさん
NGNG0399デフォルトの名無しさん
NGNGかまうやつもウザい。(藁藁)
0400デフォルトの名無しさん
NGNGこれが恥ずかしかったんだな(藁藁)
0401デフォルトの名無しさん
NGNG> そして「真の」狙いは、OCALMにおけるオブジェクト指向的仕様が
> 如何に関数型言語の理念からかけ離れた不整合なものであるか、
型理論からすると OCaml のオブジェクト指向の仕様は普通だよ。
むしろ、型理論から自然に発展させた仕様だよ。
ちなみに、彼の挙げる本は既にとうの昔に読んでいて、それらから学んだら
どうがんばってもああいう思考回路は形成されないと思うけど。
ゼッタイ読んでないでしょ。
僕はこのレスをもってもう放置☆
0402デフォルトの名無しさん
NGNG> 関数型言語の関連を述べよ
AIMAとベクトル量子化と情報圧縮(と、351の各書名)が関数型言語とどう関連あるのか
人工無脳のこじつけが楽しみだなあ。
ま、ろくに答えられないに500モナー。
0403デフォルトの名無しさん
NGNG0404デフォルトの名無しさん
NGNGこの本15,000円もするの知ってた?(藁)
が答えと思われ。
0405デフォルトの名無しさん
NGNGしてしまおう。誰か作らない?
0406デフォルトの名無しさん
NGNG0407デフォルトの名無しさん
NGNG0408デフォルトの名無しさん
NGNG無視しているところが素晴らしい。
是非名前を教えてもらいたいものだ。やっぱ Aransk ですか。
0409デフォルトの名無しさん
NGNG0410デフォルトの名無しさん
NGNGOCALM だよ
0411デフォルトの名無しさん
NGNGそう、CALMって英語だよね?映画もあった。
CAMLはカメルって読ませているが、
正式にはCAMELだ。もっといえば、キャメルだ。
従って、カームの方が良いと思わない?
すくなくとも雑音は減りそうな気がする。
(かなり苦しい片腹、藁藁)
>reference だけで引用されてるかどうか分かる
referenceだけ読むことも出来る。(藁)
> >この人はプログラミング言語によっては意味が実装依存な部分がある
> >ことを知った上でこんな戯事を言っているのだろうか?
そもそもこれが小生の意見に対する貴方の「反例」であることを
お忘れでは??=>非存在証明なんだから反例なんかじゃ答えになってない
(藁藁)
0412デフォルトの名無しさん
NGNG自然言語じゃなく、コンピュータ言語の仕様と機能差異を
調査する話なんだが、何か誤解してない?
正直に確率的言語モデルは勉強してない。と何故言わないの?
>今まで「モジュールFunctor機能」なんて一言も発してなかった
あのぉ、それが、さりげなく言っておるのですよぉ
=>MLならFunctor!!(WWW!)
>>1つ忘れてた
>どうでもいいけど…
>関数型言語→人工知能という発想はもう古い
どうでもいいけど…これ「しか」売れてないから
古かろうが陳腐であろうが、しょうがないじゃん。(藁藁)
>ちなみに、彼の挙げる本は既にとうの昔に読んでいて、
>それらから学んだら
>どうがんばってもああいう思考回路は形成されないと思うけど。
>ゼッタイ読んでないでしょ。
全部読んだような人間が2ちゃんのML板なんかにカキコすると
考える方の思考回路を疑いたい!(藁藁)
右も左も分からない純真無垢の初心者と何度も
申し上げております。この慎み深い謙虚な態度で十分察して
頂けると思うが???
さらに一言だけ、
>一言だけ言語が専門のものから言わせてもらえると(後略)
これはどなたのことでしょうか?(藁藁)
0413デフォルトの名無しさん
NGNGElizaに聞いて楽しんだら?返事は英語だけど分かる??(藁)
>この本15,000円もするの知ってた?(藁)
>が答えと思われ。
立ち食い蕎麦50杯分って、かなり切実な問題だと思われ。(藁)
>是非名前を教えてもらいたいものだ。
あれ??言わなかったっけ??
「デフォールトの名無しさん」!覚えといてね。(wara,wara)
隠れマルコフモデルに誰も「ついて来れない」のなら
ちょっと視点を変えて「あげる」からしばらく待っててね。
実はホッとしてたりしてね。(大藁藁)
0414デフォルトの名無しさん
NGNG真面目くさって長文で掲載する比較的「マトモ」なオッサンが
存在されたような気がするが、もう居られないのでしょうか?
2002年度NO1発言とか自画自賛しておられたような…?
新人としては是非直接お教えを乞いたいと切望しております。
(モジモジ)
0415デフォルトの名無しさん
NGNG0416AranSKの歩み
NGNG↓
解答のヒントを示されるが、全く理解できず
「私はお前らより頭がいい」というキチガイ特有のカキコが爆発
↓
解答。
↓
非可逆計算、ベクトル量子化、エージェントアプローチ…と必死に話を
脱線させて、自分の知的優位さを無意味に印象付けようとあがく
↓
あまりの脈絡のなさ、会話の応答のなさに、人工無能の認定を受ける
0417デフォルトの名無しさん
NGNG(藁藁)
(大藁藁)
(wara,wara)
この変化はどういった基準で付けられているのでしょうか>無能氏
0418デフォルトの名無しさん
NGNG0419デフォルトの名無しさん
NGNG0420デフォルトの名無しさん
NGNG0421デフォルトの名無しさん
NGNG人間にとっては常識なんだが、それよりレベルが上の単語が全く出て
こないところが素晴らしい。出せるんでしょ? 出してよ。出し惜しみせずに。
優秀なんでしょ?
エージェントアプローチとか人工知能とか、関数型より上のレイヤー
(i.e. 関数型の応用) の話じゃなくて、もっと「関数型のレイヤー」で
研究されている話題を振ってよ。それならここの住人もきっとついていけるからさ。
エージェントとか関数型に直接関係ない話題を振る前に型の話を振ってほしいね。
それとも、型の話なんか知らないとでも? 自分のことを相当優秀と思っているぐらいだから
当然知ってるでしょ? ちょっと古いけど quasi linear type とか知ってるでしょ?
0422デフォルトの名無しさん
NGNG1. Aransk は基地外。
2. 基地外を放置できないやつは基地外。
remark: 2.を書き込む >>419 も、基地外を放置できなかった。
以上より、このスレに登場するやつはすべて基地外。オレモナー。
0423デフォルトの名無しさん
NGNG>考える方の思考回路を疑いたい!(藁藁)
優秀な無能様は全てをお読みになったのではなかったのでしょうか。
まさか読んでないのに「イロハのイ!」とかほざいていらっしゃったのでしょうか?
だとしたらこれはあまりに素晴らしい発言ではありませんでしょうか?
0424デフォルトの名無しさん
NGNG0425デフォルトの名無しさん
NGNG構図に見かけはなっている。しかし何か変だ?
AranskかOranskか知らんが、そいつをダシにして
お前ら、グルで掛け合いやってない?
とか、ボソッと言ってみる…
0426デフォルトの名無しさん
NGNG0427デフォルトの名無しさん
NGNG何言ってるの?(藁)
>そもそもこれが小生の意見に対する貴方の「反例」であることを
>お忘れでは??=>非存在証明なんだから反例なんかじゃ答えになってない
あれは存在証明だから反例で答えになってるんだよ
論理学もう一度勉強したら?(藁)
ちなみに >貴方の って俺じゃないぞ
>自然言語じゃなく、コンピュータ言語の仕様と機能差異を
>調査する話なんだが、何か誤解してない?
>正直に確率的言語モデルは勉強してない。と何故言わないの?
確率的言語モデルは勉強してない。(藁)
ところで確率的言語モデルって自然言語の話じゃないの?(藁藁)
>全部読んだような人間が2ちゃんのML板なんかにカキコすると
>考える方の思考回路を疑いたい!(藁藁)
>右も左も分からない純真無垢の初心者と何度も
>申し上げております。この慎み深い謙虚な態度で十分察して
>頂けると思うが???
これらの本を読まなくてもいいが
一度「慎み深い」とか「謙虚」とか「純真無垢」の意味を辞書で調べた方がいいんじゃない?
(藁藁)
>あのぉ、それが、さりげなく言っておるのですよぉ
>=>MLならFunctor!!(WWW!)
ふーん。運が良かったね。(藁)
それとも先読みが上手なのかな。もしそうなら2chでこんなアフォなことやってないと思うが(藁藁)
>これはどなたのことでしょうか?(藁藁)
さあ?あなたのことでは?(藁藁)
0428デフォルトの名無しさん
NGNGOCALM と書いてアフォないいわけする人間よりは英語は達者だと思うよ。(藁)
>立ち食い蕎麦50杯分って、かなり切実な問題だと思われ。(藁)
意外と庶民的なのね
もっと外界値が高い御人だと思ってたよ。(藁)
>「デフォールトの名無しさん」!覚えといてね。(wara,wara)
「デフォルトの名無しさん」じゃないの?(wara,wara)
>隠れマルコフモデルに誰も「ついて来れない」のなら
>ちょっと視点を変えて「あげる」からしばらく待っててね。
ついて逝けないから是非頼むよ(藁藁)
0429デフォルトの名無しさん
NGNGあ、ごめんね
英語が達者過ぎる御人だから英語に存在する CALM の方が自然なんだよね。(藁)
大変失礼しました。(藁藁藁)
0430デフォルトの名無しさん
NGNG0431デフォルトの名無しさん
NGNG藁及びwの数=厨のレベル。
1レス中に2つ以上使われている場合、間違いなく負け惜しみかキチガイです。
0432デフォルトの名無しさん
NGNGアンタ小林さん?
http://www.google.com/search?q=quasi+linear+type&ie=UTF-8&oe=UTF-8&hl=ja&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
(藁藁)
今や何かを知っている、記憶しているって、なんの意味も
ないのがお分かりではないらしい。
世の中アブダクションの時代でしょう?仮説検証です。
どれだけ独自の仮説を創造できるか、かつそれが証明できるか
であります。(チト当たり前「過ぎる」ことを言ってしまった。
藁藁)
0433デフォルトの名無しさん
NGNG応用した知的標準偏差判定OCAMLプログラムで解析して
みました。
不思議なことにバラツキが一点に収束しておるのです?
皆さんに分かり易く偏差値で言えば50ちょっと、大学で
言えば、セントラル、映画館ではありません、まあ似たような
・・藁藁(MLをやっておられる皆さんは型INFERENCEには
強いですよね?中にはWEAK INFERENCEの方々も…苦笑)
多摩の「外れ」にキャンパス移転しても相変わらず
セントラル大と称する、箱根駅伝の常連大学です。
そこで唯一著名な法学部「付属」文学部!の受験偏差値に
異常に近似しておるのです。ただあそこの文学部は一人として
売れる作家を生み出さないことで有名であります。
かろうじてネットで高名な、(いや悪名か?)某ちゃんねるの
運営者が辛うじてそこを卒業(又は中退?)したとかの噂を
聞いておりますが…
そこで、
仮説:ネット掲示板の知的レベルは運営者のそれに収束する。
(大ワラワラ)
少なくとも50チョイですから、70以上の基地外、5以下の基地外で
はないことは確かですからご安心下さいね。
0434デフォルトの名無しさん
NGNG>ないのがお分かりではないらしい。
ふーん。(藁)
お前のこと?(藁藁)
0435デフォルトの名無しさん
NGNG> 仮説:ネット掲示板の知的レベルは運営者のそれに収束する。
> (大ワラワラ)
> 少なくとも50チョイですから、70以上の基地外、5以下の基地外で
> はないことは確かですからご安心下さいね。
君が大きく偏差値を下げているからね。(大藁藁)
0436デフォルトの名無しさん
NGNG>応用した知的標準偏差判定OCAMLプログラムで解析して
>みました。
こっちでも検証してみたいからそのOCAMLソース見せて。(藁)
見せたくないなら無理にとは言わないけど。(藁藁)
その場合は君の発言の説得力は皆無に等しいけどね。(藁藁藁)
0437デフォルトの名無しさん
NGNGそれで君の程度が知れるから。(藁藁)
0438デフォルトの名無しさん
NGNG0439デフォルトの名無しさん
NGNG0440デフォルトの名無しさん
NGNGまだCalmになってるよ。(藁)
恥ずかしくないのかな。(藁藁)
>そう、CALMって英語だよね?映画もあった。
>CAMLはカメルって読ませているが、
>正式にはCAMELだ。もっといえば、キャメルだ。
>従って、カームの方が良いと思わない?
>すくなくとも雑音は減りそうな気がする。
>(かなり苦しい片腹、藁藁)
こっちの方が恥ずかしいけど。(大藁藁)
0441デフォルトの名無しさん
NGNG(藁)
0442デフォルトの名無しさん
NGNG( ´_ゝ`) フーン (藁藁)
0443デフォルトの名無しさん
NGNG>>432-433
433は文系特有の中身のない修飾を取り除くと
「ひろゆきが中央大卒だからプログラム板のレベルは低い」
という主張みたいだけど、これほどレベルの低い負けおしみも珍しいね
0444デフォルトの名無しさん
NGNG0445デフォルトの名無しさん
NGNGこれが意味があるんですなぁ!
考える力は自分の知識のもとに作られる。知識を使いこなせることが重要。
その知識すらなく、それを使いこなせないのが Aransk こと無能だ。
頭の良いやつは色々知ってるよ。色々知ってるから、すぐに必要な知識を
引き出せるんだよ。そんなことも優秀な無能はご存じない?
それはそうと、小林先生、日本 IBM 科学賞授賞おめでとうございます。
0446デフォルトの名無しさん
NGNG誰がいい始めたんだ?
お前、宇宙人にアブダクションされたんじゃないのか?
それならこの無能ぶりも説明できる!
0447デフォルトの名無しさん
NGNG0448デフォルトの名無しさん
NGNG0449デフォルトの名無しさん
NGNG0450デフォルトの名無しさん
NGNG大好きです。真っ白なユニフォームに真っ赤な「セントラル」の
「C」を付けて、(まるで国旗のような?)
箱根駅伝を走る同校の選手諸君にはいつも感動しております。
檜木が居た時も強かった、しかし今年のチームも期待できます。
ML板のメンバー挙げて正月は応援しましょう!
ところで、これまで何とか某氏との知的レベルを調整すべく、
ロッククライミングで下降しておりましたが、いつまで
経っても「底が見えない。!」
これでは、これまで閑古鳥が巣食っていたML板を「いたずらに」
賑わせてしまい、某氏に広告収入アップの機会と、この有意義な
発言ログをまた本にして印税収入の道を提供するだけではないか?
と、深く反省致しまして、これにて潔く身を退くことに致します。
(藤井前総裁のように板に恋々とは…藁)
ML板を愛する皆さん!どうぞお戻り下さい。また心ゆくまで
MLは良いよなぁ。OCAMLは素晴らしいよなぁ。こんな
コードも書けるんだぁ。ゴニョ、ゴニョ、ゴソ、ゴソ・…と
まるで、某大、某研究室の雰囲気マルだしでマッタ〜リとクラ〜イ
雰囲気を存分にお楽しみ下さい。(藁藁藁)
受験生の皆さん!でも某大、某研究室も良いところです。
是非一度遊びに来て下さい。
但し元阪神タイガーズ田淵コーチの悪口だけは
禁句のようですから…大藁藁!
0451デフォルトの名無しさん
NGNG>ロッククライミングで下降しておりましたが、いつまで
>経っても「底が見えない。!」
ここを勘違いしてるんだから底が見えるわけないよね。
だって君が圧倒的に底辺にいるんだから。(藁藁藁)
0452デフォルトの名無しさん
NGNG2chの管理人だと思い込んでないかい?>Aransk
だとしたら本物のキチガイだな。。。
いや、用語をググって人名が出てきたら、即その人物が
レスしてると思い込んじゃう時点でもうキチガイ確定なわけだが
0453デフォルトの名無しさん
NGNG>>ロッククライミングで下降しておりましたが、いつまで経っても「底が見えない。!」
>ここを勘違いしてるんだから底が見えるわけないよね。
>だって君が圧倒的に底辺にいるんだから。(藁藁藁)
彼が見ていた底にはおそらく大きな鏡があって、はるか上方にいる我々が写って見えたのだろう。
0454デフォルトの名無しさん
NGNG今度の冬コミで「キチガイ Aransk」を作って売ろうぜ!
0455デフォルトの名無しさん
NGNGとかいいながら、Aransk は我々に隠れマルコフモデル、
エージェントアプローチ、ベクトル量子化、情報圧縮等などの知識を
要求していたわけです。
だとしたらこれはあまりに素晴らしい発言ではありませんでしょうか?
「素晴らしい発言」を批判されたことに対するフォローが殆どないところが素晴らしい。
素晴らしい素晴らしいと誉めすぎだな、俺。
まあいいや。Aransk が敗北を認めた記念あげ。
0456デフォルトの名無しさん
NGNG確かに彼の発言レベルは、発言ごとに低下していった。
自分のことを正確に捉えてるじゃないか。見直したぞ(プ
0457デフォルトの名無しさん
NGNG書籍を借りてきますた。
大堀淳さんて方の本。こいつを読み進めてく方向で問題ないっすか?>諸賢。
0458デフォルトの名無しさん
NGNGSML/NJ の教科書的な本は実質それしかないのでは?
洋書は知らないけれど
0459デフォルトの名無しさん
NGNG0460デフォルトの名無しさん
NGNG「ここにいらっしゃる粘着キチP-超先生=Aransk」
は規定値なんでつか?
0461デフォルトの名無しさん
NGNG0462デフォルトの名無しさん
NGNG0463デフォルトの名無しさん
NGNGで定着しちゃったんだろう。せめて名乗ってくれればフィルタリングで一発なのだが…
0464デフォルトの名無しさん
NGNG0465475
NGNGさんくすこ。
やっぱり他に本は無しでつか。
てかこれやっぱり学校の教科書だよなぁ。
ML理解してる椰子がそばにいないとつらそうな感じ。
独習するには漏れは厨過ぎた悪寒。
吊る前に返却までがんがってみよう。
0466デフォルトの名無しさん
NGNGあ、漏れもちょうどその本かって、自らの厨房っぷりを悟って吊ろうと
思ってたところ…。Ocaml でも SML でもいいんですけど、
http://www.python.jp/Zope/articles/SoftwareTools
こーんなかんじで小さなプログラムを題材にしたチュートリアルみたいなの
ありませんかねぇ?
0467デフォルトの名無しさん
NGNG型理論・意味論・λ計算はある程度理解してるつもりだが、あの本は挫折した。
0468デフォルトの名無しさん
NGNG> コードも書けるんだぁ。ゴニョ、ゴニョ、ゴソ、ゴソ・…と
藁氏はやなやつだが、この言葉はぐさっときた。
他人のはじめた研究分野の隅をつついてるだけの自分が嫌だ。
0469デフォルトの名無しさん
NGNG0470デフォルトの名無しさん
NGNG0471デフォルトの名無しさん
NGNG465-467 の流れを読んでくれよ。なんで、なんで蒸し返す…
知ってるか?内輪ネタって場をわきまえないと寒いんだぞ?
残念ながら 470 は未来を指してしまったが。反省して ML ネタを振れ。
0472デフォルトの名無しさん
NGNGSML入門は至って普通の言語入門本だと思うけど。
「プログラミング言語の基礎理論」は確かにむつかしいが、こっちはスレ違いだ。
0473デフォルトの名無しさん
NGNGそれではMLねたを1つ。
大堀さんのところが国プロで拡張MLの開発をやってるようだけど、
こういう機能が欲しい、というのはありますか?
今のところは、
・多相型レコード計算
・ランク1多相(これはよく知らない)
・JAVAやSQLとの相互運用性
あたりを追加するようですが。
0474デフォルトの名無しさん
NGNG0475デフォルトの名無しさん
NGNGhttp://www.jaist.ac.jp/~ohori/research/iml-e.html
これか。
・polymoprhic recursion
・overload
0476デフォルトの名無しさん
NGNG0477デフォルトの名無しさん
NGNGUnix moduleのやつじゃだめ?
0478デフォルトの名無しさん
NGNGhttp://cif.iis.u-tokyo.ac.jp/e-society/Ohori.html
昨日(12/1)のシンポジウムでは、スクリプト言語なんかだめだ、MLを使えといった
感じの話をされてましたね。
0479デフォルトの名無しさん
NGNG0480デフォルトの名無しさん
NGNGOcamlのオライリーの本には、プログラムによって適切な方を使えと書いてあった気がする。
0481デフォルトの名無しさん
NGNGQueueとかはClassにすべき気がするんだけど、どうなんだろ?
0482デフォルトの名無しさん
NGNG> 正直に確率的言語モデルは勉強してない。と何故言わないの?
まあガンガってsmlに単項-を導入したstochastic parserでも書いてみてくれ。
もちろんerror rateは0で、precisionもrecallも1でよろしく。
当然、shallow parserでお茶を濁すようなことはしないだろうな?
>>433
> これまでの先輩諸兄姉の発言全てを確率的言語モデルを
> 応用した知的標準偏差判定OCAMLプログラムで解析して
> みました。
stochastic language modelで書き手の知性を測るって・・・
結局こいつはfunctional programming languageだけでなく
natural language processingもcomputational linguisticsもまるで知らないのか。
stochastic language modelではsemanticsの領域にもなかなか入れないのに、
知性をはかるとなると、pragmaticsもcynicismも捉えにゃならんだろうに・・・
0483デフォルトの名無しさん
NGNG無駄に英語使ってたら言いたいことが欠片も伝わらないよ
0484デフォルトの名無しさん
NGNG単に日本語が不自由なだけに見える…
0485デフォルトの名無しさん
NGNGそれはちょっとしたスクリプトにも ML を使えという事でしょうか?
ひょとして MLer は既にそうなのですか?
0486デフォルトの名無しさん
NGNG過去の経験からして、この手の言葉を無駄に日本語にしても読みやすくはならん気がする
所詮抽象概念へのポインタに過ぎないんだから…まぁその人の頭の中のハッシュテーブル
の構造に依存することなんでどっちでもケチが付くとは思うけど
>482
もまいも空気嫁、ぶり返すな
0487デフォルトの名無しさん
NGNGperl知らないだけとも言う。
0488デフォルトの名無しさん
NGNG> 過去の経験からして、この手の言葉を無駄に日本語にしても読みやすくはならん気がする
semantics=意味論,pragmatics=語用論 はともかく
少なくとも cynicism=皮肉 は日本語の方が意味が通る気がする
あと,
natural language processing=自然言語処理
computational linguistics=コンピュータ言語学
もな
0489デフォルトの名無しさん
NGNGそういえばOCamlでクラス使ったライブラリって見たことないなぁ。
状態を持ってる場合クラスの方が使いやすそうなんだけど、なんか落とし穴でも
あるのかな?
0490486
NGNG個人的には漏れもだいたい同意見だ…でもどっちでもいいとも思う
# 言外のcynicismを察してくれ
0491デフォルトの名無しさん
NGNG英語でもこういうのな…
0492デフォルトの名無しさん
NGNGObject 周りは枯れ切っていないので standard lib にはまず使いません。
Standard lib に class 入れると入門者に突然 object を使わせる事になるので
まずいのです。ただでさえ、Caml は関数型のはずなのに、何が何でも object で
プログラムを書き出していろんなトラブルで困ってしまう oo 志向から来た
初心者が多いんよ。
>>489 Jacques が作っています。
ttp://wwwfun.kurims.kyoto-u.ac.jp/soft/olabl/classes/
>>485
製造元の Cristal には 100% ML 原理主義者から
Perl を使う日和見主義者までいろいろ居ます。
状況とあなたの好きなようにして下さい。
0493デフォルトの名無しさん
NGNGその 100% ML 原理主義者のコードに興味津々。
もっと日々の生活に密着したコードが見たいなぁっと思って
いたところでして。コソーリ見せてくれませんかね?
0494475
NGNGを、同志よ(って、こたないが)。厨っぷりが見えるのが痛い本ですな、ある意味(汗
>>467
そんだけ、分かってても挫折する人がいると思うとちょっとだけ安心(ヲイ
>>472
確かに書き方自体は普通の言語入門書なのだろうという感じはさらっと読んだときに感じて借りて
みたわけですが、ここで語られている概念に戸惑う厨脳な自分を発見て感じでつ。
でもこの辺クリアできたら新たな地平が目の前に開けてそうな予感はするんで、もうちっと頑張ってみまつ。
0495デフォルトの名無しさん
NGNGある人のホームディレクトリから拝借してきました。
X11/rgb.txt から TeX の色宣言を作るコードらしい。
try
while true do
Scanf.scanf " %d %d %d %s@\n" (fun r g b c ->
Printf.printf "\\definecolor{%s}{rgb}{%.5f,%.5f,%.5f}\n"
c (float r /. 255.0) (float g /. 255.0) (float b /. 255.0))
done
with End_of_file -> print_newline (); exit 0;;
だから何、といわれても困りますが。
0496デフォルトの名無しさん
NGNG漏れ日曜プログラマなのに ML for Working Programmer とかいうのを買って
きちまってょぅ。この本さ、悪くはないと思うんだけど、序盤はめっちゃ親切だし。
でも、漏れ計算機科学の教育は受けてねーから後半頭イタタタタで困ってたのよぅ。
そーゆう現実的な例をみると元気がでる。
0497デフォルトの名無しさん
NGNGttp://caml.inria.fr/Examples/oc/eng.html
もお勧めです。
0498デフォルトの名無しさん
NGNGむー、ML向きじゃない例だけど、
逆にいうと、そういうのも普通に書けてしまうから、
なれている人には、日常のスクリプトにもつかえるということかな?
MLは。
0499デフォルトの名無しさん
NGNGlet httpd_log = "/var/log/httpd/referer_log";;
module StringSet = Set.Make(String);;
let get_referer str =
let rec iter i =
if i < String.length str - 2 then begin
if str.[i] = '-' && str.[i + 1] = '>' then begin
String.sub str 0 (i - 1)
end else begin
iter (succ i)
end
end else begin
""
end
in
iter 0
;;
(* read old_referer *)
let make_old_referer () =
let in_chan = open_in log_filename in
let rec loop refs =
let t = try Some (input_line in_chan) with _ -> None in
match t with
None -> refs
| Some x -> loop (StringSet.add x refs)
in
loop StringSet.empty
;;
0500デフォルトの名無しさん
NGNGlet _ =
let old_refs = make_old_referer () in
let log_in_chan = open_in httpd_log in
let rec loop newrefs =
let t = try Some (get_referer (input_line log_in_chan)) with _ -> None in
match t with
None ->
let refs = StringSet.union old_refs newrefs in
let out_chan = open_out log_filename in
StringSet.iter print_endline newrefs;
StringSet.iter (fun x -> output_string out_chan x; output_char out_chan '\n') refs
| Some x ->
if StringSet.mem x old_refs then begin
loop newrefs
end else begin
loop (StringSet.add x newrefs)
end
in
loop StringSet.empty
;;
0501デフォルトの名無しさん
NGNG/var/log/httpd/referer_log から新しい referer を抜き出すプログラムね。
古い referer は ./old_referer.log に保存。
これもあんまり ML 向きじゃないけど。
0502デフォルトの名無しさん
NGNG0503デフォルトの名無しさん
NGNG枯れていないとは、バグが残ってるとかそういう意味?
それとも理論面で煮詰まっていないってこと?
0504デフォルトの名無しさん
NGNGサンクスコ!おかげでちょっとずつ Ocaml でプログラミングできる
ようになってきたYO!! いや〜ファイルからの読み込みで悩んだ
悩んだ…。ML 向きじゃないってのは Perl よりは向いてない、くらいの意味?
0505デフォルトの名無しさん
NGNG書いてみたんだけど、これでいいのかな?
let map2 f lst =
let rec map2_iter cont = function
[] -> cont []
| x :: xs ->
let t = f x in
map2_iter (function result -> cont (t :: result)) xs
in map2_iter (function x -> x) lst
;;
GC.allocated_bytes を使ってみたところ、map2が一番メモリと時間を使うことが分かってがっかり。
(n = 10000, 100回試行, pen3-450/win2000/mingwで
map1: 0.681000 sec, 12000788.000000 bytes
map2: 1.352000 sec, 32003228.000000 bytes
map3: 0.370000 sec, 12002096.000000 bytes)
ocamlで一度に使うメモリの最大値を求める方法をご存じの方はいらっしゃいませんか?
0506デフォルトの名無しさん
NGNG> 枯れていないとは、バグが残ってるとかそういう意味?
> それとも理論面で煮詰まっていないってこと?
既知のバグが残ったままリリースされるという事は
間違ってもありません。ただ、知られてないバグが紛れ込む時はある。
object 方面は、今この瞬間にも拡張が行われているので、
新しいバグが導入される可能性があります。
そういう理由もあって標準ライブラリには使いません。
理論面では、、、さあどうでしょう。ジャックはここには居ないのか。
3.07pl2 何か変なんだけど。
0507デフォルトの名無しさん
NGNGときどき漢字間違うけどw
0508デフォルトの名無しさん
NGNGintとfloatで演算子変えたり、いちいちArray.length arrとか書くの面倒。
そういえば、なんで > < = だけオーバーロードされてるの?
0509デフォルトの名無しさん
NGNGtype class かせめてタイプクラスと書いてくれたら、、、
考えうる理由:
* object の method overloading がもうある
いや、でも class library がないんですけど、という突っ込みは無視。
* type class と ML module system の兼ね合いはどうしますか。
functor の中で class declaration されたらどうしよう、とか。
まあ禁止するんでしょうかね。
* link 時に dictionary 作るコードを付け足すの?今の caml に?大変ね。
* INRIA の中の人が Array.ほげほげ に慣れていて overloading を
必要としていない。
* もー俺達には俺達の class があるから他の何とか class なんかいらないよ。
* 正直、 Haskell の真似するの嫌。
こんなとこすか?
0510Obj.magic
NGNG定義されているからです。(そのため個別の型に関する比較の定義はない。)
まあ、そのおかげで変な比較ができちゃったりするのですが。
[2;3;4] < [1;2;3;4] とか。
内部表現での比較だと関数とかオブジェクト以外は全て
(もしかすると嘘かもしれん)型さえ同じなら「比較」できちゃうので、
Caml では比較演算子に parametric polymorphic な型を与えています。
(<) : 'a -> 'a -> bool とか。ただし、定義されていない関数の比較は
型チェックを通ってしまい、実行時エラーになります:
(fun x -> x) < (fun x -> x)。
上のように overloaded function に(半ば無理矢理) parametric な型
を与える事が許容できるのは比較関数のような(ほとんど) non-exhaustive な
overloading に対してだけです。おわかりとは思いますが、length のような
普通の overloading には parametric な型を与えるのは危険です。
0511デフォルトの名無しさん
NGNGすんません。→型クラス
確かに今さらtype classの実装は大変そう。type classが万能なわけでもないし、
現状でもmoduleやらclassである程度代用できるし...といった感じか。
まぁArray.ってのはINRIAの中の人にならって慣れるとしても、
int, float, Complexとかに共通して適用できる関数をさらっと書けないのはちょっと。
今のOCamlの仕様だとintやfloatのmoduleかclass作ってゴニョゴニョする
しかないのかな。
>>510
比較演算子はparametricなのか。floatとintくらいで定義されている
adhocなものだと思ってた。関数の比較が型チェックを通ってしまうとは驚き。
0512デフォルトの名無しさん
NGNG> * 正直、 Haskell の真似するの嫌。
まじかよ….
0513デフォルトの名無しさん
NGNGんなわけねーよ。最後の三つは真面目に取っちゃいかんよ。
0514デフォルトの名無しさん
NGNG0515デフォルトの名無しさん
NGNGあと型クラスを入れると、今よりさらにOcamlの敷居が高くなってしまう
恐れもあるのかなと思う。程度の問題だけど。
Overloadingは gcamlで使える。
http://cristal.inria.fr/~furuse/generics/
0516デフォルトの名無しさん
NGNGそれで、彼らに2年間研究室でそのマイナー言語を使って、プログラミング
してもらいながら教えるんだよ、そうすれば、2年後、その言語を使ってる
プロのプログラマーがきちんと100人できるだろ。
いいアイデアだろ! 申請よろしく。
0517デフォルトの名無しさん
NGNG予算が下りたら漏れも頼むョ
0518デフォルトの名無しさん
NGNGそんなに予算ってあるの、情報系はすごいな。
それともプログラマってそんなに給料高くないの?
教育も受けるって事で、安くしてもらうって事なのかな…
0519デフォルトの名無しさん
NGNG0520デフォルトの名無しさん
NGNGそんなに安いのは勘弁してください
0521デフォルトの名無しさん
NGNG新しく別の型でoverloadできるのかな?
ドキュメント斜め読みした感じでは、毎回genericsの定義をいじらないと
いけない気がする。
0522デフォルトの名無しさん
NGNGgeneric xxx ...
| include xxx
| a->b => ...
in
...
複数のモジュールで定義したオーバーロードのマージを
自動でやってくれないと、実用にはちと厳しいけどねぇ。
0523デフォルトの名無しさん
NGNGなるほど。..これはまた微妙だなぁ。(笑)
0524デフォルトの名無しさん
NGNG0525デフォルトの名無しさん
NGNGFedoraのパッケージリスト(FTPミラー)。
http://sunsite.informatik.rwth-aachen.de/ftp/pub/Linux/fedora/fedora/1/i386/RPMS.stable/
LindowsでもOcaml入ってるし。 Ocamlが日の目を浴びる日がくるのか。
0526a novice
NGNG0527デフォルトの名無しさん
NGNG0528デフォルトの名無しさん
NGNGGCaml の作者さん(?)が ocaml-3.07 のリリースが終ったら取りかかるって言っ
てた気がする。ocaml のメーリングリストで。
これかな?
http://caml.inria.fr/archives/200305/msg00059.html
0529デフォルトの名無しさん
NGNG0530デフォルトの名無しさん
NGNG作者様ですか?
0531デフォルトの名無しさん
NGNGもしやJun様?
応援してますんで、ガンガってください*(≧∇≦)*
0532デフォルトの名無しさん
NGNG0533デフォルトの名無しさん
NGNG0534デフォルトの名無しさん
NGNGgccでコンパイルしることにした。
0535デフォルトの名無しさん
NGNGら、読書感想文キボン.
目次を見る限りでは Lazy の話が多そうだけど...?
0536デフォルトの名無しさん
NGNGttp://dada.perl.it/shootout/craps_cpumemloc.html
0537デフォルトの名無しさん
NGNG「オブジェクティブ・キャムル?」
0538デフォルトの名無しさん
NGNG0539デフォルトの名無しさん
NGNG0540デフォルトの名無しさん
NGNGこの言語
0541デフォルトの名無しさん
NGNG少なくとも織田信長よりは得していると思う。
0542デフォルトの名無しさん
NGNG0543デフォルトの名無しさん
NGNG後半はその通りひたすらLazy前提だったんで、Strictで無理なく
できる話ももーちょい増やして欲しかったかなって気は確かにした。
最後の方になると、静的型付けの言語だと比較的新しいものでも
実現できないことが多いような Polymorphic Recursion とかを使う話もあるし。
有用なデータ構造が書けるのを示すことで、言語側の実装が
もっと進むようにプッシュする意図もあるのかなぁ、とか思った。
0544543
NGNGもんはどの関数型言語でも共通で、その辺は丁寧に解説されてるんで、オススメ。
俺には色々と新鮮で面白かったです。
0545デフォルトの名無しさん
NGNG0546デフォルトの名無しさん
NGNGありますが、MLでそれらに匹敵するものってあるんでしょうか?
この分野だとS式の柔軟性が不可欠なのかな?やっぱり。
0547sage
NGNGありがとう。
私もちょっと読んでみた。遅延評価の memoization ってやつをある種キャッ
シュとして使って、O(n) 必要なところを O(1) にしてやろうっていう発想は、
思いつきませんでした。
stream ってホントに色んな使い方があるのね。
0548<sage>
NGNG>>546
その計算機代数システムをよく知らないので、ハズしてるかもしれんが、
Ring, Field, Group などを扱うライブラリならあるよ。
http://www.lama.univ-savoie.fr/sitelama/Membres/pages_web//RAFFALLI/formel.html
ちなみに ocaml だけど。
0549デフォルトの名無しさん
NGNG継続とかコルーチンとか。
0550デフォルトの名無しさん
NGNG0551デフォルトの名無しさん
NGNGはげどう
0552デフォルトの名無しさん
NGNG0553デフォルトの名無しさん
NGNGマシントラブルが有っても月曜までそのままです。
土日に仕事しようと言うほうが悪い。フランス的にはね。
0554デフォルトの名無しさん
NGNG説明よんでもわかりません・・・
0555デフォルトの名無しさん
NGNG> 説明よんでもわかりません・・・
本当に必要になった時に説明を読むこと。
0556デフォルトの名無しさん
NGNG0557デフォルトの名無しさん
NGNG((function x -> 0) (1 / 0)) + 1
みたいな式は lazy だと、(1 / 0)の計算が必要とならないから、計算されず
エラーにならない。(MLは lazy じゃないから、エラーになる。)
0558デフォルトの名無しさん
NGNG> (MLは lazy じゃないから、エラーになる。)
昔MLの本で遅延評価の話を読んだような気がするのだが
ML自体は遅延評価をサポートしていなかったのか…
0559デフォルトの名無しさん
NGNG普通なら
1. x + yを行って結果をレジスタなどに格納するコード
2. fの呼び出しコード
になるところが,lazyだと
1. x + yという式を作るコード(メモリ確保してツリーを生成するコード?)
2. fの呼び出しコード
になるのだろうか.
余り嬉しくないような…….
0560デフォルトの名無しさん
NGNGevalじゃあるまいし、ツリーなんて生成しない。
最適化されないナイーブな実装でも、
x + yを計算するコードが生成されてそれへのポインタがfにわたされるだけ。
# x + y == ((lambda (x y) (+ x y)) x y)
0561デフォルトの名無しさん
NGNG引数の式はすべてクロージャになるという感じなのかな.
0562デフォルトの名無しさん
NGNG0563デフォルトの名無しさん
NGNGHaskell。
元祖はMirandaだったかな?
0564デフォルトの名無しさん
NGNG0565564
NGNG0566デフォルトの名無しさん
NGNG0567デフォルトの名無しさん
NGNG0568デフォルトの名無しさん
NGNGConcurrent Clean
LazyML (LML) というのもあるらしい
0569デフォルトの名無しさん
NGNG旧: http://www.summa.jp/lang/func/ml.htm
新: http://www.summa.jp/lang/func/ml/
0570デフォルトの名無しさん
NGNGSchemeだと、
> (define a (delay (write "a"))
って、やるとなんも表示されなくて、次に、
> (force a)
とやると、初めて、 "a"が表示される。
Ocamlでも、Lazyモジュールで同じようなことができる。
lazyな評価のメリットとしては、記述力が高いとか、必要最小限の
計算しかしなくてすむ、とかいうのがあげられる。
でも、毎回closureを作らなきゃいけないから、実行速度が遅くなるという
欠点もある。 一部の計算をeagerに行うように最適化するなど、コンパイラが
頑張ってどうにかする必要がある。
推測混じり。
0571デフォルトの名無しさん
NGNGLazyの欠点は、次にしないといけないことをずっと覚えておく必要があり、
それがメモリを圧迫する可能性があること。
もう一つは、tail recursion でよく表れるような罠かな。
> sum [] s = s
> sum (x:xs) s = sum xs (x + s)
> -- 例: sum [1,2,3] 0 == 6
> -- [1,2,3] == (1:2:3:[])
このsumはtail recursiveだが、sum [1..n] 0 はnが大きいときにstack overflowする。
なぜか?
sは最後まで必要でないので+が計算されず、
sum [] s = s にいたって初めて、 n + x_{n-1} を計算しようとし、
(ここで、x_{n - 1} = (n - 1) + x_{n-2}, ...)
結局、sum (x:xs) = x + sum xs と順序が逆なだけで、
同じ様にスタックを必要としてしまうからだ。
解決法の一つは、accumulatorについてstrictにすること。
> sum (x:xs) s = sum xs $! (x + s)
GHCコンパイラはこの程度のことは最適化で自動でやってくれる。
利点は、>>570が述べたとおり。記述力が違う。慣れるとやめられん。
0572デフォルトの名無しさん
NGNGするよりも、デフォルトは eager で lazy にしたいところだけ明示する
ほうがいくない?
0573デフォルトの名無しさん
NGNG無限リストくらいしか使い道を思いつかない.
0574デフォルトの名無しさん
NGNGなるほどー。サンクス
0575デフォルトの名無しさん
NGNGパイプライン的に計算されるから、中間リストや中間データ構造が
大きくなって困ることがない。
無限に続くとみなすと都合のいいデータ構造やアルゴリズムが
意外にたくさんある。テキストも処理もそう。
再帰的なものは無限リストにしといて必要なところだけとってくる
ように書くと綺麗でしかもリスト要素がキャッシュになるから速い。
Lazyなおかげでmutableな変数の必要性がなくなることもある。
# pure + strict が無い理由?
> するよりも、デフォルトは eager で lazy にしたいところだけ明示する
そういう議論はたまにHaskell mailing listでもあるけど、
strictが途中に一つでもあると駄目だから、そうするとあまり使えない、
というのが大方のHaskellerの意見かな。
実際おれも不満にはおもわないし。害よりも便利なことの方が多い。
# ちなみに上の n は 600,000 ぐらい(ghci)。
# 600,000回もネストできれば実際にはあまり困らない。
# オプションで増やすこともできる。
0576デフォルトの名無しさん
NGNG文字のリストって不利にならない?
0577デフォルトの名無しさん
NGNGLazyなリストだから、必要な部分だけ読み込まれ、大きさは問題にならないことがおおい。
もちろん、処理によるけれど。全体をみながらちょっとだけ置換するとかいう
ことならPackedStringみたいなmutableなものをつかわないといけない。
でもフィルタ的に全部書き換える/処理するようなものは、OK。
例えば、(Cleanスレに書き込まれたものだが)
csvファイルのnカラム目を全てとってきてprintするのに、
> s <- getContents
> putStr $ unlines $ map ((!! n) . cols) $ lines $ s
のようにできる。
これでファイルサイズに関わらず一定メモリで走るのはLazyなればこそだと思う。
# 当然入力が間欠的に供給されるパイプなんかでも問題ない。
# s: String、Lazyに読み込まれる。
# lines: lineに分割。 unlines: line を結合。
# cols: 各行を、各桁からなるリストに変換。
# a_list !! n : リストa_listのn番目の要素を返す。
0578デフォルトの名無しさん
NGNGs <- getContents
はファイル(stdin)の中身全体を一つのLazyなStringとして返す。
# Cleanスレのものはファイル名をとるようにhGetContentsを使っているが同じこと。
ポイントは、getContents, putStr,..., lines というすべての関数が
Lazyだから、行毎のループを使わず、
ファイル全体としての文字列というよりシンプルで抽象度の高い表現を用いて、
ローカルな(ここでは行毎の)処理を効率的におこなえるということ。
0579デフォルトの名無しさん
NGNG0580デフォルトの名無しさん
NGNGえーと、>>577-578のどのへんがわからないんでしょう?
それとも、チューリング等価性を発見して喜んでるところですか?
0581デフォルトの名無しさん
NGNG分からなくないし、もっと Lazy の利点を書いて欲しいな。
0582デフォルトの名無しさん
NGNGとりあえず>>575以外には思いつかん。
まだ読んでないなら、Why functional programming mattersを読むといいかもね。
# Lazyの欠点だとおもうことがあったら答えるよ。
0583デフォルトの名無しさん
NGNGC使いにいきなりHaskellで書けと言われても書けないというか。
0584デフォルトの名無しさん
NGNGありがとう。読んでみます。
以前読んだときは、途中で挫折しました。
0585デフォルトの名無しさん
NGNG遅延を意識して書こうとするとものすごい工数になりそうだ
0586デフォルトの名無しさん
NGNGある種の直観には反するのかもね。
しかし、プログラム意味論なんかは圧倒的に簡単だよ。
誰でも習う数学(数式)により近いという利点もあるし、、
結局は最初になにをやるかってだけのことではないかと思う。
x = x + 1 と、
natural_numbers = 1 : map (+1) natural_numbers
のどっちが難しいのか。
0587デフォルトの名無しさん
NGNGC言語とか作ったやつらと比べるともう次元を超越してるよな。
たぶん頭の構造が全く違うよ。未来からきた人?
CとHaskellの凄さの比って、ミジンコと宇宙人?
って間違えるほど差がありすぎだよ。
ちびりまくりだよ。
0588デフォルトの名無しさん
NGNGでもなぜか侵略戦争は物量の差でいつも宇宙人が負けちまうのさ。
ミジンコ数だけは多いからね。
0589デフォルトの名無しさん
NGNG宇宙人の技術は次元を超越してるからね。
もうミジンコにとっては理解の外。宇宙人に聞くかしないとわからない。
多分聞いてもわからないんじゃないかな。
そんで無かったことにする。これがミジンコにとっての平和。
だからミジンコはミジンコのまま。
たまに宇宙人がやってきて、いじめられるのを繰り返す。
おまえら、こんなミジンコどもを焼き払ってくれ。
0590デフォルトの名無しさん
NGNGマジレスすると、
Cコンパイラを一度書いてみるとたぶんそんなこと言えなくなると思うよ。
0591デフォルトの名無しさん
NGNG最近のコンパイラは、内部表現が関数型言語に近づきつつありますね。
SSAとかCPSとか。
0592570
NGNG遅レスで申し訳ないけど、 stack overflow はしないと思うのですが。
クロージャーはヒープに取られるから。
tail callに限らずクロージャーでヒープを大量に消費しがちというだけではないの?
あと、sum [] s = s で、計算が開始するわけでもないです。
0593デフォルトの名無しさん
NGNGああいうのは関数型言語の枠組の中で扱えるんだろうか?
0594デフォルトの名無しさん
NGNG両方わからんわ
少なくとも意味がわかるように擬似言語で頼む
0595デフォルトの名無しさん
NGNG> x = x + 1
次のxは現在のxに1を足したもの
> natural_numbers = 1 : map (+1) natural_numbers
自然数の集合は,{1}および自然数の各要素に1を足した集合の和集合
0596デフォルトの名無しさん
NGNGScheme の継続はどう?
いや、よく知らないんだけど。
0597デフォルトの名無しさん
NGNGlambda で普通にいけると思うが
0598デフォルトの名無しさん
NGNG1) >>571の
> sは最後まで必要でないので+が計算されず、
以下をもう一度よく読み、
何がスタックを必要としていると書いてあるか考えるように。
2) 570の考える評価順序について説明してくれ。
0599デフォルトの名無しさん
NGNG> x = x + 1
この命令以降、xはこの命令前のxに1を足したものを指す。
> natural_numbers = 1 : map (+1) natural_numbers
[1, 2, 3, 4...] = 1 : map (+1) [1, 2, 3, 4, ...]
= 1 : [1 + 1, 2 + 1, 3 + 1, 4 + 1, ...]
= 1 : [2, 3, 4, ...]
= [1, 2, 3, 4, ..]
ただし、[a,b,c,...] は a:(b:(c:...))の省略記法であり、
map f [a, b, c, ..] = [f(a), f(b), f(c), ...] である。
0600570
NGNG1)
> 同じ様にスタックを必要としてしまうからだ。
ここがおかしい。
sum (x:xs) = x + sum xs
の場合は、xがスタックに置かれるから stack overflow の可能性はあるけど、
sum (x:xs) s = sum xs (x + s)
の場合はスタックの上のxはtailcallで上書きされるから、stack overflow にはならんと思うよ。
失礼ですが、tailcallをよくわかってない気がする。
2)
sum [] s = s
は s で渡されたクロージャーが返ってくるだけで、ここでは計算は起こらない。
計算が起こるのは基本的に、プリミティブの演算が行われるときと、適用する関数を
評価するときで、関数から返る値は評価されない。
失礼ですが、遅延評価もよくわかってない気がする。
-- MLスレで遅延評価の話ばっかりして非常に申し訳ないと思っています。
0601570
NGNG0602デフォルトの名無しさん
NGNG0603デフォルトの名無しさん
NGNGもしかして末尾再帰のことか? だとしたらおまい何も分かってないだろ.
sumの例は末尾再帰になってない.
0604570
NGNGsum (x:xs) s = sum xs (x + s)
は末尾再帰じゃないの?
0605デフォルトの名無しさん
NGNG1)
sum [1,2,3] 0
-> sum [2,3] (1 + 0) -- tail recursiveだからsum自体はstackを要さない。
-> sum [3] (2 + (1 + 0))
-> sum [] (3 + (2 + (1 + 0)))
-> (3 + (2 + (1 + 0)))
で、この最後の式が評価されるときにスタックが要ると>>571に書いているわけ。
2) これは大前提だが、sum [1..n] 0の計算が行われる場合について書いている。
計算が起こらなければstack overflowが起こらないのはいうまでもない。
そして遅延評価であるから、sum [1..n] 0 がそもそも評価されるのは、結果が要る場合だけだ。
すなわち、sum xs s が評価されてsum [] s = s に至ったなら必ずsは計算される。
そして、nが大きいと1)の理由により、stack overflowする。
# 最初から [] にマッチする場合を除く。
> の場合は、xがスタックに置かれるから stack overflow の可能性はあるけど、
??? 関数のリターンアドレスがスタックにつまれるんだぞ?
> の場合はスタックの上のxはtailcallで上書きされるから、stack overflow にはならんと思うよ。
??? 同じく意味不明。
再帰も遅延評価もわかってないぞ。勉強し直せ。
# スレが落ちたからじゃなくて流れでね…
0606デフォルトの名無しさん
NGNGそう書いてあったのか。そう読めませんでした。曖昧な日本語をお使いになる。
> ??? 関数のリターンアドレスがスタックにつまれるんだぞ?
??? 末尾再帰の場合はスタック上のリターンアドレスは、深さに比例して増えたりしないんだぞ?
> # 最初から [] にマッチする場合を除く。
これをコメントアウトするのは非常にずるいと思う。
大事な大前提を暗黙に議論してるな。前提がlazyに出て来る感じ。
0607デフォルトの名無しさん
NGNGそこまで馬鹿げたことを書かれると心底うんざりするな。
> そう書いてあったのか。そう読めませんでした。曖昧な日本語をお使いになる。
少なくとも>>571は理解しているし、自分の国語力と理解力をうたがったほうがよい。
>>600の主張はどこに行った?
> ??? 末尾再帰の場合はスタック上のリターンアドレスは、深さに比例して増えたりしないんだぞ?
それが何か?
この文章:
> > の場合は、xがスタックに置かれるから stack overflow の可能性はあるけど、
> ??? 関数のリターンアドレスがスタックにつまれるんだぞ?
が、「xがスタックに置かれるから」云々という意味不明の文章について言及していることが
わからないほど、国語力がないのか?
> > # 最初から [] にマッチする場合を除く。
> これをコメントアウトするのは非常にずるいと思う。
「sum [1..n] 0のnが大きい場合にオーバーフローする」
ことを証明するのに[1..n] == []の場合を考える必要は無い。
あなたが>>570なら、以後名前のところにそれを明記してくれ。
二度と返信しない。
0608デフォルトの名無しさん
NGNG0609デフォルトの名無しさん
NGNG0610デフォルトの名無しさん
NGNG「末尾再帰の最適化をするか?」とかは、実装依存の話だよね。
環境依存の話を環境を限定せずに議論するってのはどうなの?
こうゆうのを遅延評価って言うのか(^^)
0611デフォルトの名無しさん
NGNG0612570=606
NGNGなんかすげー近くにいる人間な気がする。気のせいかな。
僕の国語力がないのは自分でも知ってる。
うまく落ちもついたので、かなり満足しました。
0613デフォルトの名無しさん
NGNG> 「再帰の際の環境をスタックに保存するか、ヒープに保存するか?」とか
意味がよくわからないけれど、
末尾再帰でなくてもスタックオーバーフローしない処理系がある
といっているの?もしそうなら教えて欲しい。
> 「末尾再帰の最適化をするか?」とかは、実装依存の話だよね。
違う。Lazyであれば外側から評価されるから勝手に
いわゆる末尾再帰の最適化がされた状態になる。
0614570
NGNGやっぱり言ってることがおかしい気がするんだけど、僕だけなのか?
610が「末尾再帰でなくてもスタックオーバーフローしない処理系がある」と言ってるとは
思えないし、「外側から評価されると末尾再帰の最適化がされた状態になる」
ってのも全然理解できん。
国語力が足りんのかも。
0615デフォルトの名無しさん
NGNG> 失礼ですが、tailcallをよくわかってない気がする。
ここで最初に喧嘩売ってるな
あと,返信の際に誤解していると取れる文章も >>570 側に多く見られる
国語力というか,読解力と論理感が少し足りない感じ
ただ,Haskellerの方もその後罵詈雑言が増えて,いけてない
0616デフォルトの名無しさん
NGNG2行目は間違いだが、これは少し微妙だな。
> 「再帰の際の環境をスタックに保存するか、ヒープに保存するか?」とか
1) 再帰の際の環境とは何?
2) 「ヒープに保存する」ものは結局スタックであって、そのヒープ上の
スタックが大きくなりすぎたときに起こるのはスタックオーバーフローというべきもなんじゃないか?
3) 末尾再帰でなくてもスタックオーバーフローが起こらない処理系なんてものが
存在しないとすれば、実装依存云々というのは、意味のある議論だとは思えない。
0617デフォルトの名無しさん
NGNG> > 「再帰の際の環境をスタックに保存するか、ヒープに保存するか?」とか
> 意味がよくわからないけれど、
> 末尾再帰でなくてもスタックオーバーフローしない処理系がある
> といっているの?もしそうなら教えて欲しい。
> > の場合は、xがスタックに置かれるから stack overflow の可能性はあるけど、
> ??? 関数のリターンアドレスがスタックにつまれるんだぞ?
ここの事を言ってるんじゃないのか?
この x は環境の一部だと思うけど,環境がスタックに積まれないという前提で話している感じ
なんかHaskellerの方も国語力がないような気がしてきた
相手に行間を読ませることを強要したり,相手の言葉を深読みし過ぎたり
0618570
NGNGその中には lazyでない言語でいうところの stackに置かれる情報も入っているから、
言葉の使い方が、ややこしくなっているんじゃないかと思えてきた。
Haskellerさんのいうstack overflowは eagerな言語の stack overflowとは、
ちょっと性質が違うのかな?
0619デフォルトの名無しさん
NGNG> 1) 再帰の際の環境とは何?
静的スコープによる変数のバインドやリターンアドレス(あるいは継続?)のことでは?
> 2) 「ヒープに保存する」ものは結局スタックであって、そのヒープ上の
> スタックが大きくなりすぎたときに起こるのはスタックオーバーフローというべきもなんじゃないか?
> 「ヒープに保存する」ものは結局スタック
この前提がおかしい
例えば,線形リストで実装すれば割り当てられるメモリの限界まで取れる
その超過はスタックオーバーフローとは言わないだろう
0620デフォルトの名無しさん
NGNG呼び出しにコストが掛からない、「何も保存したりしない」のが前提だよ。
スタックの代わりにヒープや環境が延びたりするなら
それは末尾の最適化には当てはまらない。
保存場所が変わっただけ。
0621デフォルトの名無しさん
NGNGすまん。自分の間違いを認めない態度と、理解力の無さ(とおれには映った)に苛立ってしまった。
>>617
> この x は環境の一部だと思うけど,環境がスタックに積まれないという前提で話している感じ
うーむ。やっぱりこの意味がわからない。
> なんかHaskellerの方も国語力がないような気がしてきた
国語力ではなくて、多分知識が間違っているのだろう。
「環境をスタックにつむ」ということの意味がわからない。
たとえばMLでは再帰の際に「環境」をつむの?
0622570
NGNG環境がつまれている ということでしょう。
0623デフォルトの名無しさん
NGNG「環境をスタックに積む」ってのは
・アセンブラで言うcall命令ステップで起こるIP(PC)と、
・レキシカルに見える変数への参照の
2つを保存の事だと思うけど。
これが必要な場合は末尾呼び出しとは言わない。
0624620=623
NGNG0625デフォルトの名無しさん
NGNG> その超過はスタックオーバーフローとは言わないだろう
賛成できない。
いかなる方法(ヒープ上の線型リスト?)でスタックを実装したとしても、
処理系が出すべきメッセージはスタックオーバーフローだ。
# これは考え方の違いか。
# そのヒープ上の線型リストがスタックを実装したものでないなら 3)へ。
>>620
>>613の二段落目へのレス?
あれは本当に末尾再帰と同じ様に何のスペースも消費しないといってる。
# ちょっと説明を考えるので待ってくれ。
0626デフォルトの名無しさん
NGNG環境=ローカルな変数(あるいはバインド)とリターンアドレス(あるいは継続)をまとめたもの
と仮定するなら,環境をスタックに積む実装は,
「関数を呼び出す→関数内→関数から戻る」という概念を持った殆どの言語に見られるんじゃないかな
上の概念を「関数へジャンプ→関数内→関数からジャンプ」と考えるSchemeのような言語の場合は分からんが
0628570
NGNG関数へjumpっていうのは アセンブラかベーシックぐらいじゃない?
0629デフォルトの名無しさん
NGNG> > その超過はスタックオーバーフローとは言わないだろう
> 賛成できない。
> いかなる方法(ヒープ上の線型リスト?)でスタックを実装したとしても、
> 処理系が出すべきメッセージはスタックオーバーフローだ。
その超過ってのは
> 割り当てられるメモリの限界まで取れる
でいう「限界」を超過することを言ったつもり
線形リストで実装する場合,スタックによる実装のような
「最初に確保した領域を超過」
なんてことは考えないと思う
0630デフォルトの名無しさん
NGNG今回の話は
末尾再帰(というか末尾呼び出し)が最適化できない場合にどこに環境を保存するか(スタック?ヒープ?)
ということ
0631デフォルトの名無しさん
NGNGSchemeでは継続引き渡しスタイルという概念になる
0633570
NGNGメモリの区切りを ヒープとスタックと呼んで使ってました。
だから、やっぱり (n + ... (2 + (1 + 0))) が肥大化するのは
ヒープが溢れる気がするなぁ。 今更だけど。
0635デフォルトの名無しさん
NGNG保存も発生しないし、末尾の最適化も必要ないってことだと思うけど
0636デフォルトの名無しさん
NGNG話をややこしくするなよ
>>634
>実装依存だと思う。
何の話だ?
もっと勉強してこい
0637デフォルトの名無しさん
NGNGなるほど。分かりました。
引数の無い関数でもスタックはつまれるので、
xこそがスタックが増える原因であるかのような記述は納得できないが、
xも原因の一部であるような実装は普通なので、>>600も嘘ではないわけだね。
# Haskellの実装は知りません。
>>629
わかってる。しかしスタックオーバーフローというのは
プログラマにとって(プログラムの設計に関わる)重要な情報だから、
実装は通常スタックオーバーフローとなるようなものに
対して謎の実装依存のメッセージを与えるべきではない。
というのが趣旨。
>>633
ヒープが溢れないとは書いてない。
>>635
Exactly.
0638デフォルトの名無しさん
NGNGヒープがなくなればスタックオーバー風呂と同じことだからね。
末尾呼び出しってのは、これが永久に動作するってことだよ。
((lambda (x) (x x)) (lambda(x)(x x)))
0639デフォルトの名無しさん
NGNG> 話をややこしくするなよ
一応570をSchemerだと見なして発言してみた
>>637
> わかってる。しかしスタックオーバーフローというのは
> プログラマにとって(プログラムの設計に関わる)重要な情報だから、
> 実装は通常スタックオーバーフローとなるようなものに
> 対して謎の実装依存のメッセージを与えるべきではない。
> というのが趣旨。
ヒープの場合は「メモリ不足」では駄目なの?
0640570
NGNGCPSは Schemeを実装するときに Call/CCを実現しやすくするために
採用する中間形式であって、すべての実装がそのスタイルで実装するわけではない。
と言いたかった。国語力がなくてごめんよ。
0642デフォルトの名無しさん
NGNGハッキリしろや(゚Д゚)ゴルァ
0643デフォルトの名無しさん
NGNG岡村スレだっつってんだろ(゚Д゚)ゴルァ
0644デフォルトの名無しさん
NGNG(define (fib n)
(if (< n 2) n
(+ (fib (- n 1))
(fib (- n 2)))))
こういうのを
(define (fib n)
(let inner ((n n)(k identity))
(if (< n 2) (k n)
(inner (- n 1) (lambda(l)
(inner (- n 2) (lambda(r)
(k (+ l r)))))))))
こういう形式(CPS)に書きかえるって事でよいか?
でもこれは、どのみち(< n 2)になるまでクロージャが連なって状態が
増えてくただの問題のたらい回しなわけだから、
先のHaskellの
sum (x:xs) = x + sum xs
はsumに無限の値が入った場合はヒープが枯渇して死ぬ
可能性があるってことだよな?
0646デフォルトの名無しさん
NGNGは?
じゃあどんなのがCPSなの?
0647デフォルトの名無しさん
NGNGLazyだと末尾再帰を特別に扱う必要がないことの説明。
あまり巧い説明でないかもしれない…
例:
f 0 s = s
f x s = f (x-1) (s + x)
---
f x sを計算するのに、
Strictな言語は、
f 3 0
-> f 2 3
-> f 1 5
-> f 0 6
-> 6: f 0 6の返り値
-> 6: f 1 5 の返り値
-> 6: f 2 3 の返り値
-> 6
とネストするからナイーブにはスタックがいり、
末尾再帰の最適化が必要になる。
Lazy だと、
f 3 0
-> f (3 - 1) (3 + 0) -- これをまずは返す。
-> f 2 (3 + 0) -- パターンマッチ(0との比較)で (3 - 1)が評価される。
-> f (2 - 1) (2 + (3 + 0))
-> f 1 (3 + 0)
..
-> (1 + (2 + (3 + 0))
-> 6
と評価されるから最適化はいらない。
0648デフォルトの名無しさん
NGNGsum (x:xs) = x + sum xs
はどうなるの?
0649570
NGNG(let ((cont (lambda (a)
(let ((cont2 (lambda (a2)
(+ a a2))))
(fib cont2 (- n 2))))))
(if (< n 2) n
(fib cont (- n 1))))
こうかな? 合ってるかな?
関数が継続を引数にとるようになって、全ての関数呼出はtail callになる。
0650570
NGNG0651570
NGNG勝手に仮定してる。
0652デフォルトの名無しさん
NGNG>>571はスタックをアルゴリズム的な意味として指してたが、
それを>>570は実装側の話に固着して話を進めて場を混乱させた。
0653デフォルトの名無しさん
NGNGオレには難しすぎてよう分からん ・゚・(ノД`)・゚・
勉強しよ…
0654デフォルトの名無しさん
NGNG結局>>644と同じことじゃねーかよボケ
0655デフォルトの名無しさん
NGNG普通。
sum [1, 2, 3, 4]
-> 1 + sum [2, 3, 4]
-> 2 + sum [3, 4]
-> 3 + sum [4]
-> 4
-> 3 + 4
-> 2 + 7
-> 1 + 9
-> 10
0656デフォルトの名無しさん
NGNGつーかそれ動かねえよ
0657デフォルトの名無しさん
NGNGよくわかった。
つまりそっちはsumに渡す数が大きすぎると死ぬってことだな。
0658デフォルトの名無しさん
NGNGそう。普通にスタックオーバーフローする。
そして、tail recursiveにしてもaccumulatorがlazyなままだと、
>>571に書いたように実は…ということ。
0659デフォルトの名無しさん
NGNG570はもうちょっと考えて発言すれ。
0660デフォルトの名無しさん
NGNG>>652
> >>571はスタックをアルゴリズム的な意味として指してたが、
> それを>>570は実装側の話に固着して話を進めて場を混乱させた。
これは逆だろ.
>>570はヒープ上に計算すべき式が構成されていく(accumlatorのことね)
のも概念的なスタックの伸長とみなしていたけど,>>571は
処理系の実装がスタック領域を使用しているかどうかを基準にしていた
と思う.
0661571他
NGNG>>570のことは知らないが(とはいえ>>652の理解が正しそうに思う)、
> 処理系の実装がスタック領域を使用しているかどうかを基準にしていた
これは違う。
> >>571はスタックをアルゴリズム的な意味として指してたが、
これが正しい。
# >>647でも関連することを書いた
0662デフォルトの名無しさん
NGNG0664662
NGNG関数型プログラミング言語Haskell Part3
http://pc2.2ch.net/test/read.cgi/tech/1076418993/
0665デフォルトの名無しさん
NGNG激しくお疲れ。
おまいら(・∀・)カエレ!!
0666デフォルトの名無しさん
NGNGえ? どうやって?
0667デフォルトの名無しさん
NGNGどういったタイミングで付ければよいんですか?
0668デフォルトの名無しさん
NGNG0669デフォルトの名無しさん
NGNG文法がよくわからないという意味ですよ
0670デフォルトの名無しさん
NGNGお見事なお点前でした。
0671デフォルトの名無しさん
NGNGワロタ
アレは、テキトーで良いみたい。
ぶっちゃけ付けなくても可。
しかし可読性は上がる。
0672デフォルトの名無しさん
NGNG0673デフォルトの名無しさん
NGNG------------------------------
let double x = x + x
let _ = print_int (double 1)
------------------------------
これだと ;; なしでも double の定義と print_int の境目ははっきりしている。
でも、次のはダメだな。
------------------------------
let double x = x + x
print_int (double 1)
------------------------------
let double x = (x + x print_int (double 1)) としてパースされるからな。
------------------------------
let double x = x + x;;
print_int (double 1)
------------------------------
こういう時に ;; を書く。それ以外の時に書いても良いけど、
好みの問題やね。
0674デフォルトの名無しさん
NGNG0675デフォルトの名無しさん
NGNGyieldがlambdaで書けるってあるけど,どうやるの?
0676デフォルトの名無しさん
NGNG普通に lambda を関数に渡してコールバックするだけだが。
0677デフォルトの名無しさん
NGNG0678デフォルトの名無しさん
NGNGもしできるとしたらこんな感じ?
let generator = fun () ->
begin
yield 0;
yield 1;
end
let _ =
begin
print_int generator ();
print_int generator ();
end
関数型言語でこれができるのは邪道だろうけど.
0679デフォルトの名無しさん
NGNGすまん Scheme の lambda のつもりで言ってた
0680デフォルトの名無しさん
NGNGMonadicにやればできそうに見える。MLでどこまで出来るか知らんけど。。。
0681デフォルトの名無しさん
NGNGちなみにOCamlにはないみたい.
0682デフォルトの名無しさん
NGNG書けるな….
0683デフォルトの名無しさん
NGNGこのスレでも、「APLは関数型言語でない」という認識でイイつか?
(http://pc2.2ch.net/test/read.cgi/tech/1037527388/565-575 あたり参照)
0684デフォルトの名無しさん
NGNG0685デフォルトの名無しさん
NGNG0686デフォルトの名無しさん
NGNGなんか ocaml のメーリングリストに出てきたので、Jacques Garrigue 氏の
Code reuse through polymorphic variants を読んでみた。
http://wwwfun.kurims.kyoto-u.ac.jp/~garrigue/papers/
普通の和を取るよりも、多相バリアントを使ったほうが、coalesced sum(合体
和? 何て訳すんだろう?)が使えて便利だとの事。
要するに、通常だと
type var = string
type lambda = VarL of var | Abs of string ...
type expr = VarE of var | Num of int ...
のように、ある基本となる型 var を別の型 lambda と expr で共有するよう
な場合に、多相バリアントで定義しておけば、
type lambda = [`Var of string | `Abs of string ...
type expr = [`Var of string | `Num of int ....
`Var of string の扱いが lambda と expr に多相化されるから便利な時があ
る。
...という認識で良い?
0687デフォルトの名無しさん
NGNG手元の本(『プログラム意味論』)だと,合体直和というのは半順序集合の話で,2つの半順序集合があるときに,両者から最小元を抜いた集合の直和と最小元の直和で定義されるもの?かな.
もっとも,ガリク氏の説明では単純に,
type typ1 = Int of int | Char of char;;
type typ2 = String of string | Float of float;;
とかあるときに,
type typ3 = Int of int | Char of char | String of string | Float of float;;
と扱うのを合体直和と呼んでるっぽい気がする.
普通の直和では,
type typ4 = Typ1 of typ1 | Typ2 of typ2
とするか,もしくは論文のように Int1 と Int3 で使いわけなきゃいけないけれど,合体直和の方がいろいろと便利でしょう,ということでしょう.
0688デフォルトの名無しさん
NGNG> coalesced sum は合体直和.型の sum もたぶん,直和と訳すべきなんじゃないかな.
合体直和ですか。なるほど。
> 普通の直和では,
> type typ4 = Typ1 of typ1 | Typ2 of typ2
> とするか,もしくは論文のように Int1 と Int3 で使いわけなきゃいけないけれど,合体直和の方がいろいろと便利でしょう,ということでしょう.
論文の例でも分るけど、基本型の扱いが統一されたり、型を特定するためのコ
ンストラクタの列挙が減ったり、便利な場面はありそうです。
でも、他人が(自分の書いた)コードを読む時に、型の宣言を見比べないと「共
有してる」事が分らないので、可読性が落ちそう。
まぁ、その旨ちゃんとコメントに書くとか対策すればいいのか。
0689デフォルトの名無しさん
NGNG| (`int u, `int v) -> `int(u + v)
| (`int u, `float v) -> `float(float_of_int u +. v)
| (`float u, `int v) -> `float(u +. float_of_int v)
| (`float u, `float v) -> `float(u +. v)
とか書いて
let n = `int 0 + `int 1;;
と使った場合,どの程度最適化されることを期待していいんだろうか.
let n = 0 + 1;;
と同じコードになれば一番嬉しいけど….
0690デフォルトの名無しさん
NGNG詳しくはないんだけど,同じコードで特定の部分を,
let n = add (`int 0) (`int 1);;
なやつと
let n = `int(0+1);;
なやつをコンパイルしてみると結果が異なる(サイズも違う)ので,そういう最
適化はしていないんじゃないかな.
ちなみに 0 + 1 と (+) 0 1 は全く同じコードを吐くみたいだけど,
let add = (+);;
したあとの add 1 2 は違うコード吐くみたい.ちゃんと関数つくって呼んで
しまうので,微妙に効率が悪くなってるっぽい感じ? 部分適用も違うコード
を吐いているね.
0691デフォルトの名無しさん
NGNG0692デフォルトの名無しさん
NGNG0693デフォルトの名無しさん
NGNGうーん.add 1 2すら違うコードを吐くのは意外だな.
OCamlを使う大きな理由の1つが,関数型言語ながらC並の速度が出ること
なんで,どの程度最適化されるかは気になるんだよね.
0694デフォルトの名無しさん
NGNGありまつか?
0695デフォルトの名無しさん
NGNGと、レスするのがム板のしきたり。
0696デフォルトの名無しさん
NGNGocamlc ではなく、ocamlopt での話だよね?
コードの違いってのは、add の関数のコードを出力してるからでは?
呼び出しはインライン展開されていると思うが。
>>689 はちょっと無理みたいだね。
ざっと眺めたところでは、関数自体は (-inline を高めに設定すれば) 展開されるけど、
パタンマッチの部分が残ってしまってるのかな。
0697デフォルトの名無しさん
NGNGocamlp4r
ttp://www.din.or.jp/~mukai/camlp4tut.html
0698デフォルトの名無しさん
NGNGそういう問題じゃないだろう・・・・・
という気がするっ!
0699デフォルトの名無しさん
NGNG0700デフォルトの名無しさん
NGNG-inlineなんてオプションがあるんだね…
undocumentedなのにナゼにご存知で?
>>697
この改定版構文使ってる人いる?
0701デフォルトの名無しさん
NGNGはい! 改訂版構文使って...ません。
使うべき?
0702デフォルトの名無しさん
NGNGかいった制約がちょっと萎える. [ x; y; z :: t ] とか.
ただ, OCaml が見づらいのってカッコが妙に増えるあたりにある気がするの
でそれを防ぐ意味合いはあるかもしれない……けどあんまり使う気になれない.
0703690
NGNGいや ocamlc の話でした. add とか関数のコードは全部共有して,実際の計
算の部分だけをすげかえた結果です.
ちなみに関数名を変えてもサイズは変わりませんでした(むろんコードの中身
は変わりますが).
-inline なんてオプションは初耳. -help を精読された方ですか?
ocamlc の方には -inline はないんですね…….
0704デフォルトの名無しさん
NGNG最初はリストを括弧で括るのも悪くないかな,と思ったけど,
let f = fun [ [x::y] -> ... ]
…やっぱり悪いかも.
0705デフォルトの名無しさん
NGNG大堀先生の講義スライドキター!(※英語)
「JAISTからのみアクセス可」とか言ってるけど激しくアクセスできた。
内容はのっけから布教精神全開。流石ですね。
0706デフォルトの名無しさん
NGNG0707デフォルトの名無しさん
NGNG馬鹿げた習慣はなくならないものか。
本来
int fact(int n) {
if (n == 0) return 1;
else return n * fact(n - 1);
}
と比べるものだ。
このおかしな例のせいで、関数型言語のプログラミングがこういう
非効率なものだと思うようになった人の例をいくつもみたことがある。
まともな関数型言語のプログラマーはfactは必ず末尾再帰にするのだし、
一般的な手続き型言語でも定義の直訳は簡単にできる…
0708デフォルトの名無しさん
NGNG漏れはfor文をつかいまつが?
再帰なんて仕方ない場合じゃないととても使えません
cとかJavaとかでわね
0709デフォルトの名無しさん
NGNGスライド10ページだろ?確かにあの比較はおかしいな。
効率化のために工夫した実装と比較してMLの方がシンプルだと言われてもな。
まあ確かにfactは字面的にはMLの方がシンプルだと思うが、
だったら例えば行列積の計算をCとMLで書いてみろって話。
0710デフォルトの名無しさん
NGNGfact(n) = Π i
i=1
0711デフォルトの名無しさん
NGNGそうだね。Cで>>707の再帰の代わりにforを使うのと同じように、
関数型言語プログラマーは末尾再帰を使うんだよ。
あんな実装はしないんです。
0712デフォルトの名無しさん
NGNGコンパイル関係のパラメタの設定のしかたとかもふくめた、
日本語のアツい本((E)かんじのやつ)
がでればもっとひろまるよ。
0713デフォルトの名無しさん
NGNGMLはよく知らんのだが、自動的に末尾再帰に変換してくれないの?
0714デフォルトの名無しさん
NGNGどの言語だと変換してくれるの?
0715デフォルトの名無しさん
NGNG(゚Д゚)
0716713
NGNGどの言語というか、処理系の最適化の話。
末尾再帰でない形のプログラムを末尾再帰に変換するアルゴリズムはかなり昔
から知られてるから、関数型言語ならそれくらいはじめから実装されてないの
かな?と思ったのだ。
0717デフォルトの名無しさん
NGNGCPS変換のことを言ってるのですか?
0718デフォルトの名無しさん
NGNG0719デフォルトの名無しさん
NGNG実際にこの最後のステップを実行できるコンパイラってあるの?
0720713
NGNGCPS変換では、スタックの消費がヒープの消費に代わるだけでは?
こことか
ttp://www.owlnet.rice.edu/~comp210/96spring/Labs/lab09.html#SECTION00030000000000000000
ここに書かれてる。
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/index-old.html#rec2tailrec
0721717
NGNG0722デフォルトの名無しさん
NGNG下の方の日本語の読みました。
後半(同じ順序で計算する)は、まさにCPS変換ですよね。
問題は前半の変換。
この方法で任意の関数を末尾再帰に変換できるわけではない。
さらに、この方法で変換できる関数かどうかを機械的には判断できない。
なので人間が手作業で変換するときの指針としてはともかく、
コンパイラのアルゴリズムとしては成立しないと思うのですが。
0723デフォルトの名無しさん
NGNG末尾再帰に変換できるかどうかというのは、
CPS変換したときにcontinuationが(lambda (x) x)になるかどうか、ということの判定問題では?
0724デフォルトの名無しさん
NGNG0725デフォルトの名無しさん
NGNGwiki.ocaml.jp はマシントラブルがあったみたいですよ。
Wiki のデータは消えたのかも…
0727デフォルトの名無しさん
NGNGこんなの勉強する気になれん
0728デフォルトの名無しさん
NGNG|
|
|
/V\ J
/◎;;;,;,,,,ヽ
_ ム::::(;;゚Д゚)::| ジー
ヽツ.(ノ::::::::::.:::::.:..|)
ヾソ:::::::::::::::::.:ノ
` ー U'"U'
0729デフォルトの名無しさん
NGNGperlとかshで泥臭い仕事やってると憧れはするのだが。
0730デフォルトの名無しさん
NGNG先輩の話だと担当の教授は何もアイディアくれないらしいので・・・・
ネタさえあれば自分で考えて努力できると思うので何かあったら
教えてください。
0731デフォルトの名無しさん
NGNGメーリングリストとMLの関係とか?
0732デフォルトの名無しさん
NGNG0733デフォルトの名無しさん
NGNG2年ぶりocaml復活なるかな。
http://www.cis.upenn.edu/proj/plclub/contest/
今年はアリがテーマかな?
また今回もプログラム提出ではなく結果提出のようですが、
どうなることやら。
0734デフォルトの名無しさん
NGNGMachine Learning に出てきそーなテーマでつね。
0735デフォルトの名無しさん
NGNGICFPスレってあるのかな?
0736デフォルトの名無しさん
NGNGおっつけねぇよ(鬱
0737デフォルトの名無しさん
NGNG0738デフォルトの名無しさん
NGNG0739デフォルトの名無しさん
NGNGX と D が頑張っているね。
ところで、この cvs って anonymous でアクセスできないと思うんですが、
あなたは一体、、、
0740デフォルトの名無しさん
NGNG0741デフォルトの名無しさん
NGNGhttp://mitou.mysite.ddo.jp/modules/eguide/event.php?eid=11
未踏ソフトウェアの10番目にある住井氏の「美しい日本のMLコンパイラ」でしょうか?
どんなものか気になります。
0742デフォルトの名無しさん
NGNG嫌な予感
0743デフォルトの名無しさん
NGNG0744デフォルトの名無しさん
NGNG『日本の美と私』(Japan the Beautiful and Myself)と翻訳したが、
これは日本人の伝統的な感情の上からはとんでもない誤訳である。
実のところ、川端は最初につけた「日本の美と私」という標題を抹消した。
それは外国人が間違って受け取ることを恐れたからである。
そして、「美しい日本の私」に変えた。
「自分は日本文化と共に存在する」と川端は言いたかったのだ。
ノーベル賞は自分に与えられたのだとは思わない。これは、
日本人の中に生きている美の精神に対して与えられたものなのだ。
その美は祖先から伝わったものであり、決して現代化ないしは
アメリカ化するものではなく、かならず、独自性を保っていく
ものなのだ。つまり私は、「美しい日本」と呼ばれるところの
民族文化に対して責任を負わなければならず、これについて
これからお話をしよう。これが標題の意味なのであって、
アメリカ人翻訳者の考えとは対立するものであった。別の文化や
心理の伝統をうけついで来たアメリカ人は、単に「日本の
美<この美は一般的な美である。>と私」として理解できたと
思ったのである。これはまさしくアメリカ的な理解である。
http://www.google.co.jp/search?q=cache:gK3mPoep3TAJ:www.ritsumei.ac.jp/ujc/gallery/sotsuron2001/files/8.pdf+Japan+the+beautiful+%E5%B7%9D%E7%AB%AF&hl=ja
0745デフォルトの名無しさん
NGNG予感的中おめ.
0746デフォルトの名無しさん
NGNGThis expression has type [ `TypeA] but is here used with type
[ `TypeA | `TypeB]
The first variant type does not allow tag(s) `TypeB
f(x)の型は[`TypeA | `TypeB] -> intとなって欲しいんだけど….
0747デフォルトの名無しさん
NGNG0748デフォルトの名無しさん
NGNG素早いレスthx.
ただ,それだとyの型も[`A | `B]になってしまうので,
例えば g : [`A] -> int があったとき,
fun f (x: [> `A | `B]) (y: [> `A]) -> f x + f y + g y;;
は通らなくなるよね?
これを回避したい…というか,
fun f (x: [`A | `B]) (y: [`A]) -> f x + f y;;
のときに, f: [`A | `B] -> int と推論されない理由がいまいち判らない.
0749デフォルトの名無しさん
NGNGてしまう気がする。したがって、 g y が正しく型付けできないみたい。
fun f (x:[< `A | `B]) y -> f x + f y;;
- : (([< `A | `B] as 'a) -> int) -> 'a -> 'a -> int = <fun>
というのは、できる。
この場合、 x に `B が来なければ、 f が [ `A ] -> int でも問題ない。
0750デフォルトの名無しさん
NGNGfun f (x: [`A | `B]) (y: [`A]) -> match x, y with
`A, `A -> f `A + f `A
| `B, `A -> f `B + f `A ;;
0751デフォルトの名無しさん
NGNG0752デフォルトの名無しさん
NGNG0753デフォルトの名無しさん
NGNGcoerce ができることに気付いた。
# fun f (x:[`A | `B]) (y:[`A]) -> f x + f (y:>[`A | `B]);;
- : ([ `A | `B ] -> int) -> [ `A | `B ] -> [ `A ] -> int = <fun>
>>750 の方法でも回避できるけれど、 x や y のコンストラクタの種類が
もっと増えると泣きたいくらいパターンの数が多くなるのが難点かも。
>>751-752
ワロタ
0754デフォルトの名無しさん
NGNGここら辺が強力で静的な言語があればとても魅力的なのですけど。
0755デフォルトの名無しさん
NGNGtemplate -> functor + parameter polymorphism でかなり代用可能
0756デフォルトの名無しさん
NGNGtemplate については、 755 の言う通り functor や parameter polymorphism
で代用できる場面が多い気はする。
代用というか、言語自体に同程度の強力さがあると思うんだけど、別に
template というかたちでまとまってない。何かやりたいことがあれば OCaml
でどう書くかってのは示せると思う。
camlp4 はマクロ機能にしては充実しすぎているので面倒な気はするけれど……。
まじめなマクロや ifdef はちょっと面倒。
0757デフォルトの名無しさん
NGNGコンパイル時に数値計算をして、その数だけ if文を書くといったようなことがやりたいです。
C++の templateでも頑張ればできるんですけど、コンパイルに時間がかかって数百程度の配列
すら扱えなかったりと実用的ではないです。
Lispはインタプリタというイメージがあって遅いんじゃないかなあと。
camlp4はなんか難しそうですけど地道に調べてみます。
とりあえず Cで書いて、マクロを Perlかなんかで生成するという方向で考えてます。
0758デフォルトの名無しさん
NGNG>Lispはインタプリタというイメージがあって遅いんじゃないかなあと。
一応突っ込んでおくが、メジャーな処理系は殆どコンパイラを備えているよ。
静的な言語が良いって話だから Lisp は候補外だと思うけど。
0759デフォルトの名無しさん
NGNG静的、というか速ければなんでもいいんですけど静的と動的の違いってなんなんでしょうか。
コンパイルされる lispとスマートポインタ、関数templateを使うC++の違いは関数が作られる(?)
のが実行時かコンパイル時かってことですか?
やっぱりlispは遅そうな気がするんですけど実行時の負担が少ないようなプログラムを書いてやれば
Cなみに速くなるんでしょうか?
速度を保ったまま抽象度を増すのにマクロや templateが使えると思うんですがマクロ目当てでlisp
を使うのはちょっとやりすぎかなあという気がします。
えっとMLに関係なくてすみません。
0760デフォルトの名無しさん
NGNGLispでは、関数というよりソースコードそのものがS式(リスト)として実行時に作れ、
evalやcompileができるという意味で動的?
まあ、>>758がおっしゃってるのは型が動的か静的かということだと思うけれど。
ちょっと方向性が違うかもしれないが、
http://www.metaocaml.org/
言ってみればLispのquasi-quote。
コンパイル時計算というよりは、動的コード生成の範疇のものだけど、
>>757を聞く限り部分計算っぽいことをしたいようですので。
Haskell(GHC)なら、Template Haskellっていうのがあるが。
0761デフォルトの名無しさん
NGNGいろいろ調べてみたんですが、動的にコードを生成するのを"generative programming"といって
コンパイル時に数値計算をするのを"partial evaluation"というらしいですね。
Lispでいうと前者がマクロで後者が quasi-quoteに当たると思われます("partial evaluation"
にはもうちょっと広い意味があるみたいですけど)。
後者はC++でも実現できるのですが(効率は別として)、前者はちょっと難しいです。
というか Lisp以外でこれができる言語ってあるんでしょうか。
まあ再利用性とか無視して適当なスクリプト言語でコード生成してやってもいいんですけどね。
0762デフォルトの名無しさん
NGNG> いろいろ調べてみたんですが、動的にコードを生成するのを"generative programming"といって
「動的」というのは違う。generative programmingの代表例は
C++のテンプレート(参考:Modern C++ Design)で、むしろ、
コンパイル時にコードを生成する事を指していることのほうが多い。
> というか Lisp以外でこれができる言語ってあるんでしょうか。
Template Haskellは、コードの構文木にコンパイル時にアクセスできる。
したがって、partial evaluationのみならず、Lisp的なマクロとしても使える。
GHC(Glasgow Haskell Compiler)に実装されている。
0763デフォルトの名無しさん
NGNG「動的」というのは違いましたね。コードを生成するのはコンパイル時でいいのですが、
コンパイル時に与える整数を変えると生成されるコードが変わるとか、単純な繰り返しを避けるとか
そういったプリプロセッサが欲しいです。
C++のtemplateはクラスや関数を作ることしかできませんし、引数も型か整数しか与えられませんし、
繰り返しも再帰で表現するのでinline展開がされなかったらパフォーマンスが酷いことになりそうです。
どちらかというとCのマクロの方が近いのですが単純なテキスト置換でメタ的な場合分けができないので
だめです。でも boost::preprocessorとかいうのもあるので、もしかしたらできるのかも。
> Template Haskellは、コードの構文木にコンパイル時にアクセスできる。
なんか面白そうですね。Template Haskellどころか普通の Haskellもよく知らないんですが、
遅延評価の言語で実行速度は遅いですよね? コンパイルされる言語は速い言語がよいので、
そのプリプロセッサ(もしかしたらパースした後?)だけが欲しいんですよね。
かなりスレ違いなので無視していただいて構いません。すでに教えてもらったことがいっぱいあるので
とりあえず消化します。ありがとうございました。
0764デフォルトの名無しさん
NGNGLisp スレに来てお題だしてくれたら、適当に Lisp コード書いてやるぞ。
Lisp スレ最近話題ないし。
0765デフォルトの名無しさん
NGNGそこで camlp4 ですよ。 camlp4 では、利用するパーサによって camlp4 に与
えることのできるオプションを追加することもできる。
かなり柔軟な構文の変更ができるから、コード生成時に与える引数によってコー
ドを変えるようなこともけっこうできるよ。
それから、 Haskell も GHC を使ってコンパイルすれば、異常に遅いというこ
とはないよ。速くはないが、よっぽどシビアな用途じゃなけりゃ気にならない
くらいだと思う(コンパイルには時間かかるけどね)。
もっとも、そんなシビアな用途じゃないなら Lisp インタプリタでもよいとい
う話はある。
0766デフォルトの名無しさん
NGNG0767デフォルトの名無しさん
NGNGLisp楽しいですよね。関数型の言語いっぱいありますけど、あのマクロ(とeval)ばっかりは
S式じゃないと実現できませんしね。
>>765
camlp4 でもできるんですか。難しそうなので使えるようになるまで時間かかりそうですけど
地道にがんばります。
>>766
うう、単純に知りませんでした。昔からあるものみたいですね。
どの程度のことまでできるか分かりませんけど、調べてみます。
もう学習キューが溢れそうです。
0768デフォルトの名無しさん
NGNG>> 754
ocaml-templates
http://pauillac.inria.fr/jfla/2004/actes/PS/02-maurel.ps
をがんばって読んでみてね!
0769デフォルトの名無しさん
NGNG0770デフォルトの名無しさん
NGNG0771デフォルトの名無しさん
NGNG>>768のOCaml-templatesに引っ掛かったらしい。
(* 私信: INABAさん尊敬してます。がんばってください。 *)
0772デフォルトの名無しさん
NGNG翻訳文の中に原文をHTMLのコメントとして埋め込んでおけば検索できて便利
スレ違いですまん
0773デフォルトの名無しさん
NGNG0774デフォルトの名無しさん
NGNGinabaさん?
0775デフォルトの名無しさん
NGNG0777デフォルトの名無しさん
NGNG0778デフォルトの名無しさん
NGNGきなば師と一緒にがんばってください
(* 日記読んだらちょいと右寄りっぽいせいで萎え *)
;; どうでもいいがLisperはマクロは使うが効率の観点からevalは使わないぞ...
Templete HaskellとかGOcaml, MetaOcamlとかそのへんは(使ったことはないけど)
型安全なコード生成(メタプログラミング)ができるというのがウリなのでしょう?
型を気にしないメタプログラミング(具象構文木の操作)だったら、
Lispがもう実現しているので学問的興味はない、という具合なんじゃないかな?
ただ↑の言語たちは構文が死ぬ程読み辛いぽ。あれは素でアリエネー
0779デフォルトの名無しさん
NGNG字が違う……
0780デフォルトの名無しさん
NGNG0781デフォルトの名無しさん
NGNG「きなば」ってのも普通に間違えてそうだ….
0782デフォルトの名無しさん
NGNGなに外部ツール使ってんの。
MLがそんなにすごいプログラミング言語なら、MLの記法の中で文法を記述してくれよ。
もちろん見易く。
つまり Boost.Spirit がキモくなくなった感じでだ。
先読みトークンをリファレンスに代入するのヤメレ。
参照透過性も何もあったもんじゃない。ペッ
アルゴリズムの説明の疑似コードも全部MLで書いてくれれば面白かったのに。
もちろん直接動くものでなくていい。
疑似コードと同様に分かり易く書けて、しかも効率よく実行できるってのが
高級言語の目指すところじゃないのか?
ありゃJavaやCに書き直せるのも無理ない本だよ。
MLの「記述力」に感動させてくれるようなコードないか。
「とても他の言語には移植できない」ってくらいMLを使い倒したコードが読みたい。
方言の問題が痛いが、感動したいだけなので何MLでもいい。
バード-ワドラーに載ってるようなリストままごとには飽きた。
0783& ◆R7PNoCmXUc
NGNG大体 ML のすごさは別のところにあるだろう。C++ の Boost が凄いからって
ML で同じ方向で凄いことが出来るわけじゃないし。
大体多重定義出来ないじゃん? GCaml はまだ発展途中だし。
ML のすごさは素直なところであって、変態的(これはこれで褒め言葉)な
ところではない。
0784782
NGNGそれとも人が余りに少ないのか?
>>783
素直なところ、ですか... そういうもんなんでしょうか。
有力な方言OCamlは >>746- みたいな複雑な型システムに向けてがんばってるみたいだけど、
ああいうのって単に理論の実践に過ぎなくて、
「あれがあるからこんなすごいコードが書ける」ってもんじゃないのかな。
素直な言語と言うなら、もう実現済みって気がします
(もちろん >>783 さんの言葉をProject Cristalの代弁者として受け取るわけじゃないけど)。
# なお私はBoostに見られる不自然なメタプログラミングには反対です。
# 演算子オーヴァーロードも。キモい。
0785デフォルトの名無しさん
NGNGあれはまあ、確かに理論の実践でもあり、型安全なので便利だというのもあります。
# polymorphic variant はなんかの双対だったよね? 忘れちゃった。教えてエロい人
0786デフォルトの名無しさん
NGNGそうですか? 素直なだけならそうかもしれませんが、素直でシンプルなのに
強力というのはかなり大変だと思いますが……。ML の強力さは今でも
素晴らしいけれどまだ発展の余地がありそうです。
0787デフォルトの名無しさん
NGNGpolymorphic record ですよ。
let getName x = x.name
と書くと、nameフィールドを持つようなレコードすべてを受け取れるという。
ocamlではオブジェクト型においてのみ使えるようだ。(上のコードは受け付けない)
> let invokeName x = x#name;;
val invokeName : < name : 'a; .. > -> 'a = <fun>
# Boost.Spiritってparser combinatorのパクリだよなぁ。
0788デフォルトの名無しさん
NGNG確かに関数型言語の道具(λ式とか)は便利だけど,
それらの多くは手続き型の言語にも採り入れられてる.
関数型言語の専売特許じゃない.
確かに遅延評価スゲーって時もあるけど,それを可能にするため
mutableなものを排除した代償も大きい.
関数型言語のメリットは,数学的にセグらないことが証明できたりとか
そういうところにあると思う.
…と全く専門外の人が言ってみるテスト.
0789デフォルトの名無しさん
NGNG・わかりにくい書き方でもOK
・コメント書かなくてもOK
・変数・関数名が適当でもOK
な空気
0790デフォルトの名無しさん
NGNG言語はデフォルトでは正格な実装がほとんどだし。さらに mutable な変数も
えらく簡単に作ることができるし。
関数型言語のワリには命令的なところをえらく簡単に書けるのが ML の特徴な
のかも、と最近よく思います。
そういう意味では、破壊的操作があるのがイカン、というのは批判としては
ちょっと安易で、コードの簡潔さに貢献していてわかりやすいかどうかをちゃ
んと見るべきなんじゃないかと思うんですが、どうでしょう。
0791デフォルトの名無しさん
NGNG速度も出るし書きやすくもなると思います。
そういえば、ML マシンってないんでしょうか? Lisp マシンや
Prolog マシンは知っているのですが、ML マシンは聞いたことありません。
0792デフォルトの名無しさん
NGNG好みの問題なので、何がいいとは言えんけど、
http://caml.inria.fr/FAQ/pgl-eng.html
の考え方とはまったく逆のような。
0793デフォルトの名無しさん
NGNGttp://sandbox.merjis.com/
0794デフォルトの名無しさん
NGNG0795デフォルトの名無しさん
NGNGワロタ
0796デフォルトの名無しさん
NGNG名探偵枠
0797デフォルトの名無しさん
NGNG0798デフォルトの名無しさん
NGNG0799デフォルトの名無しさん
NGNGmod_caml 添付の Template が近いかも。
http://www.merjis.com/developers/mod_caml/docs/
0800デフォルトの名無しさん
NGNGちょっと見てみます。
0801デフォルトの名無しさん
NGNG0802デフォルトの名無しさん
NGNG同意
0803デフォルトの名無しさん
NGNGMLやっててこれにはマジぶち切れたという事があればどうぞ
0804デフォルトの名無しさん
NGNG0805803
NGNG(U( )
| |∨T∨
(__)_)
0806プログラマ
NGNG分厚いけど、親切で、読みやすくて、表紙がかっこよくて、
これ一冊読めば、MLプログラマーになれますYOっていうかんじで、かつ安い、
当然日本語の本だせひょ。
はなしはそれからだ。
0807デフォルトの名無しさん
NGNG数値計算用の言語で、MLみたいにチェックしてくれる言語ないですか?
Cもfortranもいらいらするので。
0808デフォルトの名無しさん
NGNGつまりレシピブック/クックブックってこと?
出したくても書ける人材と出してくれる出版社がない気がする。でも、漏れは
ちょっと書いてみたいな(そんなにスキルないけどさ)。
それ以前に、まず使うための入門書がない気がしますが……。
0809デフォルトの名無しさん
NGNGもしくはMLで数値計算できるようにするとか…
どっちでもいいから正直漏れも欲しい ('A`)ノ
0810デフォルトの名無しさん
NGNG出たらたぶん買う。けど、萌えな表紙はやめてくで。
親が心配する。
0811デフォルトの名無しさん
NGNGhttp://mayah.jp/personal/scratch/archives/2004/09/ocaml_book.html
0812デフォルトの名無しさん
NGNG(f arg) って違うの?
ocamllex やっててハマってて、上のようにしたら期待通りに動いたんですが。
http://www.tabee.com/oc/y2.html
↑の、「lexer.mll そにょ2」 の緑色になってるコードの部分の一番下の部分を参考にしました。
やりたかったことは、 "[文字列]" という文字列中の ']' は '\]' で
エスケープされてる文字列の、字句解析です。
0813デフォルトの名無しさん
NGNG>{ (Lexing.lexeme lexbuf) ^ (immstr lexbuf) }
>とかやりたくなるけど、実はこう書いて半日ほどハマりました。
>何かというと、この式ではまず immstr lexbuf の方が評価される。
>=> 結果、Lexing.lexeme lexbuf の評価結果は、
>最後にマッチした文字列 = 閉じの '"' になる。
>=> '"' だけがたくさん並んだ文字列ができる。という具合。
0814デフォルトの名無しさん
NGNG関数の引数は後から前に評価されるんだよね。
0815デフォルトの名無しさん
NGNGsparc だったら前から評価されるかもしれないよ。
C 言語でも sparc 系だと前から評価が普通だけど、
intel なら後ろからが普通でしょ?
0816デフォルトの名無しさん
NGNG0817デフォルトの名無しさん
NGNGなので、そのことを考慮して、関数の引数の評価順序については unspecified と
している言語は C を初めとして多数あるかと思います
で、OCaml も (Reference Manual によれば) unspecified ということですので、
>>814 の様に決め込んで評価順序に依存したコードを書くのは良くないと思います
0818デフォルトの名無しさん
NGNGその点で Java は奇特な言語です。
0819デフォルトの名無しさん
NGNG0820デフォルトの名無しさん
NGNG0821デフォルトの名無しさん
NGNG0822デフォルトの名無しさん
NGNGソース見た限りではsparcでもintelでも同じだったような。
0823デフォルトの名無しさん
NGNG(* test.ml *)
let _ =
let f x y = () in
f (print_int 1) (print_int 2);
print_newline ()
;;
> ocamlc test.ml
> ./a.out
21
> ocamlopt test.ml
> ./a.out
12
はーい、ocamlopt と ocamlc で実行順序が違いマースッ
というわけで、よい子は引数の評価順序に依存しちゃだめー
よいこじゃなくてもだめー
0824デフォルトの名無しさん
NGNGOCaml 3.07 以降なら ocamllex では as を使って変数に束縛できるから、そっ
ちを使った方が直観的かと。
[^'\\' '"']+ as s { s ^ (immstr lexbuf) }
みたいに(部分文字列にも使えるからかなり便利)。
どっちみち関数型言語で引数の呼ぶ順序なんて考慮する方がおかしいよ。
0825デフォルトの名無しさん
NGNG0826816
NGNGf a1 a2 形式と勘違いしてた。
大堀本を投げ捨てちゃって久しいからなあ。逝ってくるYO
0827デフォルトの名無しさん
NGNG「ML って」の ML は SML を指している?
それでも言ってることおかしいけど。
とりあえず逝ってこ
0828デフォルトの名無しさん
NGNG何バグったこと言ってんだ
0829デフォルトの名無しさん
NGNG0830デフォルトの名無しさん
NGNG五十嵐先生のやつ?
上のほうのディレクトリは生きてる。
今年度の講義に向けてreviseしているのでしょう。
0831デフォルトの名無しさん
NGNG私は初日で適当にコンパイラ作って色々やってたけど、肝心のアリが
強いのが出来ずにボロ負け。
今年は OCaml が不調でしたね。Haskell が異常にがんばってます。
0832デフォルトの名無しさん
NGNG( ´・ω・`) 胃�`
0833デフォルトの名無しさん
NGNG0834デフォルトの名無しさん
NGNGHindley-Milner アルゴリズムの実装に興味があるんですが,読み易いオンライン文書知りませんか.
C#とかJavaによる具体的なコードがあるとなおよい.
;; 外国だとPythonなんだろうか?
λ式の構造について再帰しつつ制約式を増やしてゆくことまでは分かったんですがね...
なお情報科学科の学生ではないんで岩波ソフトウェア科学買えとかいうのはナシの方向で.
0835デフォルトの名無しさん
NGNG0836834
NGNGせいぜい ttp://www.ii.uib.no/~bezem/I121/week17.pdf くらい。
余程となったら ttp://www.taplas.org/~kohei/lecture/caml-enshu/ とか
ttp://www.kurims.kyoto-u.ac.jp/~cs/csnyumon/ のソースを読みますがね...
ソースじゃ考えの背景とか分からんし。
あとは解説ゼロのプレゼン資料ばっか。
そもそも始めっからない?
0837デフォルトの名無しさん
NGNGくわしくは ttp://citeseer.ist.psu.edu/cardelli88basic.html
実装も Modula-2で載っている。
あるいは Pizzaのソース。Javaで書いてある。
ttp://citeseer.ist.psu.edu/odersky97pizza.html
0838803
NGNG0839デフォルトの名無しさん
NGNG結局使う人がいないことにはねえ。
少し前Scheme作って仕事で使うの勧めたら嫌がられた。
さぱーり理解できんかったらしい・・・。
おれも説明すんの面倒だったしね。
まあ結果は予想範囲内。
んでさ、今作ってるCではがんばってクロージャ使えますよ。
まあベースは普通のCなんで限定的ですが。
やっぱ速いとそれなりに歓迎されたよ。
CにしたのはDLLとかのライブラリがそのまま流用できるのがいい。
言語よりライブラリ作る方が大変だし。
作る方はライブラリなんか興味ないしね。
MLも括弧が少なくて読みやすい点では評価できるんだけど
いまいちメジャーじゃないってのがモチベーション沸かない原因かな。
ところで型推論の実装難易度はどうなのかね。
単一化自体は自体は簡単そうに見えるけど。
0840デフォルトの名無しさん
NGNG単一化も効率を気にしないなら簡単に実装できる。
クロージャより簡単じゃないかな。
0841デフォルトの名無しさん
NGNG部分型、type class, constructor class, etc を実装するには
もう一工夫いる。
0842834
NGNG型機構に下手にあれこれ盛りこむと完全性だか健全性だか両方だかが
簡単に失われてしまうと聞いたことがあります。
parameterとinclusionを同時ってのはそもそも贅沢な話だよな (w
Pizzaとやらは昨日出たJava2 SE 5.0の新機能の中の人を想像するのに役立ちそう。
効率はそもそも求めてないんでユニフィケイションはテキトーに実装しちゃえば何とかなるぽ。
しばらく休日はこれで楽しめそうだ...
0843デフォルトの名無しさん
NGNGHaskellで書いたので、fresh variable生成のためにmonad使いまくりだった。
Prologで書いたやつも見たことあるなぁ。単一化機構が元から備わっているので
型付け規則を書くと、そのまま型検査・推論プログラムになるってのが面白い。
ttp://www.jaist.ac.jp/~kiyoshiy/writing/
ここも参考になる。
0844デフォルトの名無しさん
NGNG0845デフォルトの名無しさん
NGNG0846デフォルトの名無しさん
NGNG0847デフォルトの名無しさん
NGNG0848デフォルトの名無しさん
NGNGというか俺もよくわかってない。
今もイデアルを使ったモデルが主流なのだろうか。
0849デフォルトの名無しさん
NGNGそれとも型推論のアルゴリズム? (こっちはつい先日話題に出たけど)
0850デフォルトの名無しさん
NGNGfunc(n) {
int ac = n;
return n;
}
これだけでfuncの引数nの型と戻り型はintって判断してもいいの?
少なくとも暗黙の型変換でintに出来る型ということは確定だよね?
0851デフォルトの名無しさん
NGNGsubtyping relation 入れないといけない。
int <: double とか情報を失わないならともかく(32bit で)、
double から int にも変換できるしね。
その辺は明示的にキャストしてもらいたいところ。
>>850 とりあえず minimal typing として int -> int の型をつけるのは
まあいいんじゃない?
0852デフォルトの名無しさん
NGNGよく知らないけどMLだったら、
D 〜 Bool + Int + Float + D x D + (Label -> D) + (Label x D) + (D -> D)
の形の領域方程式を逆極限法で解いた解とかでいいんじゃないかなあ。
0853デフォルトの名無しさん
NGNG0854デフォルトの名無しさん
NGNG型はその上の部分同値関係として定義するのがいいのでは。
0855デフォルトの名無しさん
NGNGそれともおよそすべてのプログラムは副作用なしに書けるのですか?
0856デフォルトの名無しさん
NGNG誰か詳しい人いませんか?
0857デフォルトの名無しさん
NGNG自分は極めた人ではないですが、なんとなくの感覚として、副作用っていうの
は C 言語でいえば goto 文みたいなもんだと思います。
その心は、なければないで困りはしないが、その方が綺麗に書ける場合に使う
ことをためらったりはしないというところ。
まあ純粋関数型言語である Haskell や Clean のスレの人はもっと厳しい目で
見てるかもしれないけど。 OCaml のライブラリなんて副作用だらけだしなあ。
0858デフォルトの名無しさん
NGNGデータを入力したり結果を表示するときには副作用は必須です。
0859デフォルトの名無しさん
NGNGん?
副作用のある関数というのはC言語ではprintfのような返り値を返す以外に
何か他のことをする関数のことだよ。
例えば、printfの返り値はintだけれど、値を返す以外に、画面に文字を表示する
というのが副作用としてあるの。
0860デフォルトの名無しさん
NGNG>>857は副作用の意味を分かった上で、
>その心は、なければないで困りはしないが、その方が綺麗に書ける場合に使う
>ことをためらったりはしないというところ。
という点で、関数型プログラミングにおける副作用を伴う関数の使用は、
Cでのプログラミングでgoto文を使用することと似ているのでは、
と言っているのではないかと。
0861デフォルトの名無しさん
NGNG普段使っている分にはそんなに副作用だらけって感じじゃないと思うけど。
0862デフォルトの名無しさん
NGNGHaskellは純粋関数型言語ですから全てのプログラムは副作用なしに書かれます。
その意味では入出力含め副作用は全く必要ありません。
しかし、これはMonadにより副作用をエミュレートしているからこそです。
# このエミュレートは実によくできているので、副作用が無いというよりは、
# 副作用を他の部分から分離しているという感覚です。
破壊的代入(副作用)を利用するアルゴリズムはたくさんあるので、
それが全く利用できないというのでは困ります。
0863857
NGNGその通りです。言葉が足りなすぎました。補足ありがとうございます。
>>861
よく使うので気になるのはBuffer、Stream、Hashtblの3つくらいですかね。ま
あ Buffer と Hashtbl はそういうものだと思えば気にならないけど、 Stream
は気になります。他にもデータ構造系だとQueue、Set、Stackあたりが副作用
的な利用をしますね。
あと、配布されてるライブラリでオブジェクトを使ってるやつは副作用をモロ
に使ってるやつが多い気がしました。具体例が出せないですが。
あとは Arg.parse_argv とかが参照型を使うことを想定しているとかかな。こ
れは仕方ないし、わかりやすいので良いとは思いますが。
それと入出力系ではあるけど、
http://ocaml-programming.de/rec/IO-Classes.html
の I/O Octet の input を見たときは我が目を疑いました。引数に文字列を与
えて書き換えてもらうなんて、そんなのアリか。Cじゃあるまいし。
0864デフォルトの名無しさん
NGNGいいのなら string を書き換えられる様にはしないと INRIA のだれかが
言っていたような。
>>863
それは酷い仕様ですね。
0865デフォルトの名無しさん
NGNG0866デフォルトの名無しさん
NGNG別のアプローチでCと同等以上の性能にするのが筋なんだろうが、
見つからなかったんだろう。
0867857
NGNGと同じ長さだけ読み込んで、その長さの文字列を返す)とかの方が、遅いけど
ずっと綺麗にプログラムできると思うんですけどね。
その程度のわかりやすさよりも速さの方が重要っていう考え方なんでしょうが、
これは個人的には相容れない考え方ですね……。
0868デフォルトの名無しさん
NGNGwikipedia を書いて欲しいのですがどなたかいかがでしょう?
今は行数が控え目な感じです
ttp://ja.wikipedia.org/wiki/ML
0869デフォルトの名無しさん
NGNGをちょびっと書いてみたよ。あと OCaml も。
たぶんツッコミどころだらけだと思うので修正頼む。
0870デフォルトの名無しさん
NGNG0871デフォルトの名無しさん
NGNG自分で気をつけるしかない気がする。たとえば入出力だったら、
let proc_file f fname =
let ch = open_in fname in
f ch;
close_in ch
;;
のようにして、チャネルの開いている範囲を限定するとか。
一意性型というか、複数の変数から同一の実体へ参照しないよう気をつける。
ハッシュテーブルなら、作成時に一気にドカンと作って、後は参照するだけに
するとか。バッファなら、ループで回す直前に作って、ループの最後で
content だけを返し、バッファが外から見えないようにするとか。
0872デフォルトの名無しさん
NGNG遅い事が判っているのにわざわざライブラリで遅い実装にするメリットってある?
逆に、MLの作法に従った速い実装はありえるだろうか。
例えばSchemeでは継続の抽出で脱出関係の構文が全て賄える事になってるが、
実用を前提とした処理系でbreakやreturn程度の構文に大真面目に継続を
組み込んで実装にするだろうか。
それをオーバーキルとは言わないのか。
0873デフォルトの名無しさん
NGNGinput : string -> int -> int -> int
ではなく、
input : int -> string
であった方が良かったのではないか、ということです。
速度の差を問題にされていますが、この両者の速度差は僅差ではないでしょう
か? というか、 input に与える前に自分で文字列を使うか、 input の側で
文字列を作るか、という差でしかありません。実際の運用を考えると、 input
で読み込む前に文字列を作るのと、 input の側で生成された文字列を連結し
ていくという差があるため、あらかじめ巨大な文字列を作成しておけば前者の
方がそれなりに効率的になることは確かですが、最近のプロセッサではほとん
ど差はないだろうというのが私の意見です。
caml-list上での議論(やってる当時はちゃんと読んでなかった)を見直すと、
メソッド名をどうするかとか、文字ベースにするか文字列ベースにするか、と
いった議論が主で、上のような問題はあんまり議論されていない気がするなぁ……。
0874デフォルトの名無しさん
NGNGOCamlをしらないで型だけみて書くが。
inputの中で毎回メモリを確保するのと外から与えて使いまわせる
のでは"絶大な"速度差がある。
通常、ファイル全体をstringのまま保持する必要があることはまれで、
なんらかの処理をして別の形にしていくので、固定長バッファがあれば十分だ。
0875デフォルトの名無しさん
NGNGます。
確かに、固定長バッファを使い回す方が効率は遥かに上でしょうが、昨今の計
算機の処理能力を考えると、その差が本当にシビアに効いてくる局面というの
は多くはないのではないですか?
それよりむしろ、 OCaml で使いやすい API を考えるべきではないかと思います。
……と思ったんですが、シビアに効いてくる局面以外では文字ストリームとし
て扱えば良く、そちらはそちらで存在するから、文字列としてまとめて扱う方
は完全に効率重視にするべきで、したがって文字列を渡してそれを書換えても
らう仕様にする方がよい、という意見を今思いつきました。
それはそれで一理ある気もします。
0876デフォルトの名無しさん
NGNG> 例えばSchemeでは継続の抽出で脱出関係の構文が全て賄える事になってるが、
> 実用を前提とした処理系でbreakやreturn程度の構文に大真面目に継続を
ここにはSchemerだっているんだ.今後,暗い夜道では背後に気をつけな w
それはともかく >>857, 私は参照透明性なんてマクロな観点で成り立ってればいいと思うけどね.
局所的に破壊的代入を導入して効率が上がるんなら使えばいいのさ.
byterun/io.c の caml_input 見たら memmove(3) を使ってるんだね.そう思えば普通じゃん < input
どうしても嫌ならラッパ噛ませればいいし.
val my_input : in_channel -> int -> string
let my_input ic len =
let ofs = ref 0 in
ofs := !ofs + len;
input ic (String.create len) ofs len
だとまずいな... 別の ic で使っても ofs が単調増加だ w
まぁ「使い易い」 input_line : in_channel -> string があるんだし,
あなたは処理系でM論ゲトとかそういう人だろうから固定長入力って使わないでしょ?
ocamllexがあれば十分,みたいな(よく知らないけど
(* なお↑は超テキトーだけど input_line を真面目に真似れば多分できる. *)
0877デフォルトの名無しさん
NGNG乙
ML の「面白さ」を説明するのは難しいね
まあ Haskell の面白さを説明するのはもっと難しい気もするけど
0878デフォルトの名無しさん
NGNGhttp://www.ps.uni-sb.de/~rossberg/SMLvsOcaml.html
0879デフォルトの名無しさん
NGNGアスキーから出てたんですね。が、絶版みたい。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4756116418/
再版の予定はないんですかねー >ここ見てる関係者
あと、
ML for the Working Programmer
ttp://www.amazon.co.jp/exec/obidos/ASIN/052156543X/
の翻訳もあるといいな。
0880デフォルトの名無しさん
NGNG0881デフォルトの名無しさん
NGNGただでさえ難しい関数型プログラミングを英語のヴェールを通して見なきゃいけない、
ということでしょ。
大堀先生の書く日本語と、Ullmanの書く英語だったら後者の方が楽かもしれないがw
いつの間にかOCamlのこんなページができていた。
http://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4/mltext/
0882デフォルトの名無しさん
NGNGそれ前からあった京大の五十嵐先生の講義録じゃない?
829-830 って話があったから、 revise が完了したんだろうね。
OCaml の入門、というか関数型言語の入門としてはかなり良いと思うよ。
ML for working programmer は訳されるといいなあ。
0883デフォルトの名無しさん
NGNG0884デフォルトの名無しさん
NGNGあるわけない。
童貞ガキのオナニー言語。
0885デフォルトの名無しさん
NGNGC/C++ をつかってても functional であることを意識した書き方が出来る
様になり、バグの数が減った。
ML そのものより、ほかの言語を使ったときに良い影響が出た。
0886デフォルトの名無しさん
NGNG「いやあ、MLで書かせてくれるならすぐできるんですけど。Cだと面倒で」
0887デフォルトの名無しさん
NGNG使えない言い訳だな
0888デフォルトの名無しさん
NGNG0889デフォルトの名無しさん
NGNGも。でもCとかは型推論してくれないんでむしろイラつくこともあるなあ……。
まあでも、MLを必要とされることはまずないと言っていいだろうし(OCaml使っ
てる会社は海外にはあるみたいだけど)、ならば「本当に良かった」と断言で
きることはそれほどないでしょうね。
0890デフォルトの名無しさん
NGNGとりあえず動けばいいというのならMLが楽かもね
当然まともなプロジェクトは大抵javaかC++使ってる
0891デフォルトの名無しさん
NGNGというコメントを自動で行端に入れて欲しいと時々思う。
コンパイルのときにしか教えてくれないのはイヤン。
0892デフォルトの名無しさん
NGNG死ぬほど同意。
型が書いてないと他人のソースを読むのが大変だし、勘違いにも気付きにくい。
短くて一般的な識別子名が多いので、スコープ情報なしでは検索もしにくいし。
マウスオーバーで型情報がポップアップしてくれると最高なんだが。
0893デフォルトの名無しさん
NGNG0894デフォルトの名無しさん
NGNG見つからない...
(* それどころかインタラクティブセッションの値の型も出た気が... *)
0895d
NGNG0896デフォルトの名無しさん
NGNG関数の型をメッセージバッファに表示してくれますが。
0897デフォルトの名無しさん
NGNG0899デフォルトの名無しさん
NGNGhttp://whytheluckystiff.net/syck/
0900デフォルトの名無しさん
NGNG現在の配布物に OCaml 関係のものはない。
0901デフォルトの名無しさん
NGNG0902デフォルトの名無しさん
NGNG口調が Pa**al っぽい
0903
NGNGパスカルみたいに人の名前なの?
オッカムの剃刀のオッカムとは関係ないの?
0904デフォルトの名無しさん
NGNGOCaml の話だと思うけど「おかむる」とか「おきゃむる」とか読む。
Caml の部分は英語的には camel と同じ調子で読まれる。なのでロゴがラクダ
だったりするんだけど……この業界でラクダといえば perl だし。
OCaml = Objective-Caml で、Caml = Categorical Abstract Machine
Language なので、たぶん人名を意識してつけた名前ではないんじゃないかな。
0905デフォルトの名無しさん
NGNG岡村?
0906デフォルトの名無しさん
NGNG0907デフォルトの名無しさん
NGNG0908デフォルトの名無しさん
NGNGプログラム言語と呼ぶ香具師
0909デフォルトの名無しさん
NGNG0910デフォルトの名無しさん
NGNG売れなくてもいい。
研究用として価値があるじゃないか。
商売にするならOCamlの方が良くない?
0911デフォルトの名無しさん
NGNGねーよ。蓮ケルで十分。
0912デフォルトの名無しさん
NGNG0913デフォルトの名無しさん
NGNGMLなんて頭でっかちな研究者しか使わんよ。
まともな研究者ならパッケージ配布する時はc, c++, javaを使う。
プロトタイプをMLで作るならまだしも、
それをそのままネットに置くなんて仕事してないに等しい。
0914デフォルトの名無しさん
NGNG0915デフォルトの名無しさん
NGNG0916デフォルトの名無しさん
NGNG0917デフォルトの名無しさん
NGNG公開しても全然問題ないと思うんだけどね。
Cで実装を作るのは宣伝の意味しかないよ。
0918デフォルトの名無しさん
NGNG0919デフォルトの名無しさん
NGNG0920デフォルトの名無しさん
NGNG0921デフォルトの名無しさん
NGNG0922デフォルトの名無しさん
NGNG誤爆しちゃった
0923デフォルトの名無しさん
NGNG0924デフォルトの名無しさん
NGNGつーかほとんどいかれた香具師ジャン(笑い
0925デフォルトの名無しさん
NGNG0926デフォルトの名無しさん
NGNG(* WinやMacのバイナリパッケージは、更新されないのかな… *)
0927デフォルトの名無しさん
NGNGhttp://www-perso.iro.umontreal.ca/~monnier/elisp/
0928デフォルトの名無しさん
NGNG0929デフォルトの名無しさん
NGNGe-Societyシンポ行ってきたのですか?
0930デフォルトの名無しさん
NGNGもっと情報をきぼん
大堀先生のページに、論文とかあるかな?
0931デフォルトの名無しさん
NGNG0932デフォルトの名無しさん
NGNGSML#って、IMLというのとはまた別なの?
http://www.jaist.ac.jp/~ohori/research/iml.html
0933デフォルトの名無しさん
NGNGここにありました。
http://www.jaist.ac.jp/~ohori/research/smlsharp.html
でもこのページ古い。last modifiedが2003年1月だ。
0934デフォルトの名無しさん
NGNGgraphic処理とかできるのかなあ。。。
0935デフォルトの名無しさん
NGNGOCamlだったらMLDonkey、Unison?
0936デフォルトの名無しさん
NGNG0937デフォルトの名無しさん
NGNGえず通るみたい。
ただ、入力された日本語がちゃんと表示されないから(print_string などの結
果は問題ない)、そういう意味では使いづらい。
0938デフォルトの名無しさん
NGNG入力が化けてるから駄目なのかと思いました。
0939デフォルトの名無しさん
NGNGと、当たり前のことであげてみるテスト
にはは、観鈴ちん強い子
0940デフォルトの名無しさん
NGNGを OCamlで書くことはできますか?
let rec fib = mem (fun n -> match n with 0 -> 0 | 1 -> 1 | _ -> (fib (n - 1)) + (fib (n - 2)));;
みたいな再帰定義ができないので無理なんでしょうか。
関数に外からアクセスされないstaticな配列を持たせられればいいんですけど。
0941940
NGNG上のは無視してください。
0942940
NGNGhttp://www.h2.dion.ne.jp/~pana/memoize.html
の
fun n -> memoize cache fib n
の行を
memoize cache fib
にしたら駄目な理由ってなんなんでしょうか?
0943デフォルトの名無しさん
NGNGやってみましょう。以下のようなエラーになります。
This kind of expression is not allowed as right-hand side of `let rec'
0945デフォルトの名無しさん
NGNG# let rec f x = g x + g x
and g x = f x;;
そして、g x = f x は、g = fun x -> f x の糖衣構文であることに注意する。
すると、f, g は共にラムダ抽象なので、評価が進まないことがわかる。
ところで、
# let rec f x = g x + g x
and g = f;;
は、g はこの時点ではラムダ抽象では*ない*(変数だと思え!)ので、この時点で
評価を進ませることが出来て、一歩進むと、
let rec f x = f x + f x
のようになり、あきらかに定義できない。(let rec x = 1 + x が定義できないように。)
このように、明らかに定義できない部分は蹴っている。
型ぐらいみろ、と思うかもしれないが、
f : 'a -> 'a は、f 1 とすると値だけど、f (fun x -> x) とすると、
ラムダ抽象。要するに、どっちも来うるので、安全側に倒しているのだろう。
私も良く分かっていませんが。
0946デフォルトの名無しさん
NGNG値になってない部分は先をとりあえず見ているわけだ。
ラムダ計算的には、ラムダ抽象は「値」だから、ラムダの中身はみていない。
0947デフォルトの名無しさん
NGNG>型ぐらいみろ、と思うかもしれないが、
>f : 'a -> 'a は、f 1 とすると値だけど、f (fun x -> x) とすると、
>ラムダ抽象。要するに、どっちも来うるので、安全側に倒しているのだろう。
というのはどういう意味ですか?
単純に引数が足りないからラムダ抽象、というわけにはいかないんでしょうか?
>>940 がエラーになる理由はなんとなく分かったんですけど、
(ラムダ抽象だってことは分かっても再帰がからんでややこしい)
>>945 のが良く分かりません。 f = fun x -> f x が常に成り立つなら
片方が通って片方が駄目なのはおかしいような。
let rec x = 1 + x が定義できないのは xがラムダ抽象じゃないからではないですか?
let rec f x = f x + f x は定義できますよ。
0948デフォルトの名無しさん
NGNG> 単純に引数が足りないからラムダ抽象、というわけにはいかないんでしょうか?
実際に値を入れてみるまで分からない、という意味です。
定義時点の型と syntax では判断できない。
上のが定義できたとしたら、定義できた後では、
f 1 も f (fun x -> x) も通らないといけないのです。
上のはたまたま関数が来ることが分かっていたからいいけど、
そうでない場合があるかもしれなくて、それが
let rec x = 1 + x みたいな感じになることがあるので、だめ。
あー、ちゃんと説明できてない。
> let rec f x = f x + f x は定義できますよ。
let rec f x = f x + f x が定義できないというのは、
OCaml の関数として定義できないのではなくて、値が定まらないという
意味です。言葉足らず。
0949デフォルトの名無しさん
NGNGだめぽ。
0950デフォルトの名無しさん
NGNGこれは絶対無理。 -rectypes でよろ。
let rec eater x = eater
eater 1 2 3 4 5 6 7 ....
0951デフォルトの名無しさん
NGNGlet rec x = y + 1 and y = x + 1;;
これを禁止したかったから、ラムダの中にいれずに値としてつかっちゃだめよ、
ということかな?
エロい人補足よろ。
0952デフォルトの名無しさん
NGNGそういえばη展開とかいうキーワードもありますな。
Haskell とは違うのだよ。
0953デフォルトの名無しさん
NGNG> memoize cache fib
は多相だからだめなんでないか?
> この制限を値多相(value polymorphism)と呼ぶ.値多相に制限しなければならない理由は副作用(7章参照)をもつ言語機構と深く関係があるのだが,ここでは説明しない.
...
> このように,関数を計算する式(ここでの double double)に fun x -> ... x をつけて値とするような(プログラムの)変換を η-展開(η-expansion)という.
http://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4/mltext/ocaml005.html
0954デフォルトの名無しさん
NGNGそうなんですか? fibまで貰った時点で多相じゃないような。
let rec は関数宣言にしか使えないので、
let rec f n = ... もしくは let rec f = fun n -> ... みたいな
形でしか宣言できないという説はどうでしょうか?
# let rec fib = (fun n -> match n with 0 -> 0 | 1 -> 1 | _ -> (fib (n - 1)) + (fib (n - 2)));;
当然OK
# let rec fib = (fun x -> x) (fun n -> match n with 0 -> 0 | 1 -> 1 | _ -> (fib (n - 1)) + (fib (n - 2)));;
右辺の第一項は 'a -> 'a 第二項は int -> int なので右辺は int -> int になりますが明示的でないのでNG
あのエラーメッセージはどうかと思いますが。
0955デフォルトの名無しさん
NGNGlet rec x = 1 :: x;;
は通るよ。
> あのエラーメッセージはどうかと思いますが。
同感。何がだめなのかわからないよね。
0956デフォルトの名無しさん
NGNG>let rec x = 1 :: x;;
>は通るよ。
ほんとですね。>>953のとこに recが「有効なのは関数宣言のみである」って書いてあったので。
let rec x = 1;;
はダメだし
let f = (fun x -> x) (fun x -> x);;
はOKだけど
let rec f = (fun x -> x) (fun x -> x);;
はダメだから、このパターンなんじゃないですかね。
0957デフォルトの名無しさん
NGNGMLで書かれているから読みやすいはず(関数型言語の宣伝文句によれば)
0958デフォルトの名無しさん
NGNGべつにコンパイラ全部読むわけじゃないから、そんなに物凄く大変てこともないだろう。
で、見てみたが、件のエラーは translcore.ml で吐かれてて、しかもそれが
実際に起きるのは check_recursive_lambda が呼ばれてる個所のみ。
ここで右辺の値を調べてチェックしてるみたい。
なので後は自分で調べてほしいんだけど、自分でちょっと見てみたので、激し
く既出の内容だが、書いてみる。
簡単に言うと、単なる値と関数値はチェック時には区別がされている。
たとえば、
fun n -> memoize cache fib n
は明確に関数だということがわかるが、
memoize cache fib
を関数値として見ているわけじゃない(型チェックなどの労は惜しんでいる)。
で、自分の値を計算するのに自分の値が必要となるような状況は避けているか
らエラーになるわけだ。
let rec f x = g x
and g x = f x
だと、g の右辺値は(内部的には g = fun x -> f x なので)関数値とみなされエラーにならないが、
let rec f x = g x
and g = f
だと右辺値は単なる値なのでエラーになる。これと同じじゃないかな。
自分で言いだしといてなんだけど、
let rec x = 1 :: x;;
の場合、右辺値はコンストラクタなので他と扱いが違うんだろう。
let rec x = `x x;;
とかもできるのと同じだろうね。
0959デフォルトの名無しさん
NGNGいつから通るようになったんだろ。Changes とか見ればいいんでしょうが。
0960デフォルトの名無しさん
NGNG0961デフォルトの名無しさん
NGNGリリースアナウンスを訳した記憶があるから確か3.07からだったような。
と思ってアナウンスを調べたてみたら、MLにしか上がってないのな。
http://caml.inria.fr/archives/200309/msg00313.html
Both compilers:
- Compilation of "let rec" on non-functional values: tightened some checks,
relaxed some other checks.
0962デフォルトの名無しさん
NGNG>let rec x = `x x;;
ワラタ。その二個目のxはyでもXでもおんなじやん。
何となく「できるだけ分かりにくくしよう」という嫌がらせを感じなくもないw
0963sage
NGNG関数型言語ML(SML, OCaml, etc.), Part 3
http://pc5.2ch.net/test/read.cgi/tech/1103606223/
0964デフォルトの名無しさん
NGNGいやそんな意図を持って書いたわけじゃなかったんですが、たしかに見辛いですな。
ちなみにヘンな let rec といえばこんなのも。
# let rec x = lazy(Lazy.force x);;
val x : 'a lazy.t = <lazy>
# Lazy.force x;;
Exception: Lazy.Undefined.
0965デフォルトの名無しさん
05/03/13 00:35:550966965
05/03/13 03:04:510967デフォルトの名無しさん
05/03/13 13:54:08and B = object ... end;;
とかいうことではなくて?
0968デフォルトの名無しさん
05/03/13 20:21:17相互依存関係のことなので、それだけではできませんでした。
0969966
05/03/13 20:37:20class ['test2] test1 =
object (self)
val mutable test2_ = ([] : 'test2 list)
method add_test2 t =
if test2_ = [] then test2_ <- t::test2_
else raise Opnotsupported
method get = (List.hd test2_)#get
end;;
class test2 t1 =
object (self)
val str = "test2desu"
val test1_ = t1
initializer test1_#add_test2 self
method get () = str
method print () = print_string (test1_#get ())
end;;
let t1 = new test1 in let t2 = new test2 t1 in t2#print ();;
私は上記のようにしたのですが、test2のインスタンスは1つしか持たないのにリストとして保持しています。
あまり綺麗ではないので、もっと良い方法は無いものでしょうか。
0970デフォルトの名無しさん
05/03/14 00:38:51問題点がどこにあるのかいまいち理解できないんだけど.
相互再帰うんぬんではなくて,単にこういうことではないの?
exception Opnotsupported;;
class ['test2] test1 =
object (self)
val mutable test2_ = (None: 'test2 option)
method add_test2 t =
match test2_ with
None -> test2_ <- Some t
| Some _ -> raise Opnotsupported
method get =
match test2_ with
None -> failwith "Wow!" (* ここは適当な処理に変えてね *)
| Some x -> x#get
end;;
class test2 t1 =
object (self)
val str = "test2desu"
val test1_ = t1
initializer test1_#add_test2 self
method get () = str
method print () = print_string (test1_#get ())
end;;
0971デフォルトの名無しさん
05/03/16 18:02:12今日OCaml初めて使いました。ところで、質問。
2重ループを書くとき、
let rec loop i j 結果 =
if i = 10 && j = 10 then 結果
else if j = 10 then loop 0 (j+1)
else loop (j+1) i 処理 in
loop 0 0;;
のように書くのか、for文をネストして書くのかどちらが一般的なのでしょうか?
for文は手続き処理部分を含むので関数的ではありませんよね?
0972デフォルトの名無しさん
05/03/16 18:33:48個人的には末尾再帰の方が好みだけど、処理にもよる。
0973デフォルトの名無しさん
05/03/16 19:54:34なるほど。ありがとうございます。
0974デフォルトの名無しさん
2005/03/31(木) 20:16:250975デフォルトの名無しさん
皇紀2665/04/01(金) 01:31:030976デフォルトの名無しさん
皇紀2665/04/01(金) 02:18:41また、stringの代わりにchar listを使った場合にどんな問題が出る?
0977デフォルトの名無しさん
皇紀2665/04/01(金) 02:53:590978デフォルトの名無しさん
皇紀2665/04/01(金) 09:25:26まず、次スレがあるから、真面目な質問ならそっちで聞いてみた方が答える人
が微妙に多いんじゃないか。
string が char list ではなく別の型になっているのは高速化と最適化のため。
文字列とリストはメモリの割当て方がぜんぜん違う。配列とは近いから
char array でも大差ない気もするけど、そこのところはよくわからない。
fold 系とかがなんでないのかは知らん。 ExtLib http://ocaml-lib.sourceforge.net/
で追加されているからそっちを使ってみるのもよし。
無名再帰関数を作ることはできるが、ちょっとトリッキーな関数を定義してや
らないといけない。
http://www.kurims.kyoto-u.ac.jp/~hassei/selfref.pdf
の最後に、 SML でそういう関数を定義しているのが載っているから、これを
書き直せば使える。
0980977
NGNG目的がよくわからんレポートだったけど、factorial定義でやろうとしてることは
なんとなくわかったつもり。こういうことかな
まず再帰関数の定義を、自分を渡すパラメータとして定義する
let defFact = fun fact n -> if n = 0 then 1 else n * fact (n - 1)
で、これを直接つかうとしたらこんな感じになるんで
defFact (defFact (defFact .. (defFact dummy))) 10
つまり.不動点てのは、その関数を無限(必要な限り)に適用した感じものか
ただfixpointでなにやってるかはわからんかったが
0981977
NGNGtype genDef = wrapGenDef -> (int -> int)
and wrapGenDef = Wrap of genDef
let unwrap = function Wrap(func) -> func
let fixpoint = fun funDef ->
let genFunc = fun wrapped -> funDef (fun n -> (unwrap wrapped) wrapped n) in
let wrapped = Wrap(genFunc) in
genFunc wrapped
let factorial = fixpoint (fun fact n -> if n = 0 then 1 else n * fact (n - 1))
open Printf;;
printf "%d\n" (factorial 5)
0982977
NGNG0983デフォルトの名無しさん
2005/04/02(土) 22:30:36let rec fix f x = f (fix f) x
と明示的に関数として定義してやれば可能なのを思い出した。スマソ。
fix (fun f x -> if x <=0 then 1 else x * f (x - 1))
↑普通の階乗。
fix (fun f res n -> if n <= 0 then res else f (res * n) (n - 1)) 1
↑末尾再帰な階乗。
0984デフォルトの名無しさん
2005/04/03(日) 05:18:08レス数が950を超えています。1000を超えると書き込みができなくなります。