1 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 14:49:54 ] 関数型言語MLについて語るスレッドです。 MLは、確固とした理論的背景を持つ言語でありながら、 現実的なソフトの開発にも使用できる実用性を備えた言語です。 また、プログラミングの初心者が最初に学習する言語としても優れています。 総本山 Standard ML www.smlnj.org/ Objective Caml caml.inria.fr/ocaml/ 前スレ 関数型言語ML(SML, OCaml, etc.), Part 4 pc11.2ch.net/test/read.cgi/tech/1133003340/
446 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 13:51:28 ] F#(OCAML系)があるしなあ。 JNI(Java Native Interface)の中の人は、 SML/NJのWin32対応をやっていた人だった。 Modular Monadic Semanticsの人。
447 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 17:39:37 ] メンバがわりと沢山ある構造体(record)がいくつか必要な時は皆さん メンバの名前が被らないように注意してレコード作ってますか? それともクラスにしますか?
448 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 21:15:11 ] >>446 何か勘違いしていると思われ
449 名前:デフォルトの名無しさん [2008/06/16(月) 21:15:42 ] F#があるのとSML#関係なくね?SML.NETの存在は微妙かも知れんけど
450 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 21:18:34 ] >>447 モジュール名で区別でおk OCamlでオブジェクトの濫用はお勧めできない
451 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 22:45:23 ] SML#の「#」は、.NETよりも歴史が長い
452 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 22:45:43 ] プロジェクト期間終了したから取りあえず一息つきたいんじゃないの? O堀さんのことだからこれで終りとは思えないが。
453 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 03:18:35 ] >>450 おお、目から鱗ですありがとう! このスレは勉強になります。。 俺もできるならクラスは使いたくなかったので助かりましたわ。
454 名前:デフォルトの名無しさん [2008/06/22(日) 02:24:57 ] SML♯で,配列 data[](要素数 n)と int型の i,j を引数にとって, 要素 data[i] と data[j] を入れ替えた配列 を出力する関数 ってどうやればいいんかいな?
455 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 22:44:31 ] 宿題ですか?
456 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 23:37:58 ] OCamlのStream便利だな。。。何でもかんでもコレ使いたくなっちゃうわ。 何かマズいことあるのかな?
457 名前:デフォルトの名無しさん [2008/06/23(月) 01:54:09 ] マズいことはないけど破壊的なのがなにかと使いにくいと思う。
458 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 01:56:52 ] >>457 つまりHaskell最高ってことか?
459 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 02:57:29 ] ほとんどのデータがint縛りっていうか、31bit制限があるところがツラいと思うんですが、 色々と工夫というかテクがあるなら教えて頂きたいです。
460 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 06:54:26 ] >>456 人生、これストリームなり
461 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 12:22:57 ] [1;2;3;4]を入力すると[1;3;6;10]を返す関数sigmaを書いたんですが sigma関数の箇所、もっと効率的なやり方があるような気がしてむずがゆい感じがしてます。 何かアドバイスいただけないでしょうか let iota n = List.init n ((+)1) in let sum lst= List.fold_left (+) 0 lst in let rec take n lst = match n with 0 -> [] | 1 -> [List.hd lst] | _ -> (List.hd lst)::take (n-1) (List.tl lst) in let sigma lst = List.rev (List.fold_left (fun x y->sum (take y lst)::x) [] (iota (List.length lst))) in sigma [1;2;3;4;5;6];;
462 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 13:13:09 ] 累積変数で、これまでの和を持ち運ぶ
463 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 14:45:07 ] ありがとう。こんな感じですかね (途中まで同じ) let sigma lst = let accum = ref [] in List.rev (List.fold_left (fun x y-> accum:=y::!accum; sum !accum::x) [] (iota (List.length lst))) in sigma [1;2;3;4;5;6];;
464 名前:デフォルトの名無しさん [2008/06/23(月) 15:38:22 ] えー。「ここまでの結果」を「引数で」持ちまわるんだよ。再帰終了するところでその引数をそのまま返す。
465 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 15:59:00 ] んー、持ち回る引数がfoldの中なので、プログラム全体の形、結構変わりますよね? こういった変換は慣れていないので、ちょっと時間がかかりそうです
466 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 17:53:21 ] iotaとかsumとかtakeとかを使わないで、さらにfoldにこだわらなくて、かつ再帰を使っていいなら こんなのはどうっすかね? let sigma l = let rec sigma' cur r = function | [] -> List.rev r | x::xs -> let next = cur + x in sigma' next (next :: r) xs in sigma' 0 [] l # sigma [];; - : int list = [] # sigma [1;2;3;4;5;6];; - : int list = [1; 3; 6; 10; 15; 21] foldとかを使ったもっとElegante"〜{エレガンテ}〜"な方法を希望ならスマソ。
467 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 20:17:29 ] こんな感じ。 reverse $ snd $ foldl (\(a,xs) b -> let x = a + b in (x,x:xs)) (0,[]) Haskellの構文を使ってるがMLでも同様のはず。
468 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 20:21:41 ] pairにする必要ないんじゃ… tail $ reverse $ foldl (\a b -> (head a + b):a) [0]
469 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 20:37:13 ] >>468 おお、こういうのがノータイムで出てくるようになりたいわ。
470 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 21:44:56 ] let sigma lst = let rec sum lst = match lst with | [] -> [] | car :: cdr -> (List.fold_left (+) 0 lst) :: (sum cdr) in List.rev (sum (List.rev lst));; こんなんどうでっしゃろ?
471 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 21:48:14 ] >>467-468 おまいらHaskell大好きだなwwwww
472 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 22:44:06 ] MLの構文を知らずにこのスレを覗いてる奴が結構居ると予想
473 名前:デフォルトの名無しさん [2008/06/23(月) 22:46:14 ] 関数の中ですぐmatchするのってfunctionで書き直しちゃいたいんだけど。
474 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 23:08:55 ] let sigma l = let rec aux store = function | [] -> [] | x::xs -> x+store :: aux (x+store) xs in aux 0 l これでok。末尾再帰じゃないけど。な。
475 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 23:31:25 ] うおお、皆さんありがとう! いろんなやり方があって勉強になります
476 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 23:39:06 ] let ($) g f x = g (f x) let sigma = (fun s -> rev $ fold_left (fun ys x -> s := x + !s; !s::ys) []) (ref 0)
477 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 23:43:15 ] let (@@) f x = f x let sigma l = (fun s -> rev @@ fold_left (fun ys x -> s := x + !s; !s :: ys) [] l) @@ ref 0
478 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 23:47:55 ] let sigma = tl $ rev $ fold_left (fun ys x -> hd ys+x :: ys) [0]
479 名前:Haskell 修業中 mailto:sage [2008/06/24(火) 04:32:12 ] すんません。まさに >>472 なんですが…。 import List sigma = tail.(scanl (+) 0)
480 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 21:58:08 ] 対象かアーキュムレータの頭を累積値として利用する手もある。 let rec sigma = function | [] -> [] | hd::[] -> hd::[] | x::y::tl -> x::(sigma (x+y::tl));; let sigma_rev l = List.fold_left (fun acc hd -> match acc with | [] -> hd::acc | last::_ -> hd+last::acc) [] l;;
481 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 23:31:17 ] >>479 tail . (scanl (+) 0) ↓ scanl1 (+) でおっけ
482 名前:Haskell 修業中 mailto:sage [2008/06/24(火) 23:48:01 ] >>481 おおっ!そんなのがあるんですね。 やっぱ、Haskellすごいわ スペースを入れてもわずか10文字w
483 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 01:45:08 ] 意味不明なライブラリ関数の海で遊んで溺れかけているHaskellianにしか見えない。 逆に、OCamlには関数なさすぎ砂漠なわけだが。
484 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 17:36:09 ] Haskellそこらじゅうで大人気だな。 ム板住民の半分はHaskell(かRuby)好きなんじゃないかと思えてくるわ。 OCamlはデフォルトでは関数も文法も少ないけど自分で定義しなさい、みたいな所がCっぽくて好き。 let scanl1 f = function | [] -> [] | (x::xs) -> scanl f x xs let scanl f x y = List.rev (List.fold_left (fun a b -> (f (List.hd a) b) :: a) [x] y) で scanl1 (+) [1;2;3;4];; ってできるし。 HaskellとOCamlの差が出てくるのはやっぱりIOとかかね。
485 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 18:20:16 ] refを沢山使うprogramをHaskellで書くのは大変。 Ocamlで書くのが大変なのは…特にないな。遅延計算くらいか。
486 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 18:34:02 ] ファイルを順々に読んでいく、みたいのはHaskellだと遅延評価だから普通のリストと同じように出来るけど、 OCamlだとバッファリングするとかストリームとか多少は副作用がある方法を使わなきゃいけないかなー。 まあ他の言語ではみんなそうしてるから特に抵抗は無いが。
487 名前:Haskell 修業中 mailto:sage [2008/06/26(木) 18:35:15 ] >>485 Streamって遅延計算じゃないんですか?
488 名前:Haskell 修業中 mailto:sage [2008/06/26(木) 18:37:26 ] あっ、かぶったw やっぱりStream使うんですね。
489 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 18:56:37 ] Streamはかなり便利だけど、 Haskellでは通常のリスト操作みたいに出来るっていうのはやっぱり魅力だよな。 使い方にもよるがソースがStream.junk ();とかだらけになるのは美しくないので避けたい。
490 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 20:28:23 ] >>485 たとえば? 俺がHaskellですっきり書いてやるよ。
491 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 18:43:09 ] ocamlcってgccの-O0みたいなオプションないのかな というかこんなことを平気で聞いてもよさげな初心者スレないのかな
492 名前:デフォルトの名無しさん mailto:sage [2008/06/27(金) 22:56:35 ] というかこんな意味不明なこと平気で聞くなよ。 kwsk
493 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 01:38:52 ] >>492 ocamldebugを使ってみた ↓ Eventなのに止まらないだと・・・? ↓ きっとコンパイラが最適化してるからだ! ↓ ocamlのコンパイラって最適化無効にするオプションないのかな←今ここ ocamldebugのstep実行で止まるはずのポイント飛ばされたり、 プロファイラで使われているはずの関数が未使用と判定されたり、 言語以前にツールの使い方覚えるとこで俺\(^o^)/
494 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 02:23:23 ] 全然初心者的内容じゃねーじゃん。ocamlc (ocamloptもそうだが) は 最適化みたいなことはほとんどしてないんで。書いたとおりに実行するよ。 優秀なOCamlプログラマを大勢知っていますが、大多数はデバッガの必要を感じていません。 俺もデバッガは使わないので何ともいえんが、何か使いかたを過っているか、 camlの評価順なぞを未理解なのではないかと思われ…
495 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 03:05:49 ] >>490 ICFP PC 2007の問題とかどうよ? RNA実行するだけでも副作用なしだと大変じゃないかな
496 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 05:35:04 ] >>494 皆使ってなかったのか・・・ ソース解析する際流れ追うのに使えるかと思ったんだが >何か使いかたを過っているか、 >camlの評価順なぞを未理解なのではないかと思われ… どっちも怪しいのでもちっと勉強してくる
497 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 10:30:39 ] >>494 そういうのって全部ログコードはいてチェックするんですか?デバッグとそういうやり方併用してるけれど全部それだとチョイきつそう。
498 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 14:39:27 ] コードを綺麗に書けば、printf デバッグと、十分なユニットテストで 大抵バグは潰せる。 デバッガでちまちまやる前に、assertion と Printexc.get_backtrace でかなりのことはわかるはずだが。 Cのデバッガのように必須だという認識の人は少ないと思われ。 もちろん使うなとは言わん。ocamldebugはリプレイとか強力。
499 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:12:07 ] >>498 cの場合は破壊的操作と非破壊的操作をあまり意識せずにプログラミングすることもあるから 余計に必要になってくるのではないか?それに、小さな関数の定義を作って大きくするより、 一つでまとめて操作すると言う習慣も影響してるかも。
500 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 23:45:19 ] Cは(普通は)インタプリタがないからっていう部分も大きいと思う。
501 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 03:08:23 ] ちょっとcodepadが使えるのか試してみたよ。 codepad.org/14IrPYhB
502 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 03:21:42 ] C は REPL が無いからね
503 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 20:22:57 ] lisp的なREPLを備えたC環境なんてないよな。確かに… あってもいいんだけど。
504 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 20:55:26 ] gdbは?
505 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 20:58:08 ] そういえばこんなのがあったの忘れてたわ。 C-REPL neugierig.org/software/c-repl/
506 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 20:58:59 ] Haskell製か
507 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:53:12 ] >>504 >Cのデバッガのように必須だという認識の人は少ないと思われ。 だから普通はそういう事なんだろうなww まあgdbではlispとかcamlとかみたいに書いて即テストって訳にはいかないがgdbは便利だよな。
508 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 03:43:57 ] >>454 亀だがちょうど最近覚えたので確認のために fun swap (date,i,j)= let val a = Array.sub(date,i) val b = Array.sub(date,j) in Array.update(date,i,b); Array.update(date,j,a) end localでArrayをopenしておいたほうが綺麗かも
509 名前:デフォルトの名無しさん [2008/07/22(火) 18:35:13 ] すんまそん、Ocamlで日本語文字は扱えませんか? 例えば正規表現なんかでも使いたいんですが。
510 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 20:41:48 ] OCamlのstring型は任意のバイナリが入るので、標準入力とかファイル経由で扱うなら 日本語でもなんでもあり。 ただし、OCamlのソースコードに日本語を埋め込みたいなら、EUC_JP以外使えないと思う。 EUC_JPなら、普通にperl互換正規表現ライブラリのラッパーが使える。 pcre-ocaml.sourceforge.net/ データをUNICODEとして扱うなら、Camomileで日本語「文字」を扱えますね。 camomile.sourceforge.net/index.html.ja.jis あと、正規表現で日本語を扱う問題はOCamlに限らずどれでも一緒なので、 www.din.or.jp/~ohzaki/perl.htm あたりをどうぞ。
511 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 22:03:32 ] 最後のURLは、perlのやり方としては古くて、 (今や\p{Hiragana}という風に"script"を文字クラスとして指定できるので) 「どれも一緒」というよりも、Ocamlだとこのやり方が有効って事になると思います。
512 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 22:16:11 ] UTF8 で書いて pcre-ocaml の `UTF8 オプションを使え。あと camomlile。以上。
513 名前:デフォルトの名無しさん [2008/07/23(水) 22:25:46 ] MLtonのFFIを使って、Cのmain関数からSMLを呼びたいのだが、これは 不可能?
514 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 15:52:08 ] www.cs.caltech.edu/courses/cs134/cs134b/book.pdf こんなのをみっけたけど、ゆうめいなん?
515 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 08:08:15 ] OCamlの入門記事 ttp://indori.blog32.fc2.com/blog-entry-223.html
516 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 16:19:54 ] 何よりもピヨが気になる
517 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 08:38:28 ] >>515 入門記事というより、入門している記事
518 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 08:51:30 ] >> 514 数ヶ月前に見たので、うろ覚えだけど、optional arguments や polymorphic variants が かなり早期に出てくる。そういう点では、こういう新しい機能をおまけとして解説してきた、 「OCaml を使ってプログラミングを学ぶ」本とは毛色が違い、より OCaml 自体を学ぶ事に 重点が置かれている。class についても最後にかなりページ数が割かれている。
519 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 09:07:36 ] >> 518 続き そういうわけで、ひととおり関数型言語のコンセプトについて理解した人には OCaml リファレンスとしていいんじゃないかと思う。
520 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 10:11:59 ] >>519 解説ありがとう。なるほど他言語をやっていて、始めようとする人向きだということが 分かりました。
521 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 00:31:48 ] >>515 Winでパフォーマンス落ちるのはバイトコードの話でしょ? ネイティブなら問題ない
522 名前:デフォルトの名無しさん [2008/08/24(日) 14:59:04 ] smlからsml#に移行しようとしてるんだけど, 型エラー(?)が出て実行できないのがある. 誰か助けて... 次のレスにエラーが出るプログラムを貼ります.
523 名前:522 mailto:sage [2008/08/24(日) 15:00:46 ] リストを使った集合演算のプログラムです. (他にもエラーが出るプログラムはあるのだけど, とりあえずある中で一番小さいもの) まずはシグネチャ signature SET = sig eqtype 'a Set exception EmptySet val emptyset : 'a Set val elem : 'a Set -> 'a * 'a Set val member : ''a -> ''a Set -> bool val add : ''a -> ''a Set -> ''a Set val map : ('a -> 'b) -> 'a Set -> 'b Set val allelem : ''a Set -> (''a * ''a Set) Set val fromList : 'a list -> 'a Set val toList : 'a Set -> 'a list end;
524 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 15:01:24 ] ■■学校を作ろう!■■ VIP発でサイトを作ろうと思うんだ。(詳しくはWikiを見てくれ) パートスレになるんでパー速(GEP)に移動している。 今スタッフを募集しているから、来てくれないか? ■Wiki www36.atwiki.jp/vipvipschool/ ■募集スタッフ プログラム担当(特にErlang、Perl) デザイナー(サイト上のアイコン、ロゴなど) WEBデザイナー(サイトデザイン案に沿って、htmlやCSSを書ける) 他にも宣伝担当なども募集している。 ■スレ ex14.vip2ch.com/test/read.cgi/news4gep/1219068297/
525 名前:522 mailto:sage [2008/08/24(日) 15:02:24 ] 次はストラクチャ(の一部) structure Set :> SET = struct type 'a Set = 'a list; exception EmptySet; val emptyset = []; (* Compute a pair of the element of input lists and rest set *) fun elem [] = raise EmptySet | elem (x::xs) = (x,xs); (* Check whether x is an element of a set *) fun member _ [] = false | member x (y::ys) = (x = y orelse member x ys);
526 名前:522 mailto:sage [2008/08/24(日) 15:05:15 ] (続き) (* Add an element to a set *) fun add a A = if member a A then A else a::A; val map = List.map; (* Compute {(a,A \ {a}) | a \in A} *) (* where A is an input set *) fun allelem A = let val (b,B) = elem A in add (b,B) (map (fn (c,C) => (c, add b C)) (allelem B)) end handle EmptySet => emptyset; fun fromList l = l; fun toList l = l; end;
527 名前:522 mailto:sage [2008/08/24(日) 15:09:53 ] で,以下を実行するとエラーが出ます. (SMLでは大丈夫だった) Set.toList (Set.allelem (Set.fromList [1,2,3,4,5])); エラーは以下のとおりです. Diagnoses: stdIn:12.1-12.49 Diagnosis(typecheckExp 12): expression type and annotation don't agree expression type: (int * int Set.Set) Set.Set -> (int * int Set.Set) list annotation: (int * int Set.Set) Set.Set -> (int * int Set.Set) list stdIn:12.1-12.49 Diagnosis(typecheckExp 16): opetator and operand don't agree operator type: (int * int Set.Set) Set.Set -> (int * int Set.Set) list operand types: (int * int Set.Set) Set.Set stdIn:12.1-12.51 Diagnosis(typecheckExp 12): expression type and annotation don't agree expression type: (int * int Set.Set -> expression) -> (int * int Set.Set) list -> expression annotation: (int * int Set.Set -> expression) -> (int * int Set.Set) list -> expression stdIn:12.1-12.51 Diagnosis(typecheckExp 16): expression type and annotation don't agree expression type: int * int Set.Set annotation: int * int Set.Set stdIn:12.1-12.51 Diagnosis(typecheckExp 12): expression type and annotation don't agree expression type: int Set.Set -> expression annotation: int Set.Set -> expression
528 名前:522 mailto:sage [2008/08/24(日) 15:11:46 ] (エラー続き) stdIn:12.1-12.51 Diagnosis(typecheckExp 16): expression type and annotation don't agree expression type: int * int Set.Set annotation: int * int Set.Set stdIn:12.1-12.51 Diagnosis(typecheckExp 16): opetator and operand don't agree operator type: int Set.Set -> expression operand types: int Set.Set stdIn:12.1-12.51 Diagnosis(typecheckExp 16): opetator and operand don't agree operator type: (int * int Set.Set -> expression) -> (int * int Set.Set) list -> expression operand types: int * int Set.Set -> expression
529 名前:522 mailto:sage [2008/08/24(日) 15:13:41 ] (さらに続き) stdIn:12.1-12.51 Diagnosis(typecheckExp 16): opetator and operand don't agree operator type: (int * int Set.Set) list -> expression operand types: (int * int Set.Set) list stdIn:12.1-12.51 Diagnosis(typecheckExp 12): expression type and annotation don't agree expression type: (int * int Set.Set) list -> expression annotation: (int * int Set.Set) list -> expression stdIn:12.1-12.51 Diagnosis(typecheckExp 16): opetator and operand don't agree operator type: (int * int Set.Set) list -> expression operand types: (int * int Set.Set) list BUG :invalid type
530 名前:デフォルトの名無しさん [2008/08/25(月) 02:01:56 ] 数学における記法の話です 大学入試の問題文の冒頭で 「f(x)=x^3+3x^2とする」とあるのですが この=はC言語と同様に、右辺の関数にfという名前を付けるという 意味での=つまり;=のことでしょうか?
531 名前:デフォルトの名無しさん [2008/08/25(月) 02:06:58 ] C言語では関数に名前をつけるときに=を使わないのでは?
532 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 02:59:26 ] >>530 関数型言語MLについて語るスレッドです。
533 名前:デフォルトの名無しさん [2008/08/25(月) 04:08:36 ] >>532 すみません、これだけでいいので分かる方いたら教えてください
534 名前: mailto:sage [2008/08/25(月) 05:21:23 ] WindowsでOCamlを使うには、「MinGW」もしくは「Microsoft Visual C++ and Microsoft Assembler」が必要になります って読んだんだけどOcamlのコンパイラってCへのトランスレーターなの?
535 名前:デフォルトの名無しさん [2008/08/25(月) 07:18:20 ] アセンブラでsho
536 名前: mailto:sage [2008/08/25(月) 16:19:07 ] アセンブラですか。どうもありがとう。
537 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 17:17:37 ] >>530 夏休みも終わりだねえ
538 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 23:17:08 ] >>522 閑古鳥の鳴いてるメーリングリストを活性化するために話題を投げてくれ
539 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 20:17:38 ] >>522 SML#のバグじゃないかな・・・? 次回アップデートに期待としか。
540 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 08:46:12 ] eigenclass.org/hiki/fp-ocaml-koans
541 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 08:51:16 ] warota
542 名前: 061123251194.cidr.odn.ne.jp mailto:sage [2008/09/19(金) 18:58:37 ] よいコンパイラの教科書(当然関数型)があれば紹介してください。和英こだわりません。
543 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 19:00:51 ] まずはnavi2chのスレをみたほうがいいかもしれない
544 名前: 061123251194.cidr.odn.ne.jp mailto:sage [2008/09/19(金) 19:05:21 ] そのようですね。
545 名前:542 [2008/09/19(金) 19:29:56 ] おさわがせしました。昔の navi2ch がパスに残っていた、、、ダサいな
546 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 19:31:39 ] ところで、 ・処理系を関数型言語で書きたい ・関数型言語の処理系を書きたい どっち?