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/
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 ] ところで、 ・処理系を関数型言語で書きたい ・関数型言語の処理系を書きたい どっち?
547 名前:542 [2008/09/19(金) 19:38:53 ] コンパイラを書きたい、ですね。(多分書かないけど)
548 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 19:44:24 ] ワラ
549 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 20:24:30 ] や、だから ・コンパイラを関数型言語で書きたい ・関数型言語のコンパイラを書きたい のどっちなのかということですよ
550 名前:デフォルトの名無しさん [2008/09/19(金) 21:16:48 ] MLでコンパイラの教科書って有名なの1冊しかないんじゃないの? いいかどうかは知らない。
551 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 21:25:48 ] 洋書で青い表紙で虎のやつのこと?モダンなんちゃらだっけ? EOPLはschemeでML処理系を作るやつだったよね
552 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 21:27:18 ] 「Modern Compiler Implementation In ML」かな… 持ってるけど、読んでない…
553 名前:デフォルトの名無しさん [2008/09/19(金) 22:41:49 ] まだモダンなのかなぁ
554 名前:デフォルトの名無しさん mailto:sage [2008/09/19(金) 23:00:15 ] 近代はずっと近代。もっと新しいのは現代。
555 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 11:27:06 ] 計算機の本で「コンテンポラリー」を名乗ったものって記憶にないなぁw なんかあったっけ?
556 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 11:54:33 ] まだポスト・モダンが出現してないから。
557 名前:デフォルトの名無しさん mailto:sage [2008/09/20(土) 12:10:11 ] 学会のサブタイトルなら見たことある。
558 名前:デフォルトの名無しさん [2008/09/20(土) 17:03:51 ] GODIがインストールできない。bootstrap_stage2で失敗する。 ~/Desktop/godi-rocketboost-20080630$ sudo ./bootstrap --prefix /usr/local/godi ... Bootstrap was successful! ... Selected GODI section: 3.10 ... ~/Desktop/godi-rocketboost-20080630$ PATH=/usr/local/godi/bin:/usr/local/godi/sbin:$PATH ~/Desktop/godi-rocketboost-20080630$ export PATH ~/Desktop/godi-rocketboost-20080630$ sudo ./bootstrap_stage2 .: 1: godi_confdir: not found Error: Command fails with code 2: /bin/sh Failure! ~/Desktop/godi-rocketboost-20080630$ なんでだろう。 ttp://d.hatena.ne.jp/keita_yamaguchi/20080313/1205419732 の言う通り3.10に対応してないのだろうか? それとも根本的なところを勘違いしてる? OCaml初心者ですが、GODIが必要です。
559 名前:デフォルトの名無しさん mailto:sage [2008/09/23(火) 09:30:04 ] > OCaml初心者ですが、GODIが必要です。 この前提が、なんか、もう。
560 名前:デフォルトの名無しさん mailto:sage [2008/09/27(土) 19:06:57 ] NumとかBig_intのプリンタが欲しいとか?
561 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 10:13:03 ] たかがそんなもののために GODI が必須で、 GODI がインストールできないから使えない、というのは間違ってますね。 逆に、GODI 依存ユーザからお前のライブラリ GODI にポートしろとか 当然のように言われるのも迷惑です。
562 名前:デフォルトの名無しさん [2008/09/29(月) 21:15:32 ] OCamlってライブラリ関連でコミュニティの足並みそろってないせいで言語の良さがかすんじゃってる感ある。
563 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 11:52:19 ] 足並み揃えて大きな標準ライブラリ作ればって話は昔からあるし、今もOCamlForgeとかでやってるけど、なかなか成果が出ない。 なんでだろう?
564 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 13:34:01 ] これからはHaskellだから
565 名前:デフォルトの名無しさん [2008/10/01(水) 16:14:10 ] windowsXPを使っていて、ML言語を使えるようにしたいので、インストール方法をどなたか教えていただきたいのですが・・・
566 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 16:17:28 ] じゃ、f# がいいんじゃない? インストーラーがあるよ
567 名前:デフォルトの名無しさん [2008/10/01(水) 19:53:20 ] OCamlにだってWindowsのインストーラくらいはさすがにある。
568 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 23:00:11 ] >>567 コンパイルできないやつか コンパイルしても動かないやつしかない
569 名前:デフォルトの名無しさん [2008/10/02(木) 08:45:56 ] >>565 cygwin入れれば標準でocaml入ってるよ。
570 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 14:34:32 ] cygwin入れるならデュアルブートか仮想化するなぁ…
571 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 04:07:14 ] SML#はプロジェクトのページにインストールから簡単なプログラミングまでチュートリアルがあったはず
572 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 12:52:15 ] >>565 こーゆー時のためにocaml.jp/ です。 OCamlのインストール方法からチュートリアルまで揃ってますよ。
573 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 15:53:52 ] 相変わらずマルチバイト扱いにくいね
574 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:01:09 ] 使い方がさっぱりわからないunicodeライブラリならあるよ
575 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 00:03:39 ] >>574 それ扱いやすいって言わないよ〜 orz 普段使いで文字列扱うせいでこまるんだよな、言語自体好きなのに。
576 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 09:44:20 ] 日本語でおk
577 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 11:30:36 ] ocamlのコンソールの使いにくさは異常。 pythonならC-b, C-fでカーソルの移動ができたり、 emacsの標準的なキーが使えるから気軽にコンソールでためせる。
578 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 11:58:55 ] >>577 ledit使え、と思ったらなんか終わってるらしい。 どうしたものか...
579 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 12:01:10 ] rlwrap
580 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 12:14:31 ] inf-caml使えばいい
581 名前:577 mailto:sage [2008/10/06(月) 13:12:12 ] みなさんありがとうございます。 ためして見たところrlwrapを使うことにしました。 すごいです!!ありがとう!
582 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 21:34:32 ] >>578 >ledit使え、と思ったらなんか終わってるらしい。 え、終わってるって、どういうこと? 俺、ledit 使ってるけど
583 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 12:19:07 ] >>582 ledit終了 でぐぐるとトップに出てくるブログに書かれてる情報絡みのことじゃないかと
584 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 11:03:05 ] 3.11 のブランチ release311 が ocaml-cvs に出来ました。おそらくもうすぐリリースですね。 3.11 の目玉 * native判のモジュールの dynamic link * private abbreviation type * Printexc.print_backtrace 等、デバッグに役立ちそうな backtrace 系関数数種 * ocamlnat: native の toplevel (デフォルトでは作らないそうな)
585 名前:デフォルトの名無しさん mailto:sage [2008/10/09(木) 12:12:17 ] >native判のモジュールの dynamic link これって既に10で出来るようになったんじゃなかったけ? と思ったら、今は dynlink.cmxa をリンクしないといけないのか これは便利だな
586 名前:デフォルトの名無しさん [2008/10/10(金) 12:01:15 ] 法政大学の児玉先生の所におかれている yk.i.hosei.ac.jp/library/hosei/seminar/caml/miniml/minicaml.sml をいまどきのSMLNJで動かすにはどう変更したらよいでしょうか. ord(#"0")はすぐわかりましたが,lookaheadなどがcharを期待してして いるのが仕様変更になったようで,elem をどうやってやればcharで 使えるのかが判然としません.
587 名前:デフォルトの名無しさん [2008/10/15(水) 09:18:45 ] OCamlの次世代デファクトスタンダードライブラリを目指すBatteriesがα1をリリースしたらしい。 dutherenverseauborddelatable.wordpress.com/2008/10/11/ocaml-batteries-included-version-alpha/ 一応前から内容は見ていて、OCamlのベースライブラリをモダンな階層構造に再編集しているのはすばらしいと思う。 ただ、ちょっと既存の外部ライブラリに頼りすぎていて、枝葉になるほど寄せ集め感が否めないのが気になる。 将来これに一本化されていくのかなー?私もこれに乗るのかどうか、今悩み中。
588 名前:デフォルトの名無しさん mailto:sage [2008/10/15(水) 15:52:01 ] 過疎ってるからって hatena からそのままコピペするのはよそうよ
589 名前:osiire mailto:sage [2008/10/15(水) 19:04:27 ] 誰ですか、私のエントリーをコピペしたのは。 別にいいですけど、一人称くらい変更してくれてもいいのに。
590 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 21:49:05 ] 3.11の目玉の一つの、private abbreviation type って何でしょか? private typesでもなくprivate row typesでもない、なにか?まぎらわしー。
591 名前:デフォルトの名無しさん [2008/10/26(日) 20:54:39 ] 過疎ってるから 俺がocaml勉強日記を書いてあげようか? わからないことがあったら答えて下さいね!
592 名前:デフォルトの名無しさん [2008/10/26(日) 23:04:30 ] 断る
593 名前:デフォルトの名無しさん [2008/10/26(日) 23:12:42 ] 面白くなりそうだったらいいよ。
594 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:21:06 ] >>591 おう、かいてたらいいよ。
595 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 10:53:31 ] module M : sig type nat = private int val nat_of_int : int -> nat val int_of_nat : nat -> int end = struct type nat = int let nat_of_int n = (assert (n >= 0)); n let int_of_nat n = n end
596 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 15:21:06 ] >>595 レスどうも。 この例は、signatureでtype natとして隠蔽した場合と何が違うのでしょう? 試してもprinterが<abstr>になるかどうかくらいしか違い分かりませんでした。 どういう利用法があります?
597 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 15:53:58 ] ぐぐったらあったorz ↓ ttp://d.hatena.ne.jp/camlspotter/20081027/1225076108 subtypingとは気づかなかった。
598 名前:デフォルトの名無しさん [2008/11/01(土) 12:46:43 ] nullとnilの違いを教えてください。
599 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 13:20:42 ] null:物の表面に液や塗料をなすりつけること。 nil:食物を、水または調味料を加えた汁に入れて加熱し、食べられる状態にすること。
600 名前:デフォルトの名無しさん mailto:sage [2008/11/01(土) 14:51:15 ] >>599 ttp://pc11.2ch.net/test/read.cgi/tech/1203474071/l50
601 名前:デフォルトの名無しさん [2008/11/02(日) 02:49:24 ] SMLにおいて、nullとnilの違いを教えてください。
602 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 02:53:01 ] nilは空のリスト。 nullはListストラクチャーの、リストを受け取りnilかどうかをboolで返す関数。
603 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 03:21:30 ] nullp
604 名前:デフォルトの名無しさん [2008/11/02(日) 03:35:53 ] >>599 ウケ狙いなら、残念。もう一ひねりホシイ。
605 名前:デフォルトの名無しさん mailto:sage [2008/11/02(日) 07:43:26 ] ウケ狙いならって・・・ 他に何があるというのか小1時間(ry
606 名前:デフォルトの名無しさん [2008/11/04(火) 06:30:51 ] 独学でSMLの本を使いながら関数言語を学んでいるのですが、上手くできない問題があり困っています。 replicate(4); と打つと、 val it = [1,2,2,3,3,3,4,4,4,4] : int list といった感じに1を一つ,2を二つ、3を三つ、4を四つといったリストを 出力されるSMLのリカーシブメソッドを書きたいのですが、上手く行きません。分かる方教えていただけると助かります。
607 名前:デフォルトの名無しさん [2008/11/04(火) 07:09:08 ] うまくいかなかったやつを載せてみてよ。
608 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 08:14:40 ] >>606 リカーシブメソッドっていうのが何を差してるのか分からないけど、 入力: 自然数n 出力: 要素が全てnで長さnのリスト とするサブ関数使えばいいんじゃない?
609 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 08:21:09 ] n [1,2,3,...,n] [1,22,333,...,n,n,n,n,] の二行目から三行目で>>608 使えばいいな。
610 名前:デフォルトの名無しさん [2008/11/04(火) 09:16:29 ] recursive 再帰だな。
611 名前:608 mailto:sage [2008/11/04(火) 09:29:59 ] とりあえず作ってみた。 >>609 のやりかたとは違います。 ↓にあっぷしてみたので、ご参考までに。 ttp://www2.uploda.org/uporg1765562.txt.html (パスは sml です) 入力は自然数(0以上)を仮定しています。
612 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 12:47:57 ] あー、答えちゃったの?どう読んでも宿題なんだから、自分で考えさせてあげなきゃ。
613 名前:608 mailto:sage [2008/11/04(火) 18:17:23 ] >>612 やっぱそうだよねぇ。 「独学で」なんて書いてるから、 にっちもさっちも行かなくなったと思っちゃったんだよね。 やっぱ、寝ないとだめだな。
614 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 23:34:42 ] >>612 >>613 良く寝て頭を休めろ。
615 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 00:11:55 ] SMLならメソッドじゃなくてファンクションだろ、とどうでもいい突っ込み。 再帰関数はn-1番目からn番目を導出する定義をそのまま書くのがコツ。 もう>>606 は見てないだろうけど。
616 名前:デフォルトの名無しさん [2008/11/05(水) 00:43:05 ] 宿題でも独学でもどっちでもいいのでは。
617 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 00:55:48 ] xy.yu.to/ 始終荒れまくりの海外サーバ絵チャだ 一人の神プログラマーが強すぎてマクロ荒しが全く太刀打ちできてない。 荒しプログラマーは全員退散!! 誰か倒してくれwwwwww
618 名前:デフォルトの名無しさん [2008/11/05(水) 01:15:09 ] >>611 わざわざお答え頂ありがとうございます。 一応こちらもパターンマッチングでない、if - elseの方法で出来ました。ネストしたループのfunctionの前にletが抜けていただけでした。 参考になりました。
619 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 04:09:40 ] >>618 こういう課題は論理型の方がすっきりした定義になるね。
620 名前:デフォルトの名無しさん [2008/11/09(日) 12:02:17 ] すんません教えてください。 (int -> int -> int) -> int という関数の定義例が分かりません。 (int -> int) -> int -> int なら たとえば let func = fun f x -> (f 2) * x;; でいいことが分かるのですが、 (int -> int -> int) -> int だとわからなくなります。 『二つのintを引数とし、intを返す関数』を一つの引数としてとり intを返す関数というふうに理解してます。 コードはどのように考えればよいんでしょうか?
621 名前:デフォルトの名無しさん [2008/11/09(日) 12:48:12 ] なんでもいいけど let func f = (f 1 2) + 3;;
622 名前:デフォルトの名無しさん [2008/11/09(日) 14:05:34 ] >>621 ありがとうございます。 理解しました。
623 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 03:10:20 ] ふと気づいたらOCaml3.11.0キテター
624 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 10:16:58 ] おお。 Mozartの64bit版も来ないかなぁ・・・クリスマスプレゼントに