1 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 07:15:21 .net] 関数型言語MLについて語るスレッドです。 MLは、確固とした理論的背景を持つ言語でありながら、 現実的なソフトの開発にも使用できる実用性を備えた言語です。 また、プログラミングの初心者が最初に学習する言語としても優れています。 総本山 Standard ML www.smlnj.org/ Objective Caml caml.inria.fr/ocaml/ 前スレ 関数型言語ML(SML, OCaml, etc.), Part 5 pc12.2ch.net/test/read.cgi/tech/1186292994/
8 名前:デフォルトの名無しさん [2009/06/16(火) 23:52:08 .net] オブジェクトを使わずにステートマシンを作るのによい方法はありますか? 勉強のためにStateパターンを
9 名前:cWュールを使ってやってみようと思ったのですが、 相互依存を回避するうまい方法が思いつきません。 また、状態をそれぞれ別モジュールにするにせよ、一箇所にまとめるにせよ、動的に切り替えるためには 結局パターンマッチさせてそれらを呼び出すようになると思いますが、もっとスマートな方法はありますか? [] [ここ壊れてます]
10 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 10:23:08 .net] >>8 まずは具体的な実装例を挙げてみたら?
11 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 10:43:32 .net] うん、なんか簡単な問題例を出してくれないとわかんないよ。
12 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 10:51:36 .net] state machineの問題例というとよくあるのはストップウォッチとか。
13 名前:8 [2009/06/17(水) 12:36:14 .net] 実際の問題を簡単にした問題例です。 流れ: キャラクタがバイトをして財布がいっぱいになったら銀行へ行く ということを目標金額まで繰り返し、到達したらその金がなくなるまで 家でごろ寝し、なくなったらまた働く キャラクタは ・バイトをする : 手持ちが1増える ・銀行で貯金をする : 手持ちを0にし、貯金が1増える ・家で寝る : 貯金が1減る の状態を取ります。 財布の許容量は3、目標貯金額は5とします。 Ocaml的な解決方法のアドバイスをいただけると幸いです。 ちなみに元々の問題は「実例で学ぶゲームAIプログラミング」 という本の2章に出てくる、上記の問題例にいくつか余分な状態を 追加したようなものです。 元々の問題をとりあえず実装してみたソースとサンプルソースも あげてみました。 www1.axfc.net/uploader/Sc/so/9827.lzh
14 名前:8 [2009/06/17(水) 12:42:44 .net] スレ違いではありますが、もう1つ後学のために質問をさせてください。 アップロードするのは初めてでよくわからないままaxfcを 使用したのですが、プログラム板で一般的に使用されている アップローダーというものはあるのでしょうか?
15 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 14:43:02 .net] >12 その手の奴って素直に状態保持した方が色々スッキリしそうなんだけどどうなのエロイ人
16 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 16:54:33 .net] >>12 > キャラクタは > ・バイトをする : 手持ちが1増える > ・銀行で貯金をする : 手持ちを0にし、貯金が1増える > ・家で寝る : 貯金が1減る > の状態を取ります。 ニート解: キャラクタはバイトせず取り敢えず銀行へ行く ということを目標金額まで繰り返し、到達したらその金がなくなるまで 家でごろ寝し、なくなったらまた働かずにまた銀行へ行く
17 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 17:28:06 .net] 継続っぽくすればいいんじゃない?
18 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 22:02:12 .net] コードを晒すにはここがいいよ codepad.org/
19 名前:デフォルトの名無しさん [2009/06/17(水) 22:22:20 .net] なんで12の問題にStateパターンが適してるのかよくわからない。。
20 名前:デフォルトの名無しさん [2009/06/17(水) 22:31:48 .net] interface State { void whatToDoNext(); } みたいなインターフェイスがあって、 class RichState implements State { public void whatToDoNext() { goToTheBank(); } class PoorState implements State { public void whatToDoNext() { work(); } ... みたいなイメージですか?
21 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 23:05:02 .net] これくらいなら引数に状態を持たせて各状態を手続きで表せばよくね?
22 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 23:07:47 .net] >>20 のやり方がいいんじゃねーかな たぶん>>16 も同じこと? たぶん両者が言ってるのはこんな感じ?(1/2) type action = | Work // バイトをする | Deposite // 銀行で貯金をする | Rest;; // 家で寝る type life_state = | Working // …ということを目標金額まで繰り返し | Resting;; // ごろ寝 let sigma event state = match (event, state) with // バイトをする: 手持ちが1増える | (Work, (budget, account)) -> (budget + 1, account) // 銀行で貯金をする: 手持ちを0にし、貯金が1増える | (Deposite, (budget, account)) -> (0, account + 1) // 家で寝る: 貯金が1減る | (Rest, (budget, account)) -> (budget, account - 1);;
23 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 23:09:23 .net] (2/2) let rec life state days = printfn "%A" (state, days); if days = 0 then () else match state with // 財布がいっぱいになったら銀行へ行く | (Working, (3, account)) -> life (Working, sigma Deposite (3, account)) (days - 1) // ということを目標金額まで繰り返し | (Working, (budget, 5)) -> life (Resting, sigma Rest (budget, 5)) (days - 1) // (財布がいっぱいになるまでは働く) | (Working, s) -> life (Working, sigma Work s) (days - 1) // 到達したらその金がなくなるまで家でごろ寝し、なくなったらまた働く | (Resting, (budget, 0)) -> life (Working, sigma Work (budget, 0)) (days - 1) // (なくなるまではごろ寝する) | (Resting, s) -> life (Resting, sigma Rest s) (days - 1);; 改行が…まぁいいか ちなみにF#です
24 名前:8 [2009/06/18(木) 00:21:17 .net] >>16 継続について調べてみます。 >>17 ありがとうございます。今度コードを晒すときに使ってみます。 >>19 おそらくそのイメージで合っていると思います。 (とはいってもJavaはよくわからないのですが・・・) トップレベルでキャラクタクラスのUpdateを呼び出すと、保持している 派生状態クラスのインターフェースに自身を渡して実行。あとはよろしく。 状態の切り替えも勝手にお願いね。 的なコードが元々のサンプルコードです。 >>21 コードを書いていただきありがとうございます。 例題を簡略化したせいで反ってわかりにくくなってしまい、すみませんでした。 とりあえず継続というものを調べつつもう少し考えて見ます。 皆様ありがとうございました。
25 名前:デフォルトの名無しさん [2009/06/18(木) 22:18:10 .net] 考えてみたけどこれじゃだめ? (* 1/2 *) type state = { cash: int; deposit: int; action: unit -> state } let rec work_state cash deposit = { cash = cash; deposit = deposit; action = (fun () -> print_endline "work"; let cash' = succ cash in if cash' < 3 then work_state cash' deposit else rich_state cash' deposit )} and rich_state cash deposit = { cash = cash; deposit = deposit; action = (fun () -> print_endline "go to the bank"; let deposit' = succ deposit in if deposit' < 5 then work_state 0 deposit' else neet_state 0 deposit' )}
26 名前:デフォルトの名無しさん [2009/06/18(木) 22:19:23 .net] (* 2/2 *) and neet_state cash deposit = { cash = cash; deposit = deposit; action = (fun () -> print_endline "sleep"; let deposit' = pred deposit in if deposit' > 0 then neet_state cash deposit' else work_state cash deposit' )} let initial_state = work_state 0 0
27 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 09:08:15 .net] この規模だといいけど、 行動の結果と選択を独立に実装できる方が 将来の拡張にはよいんじゃないかな、 特に質問者はゲームAIの本読んでるらしいし。
28 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 14:59:30 .net] いつのまにやらObjective Caml is 3.11.1でてる
29 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 12:20:07 .net] OCamlで副作用のあるライブラリを使っていて、 クロージャの(環境の)合成がしたくなったのですが失敗します 再現コードを書くと ma,mbは期待通りですがmcは毎回1が出力されます 環境の中の環境ってのは呼ばれるごとに新しい環境になるからってことですかね let a x f= let r = ref x in fun ()->Printf.printf "%d" !r;f(); r:=!r+1;; let b x f= let r = ref x in fun ()->Printf.printf "%d" !r;f(); r:=2* !r;; let c x f = fun ()->(a x (b x f))();; let ma = a 0 (fun ()->Printf.printf "a\n" );; let mb = b 1 (fun ()->Printf.printf "b\n");; let mc = c 1 (fun ()->Printf.printf "c\n");; ma();;ma();;ma();; mb();;mb();;mb();; mc();;mc();;mc();; てことはOCamlのオブジェクト指向部分ちゃんと覚えないとだめかな by poor man
30 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 16:54:49 .net] let rec length list = match list with [] -> 0 | x::rest -> 1 + length rest;; このリストの長さを返す再帰関数の動きなんですが、下へ展開していって ループが終了したら、上に値が戻ってくるイメージでOKですか? length [2; 1; 3] = match [2; 1; 3] with | 2 :: [1; 3] -> 1 + length [1; 3] = match [1; 3] with | 1 :: [3] -> 1 + length [3] = match [3] with | 3 :: [] -> 1 + length [] = match [] with [] -> 0 1 + 0 1 + 1 1 + 2 length [2; 1; 3] = 3
31 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 17:01:54 .net] 上とか下でなくて、行って戻ってくるイメージですね。ブーメランみたいな。
32 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 17:02:56 .net] IDないんですね。29,30,31は、29です。
33 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 17:16:19 .net] インデントを浅くしろw 基本的に再帰は漸化式と同じと考えれば良い。 それで合ってるが、一々動作を深く考えずに関数を定義出来るようになるのが 最初の一歩だから精進すべし。
34 名前:129 mailto:sage [2009/06/20(土) 17:41:30 .net] ども。インデントはあれかなぁと書いた後に思いました。 命令型言語だとカウントする変数を作ってa = a + 1みたいな イメージが強くて直感的にこのソース見て理解出来なかったので。 書いて見ると理解出来るもんですね。精進します。
35 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 21:21:43 .net] >>29 ocamlのトップレベルには#traceというディレクティブがあって、 指定した関数の動きが表示される 再帰関数の動きを確認するのにはやや便利だから使ってみて # #trace length;; length is now traced. # length [1;2;3];; length <-- [<poly>; <poly>; <poly>] length <-- [<poly>; <poly>] length <-- [<poly>] length <-- [] length --> 0 length --> 1 length --> 2 length --> 3 - : int = 3
36 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 13:16:20 .net] >>34 こういうのあったんですね。助かります。どもです。
37 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 19:21:20 .net] 前スレって埋まる前に落ちたんですか?
38 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 19:24:33 .net] うん
39 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 09:18:56 .net] >>28 質問をまず推敲してくれ。「期待」とやらが何かわかんねー。 > てことはOCamlのオブジェクト指向部分ちゃんと覚えないとだめかな それは違うだろ。
40 名前:38 mailto:sage [2009/06/22(月) 09:32:13 .net] >>28 let c x f = a x (b x f);; これが28の期待に沿っているといいのだが。
41 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 09:00:15 .net] ttp://flyingfrogblog.blogspot.com/2009/03/hlvm-has-been-released.html HLVMってのはLLVMの関数型特化版、みたいなイメージ? OCamlはこっちになるの? おしえてエロいひと
42 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 10:34:57 .net] 釣りなの?釣りなの? > HLVMってのはLLVMの関数型特化版、みたいなイメージ? そういう理解でいい。 HLVM そのものの批判は詳細を知らないのでできないけど、 - Caml team は HLVM プロジェクトには全く噛んでない。 - Caml team と consortium が関知しない code generation の総入れ替えはありえない。 - HLVM で騒いでいる奴は各種言語メーリングリストの有名粘着。何かというとすぐ自分の有料メールマガジンに誘導。 - なんかちょっとした toy example が出来るたびに大騒ぎ。正直みんな食傷している。 将来化ける事もあるかもしれない。が、今は放置をお薦め。時間の無駄。
43 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 13:27:16 .net] >>41 前スレでも話題になってたHarropのこと?
44 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 16:00:15 .net] ttp://www.infoq.com/jp/news/2008/03/revoerability-and-testing-oo-fp ここに 「Feathers氏に反対する人の多くは、関数型のコード乱雑になる原因は、 関数型ではないイディオムを関数型言語に持ち込んだこと以外にはないと 信じている。」 っていう記述があるけど、関数型言語のイディオム(とかデザインパターン)って どんなのがあるの?おしえてエロいひとー
45 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 16:23:20 .net] >>43 原文を読んでみると、単に副作用のない純粋関数型のコードを 関数型のイディオムと呼んでいるように思えるな。
46 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 17:28:56 .net] >>43 そうだとするとあまりに漠然としていて多少の窮屈感が欲しくなるな。 ノーパンでスカートを穿いているような、あるいは力戦になって次に なにを指せばいいのかわからない、そんな感じ。 そのうちそういうのがまとめられればいいなぁ。
47 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 17:29:56 .net] >>45 のアンカーまちがえた。 >>44 が正解
48 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 17:58:00 .net] >>45 おっしゃる事があまりに漠然としていて多少の具体感が欲しくなるな。 ノーパンでスカートも穿いてないような、あるいは序盤なのに次に なにを指せばいいのかわかってない、そんな感じ。 そのうちそういうのをまとめられるようになってくれ。
49 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 18:23:04 .net] >>45 関数型が嫌いor慣れてない人の多くは純粋関数型の副作用の無い世界を 非常に窮屈だと感じるわけで。不感症になったのも慣れということだなw
50 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 18:37:21 .net] >>43 そのまんま、関数型スタイルだろ。
51 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 21:34:35 .net] >>41 ありがとん参考になった! ベンチマークだけみて速いなーとか思っただけなんで、 そんな背景があったとはまったく知らんかったyo
52 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 09:15:16 .net] >>50 GC なしで早いよーと叫ばれてもね。 普通にMLのプログラムがコンパイル出来るようになったら ベンチを見てみてもいい。
53 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 09:18:35 .net] >>43 デザインパターンってぶっちゃけてみれば、バッドノウハウのことでしょ。 関数型言語にそんなのないよ。
54 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 09:23:49 .net] 昨晩の議論の結果、「デザインパターン」はありませんが、「あるあるネタ集」ならあることになりました。
55 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 19:11:49 .net] >>52 関数型言語にデザインパターンがないということはないだろう。要は「あるあるネタ集」(の粒度がある程度あるもの)のことなんだから。 オブジェクト指向でのデザインパターンは関数型言語ではバッドノウハウになり得るというのは同意。
56 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 19:16:04 .net] >>52 バッドノウハウはアンチパターン
57 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 21:07:53 .net] F#>Java いずれこうなるから安心しろ。
58 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 21:30:13 .net] いずれw
59 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 21:36:15 .net] あらゆる意味でF#>>>>Javaだろ。Windows上では。 特に関数型言語が好きだからとかではなく。客観的事実。
60 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 21:37:58 .net] Javaはネイティブで動かないからうんこ。 スレッドで動いてるガベコレも時々挙動がおかしくなるからうんこ。
61 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 22:47:46 .net] 最終話「structをfunctorに」 すべてを終わらせる時…! C・Y・C第1巻は、発売未定です。夢野カケラ OCaml : チクショオオオオ!くらえC++!ガベージコレクション! C++ : さあ来いOCaml!実はオレは一回不正なメモリ操作しただけで死ぬぞオオ! (ガッ) C++ : グアアアア!こ、この地上でもっともバカな言語と呼ばれる四天王のC++が… こんな不純粋関数言語に…バ…バカなアアアアアア (ドドドドド) C++ : グアアアア Delphi : C++がやられたようだな… VB : フフフ…奴は四天王の中でも最弱… C# : MLごときに負けるとは手続き型言語の面汚しよ… OCaml : くらええええ! (ズサ) 3言語 : グアアアアアアア OCaml : やった…ついに四天王を倒したぞ…これでJavaのいるWindowsのWindowが開かれる!! Java : よく来たなObjective Caml…待っていたぞ… (ギイイイイイイ) OCaml : こ…ここがWindowsだったのか…!感じる…Javaの魔力を… Java : OCamlよ…戦う前に一つ言っておくことがある。お前は私を倒すのに 『オブジェクト指向』が必要だと思っているようだが…別になくても倒せる OCaml : な 何だって!? Java : そしてお前の入門書は増えてきたので最寄りの本屋へお取り寄せしておいた。 あとは私を倒すだけだなクックック… (ゴゴゴゴ) OCaml : フ…上等だ…オレも一つ言っておくことがある。このオレに生き別れたF#が いるような気がしていたが別にそんなことはなかったぜ! Java : そうか OCaml : ウオオオいくぞオオオ! Java : さあ来いOCaml! OCamlのnative codeが世界を救うと信じて…! ご愛読ありがとうございました!
62 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 23:13:22 .net] > OCaml : こ…ここがWindowsだったのか…!感じる…Javaの魔力を… ワロタ
63 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 00:05:56 .net] F#ってOCamlとどれほど違うの?
64 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 00:40:01 .net] >>62 F#スレにこんなのあったよ 553 名前:デフォルトの名無しさん[sage] 投稿日:2009/06/01(月) 22:32:37 >>552 OCamlのみ 多相ヴァリアント、ファンクタ、注釈ありで型がつく箇所では省略しても必ず型推論できる性質 Camlp4/5、ビルド関係のツール(F#はしょぼい) オブジェクト指向部分は根本的に違う(nominal/structural)
65 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 00:47:26 .net] >>63 ありがとう。なんか半分以上わからないけど。わかった事にしとく。
66 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 02:30:58 .net] >>60 ワロタw WindowsのWindowにやられたww
67 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 11:26:18 .net] >>50 caml-list で Harrop が New HLVM examples! というサブジェクトで騒いでるから、それ見て、判断して。
68 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 11:37:09 .net] >>63 ここで聞くのもアレだけど 型推論が残念なことになったのは演算子のオーバーロードのせい?
69 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 21:23:16 .net] >Java : そうか そうかってwww どんだけスルー
70 名前:デフォルトの名無しさん [2009/06/26(金) 03:32:33 .net] List.fold_left (fun (x,_) y -> x + y) 0 [(1,1)];; を通そうとしたところ This expression has type int but is here used with type int * 'a といわれてしまいます。うまい方法はないのでしょうか?
71 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 04:50:58 .net] >>69 高階関数の引数が順番逆なだけじゃね フォールドライトならそれでおkかも
72 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 11:43:48 .net] すいません スレよごしてしまって .... おっしゃる通りでした .... orz
73 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 12:25:05 .net] fold 辺りまで来たら、フィーリングでデバッグするんじゃなくて、 ちゃんと型を確認しだしたほうがいいね。
74 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 22:06:11 .net] itpro.nikkeibp.co.jp/article/COLUMN/20061212/256657/?ST=develop ↑ここを読んでいて、LablGLをインストールしようとして失敗しました。 どうしたらいいか教えてください。 OSはWindowsXPです。 ・lablgl-1.04-win32.zipをObjective Caml以下のディレクトリに直接展開しました。 ・Microsoft Visual C++ 2008 Redistributable Package (x86).をインストールしました。 ・glut-3.7.6-bin.zipをダウンロードし、glut32.dllをsystem32フォルダにコピーしました。 ・コマンドプロンプトを開き、 C:\Program Files\Objective Caml\lib\lablGLまで移動し、 ocaml build.mlをコマンドプロンプトから実行しました。 途中までは走っていたのですが、以下のようにエラーが出ました。 C:/Tcl/lib tk84.lib tcl84.lib gdi32.lib user32.lib " togl.cmo ocamlc.opt -w s -I +labltk -a -o lablglut.cma -cclib -llablglut -dllib -llablglu t -cclib "glut32.lib " glut.cmo ocamlopt.opt -w s -I +labltk -c raw.ml 'ml' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 File "raw.ml", line 1, characters 0-1: Error: Assembler error, input left in file C:\DOCUME~1\****<※ユーザ名>\LOCALS~1\Temp\camla smd25ac5.asm Native build failed: error 2 You can still use the bytecode version Now ready to use on an OCaml MSVC port ※ここまで またコマンドプロンプトから > lablglut を実行した際にもエラーが出ました。 Cannot load required shared library dlllablgl. Reason: C:\Program Files\Objective Caml\lib\stublibs\dlllablgl.dll: このアプリケ ーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケ ーションを再度インストールすることにより問題が解決する場合があります。 ※ここまで
75 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 22:25:15 .net] 原因はわからんが、参考までに labltkはインストールしてるか ocamlはネイティブコンパイラまでインストール済か Activetclはバージョン8.5系だと動かなかったので8.4を入れる build.mlを実行した際に cygwinのlink.exeが使われるとエラーになるので 環境変数からcygwinのパスをはずす glutはそれと同じバージョンで動いたよ
76 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 03:11:27 .net] >>74 レスありがとうございます。 ですがどうも上手く行かないので、悩んでいます。 どこかで薦められてOCamlは "Self installer (3.11.0) for the port based on the MinGW toolchain" が入ってますが、Cygwin入れてないんです。これが原因なのかなぁ。 Cygwin以前入れたのですが今は外してしまってます。 近いうちに再度Cygwinをインストールしてみることにします。 読み進めたいので、このまま>>73 の第五回は一応読むだけ読んで、 次に行きたいと思います。
77 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 13:21:20 .net] ocaml用のサウンドライブラリ(スピーカーから音を出したりマイクの音を拾ったり)で一番ポピュラーなのって何かな?
78 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 13:34:48 .net] >>76 OCamlSDL でサポートしてなかったら自作して公開よろ。
79 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 13:40:59 .net] >>77 だって、作るとしたらWin32APIとかOSSとかALSAとかいろいろサポートして、なおかつメンテもしないといけないんでしょう? 嫌ですよ。
80 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 16:08:25 .net] >>78 うわなんかヘタレられた。 自分のやりたいAPIのインターフェースだけ作りゃいいじゃん。 メンテもしたけりゃするだけでいいじゃん。 初期化とかは何かのライブラリ関数呼ぶだけだし。 やりたいことはほとんどデバイスから ノンブロッキングに読んだり書いたりするだけで大抵出来るっしょ。
81 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 17:35:00 .net] >>79 そんな俺しか使わないライブラリを公開するぐらいなら、公開せずに手元に持っておいて、作り溜めしときますよ。
82 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 20:12:55 .net] >>75 俺もなんかそうなる。 OCamlは3.10.2でLablGLは1.03にもどしたら上手くいった
83 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 21:04:21 .net] >>81 ありがとうございます。1.03にしたら "OCaml build.ml"は上手く行ったようです。 しかし 「ocamlrun.exe - コンポーネントが見つかりません ocamlrun.dll が見つからなかったため、このアプリケーションを開始できませんでした。」 となってしまいまたもや失敗。 >>73 のリンク先を見るとLablGLのインストールが失敗してるというのですが インストールしなおしても同じエラーメッセージが出ます。はてさて。 OCaml本体は"ocaml-3.11.0-win-msvc.exe"をインストールしなおしました。
84 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:06:31 .net] Windowsだとライブラリのビルドでつまづくことが多いよね。 OcamlSDL関連のビルドで上手くいなかくてビルドを諦めた。 OCaml自体はプログラミング入門者にも比較的優しいと 思うけど環境は若干敷居が高めだと思う。 んでWindows使うのが悪いとかいわれちゃうとしょんぼりする。 そもそもLinux系を使うこと自体、本職でない人にとっては 普通ではないわけで。
85 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:14:49 .net] あれぇ?書き込めた。どうせアク禁の巻き添えで書き込めないだろうと 勉強不足を棚に上げた愚痴>>83 を書いてみたら・・・。 ごめんなさい。反省しています。
86 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:15:43 .net] OCamlユーザは計算機科学の研究者が多いんだから、それは仕方ないだろ
87 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:17:23 .net] 教育用というか初心者向けのサイトですらUNIX前提の記述が多いように思えるけどな。
88 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:17:58 .net] UnixやLinuxがプログラミング教育に適しているからだろう。
89 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:18:10 .net] >>85 >>86 うん。わかってはいるんだ。あんな書き込みをしてしまってごめんとしかいいようがない。
90 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:29:17 .net] まあ、ドザーはおとなしくF#でも弄ってなさいって事だw
91 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 23:16:11 .net] >>82 (いまさらだが)OCamlのReadmeを見ると MinGWの場合は Do *not* install the Mingw/MSYS development tools from www.mingw.org: these are not compatible with this Caml port (@responsefile not recognized on the command line). って書いてあるからCygwinが必要なんだと思われる。 英語は雰囲気で読んでいるので間違っていたら誰かやさしく叱ってくれ。
92 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 23:40:30 .net] >>84 > あれぇ?書き込めた。どうせアク禁の巻き添えで書き込めないだろうと > 勉強不足を棚に上げた愚痴>>83 を書いてみたら・・・。 この精神でビルドがんばれ。 どうせビルドできないと思ってもできるかも。
93 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 00:26:31 .net] いやcygwin/mingw系はさっさとあきらめるのが吉だと思う
94 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 03:36:38 .net] >>89 そんなこと言ってるから関数型はいつまでたってもドマイナーなんだよ
95 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 04:59:31 .net] それって何か問題があるんだっけ?
96 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 12:32:44 .net] スレとは関係ないが、東北型言語を使用する俺は「だっけ?」が方言かどうかわからなくなるときがある。
97 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 12:45:46 .net] そうですけ?
98 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 12:50:27 .net] >>95 それは、ずいぶん、どい なか です ね
99 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 13:13:58 .net] 東北型言語と聞いたら、語尾に#を付けるんだと思った。
100 名前:82 mailto:sage [2009/06/30(火) 17:56:45 .net] そういうもんなんだとあきらめる事にしましたw 結局Cygwinなんか入れるよりもお勉強用のLinuxマシンを用意した方が早そうですね。 レス頂いてありがとうございます。
101 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 18:50:55 .net] >>99 完全にスレチだが、別にマシンを用意しなくても仮想環境を使えば楽なのに。
102 名前:82 mailto:sage [2009/06/30(火) 18:57:35 .net] セレロン1G、メモリ256Mしかないノートなんです。仮想環境は無理では。 Knopixとかならできるのかな?
103 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 23:12:27 .net] >>101 virtual boxでdebianがおすすめです。 かなり低スペックでも動いて、何よりaptーgetでocamlも含め、たいていのライブラリが簡単にインストール出来ます。
104 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 00:05:15 .net] プログラミングinOCamlの練習問題5.6 @を使わずにquick_sortを書き換えよ ヒント:引数を一つ増やして整列済みのリストを受け取る ってやつが解けまへん。。 教えて、偉い人
105 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 01:27:12 .net] >>102 まじっすかー!ありがとうございます。 今Ubuntuのデュアルブート環境作成厨…orz ウブンツ重かったらそちらを試してみます。
106 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 01:35:56 .net] >>103 本読んでないけど末尾再帰じゃないすかね。
107 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 08:39:57 .net] >>104 apt getはububtuもdebianもほぼ同じなので、ububtuでも大丈夫ですよ。
108 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 16:48:02 .net] virtual box + debian + OCamlで作成したネイティブコードはやっぱり Windows上では動かないん?会社がWindowsだから・・・。 動くなら今すぐそっちの環境に移行したい。