09/06/15 07:15:21 .net
関数型言語MLについて語るスレッドです。
MLは、確固とした理論的背景を持つ言語でありながら、
現実的なソフトの開発にも使用できる実用性を備えた言語です。
また、プログラミングの初心者が最初に学習する言語としても優れています。
総本山
Standard ML URLリンク(www.smlnj.org)
Objective Caml URLリンク(caml.inria.fr)
前スレ
関数型言語ML(SML, OCaml, etc.), Part 5
スレリンク(tech板)
2:デフォルトの名無しさん
09/06/15 19:45:36 .net
プログラミングの初心者が最初に学習する言語としても優れているのに、
学習者が増えないのはなぜなの?
3:デフォルトの名無しさん
09/06/15 19:57:50 .net
>>2
教える側が理解していないから。
4:デフォルトの名無しさん
09/06/15 20:04:59 .net
>>2
初心者が日常で使うにはハードルが高いからかな
5:デフォルトの名無しさん
09/06/16 01:24:50 .net
前スレでもあったけどOcamlとHaskellってどっちが初心者に向いてるのかな?
Lispいじってた俺にとってはOcamlの方が見た感じ楽そうに見えるけど
Lisp、Ocaml、Haskellマスターの意見が聞いてみたいな
6:デフォルトの名無しさん
09/06/16 09:59:16 .net
standard MLをさらっとやってから決めれば。
7:デフォルトの名無しさん
09/06/16 22:59:25 .net
>>5
型つき関数型言語の背景にある背景理論(ラムダ計算)をぱっと勉強したいならHaskell,
実用で長いこと使いたいならOCaml。
8:デフォルトの名無しさん
09/06/16 23:52:08 .net
オブジェクトを使わずにステートマシンを作るのによい方法はありますか?
勉強のためにStateパターンを�
9:cWュールを使ってやってみようと思ったのですが、 相互依存を回避するうまい方法が思いつきません。 また、状態をそれぞれ別モジュールにするにせよ、一箇所にまとめるにせよ、動的に切り替えるためには 結局パターンマッチさせてそれらを呼び出すようになると思いますが、もっとスマートな方法はありますか?
10:デフォルトの名無しさん
09/06/17 10:23:08 .net
>>8
まずは具体的な実装例を挙げてみたら?
11:デフォルトの名無しさん
09/06/17 10:43:32 .net
うん、なんか簡単な問題例を出してくれないとわかんないよ。
12:デフォルトの名無しさん
09/06/17 10:51:36 .net
state machineの問題例というとよくあるのはストップウォッチとか。
13:8
09/06/17 12:36:14 .net
実際の問題を簡単にした問題例です。
流れ:
キャラクタがバイトをして財布がいっぱいになったら銀行へ行く
ということを目標金額まで繰り返し、到達したらその金がなくなるまで
家でごろ寝し、なくなったらまた働く
キャラクタは
・バイトをする : 手持ちが1増える
・銀行で貯金をする : 手持ちを0にし、貯金が1増える
・家で寝る : 貯金が1減る
の状態を取ります。
財布の許容量は3、目標貯金額は5とします。
Ocaml的な解決方法のアドバイスをいただけると幸いです。
ちなみに元々の問題は「実例で学ぶゲームAIプログラミング」
という本の2章に出てくる、上記の問題例にいくつか余分な状態を
追加したようなものです。
元々の問題をとりあえず実装してみたソースとサンプルソースも
あげてみました。
URLリンク(www1.axfc.net)
14:8
09/06/17 12:42:44 .net
スレ違いではありますが、もう1つ後学のために質問をさせてください。
アップロードするのは初めてでよくわからないままaxfcを
使用したのですが、プログラム板で一般的に使用されている
アップローダーというものはあるのでしょうか?
15:デフォルトの名無しさん
09/06/17 14:43:02 .net
>12
その手の奴って素直に状態保持した方が色々スッキリしそうなんだけどどうなのエロイ人
16:デフォルトの名無しさん
09/06/17 16:54:33 .net
>>12
> キャラクタは
> ・バイトをする : 手持ちが1増える
> ・銀行で貯金をする : 手持ちを0にし、貯金が1増える
> ・家で寝る : 貯金が1減る
> の状態を取ります。
ニート解:
キャラクタはバイトせず取り敢えず銀行へ行く
ということを目標金額まで繰り返し、到達したらその金がなくなるまで
家でごろ寝し、なくなったらまた働かずにまた銀行へ行く
17:デフォルトの名無しさん
09/06/17 17:28:06 .net
継続っぽくすればいいんじゃない?
18:デフォルトの名無しさん
09/06/17 22:02:12 .net
コードを晒すにはここがいいよ
URLリンク(codepad.org)
19:デフォルトの名無しさん
09/06/17 22:22:20 .net
なんで12の問題にStateパターンが適してるのかよくわからない。。
20:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/17 23:05:02 .net
これくらいなら引数に状態を持たせて各状態を手続きで表せばよくね?
22:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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
09/06/18 00:21:17 .net
>>16
継続について調べてみます。
>>17
ありがとうございます。今度コードを晒すときに使ってみます。
>>19
おそらくそのイメージで合っていると思います。
(とはいってもJavaはよくわからないのですが・・・)
トップレベルでキャラクタクラスのUpdateを呼び出すと、保持している
派生状態クラスのインターフェースに自身を渡して実行。あとはよろしく。
状態の切り替えも勝手にお願いね。
的なコードが元々のサンプルコードです。
>>21
コードを書いていただきありがとうございます。
例題を簡略化したせいで反ってわかりにくくなってしまい、すみませんでした。
とりあえず継続というものを調べつつもう少し考えて見ます。
皆様ありがとうございました。
25:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/19 09:08:15 .net
この規模だといいけど、
行動の結果と選択を独立に実装できる方が
将来の拡張にはよいんじゃないかな、
特に質問者はゲームAIの本読んでるらしいし。
28:デフォルトの名無しさん
09/06/19 14:59:30 .net
いつのまにやらObjective Caml is 3.11.1でてる
29:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/20 17:01:54 .net
上とか下でなくて、行って戻ってくるイメージですね。ブーメランみたいな。
32:デフォルトの名無しさん
09/06/20 17:02:56 .net
IDないんですね。29,30,31は、29です。
33:デフォルトの名無しさん
09/06/20 17:16:19 .net
インデントを浅くしろw
基本的に再帰は漸化式と同じと考えれば良い。
それで合ってるが、一々動作を深く考えずに関数を定義出来るようになるのが
最初の一歩だから精進すべし。
34:129
09/06/20 17:41:30 .net
ども。インデントはあれかなぁと書いた後に思いました。
命令型言語だとカウントする変数を作ってa = a + 1みたいな
イメージが強くて直感的にこのソース見て理解出来なかったので。
書いて見ると理解出来るもんですね。精進します。
35:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/21 13:16:20 .net
>>34
こういうのあったんですね。助かります。どもです。
37:デフォルトの名無しさん
09/06/21 19:21:20 .net
前スレって埋まる前に落ちたんですか?
38:デフォルトの名無しさん
09/06/21 19:24:33 .net
うん
39:デフォルトの名無しさん
09/06/22 09:18:56 .net
>>28
質問をまず推敲してくれ。「期待」とやらが何かわかんねー。
> てことはOCamlのオブジェクト指向部分ちゃんと覚えないとだめかな
それは違うだろ。
40:38
09/06/22 09:32:13 .net
>>28
let c x f = a x (b x f);;
これが28の期待に沿っているといいのだが。
41:デフォルトの名無しさん
09/06/23 09:00:15 .net
URLリンク(flyingfrogblog.blogspot.com)
HLVMってのはLLVMの関数型特化版、みたいなイメージ?
OCamlはこっちになるの? おしえてエロいひと
42:デフォルトの名無しさん
09/06/23 10:34:57 .net
釣りなの?釣りなの?
> HLVMってのはLLVMの関数型特化版、みたいなイメージ?
そういう理解でいい。
HLVM そのものの批判は詳細を知らないのでできないけど、
- Caml team は HLVM プロジェクトには全く噛んでない。
- Caml team と consortium が関知しない code generation の総入れ替えはありえない。
- HLVM で騒いでいる奴は各種言語メーリングリストの有名粘着。何かというとすぐ自分の有料メールマガジンに誘導。
- なんかちょっとした toy example が出来るたびに大騒ぎ。正直みんな食傷している。
将来化ける事もあるかもしれない。が、今は放置をお薦め。時間の無駄。
43:デフォルトの名無しさん
09/06/23 13:27:16 .net
>>41
前スレでも話題になってたHarropのこと?
44:デフォルトの名無しさん
09/06/23 16:00:15 .net
URLリンク(www.infoq.com)
ここに
「Feathers氏に反対する人の多くは、関数型のコード乱雑になる原因は、
関数型ではないイディオムを関数型言語に持ち込んだこと以外にはないと
信じている。」
っていう記述があるけど、関数型言語のイディオム(とかデザインパターン)って
どんなのがあるの?おしえてエロいひとー
45:デフォルトの名無しさん
09/06/23 16:23:20 .net
>>43
原文を読んでみると、単に副作用のない純粋関数型のコードを
関数型のイディオムと呼んでいるように思えるな。
46:デフォルトの名無しさん
09/06/23 17:28:56 .net
>>43
そうだとするとあまりに漠然としていて多少の窮屈感が欲しくなるな。
ノーパンでスカートを穿いているような、あるいは力戦になって次に
なにを指せばいいのかわからない、そんな感じ。
そのうちそういうのがまとめられればいいなぁ。
47:デフォルトの名無しさん
09/06/23 17:29:56 .net
>>45のアンカーまちがえた。
>>44が正解
48:デフォルトの名無しさん
09/06/23 17:58:00 .net
>>45
おっしゃる事があまりに漠然としていて多少の具体感が欲しくなるな。
ノーパンでスカートも穿いてないような、あるいは序盤なのに次に
なにを指せばいいのかわかってない、そんな感じ。
そのうちそういうのをまとめられるようになってくれ。
49:デフォルトの名無しさん
09/06/23 18:23:04 .net
>>45
関数型が嫌いor慣れてない人の多くは純粋関数型の副作用の無い世界を
非常に窮屈だと感じるわけで。不感症になったのも慣れということだなw
50:デフォルトの名無しさん
09/06/23 18:37:21 .net
>>43
そのまんま、関数型スタイルだろ。
51:デフォルトの名無しさん
09/06/23 21:34:35 .net
>>41
ありがとん参考になった!
ベンチマークだけみて速いなーとか思っただけなんで、
そんな背景があったとはまったく知らんかったyo
52:デフォルトの名無しさん
09/06/24 09:15:16 .net
>>50
GC なしで早いよーと叫ばれてもね。
普通にMLのプログラムがコンパイル出来るようになったら
ベンチを見てみてもいい。
53:デフォルトの名無しさん
09/06/24 09:18:35 .net
>>43
デザインパターンってぶっちゃけてみれば、バッドノウハウのことでしょ。
関数型言語にそんなのないよ。
54:デフォルトの名無しさん
09/06/24 09:23:49 .net
昨晩の議論の結果、「デザインパターン」はありませんが、「あるあるネタ集」ならあることになりました。
55:デフォルトの名無しさん
09/06/24 19:11:49 .net
>>52
関数型言語にデザインパターンがないということはないだろう。要は「あるあるネタ集」(の粒度がある程度あるもの)のことなんだから。
オブジェクト指向でのデザインパターンは関数型言語ではバッドノウハウになり得るというのは同意。
56:デフォルトの名無しさん
09/06/24 19:16:04 .net
>>52
バッドノウハウはアンチパターン
57:デフォルトの名無しさん
09/06/24 21:07:53 .net
F#>Java いずれこうなるから安心しろ。
58:デフォルトの名無しさん
09/06/24 21:30:13 .net
いずれw
59:デフォルトの名無しさん
09/06/24 21:36:15 .net
あらゆる意味でF#>>>>Javaだろ。Windows上では。
特に関数型言語が好きだからとかではなく。客観的事実。
60:デフォルトの名無しさん
09/06/24 21:37:58 .net
Javaはネイティブで動かないからうんこ。
スレッドで動いてるガベコレも時々挙動がおかしくなるからうんこ。
61:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/24 23:13:22 .net
> OCaml : こ…ここがWindowsだったのか…!感じる…Javaの魔力を…
ワロタ
63:デフォルトの名無しさん
09/06/25 00:05:56 .net
F#ってOCamlとどれほど違うの?
64:デフォルトの名無しさん
09/06/25 00:40:01 .net
>>62
F#スレにこんなのあったよ
553 名前:デフォルトの名無しさん[sage] 投稿日:2009/06/01(月) 22:32:37
>>552
OCamlのみ
多相ヴァリアント、ファンクタ、注釈ありで型がつく箇所では省略しても必ず型推論できる性質
Camlp4/5、ビルド関係のツール(F#はしょぼい)
オブジェクト指向部分は根本的に違う(nominal/structural)
65:デフォルトの名無しさん
09/06/25 00:47:26 .net
>>63
ありがとう。なんか半分以上わからないけど。わかった事にしとく。
66:デフォルトの名無しさん
09/06/25 02:30:58 .net
>>60
ワロタw
WindowsのWindowにやられたww
67:デフォルトの名無しさん
09/06/25 11:26:18 .net
>>50
caml-list で Harrop が
New HLVM examples!
というサブジェクトで騒いでるから、それ見て、判断して。
68:デフォルトの名無しさん
09/06/25 11:37:09 .net
>>63
ここで聞くのもアレだけど
型推論が残念なことになったのは演算子のオーバーロードのせい?
69:デフォルトの名無しさん
09/06/25 21:23:16 .net
>Java : そうか
そうかってwww
どんだけスルー
70:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/26 04:50:58 .net
>>69
高階関数の引数が順番逆なだけじゃね
フォールドライトならそれでおkかも
72:デフォルトの名無しさん
09/06/26 11:43:48 .net
すいません スレよごしてしまって .... おっしゃる通りでした .... orz
73:デフォルトの名無しさん
09/06/26 12:25:05 .net
fold 辺りまで来たら、フィーリングでデバッグするんじゃなくて、
ちゃんと型を確認しだしたほうがいいね。
74:デフォルトの名無しさん
09/06/28 22:06:11 .net
URLリンク(itpro.nikkeibp.co.jp)
↑ここを読んでいて、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:デフォルトの名無しさん
09/06/28 22:25:15 .net
原因はわからんが、参考までに
labltkはインストールしてるか
ocamlはネイティブコンパイラまでインストール済か
Activetclはバージョン8.5系だと動かなかったので8.4を入れる
build.mlを実行した際に
cygwinのlink.exeが使われるとエラーになるので
環境変数からcygwinのパスをはずす
glutはそれと同じバージョンで動いたよ
76:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/29 13:21:20 .net
ocaml用のサウンドライブラリ(スピーカーから音を出したりマイクの音を拾ったり)で一番ポピュラーなのって何かな?
78:デフォルトの名無しさん
09/06/29 13:34:48 .net
>>76
OCamlSDL でサポートしてなかったら自作して公開よろ。
79:デフォルトの名無しさん
09/06/29 13:40:59 .net
>>77
だって、作るとしたらWin32APIとかOSSとかALSAとかいろいろサポートして、なおかつメンテもしないといけないんでしょう?
嫌ですよ。
80:デフォルトの名無しさん
09/06/29 16:08:25 .net
>>78
うわなんかヘタレられた。
自分のやりたいAPIのインターフェースだけ作りゃいいじゃん。
メンテもしたけりゃするだけでいいじゃん。
初期化とかは何かのライブラリ関数呼ぶだけだし。
やりたいことはほとんどデバイスから
ノンブロッキングに読んだり書いたりするだけで大抵出来るっしょ。
81:デフォルトの名無しさん
09/06/29 17:35:00 .net
>>79
そんな俺しか使わないライブラリを公開するぐらいなら、公開せずに手元に持っておいて、作り溜めしときますよ。
82:デフォルトの名無しさん
09/06/29 20:12:55 .net
>>75
俺もなんかそうなる。
OCamlは3.10.2でLablGLは1.03にもどしたら上手くいった
83:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/29 22:06:31 .net
Windowsだとライブラリのビルドでつまづくことが多いよね。
OcamlSDL関連のビルドで上手くいなかくてビルドを諦めた。
OCaml自体はプログラミング入門者にも比較的優しいと
思うけど環境は若干敷居が高めだと思う。
んでWindows使うのが悪いとかいわれちゃうとしょんぼりする。
そもそもLinux系を使うこと自体、本職でない人にとっては
普通ではないわけで。
85:デフォルトの名無しさん
09/06/29 22:14:49 .net
あれぇ?書き込めた。どうせアク禁の巻き添えで書き込めないだろうと
勉強不足を棚に上げた愚痴>>83を書いてみたら・・・。
ごめんなさい。反省しています。
86:デフォルトの名無しさん
09/06/29 22:15:43 .net
OCamlユーザは計算機科学の研究者が多いんだから、それは仕方ないだろ
87:デフォルトの名無しさん
09/06/29 22:17:23 .net
教育用というか初心者向けのサイトですらUNIX前提の記述が多いように思えるけどな。
88:デフォルトの名無しさん
09/06/29 22:17:58 .net
UnixやLinuxがプログラミング教育に適しているからだろう。
89:デフォルトの名無しさん
09/06/29 22:18:10 .net
>>85
>>86
うん。わかってはいるんだ。あんな書き込みをしてしまってごめんとしかいいようがない。
90:デフォルトの名無しさん
09/06/29 22:29:17 .net
まあ、ドザーはおとなしくF#でも弄ってなさいって事だw
91:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/06/29 23:40:30 .net
>>84
> あれぇ?書き込めた。どうせアク禁の巻き添えで書き込めないだろうと
> 勉強不足を棚に上げた愚痴>>83を書いてみたら・・・。
この精神でビルドがんばれ。
どうせビルドできないと思ってもできるかも。
93:デフォルトの名無しさん
09/06/30 00:26:31 .net
いやcygwin/mingw系はさっさとあきらめるのが吉だと思う
94:デフォルトの名無しさん
09/06/30 03:36:38 .net
>>89
そんなこと言ってるから関数型はいつまでたってもドマイナーなんだよ
95:デフォルトの名無しさん
09/06/30 04:59:31 .net
それって何か問題があるんだっけ?
96:デフォルトの名無しさん
09/06/30 12:32:44 .net
スレとは関係ないが、東北型言語を使用する俺は「だっけ?」が方言かどうかわからなくなるときがある。
97:デフォルトの名無しさん
09/06/30 12:45:46 .net
そうですけ?
98:デフォルトの名無しさん
09/06/30 12:50:27 .net
>>95
それは、ずいぶん、どい なか です ね
99:デフォルトの名無しさん
09/06/30 13:13:58 .net
東北型言語と聞いたら、語尾に#を付けるんだと思った。
100:82
09/06/30 17:56:45 .net
そういうもんなんだとあきらめる事にしましたw
結局Cygwinなんか入れるよりもお勉強用のLinuxマシンを用意した方が早そうですね。
レス頂いてありがとうございます。
101:デフォルトの名無しさん
09/06/30 18:50:55 .net
>>99
完全にスレチだが、別にマシンを用意しなくても仮想環境を使えば楽なのに。
102:82
09/06/30 18:57:35 .net
セレロン1G、メモリ256Mしかないノートなんです。仮想環境は無理では。
Knopixとかならできるのかな?
103:デフォルトの名無しさん
09/06/30 23:12:27 .net
>>101
virtual boxでdebianがおすすめです。
かなり低スペックでも動いて、何よりaptーgetでocamlも含め、たいていのライブラリが簡単にインストール出来ます。
104:デフォルトの名無しさん
09/07/01 00:05:15 .net
プログラミングinOCamlの練習問題5.6
@を使わずにquick_sortを書き換えよ
ヒント:引数を一つ増やして整列済みのリストを受け取る
ってやつが解けまへん。。
教えて、偉い人
105:デフォルトの名無しさん
09/07/01 01:27:12 .net
>>102
まじっすかー!ありがとうございます。
今Ubuntuのデュアルブート環境作成厨…orz
ウブンツ重かったらそちらを試してみます。
106:デフォルトの名無しさん
09/07/01 01:35:56 .net
>>103
本読んでないけど末尾再帰じゃないすかね。
107:デフォルトの名無しさん
09/07/01 08:39:57 .net
>>104
apt getはububtuもdebianもほぼ同じなので、ububtuでも大丈夫ですよ。
108:デフォルトの名無しさん
09/07/01 16:48:02 .net
virtual box + debian + OCamlで作成したネイティブコードはやっぱり
Windows上では動かないん?会社がWindowsだから・・・。
動くなら今すぐそっちの環境に移行したい。
109:デフォルトの名無しさん
09/07/01 16:55:45 .net
&g
110:t;>107 当然動く訳無い。 大体Linux上で生成されるオブジェクトファイルはELFフォーマットだし。
111:デフォルトの名無しさん
09/07/01 21:24:54 .net
OCamlってLLVMのコード吐けるんじゃなかったっけ
112:デフォルトの名無しさん
09/07/02 09:07:04 .net
>>109
憶測で物を言うな。吐かない。終わり。
113:デフォルトの名無しさん
09/07/02 09:15:48 .net
LLVMのocamlバインディングはある。という話と取り違えたのかな。
114:デフォルトの名無しさん
09/07/02 12:14:41 .net
>>110
終わったところすまないが、>>109は吐ける!と断定しているわけではないから
もう少し生暖かくてもいいと思うんだ。
115:デフォルトの名無しさん
09/07/02 12:49:21 .net
>>112
>>110はいい加減なこと言う奴にうんざりしてるんだろうな。
この板はそんな奴ばかりだから、せめてソースくらい示さないと。
116:デフォルトの名無しさん
09/07/03 05:15:37 .net
LLVMのコード吐けるようにしようぜ、という話だけなら有った気がするが
117:デフォルトの名無しさん
09/07/03 08:55:56 .net
>>114
しーっ!そういうこと言うと
憶測で(ry
とか言われちゃう
118:デフォルトの名無しさん
09/07/03 12:38:28 .net
>>103
「書き換えよ」とか「引数を一つ増やして」といわれても元々のコードがないと
答えられないぜよ。
119:デフォルトの名無しさん
09/07/03 17:08:59 .net
偉い人は プログラミング in OCaml を買ってないので答えられないのではないか。
120:デフォルトの名無しさん
09/07/03 18:05:20 .net
>>117
そういえばOcaml-nagoyaの連中(有限会社ITプランニング)ってどうなったの?
なんか公式サイトにつながらないんだけど。
121:デフォルトの名無しさん
09/07/03 19:23:03 .net
OCamlは大文字で始まるidはconstructor扱いになるんだな
SMLのコードを移植していてはまった
122:デフォルトの名無しさん
09/07/04 11:16:05 .net
ocaml触ってみたんだけど、やっぱりライブラリが少ないね。
練習でちょっとしたものを作ろうとしたけど、ライブラリの少なさでたちまち不便で止まってしまった。
123:デフォルトの名無しさん
09/07/04 11:52:02 .net
そんなに副作用たっぷりのコードを書きたいならF#でも使えばいいのに
124:デフォルトの名無しさん
09/07/04 12:10:39 .net
副作用の無いライブラリを作るのは難しいの?
125:デフォルトの名無しさん
09/07/04 12:19:32 .net
>>122
HaskellならMonad IOがスタンダードだが、OCamlにはないからね。
IOはどうしても副作用になってしまう。
126:デフォルトの名無しさん
09/07/04 12:32:25 .net
それでF#でも使えと言われると辛いね…
127:デフォルトの名無しさん
09/07/04 13:37:39 .net
>>120
どんなライブラリが欲しかったのん?
128:デフォルトの名無しさん
09/07/04 13:58:47 .net
>>118
憶測(ry
じゃなくて、本が違う。
ITplan は知らんけど、一日ぐらいサイトが落ちてていいだろ。週末だし。
129:デフォルトの名無しさん
09/07/04 14:19:25 .net
>>126
どうでも良いけど、365日接続できないサイト運営してる時点で技術力を疑う。
130:デフォルトの名無しさん
09/07/04 14:34:19 .net
休日にメンテなら仕方ないけど、平日の夕方に落ちてるのは問題だな。
131:ogasawara
09/07/04 17:30:22 .net
>>118,126,127,128
恐縮です。うちが契約してるデータセンター屋さんの電源障害だそうで、何ともならなくて。
そろそろ復活するらしいのですが、うーん。
132:ogasawara
09/07/05 09:28:07 .net
>>120
The Caml Hump(URLリンク(caml.inria.fr))という
ところがあって、ここでライブラリを探すとかなり見付かりますよ。
CGI、DB接続、GUI、UTF-8、アルゴリズム色々など有ます。
133:デフォルトの名無しさん
09/07/05 15:57:43 .net
質問です。match文に関する質問です。
これは文法の慣習みたいなものかなと思うんですがどうなのかなぁと。
リストを受け取って何かを返す関数の場合、リストの要素が組やレコードだと
match文の中にmatch文を書くことがありますが、match文ではなく直接パターンマッチさせる書き方の方が
良いのでしょうか?
>>83
vmwareを使ってxp上でubuntuを動かして、ocaml勉強してます。
134:デフォルトの名無しさん
09/07/05 16:48:01 .net
>>131
質問をするときはサンプルコードを示したほうが回答してもらいやすいよ。
この文章だと
>match文ではなく直接パターンマッチさせる書き方の方が良いのでしょうか?
あたりがわかりづらいと思われ。
135:デフォルトの名無しさん
09/07/05 17:28:04 .net
>>132
kekkonっていう関数で、anataというレコードが要素のリストを引数にして
条件に合う人数を返すとかいう場合に・・・
let rec kekkon anata = match anata with
[] -> 0
| first :: rest -> (match first with
{name = n; toshi = t; syunyu = s; tyotiku = t; sisan = s; youshi = y}
-> 0
とかと書かずに、以下のように書くほうがいいのかなぁという質問です。
let rec kekkon anata = match anata with
[] -> 0
| {name = n; toshi = t; syunyu = s; tyotiku = t; sisan = s; youshi = y} :: rest ->
136:デフォルトの名無しさん
09/07/05 17:44:47 .net
>>133
お好きな方を。ただ、
let rec kekkon anata = match anata with
は
let rec kekkon = function
の方が簡潔。
137:デフォルトの名無しさん
09/07/05 17:46:33 .net
どっちでもいいんですね。どもです。
138:デフォルトの名無しさん
09/07/05 18:49:38 .net
>>133
このサンプルコードのように�
139:激Rードであれば直接アクセスするっていう手も あるよ。タプルの場合は状況にもよるけど2番目の方法が多いんじゃないかな。
140:デフォルトの名無しさん
09/07/06 09:38:23 .net
record label に折角意味のある名前を付けてあるのに、
pattern match でワザワザ意味不明な変数に束縛するスタイルはおかしい。
そんなことするから s が二回束縛されてるヨ。
136 の言うように r.name とかでアクセスするほうが普通。
141:デフォルトの名無しさん
09/07/10 16:02:51 .net
データ構造について調べていたら
URLリンク(en.wikipedia.org)
のVlistというものを見つけたのですが、これはリストを使った
動的配列のようなものでしょうか。(英語が苦手のためよくわかりませんでした)
また、OCamlで書くとどのようになるのでしょうか。
分かる方がいたら教えてください。
142:デフォルトの名無しさん
09/07/10 20:09:46 .net
まぁ、List.nth が妙に早い list と思えばいいね。
答えが欲しいの?それとも一緒に考えてほしいの?
Okasaki には載ってないね。
143:(* ~ *)
09/07/10 22:04:04 .net
長さが倍になっていくarrayが中身のリンクリストにしか見えないんですけど。
英語が読めなくても図は見えますよね。
構造はこんな感じでいいんじゃないの(図のまんま)。
type 'a vlisti = VLNil | VLCel of 'a vlisti * int * 'a array
type 'a vlist = 'a vlisti * int
操作は自分で考えませう。
144:デフォルトの名無しさん
09/07/10 22:38:27 .net
>>140
ありがとうございます。コードのおかげでなんとなくですが
イメージできました。(とはいってもこのデータ構造が
どんな風にありがたいのかは、まだ理解できてはいないのですが・・・)
145:139
09/07/11 08:49:39 .net
教育上は
type 'a vlisti = VLNil | VLCel of 'a vlisti * int * 'a option array
のほうが良いです。
140 だと埋まって無いトコを埋める値が必要ですね。(Obj.magic 0 などで埋めるのはダメ絶対。)
146:デフォルトの名無しさん
09/07/12 20:12:39 .net
ctags5.8でOCamlがサポートされたらしいよ。
147:143
09/07/12 20:52:01 .net
ctags -> Exuberant Ctagsに訂正。
148:デフォルトの名無しさん
09/07/16 08:02:09 .net
otagsがいらなくなると嬉しいな
微妙にctagsとオプションが違ったりするのがウザかったんだ
149:デフォルトの名無しさん
09/07/23 08:24:19 .net
OCamlからCへのトランスレーターってありませんか?
150:デフォルトの名無しさん
09/07/23 09:00:30 .net
>>146
URLリンク(groups.google.com)
151:デフォルトの名無しさん
09/07/25 19:43:01 .net
OCamlで
(('a -> 'b) -> 'a -> 'b) -> 'a -> 'b = <fun>
int -> int = <fun>
で型だけを指定して変数を宣言することはできますか?
152:デフォルトの名無しさん
09/07/25 23:52:22 .net
変数何それ怖い
というか何がやりたいのか全くわからん
153:デフォルトの名無しさん
09/07/26 00:07:08 .net
>>148の型を持つ識別子なら定義出来る
154:デフォルトの名無しさん
09/07/26 00:07:51 .net
ただ、上は-rectypesなしで出来るかはわからん
155:デフォルトの名無しさん
09/07/26 20:13:20 .net
型注釈を使った無名関数をかいていて、ふと閃いて
fun (x:('a->'b)->(z:'a->'b)) z -> z;;としたところ
- : (('a -> 'b) -> z:'a -> 'b) -> 'c -> 'c = <fun>
のように受理されましたが、3つのうちの最初、z:'aのz はどういう意味があるのか
わかりません。
fun (x:('a->'b)->(z:'a->'b)) -> z;;
としてもzは拘束されていないようですし。
156:148
09/07/26 21:13:50 .net
それはxという識別子をxはintである、ということだけ指定して
宣言できるということですよね?やりかたを教えていただけますか?
157:148/153
09/07/26 21:15:14 .net
>>148
は
>>149
>>150
様あてです。失礼しました。それと回答ありがとうございます。
158:デフォルトの名無しさん
09/07/26 22:59:56 .net
変数が宣言できるとは言ってない
ただ、関数の引数などにアノテーションすることで
関数の定義範囲を狭めることは出来る
普通の定義
let f x = x;;
型全体
let f x : int = x;;
let f x : int ->int = x;;
引数
let f (x:int) = x;;
let f (x:int->int) = x;;
>>148の上の型は、これを使って
Yコンビネータの型をint->intで制限したもの
159:デフォルトの名無しさん
09/07/26 23:00:46 .net
int->intじゃなくて'a->'bだった
160:デフォルトの名無しさん
09/07/27 10:29:45 .net
質問者はもう少し動機などを書き加えてほしい。推敲した上で。
背景説明無しに、間違った用語で質問されても答えられません。
逆に説明があれば、多少間違っていても回答者の方で正しく解釈できます。
148 だけだとホントに意味不明だが 153 からすると、C における int x;
の様に「変数を宣言」できるか、というのが質問の意図だと思いますが、
ML では値の無い「識別子の束縛」は出来ません。
154、お前は未来に向けて話しているのか。
>>152
z:'a の z は識別子ではなくラベルです。後の z とは関係ありません。
文法をちゃんと確認して、ラベル付き引数の解説を読んでください。
161:デフォルトの名無しさん
09/07/28 12:36:02 .net
切口上的に始まる親切なレス乙!
162:デフォルトの名無しさん
09/07/29 00:57:41 .net
val come_on : orz -> or2
163:デフォルトの名無しさん
09/07/29 13:23:33 .net
>>159
ありがとうございます。Yコンビネータのようなものを作ろうとしていました。
非常に参考になりました。
>>154が回答に感謝しているのは
>>150の、出来る、が回答になっていると思ったからなのですが。
164:デフォルトの名無しさん
09/07/29 21:32:04 .net
(('a -> 'b) -> 'a -> 'b) -> 'a -> 'bという型の識別子を定義できる
と
Yコンビネータを定義できる
は100光年くらい離れてる気がする
165:デフォルトの名無しさん
09/08/15 12:47:34 .net
(///)のような演算子をつくってhaskellのようなリスとりてらるを部分的に実現したいです。
(3///5) == [3;4;5] みたいな感じ。
演算記号は何が適当ですか?
166:デフォルトの名無しさん
09/08/15 15:34:30 .net
( -- ) をどっかのサンプルコードで見たな
167:デフォルトの名無しさん
09/08/15 17:40:51 .net
>>163
List.iter print_int (1--100)
とかですか? いいですね。見やすいです。
168:デフォルトの名無しさん
09/08/22 15:26:49 .net
SML/NJから移ってきましたが、SMLとは色々と違う部分が多くて戸惑います。
OCamlの標準ライブラリに無いものは自分で実装しているのですが、SMLとの
コンパチを取るライブラリなどがあったりするのでしょうか?
169:165
09/08/22 22:50:51 .net
再度すいません。SML/NJにはCompilation Managerというものがあってmake相当
のことが出来るのですが、OCamlではUnixのmakeを使うのが普通なのでしょうか?
OCamlのドキュメントではmakeを使った例が書いてありました。
それとも、omakeというものがあるようですが、これを使うのが今時のやり方で
しょうか。
170:デフォルトの名無しさん
09/08/22 23:24:33 .net
それはおまけ
171:デフォルトの名無しさん
09/08/23 21:30:22 .net
なんかURLリンク(caml.inria.fr)<)は普通に繋がるだけに。
172:デフォルトの名無しさん
09/08/24 09:06:37 .net
SMLとのコンパチを取るライブラリなんていう後向きの物は聞いたことありません。
OCaml の stdlib は「標準ライブラリ」にあらず、 OCaml 自身をコンパイル
するために最低限必要な関数を集めただけと考えたほうが幸せです。
「次世代」標準ライブラリ候補として Extlib, OCaml Batteries Included, Jane Street Core
などありますからそれのウチ好きなのを使ってください。(Batteries は Extlib を内包しているはず)
ビルドは make か OCaml 付属の ocamlbuild か omake か、別に何でも良いんじゃない?
- GNU make : どこにでもある。他でも使える。枯れてる。
- ocamlbuild : OCaml に付属。全く使えない。
- omake : 超強力、普通インストールされていない。強力過ぎて一線を超えた使いかたが難しい。
173:165
09/08/24 23:26:43 .net
>>169
ありがとうございます。
ExtLib, Batteriesの双方に同じ名前のモジュールが含まれていたので疑問に思って
いたのですが謎が解けました。SML Basis Libraryにあるような関数は、名前違いで
大体ExtLibでサポートされているようで安心しました。
ビルドツールはGNU makeを主に使ってきたのですが、omakeはファイル更新の
チェックが素晴らしいようなので、omakeを使ってみます。
174:デフォルトの名無しさん
09/08/25 11:41:33 .net
なんでもいいから早く標準に入れてくれ
追加インストールとか面倒だし
175:デフォルトの名無しさん
09/08/25 12:34:52 .net
こんなとこで呟いても何も起こらんよ。
176:デフォルトの名無しさん
09/09/01 14:33:39 .net
だれかOCaml Meetingいった?
177:デフォルトの名無しさん
09/09/01 20:45:28 .net
いったよー
おもろかったけどgolfとかコンパイラ改造とかネタが裏街道過ぎて
実用志向のユーザー増えねえだろこれじゃ、とか思った
178:デフォルトの名無しさん
09/09/01 22:15:16 .net
行かなかったが、ストリーミングでアメリカ人?の発表のところまで見た。
Golfの話は意外と参考になった。演算子定義周りとか、普段あまり使わないから。
演算子によって優先順位が固定されているの勉強になった。
あとObj.magic。あれは反則技だろw
179:デフォルトの名無しさん
09/09/07 05:40:38 .net
OCamlが+-*/等の演算子をpolymorphicに出来ない理由って何?
180:デフォルトの名無しさん
09/09/09 17:30:37 .net
jocamlをmingw上でコンパイルするにはどうすれば良いでしょうか。
181:デフォルトの名無しさん
09/09/09 17:32:57 .net
jocamlをmingw上でコンパイルしようとするとこんなエラーが出ます。
$ ./configure
$ make world
・・・
gcc -o ocamlrun \
prims.o libcamlrun.a -lm
libcamlrun.a(main.o):main.c:(.text+0x26): undefined reference to `caml_expand_command_line'
libcamlrun.a(sys.o):sys.c:(.text+0x4ea): undefined reference to `caml_win32_random_seed'
libcamlrun.a(startup.o):startup.c:(.text+0x936): undefined reference to `caml_signal_thread'
libcamlrun.a(signals_byt.o):signals_byt.c:(.text+0x46): undefined reference to `caml_win32_signal'
libcamlrun.a(signals_byt.o):signals_byt.c:(.text+0xab): undefined reference to `caml_win32_signal'
collect2: ld returned 1 exit status
・・・
182:デフォルトの名無しさん
09/09/09 18:09:02 .net
多分 configure したのが間違い。
OCaml の mingw のビルドを参考にしたら?
JoCaml には付いて無いけど OCaml の README.win32 に書いてある。
183:デフォルトの名無しさん
09/09/09 20:36:00 .net
>>179
ありがとうございます。
cp config/m-nt.h config/m.h
cp config/s-nt.h config/s.h
cp config/Makefile.msvc config/Makefile
config/Makefileの中身のOTHERLIBRARIESからlabltkを削除し、PREFIXをインストールしたいディレクトリに変更し、
make -f Makefile.nt world
を実行したまでは良かったのですが、
make[1]: *** No rule to make target `win32.c', needed by `win32.o'. Stop.
make[1]: Leaving directory `/d/tmp/jocaml-3.11.1/byterun'
make: *** [coldstart] Error 2
と出てストップしてしまいます。
jocaml-3.11.1にはwin32.cが入っていないようですが、これは不具合ということでよろしいでしょうか。
184:デフォルトの名無しさん
09/09/09 21:23:00 .net
mingwなんだからMakefile.mingw使わなきゃならないと
185:179
09/09/09 21:31:19 .net
さーねぇ、俺は JoCaml 使ったこと無いからこれ以上は判らんね。
同じバージョンの OCaml から引っ張って来たら運が良かったらビルドできるかも知れないが、
こんなトコで聞くくらいだったら JoCaml の人に win32.c 無いって聞く方がいいんじゃない?
186:179
09/09/09 21:45:10 .net
>>181
ん?あ、確かに。リンクエラーも判らんし README も読めんのに挑戦かよ。
187:デフォルトの名無しさん
09/09/09 22:30:08 .net
OCamlから足りないソース持ってこないといかんかもね
それで動く保証はないけど
188:デフォルトの名無しさん
09/09/09 22:31:05 .net
unix でやるのが早いでしょ。
189:デフォルトの名無しさん
09/09/09 22:34:59 .net
>>181
あ、Makefile.mingwでやりました。
上のはコピペで修正し忘れていました。
190:デフォルトの名無しさん
09/09/09 22:36:17 .net
>>185
JoCamlでアプリを書くつもりなので、Windowsでないとダメなんですよ。
191:デフォルトの名無しさん
09/09/09 22:47:01 .net
Luc でさえ、windows で試してないって言ってるし、
イバラの道じゃないかねー。Luc に聞かんと誰もわからんよ。
ちなみに win32.c は jocaml のレポから随分前に消えてる。
192:デフォルトの名無しさん
09/09/09 22:49:38 .net
URLリンク(jocaml.inria.fr) に
We distribute JoCaml as sources. Those sources are for Unix systems
と書いてあるが、これは読んだのか?
193:デフォルトの名無しさん
09/09/11 20:25:19 .net
Batteries Included のドキュメントみてたら
リスト内包標記とか where 節とか open Module in とかあってびびった
使ってる人いる?
194:デフォルトの名無しさん
09/09/12 11:44:43 .net
既存のp4拡張をいろいろ集めただけでしょ。
open in はオーバーヘッドを理解してれば使える。
195:デフォルトの名無しさん
09/09/17 12:29:49 .net
オーバーヘッドあるんだ。
196:デフォルトの名無しさん
09/09/17 12:56:31 .net
open M in e は
let module M' = struct open M let v = e end in v
に変換されるので、ブロックを一つ作る。
普通はたいしたこと無いが、再帰関数中で open M in するのは少し考え物だ。
197:デフォルトの名無しさん
09/09/17 13:09:21 .net
すまん、let module M' = struct open M let v = e end in M'v の間違い
let rec f x = open M in e (* e 中に f の再帰呼出あり *)
とか書くと f の呼出しごとにブロックが出来て、時間とメモリを食う。
198:デフォルトの名無しさん
09/09/17 13:13:49 .net
M'.v ですー。
199:デフォルトの名無しさん
09/09/19 14:39:44 .net
時間とメモリを食うのはコンパイル時じゃないの?
200:デフォルトの名無しさん
09/09/21 22:22:32 .net
実行時にもオーバーヘッドがある。気になるならベンチ取ってね。
201:デフォルトの名無しさん
09/10/18 14:08:13 .net
浅井さんの「プログラミングの基礎」のサポートページって消えてる?
202:デフォルトの名無しさん
09/10/31 11:31:30 .net
birdの書いたsudokuの解放プログラム面白かった。
URLリンク(www.cs.tufts.edu)
203:デフォルトの名無しさん
09/11/09 04:34:20 .net
Practical OCaml 買おうかと思ったのですが、評判悪いのが気になりました。
実際に読んだ方いましたら、感想を聞かせてください。
204:デフォルトの名無しさん
09/11/09 23:09:48 .net
> Practical OCaml 買おうかと思ったのですが、評判悪いのが気になりました。
> 実際に読んだ方いましたら、感想を聞かせてください。
たった今、ゴミだからいらないという人にもらいました。確かにゴミです。ネタとしてならどうぞ。
205:デフォルトの名無しさん
09/11/10 00:11:27 .net
俺はocamllex ocamlyacc の簡単なチュートリアルが欲しくて買ったけど、
そこについては別にひどくは無かったと思ったよ。
206:デフォルトの名無しさん
09/11/10 04:23:58 .net
コードのインデントが至るところで狂っている時点でダメでしょう。
どのページを開いても何かツッコミどころがあるというある意味貴重な本。
値段も安くはないし絶対にお薦めしない。
207:デフォルトの名無しさん
09/11/10 21:20:02 .net
URLリンク(d.hatena.ne.jp)
URLリンク(rainyday.blog.so-net.ne.jp)
URLリンク(shuns.sakura.ne.jp)
これ出た当時はオライリーのフランス語のやつ(当時すでに絶版)以外ではこれしか本がなかったけど
日本語書籍がいくつもある今買う価値はないと思いますね。
208:デフォルトの名無しさん
09/11/12 00:57:52 .net
SML#の大堀先生は、最近、何してるの?
継続してれば、有望だと思ったんだけどな・・・ > SML#
209:デフォルトの名無しさん
09/11/14 00:34:44 .net
>>201
apressの書籍ってほとんどハズレだと思う
これもハズレだったよ
210:デフォルトの名無しさん
09/11/14 02:34:17 .net
【科学】道路に軍手が落ちているワケ、名城大研究チームが突き止める[09/11/05]
スレリンク(hidari板)
211:デフォルトの名無しさん
09/11/17 02:45:27 .net
くそう軍手……気になる
212:デフォルトの名無しさん
09/11/17 13:34:53 .net
推測の為の方程式として,土礼君の方程式がよく知られている.
しかし,パラメータの値には様々な見解がある.
N = R_s * f_p * n_e * f_l * f_i * f_c * L
N:道路に落ちている軍手の数
R_s:軍手の年間生産量
f_p:軍手を使用する作業の割合
n_e:軍手を屋外で使用する割合
f_l:軍手が使用される作業の割合
f_i:軍手を着脱する回数
f_c:軍手の移動距離
L:道路上の軍手の寿命
213:デフォルトの名無しさん
09/11/17 17:11:18 .net
靴とか靴下が落ちているワケも気になるぞ
誰か研究してくれ
214:デフォルトの名無しさん
09/11/17 23:27:17 .net
そりゃ浮いてたら邪魔だからじゃないか。
215:デフォルトの名無しさん
09/11/17 23:53:58 .net
軍手なんて色気のないものに血眼になるなよ。
216:デフォルトの名無しさん
09/11/18 00:15:00 .net
>>212
ほらよ。
N = R_s * f_p * n_e * f_l * f_i * f_c * L
N:道路に落ちているパンティーの数
R_s:パンティーの年間生産量
f_p:パンティーを使用する作業の割合
n_e:パンティーを屋外で使用する割合
f_l:パンティーが使用される作業の割合
f_i:パンティーを着脱する回数
f_c:パンティーの移動距離
L:道路上のパンティーの寿命
217:デフォルトの名無しさん
09/11/18 01:10:38 .net
パンツのことをパンティと呼ぶのは40代以上。
40代未満はパンツかショーツと呼ぶ。
218:デフォルトの名無しさん
09/11/18 01:23:51 .net
>>214
ウーロン知らないの?
219:デフォルトの名無しさん
09/11/18 02:10:39 .net
最近は単語で会話するのが流行っているの?
例:
「お茶」→「俺は紅茶が飲みたい。お茶といえば緑茶じゃなくて紅茶でしょ。緑茶とかジジくさいし。」
220:デフォルトの名無しさん
09/11/18 02:30:26 .net
>>214
類似定理に「キャロライン洋子を知っている人は1969年以前生まれ」がある。
221:デフォルトの名無しさん
09/11/18 03:07:49 .net
ならばこれはどうだ
N = R_s * f_p * n_e * f_l * f_i * f_c * L
N:道路に落ちているブラジャーの数
R_s:ブラジャーの年間生産量
f_p:ブラジャーを使用する作業の割合
n_e:ブラジャーを屋外で使用する割合
f_l:ブラジャーが使用される作業の割合
f_i:ブラジャーを着脱する回数
f_c:ブラジャーの移動距離
L:道路上のブラジャーの寿命
222:デフォルトの名無しさん
09/11/18 03:16:53 .net
やめてけーれ
223:デフォルトの名無しさん
09/11/18 03:50:10 .net
>>217
72年生まれでびっくり日本新記録を見ていた私はなんですか?
224:デフォルトの名無しさん
09/11/18 12:01:06 .net
びっくり日本新記録は1975年から1985年までやっていたようだから、
72年生まれなら13歳中一まで見れていたことになる。
特別なことはなにもないと思うが。
マッハGoGoGoとか鉄腕アトムの第一作目をリアルタイムに見ていたとかいうなら驚愕ものだが。
225:デフォルトの名無しさん
09/11/18 19:34:27 .net
ここに1967年生まれの俺が居るわけだが
226:デフォルトの名無しさん
09/11/18 20:22:40 .net
5年前の俺なら老害呼ばわりしたかもしれないが、
最近はむしろ尊敬するようになってきた。
なんつーか、歳を重ねるってのはそれだけで立派だよ。
対して俺はゆとりに「この昭和生まれが」と言われてショックを受けた
227:デフォルトの名無しさん
09/11/18 20:26:52 .net
>>223
rougai
228:デフォルトの名無しさん
09/11/18 21:29:42 .net
>>223
229:そうは思わない > 最近はむしろ尊敬するようになってきた。 ああ・・・ついにお前も老害の仲間入りか。 人間というのは自分の置かれた環境や立場によって考え方を変える生き物だというだけのこと。 お前が老害ジジイを擁護するようになったということは、 老害扱いされる時期がもうすぐ目の前に来ている証拠なんだよ。 たしか60歳以上の老人たちは日本が持っているカネの55%を持っているんだよな。 そしてそのカネを何に使うかというアンケートによると、 がんばってきた自分へのご褒美に贅沢するために使うのだそうだ。 若者が苦しんでいるときにそんなことを許していいわけがないだろ。 老人を過剰に保護するのをやめても老人は困らないし、 財源確保のために老人たちから搾り取ればいいと思う。
230:デフォルトの名無しさん
09/11/18 21:37:01 .net
あと、就業における年齢制限もやめるべきだと思う。
定年を設けている企業や官公庁が大半だと思うけど、それって年齢差別だよね。
60歳でもまだまだ働ける人がほとんどなのに定年で辞めさせるのはどうかと思う。
そうする代わりに、経営者に自由に解雇する権利を与えて、年功上列・終身雇用も撤廃して、
終身雇用に安住している無能なやつ(老害)をどんどん解雇していけばいいと思う。
無能な奴は一生平社員の単純労働でこき使えばいいよ。
長い間単純労働してるからといって才能の無い奴を無理に昇進させる必要もないと思う。
231:デフォルトの名無しさん
09/11/18 21:41:57 .net
アホかw
232:デフォルトの名無しさん
09/11/18 21:42:48 .net
>>223
歳を重ねるだけで得られるようなものなら誰でも手に入るから価値は無い。
233:デフォルトの名無しさん
09/11/18 21:45:57 .net
>>226
解雇すればいいのに、こき使うの?
234:デフォルトの名無しさん
09/11/18 21:49:56 .net
俺も高齢者は手厚く保護されすぎているように思う。
もっと若者と同じように扱えばいいのにね。
具体的にどこか体が故障している人を障害者認定して、
障害者として文化的な生活をおくるために補助をするなら分かるけど、
高齢者だからという理由だけで保護するのは過保護というものじゃないかな。
235:デフォルトの名無しさん
09/11/18 21:52:31 .net
ML と関係ない話は他所でやれ
236:デフォルトの名無しさん
09/11/18 21:53:24 .net
ジジババとかマジいらねえ
団塊世代は頭が鈍くて経験も役に立たないし物事を計画的にするのも下手だし散らかすのだけは一流で後片付けのことは微塵も考えないゴミなんだよなぁ
237:デフォルトの名無しさん
09/11/18 21:53:31 .net
>>225
> がんばってきた自分へのご褒美に贅沢するために使うのだそうだ。
金が回るならいいことじゃないか
238:デフォルトの名無しさん
09/11/18 21:54:24 .net
そう、そのウンコどもが苦手な分野こそが関数型言語
239:デフォルトの名無しさん
09/11/18 21:56:33 .net
>>233
ところが、使った分が戻っていくのが世にも奇妙な現象
240:デフォルトの名無しさん
09/11/18 21:57:38 .net
さっさとMLをブームにして金を使わせろ
241:デフォルトの名無しさん
09/11/18 22:02:41 .net
>>236
ダメ、ジジババはコンピュータ音痴だから。
242:デフォルトの名無しさん
09/11/18 22:17:02 .net
なにやら怨念めいたものを感じるな
南無阿弥陀仏
243:デフォルトの名無しさん
09/11/25 12:41:38 .net
'M`L < 新言語できたよー
244:デフォルトの名無しさん
09/11/26 15:44:50 .net
団塊世代は経済の成長期に楽しくお仕事して、下向きになったらつまらないから働くのやめるとか言い出す。
おいしいところだけ食べてトンズラとかマジきめえw
自分たちの責任を後世に押し付けて、自分は今まで楽しく稼いだお金で楽しく老後を過ごす予定なのか?
そんなことが許されるわけがない。
世の中みんなが辛いと思っているんだから自分だけ良い思いをしようとするなんて許されるわけがない。
団塊世代は身勝手だ。
搾取されるべきは団塊世代だ。
金があるんだから搾取してもかまわないだろ?
245:デフォルトの名無しさん
09/11/26 16:25:40 .net
一番の癌は大企業にぶらさがってる労組だな
特にJALやJRや某新聞社の労組
それから日教組
こいつらが日本のまじめな生産者の利益を貪ってる
246:デフォルトの名無しさん
09/11/26 16:27:14 .net
企業経営者が自由に社員をクビにできないのが問題。
247:デフォルトの名無しさん
09/11/26 16:47:17 .net
正社員を簡単にクビに出来ないから
会社は正社員じゃなくて派遣を使いたがる
派遣ピンハネ業だけが儲かる
248:デフォルトの名無しさん
09/11/26 16:52:24 .net
クビにできないのを良いことに労働組合を背景にやりたい放題やって楽して金だけもらって逃げた団塊世代
249:デフォルトの名無しさん
09/11/26 16:53:19 .net
良いこと考えた
正社員を派遣すればいいんじゃん
250:デフォルトの名無しさん
09/11/26 18:11:29 .net
マルチのコピペにいちいち釣られてんのか
コピペした奴が自分で反応してんのか
どっちにしてもアホだ
251:デフォルトの名無しさん
09/11/26 18:58:16 .net
>>245
面倒だから経営も外注するか。
労組嫌ってるやつは公務員か?死ねよ
252:デフォルトの名無しさん
09/11/26 19:03:43 .net
スレリンク(tech板)l50
253:デフォルトの名無しさん
09/12/06 22:09:27 .net
>>243
欧州のどこだかは、派遣使うとそれだけ割高になるような法律になってるとか
聞いたことある。
254:デフォルトの名無しさん
09/12/07 00:49:50 .net
>>245
プログラマの派遣なら、正社員の派遣が主流じゃないか?
>>249
法律なんか作らなくても、市場原理に任せておけば派遣のほうが高くなる。
レンタルとリースのどっちが割高かってこと。
むしろ、法律によって市場を歪めているのが諸悪の原因。
255:デフォルトの名無しさん
09/12/31 15:29:23 .net
>>250
どの法律のこと?
256:デフォルトの名無しさん
09/12/31 19:26:50 .net
おい、押すなよ、、絶対だぞ」
257:デフォルトの名無しさん
09/12/31 21:53:25 .net
ポチっとな
258:デフォルトの名無しさん
10/01/03 16:49:17 .net
val () = print "あけおめ\n"
259:デフォルトの名無しさん
10/01/07 21:35:11 .net
OCaml用のlibcurlバインディングらしい、ocurlを入れようとしたのですがエラーが出ます。
curl-helper.c
主に「dereferencing pointer to incomplete type」というエラーが大量に出ます。
どうすればいいのでしょうか。
./configやlibcurlのインストールなどは済ませています。
環境はMSYS + MinGW、Windows 7です。
260:デフォルトの名無しさん
10/01/08 18:36:46 .net
libcurl のバージョンは。
261:デフォルトの名無しさん
10/01/08 18:43:34 .net
バージョンはよいみたい。一度古いので苦労した記憶がある
262:デフォルトの名無しさん
10/01/09 03:51:07 .net
libcurlはWindows版では最新の7.19.7を入れました。
MinGWは最新のものを入れています。
ところで、URLリンク(jocaml.inria.fr) や URLリンク(caml.inria.fr) が落ちているのですが。
263:デフォルトの名無しさん
10/01/09 04:31:29 .net
URLリンク(caml.inria.fr)
ここの例通りにCでOcamlのモジュール使おうと試してるんだけどうまくいかない。
最後の手順の cc -o prog main.c mod.a -lcurses で詰まっています。
mod.a(startup.o):startup.c:(.text+0x9e): undefined reference to `__lseeki64'
mod.a(startup.o):startup.c:(.text+0x240): undefined reference to `__lseeki64'
mod.a(startup.o):startup.c:(.text+0x2e7): undefined reference to `__lseeki64'
mod.a(startup.o):startup.c:(.text+0x93b): undefined reference to `__beginthread'
mod.a(sys.o):sys.c:(.text+0x7): undefined reference to `__errno'
mod.a(sys.o):sys.c:(.text+0xf7): undefined reference to `__errno'
mod.a(sys.o):sys.c:(.text+0x101): undefined reference to `__errno'
mod.a(str.o):str.c:(.text+0x30f): undefined reference to `__imp___pctype'
mod.a(str.o):str.c:(.text+0x32c): undefined reference to `__isctype'
こんなエラーが大量に出る。
libcamlrun.aが怪しいと思うのだけれどどうすればいいかわからない。
環境はXPでCygwin Ocamlは3.10.2
Cygwinでocamlc -c modwrap.cすると何故かアクセスが拒否されるので modwrap.cとmod.mlのコンパイルはMinGWでやりました。
264:デフォルトの名無しさん
10/01/09 08:51:21 .net
>>259
Cランタイムのシンボルを見つけられてない、ということで
>Cygwinでocamlc -c modwrap.cすると何故かアクセスが拒否されるので modwrap.cとmod.mlのコンパイルはMinGWでやりました。
が怪しい。
この部分MinGWとCygwinの互換性はあるの?Cygwin知らんけど、全部-mnocygwinならどうだろう。
265:デフォルトの名無しさん
10/01/09 09:28:15 .net
>260
>この部分MinGWとCygwinの互換性はあるの?
エラーが出てるのは正に MinGW と Cygwin で互換性のなさそうな部分だね。
>259
>何故かアクセスが拒否される
modwrap.c を Windows ネイティブのアプリで編集していたりすると発生する場合もあるので
・Cygwin アプリで編集する
・mkpasswd とか使って /etc/passwd を見直してみる
・とりあえず chown / chmod してみる
・ACL 周りの設定を変えてみる(mount とか環境変数 CYGWIN とか)
あたりはどうだろ。
266:デフォルトの名無しさん
10/01/11 21:48:13 .net
>>260
>>261
助言ありがとうございます。
レスを頼りにいろいろ試してみましたが、だめでした。
OcamlもCygwinも使ってまだ日が浅いので大事なところを見落としているのかもしれません。
今忙しいのであまり時間が取れないのですが、Cygwinで揃えてまたいろいろと試してみようと思います。
本当にありがとうございました。
267:デフォルトの名無しさん
10/02/06 21:54:14 .net
Moscow ML 使ってみようと思ったら、もうずっと更新されてないんだね…
268:デフォルトの名無しさん
10/02/19 00:01:29 .net
SchemeとMLは、心が洗われるわー
269:デフォルトの名無しさん
10/02/19 23:52:14 .net
あー汚れてるんですね
270:デフォルトの名無しさん
10/02/22 10:15:16 .net
はい
271:デフォルトの名無しさん
10/02/26 18:43:33 .net
272:デフォルトの名無しさん
10/03/18 02:27:03 .net
OCamlはCにembedできますか?
273:デフォルトの名無しさん
10/03/22 23:27:08 .net
Milnerが亡くなったそうだね
274:デフォルトの名無しさん
10/03/22 23:32:10 .net
URLリンク(lambda-the-ultimate.org)
ホントだ。ご冥福をお祈りします。
ML は勉強していて楽しかったです。
275:デフォルトの名無しさん
10/03/28 22:50:27 .net
『プログラミングの基礎』 浅井健一著 を買ってポチポチ楽しく
やってるんですが、著者のサポートサイトに書いてあるように
やっても、未だに日本語の表示が出来ません。
URLリンク(pllab.is.ocha.ac.jp)
環境はWinXPのVMPlayer上のDebian(lenny)でやってます。
端末でインタープリタ走らせてる場合も、Emacs上でtuareg-
modeでやってる場合も文字コードが表示されてしまいます。
助けてけろ~
276:デフォルトの名無しさん
10/03/28 23:42:03 .net
分からんけど、なんでLANG=en_USのISOなんとかなんだろ?ja_JP.eucJPとかじゃないのか
277:デフォルトの名無しさん
10/04/09 23:58:56 .net
OCamlはoreilly本来ないね
278:デフォルトの名無しさん
10/04/11 20:56:52 .net
>>270
奥さん亡くなった三日後に心筋梗塞か。
279:デフォルトの名無しさん
10/04/11 21:10:03 .net
ご冥福をお祈りします。
280:デフォルトの名無しさん
10/04/12 22:51:23 .net
あの世で福??
281:デフォルトの名無しさん
10/04/21 21:04:50 .net
signatureのfunctorの使い方がよくわかりません。
signatureを受け取ってstructureを返すfunctor Aと、
signatureを受け取ってsignatureを返すfunctor Bを定義したとします。
signature CにAとBを適用したものをA(C), B(C)としたとき、
A(C)にB(C)を適用したstructureはどうしたら使えますか?
282:277
10/04/21 21:06:26 .net
言い忘れました。OCamlの話です。
283:277
10/04/21 22:56:41 .net
すみません、自己解決しました。
284:デフォルトの名無しさん
10/04/22 01:34:18 .net
あれ?OCamlのfunctorってsignatureを受け取ったり返したり出来るの?
受け取るのも返すのstructureだけだと思ってた
285:デフォルトの名無しさん
10/04/22 01:38:21 .net
ドキュメント読んでみたけど、
URLリンク(caml.inria.fr)
やっぱりfunctorがsignatureを受け取れるようには見えないなぁ
286:デフォルトの名無しさん
10/04/25 12:26:40 .net
質問していいですか。
'a * 'bの値を受け取り、型'aと'bが等しいか否かを判定する関数はo'camlで書けますか?
287:デフォルトの名無しさん
10/04/25 22:33:07 .net
>>283
288:デフォルトの名無しさん
10/04/25 22:54:26 .net
>>284
289:デフォルトの名無しさん
10/04/26 00:03:13 .net
>>282
何がしたいのか分からないけど
OCamlでは型情報は実行時には残っていないので
そういう型を扱うプログラムは一切かけないとおもう
290:デフォルトの名無しさん
10/04/26 21:09:56 .net
OCamlってなんで最上位ビットをゴミ集め様に使っちゃうようにしたのかな。
なんか、これが凄くアダになってるように思えるのだが
291:デフォルトの名無しさん
10/04/27 20:51:34 .net
Lisp系含めてわりと見かける仕様なんじゃ
292:デフォルトの名無しさん
10/04/29 20:07:48 .net
$ sudo aptitude install ocaml
…
以下の新規パッケージがインストールされます:
camlp4{a} ledit{a} libdrm2{a} libgl1-mesa-glx{a} libpthread-stubs0{a}
libpthread-stubs0-dev{a} libx11-dev{a} libxau-dev{a} libxaw7{a}
libxcb-xlib0-dev{a} libxcb1-dev{a} libxdmcp-dev{a} libxext-dev{a}
libxi-dev{a} libxmu6{a} libxpm4{a} libxtst6{a} libxv1{a} libxxf86dga1{a}
libxxf86vm1{a} ocaml ocaml-base{a} ocaml-base-nox{a} ocaml-interp{a}
ocaml-nox{a} tcl8.4{a} tk8.4{a} x11-utils{a} x11proto-core-dev{a}
x11proto-input-dev{a} x11proto-kb-dev{a} x11proto-xext-dev{a} xbitmaps{a}
xterm{a} xtrans-dev{a}
0 個のパッケージを更新、 35 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
29.4MB のアーカイブを取得する必要があります。 展開後に 97.0MB のディスク領域が新たに消費されます。
(#^ω^)ピキピキ
293:デフォルトの名無しさん
10/04/29 20:14:14 .net
>>288
ocaml-nox
294:デフォルトの名無しさん
10/04/30 12:32:47 .net
こそは自分でMakeだろJK
295:デフォルトの名無しさん
10/05/01 16:43:51 .net
SML#は生きていた
296:デフォルトの名無しさん
10/05/02 01:19:01 .net
音沙汰なくてちょっと諦めかけてたから新バージョンリリースめでたい
297:デフォルトの名無しさん
10/05/05 04:16:18 .net
OCamlの型で 'a. 'a list というのを見たんですけど、この「.」って何ですか?
298:デフォルトの名無しさん
10/05/05 07:24:38 .net
「.」が何かと言われるとむずいな
「'a.」は「任意の型パラメータを'aとし、その'aついて...(for all)」の意味
例えば、
type 'a t = { e : 'a }
は'aを型パラメータに取るけど、
type 'a t = { e : 'a; p : 'b. 'b list }
とすると、任意の型'bをパラメータに持つ型をレコードの要素にできる
もちろん
type 'a t = { a : 'a; p : 'b list }
は'bがunboundだからエラー
299:デフォルトの名無しさん
10/05/05 15:33:12 .net
>>294
ありがとうございます
300:デフォルトの名無しさん
10/05/15 22:35:32 .net
SMLにはレコード更新の機能がなく、日常的に苦労しているので、ネイティブコードが
はけるSML#のリリースは待ち遠しかった。
ただ、欲を言うと、レコード拡張も言語としてサポートして欲しかった。
301:デフォルトの名無しさん
10/05/16 08:50:49 .net
>SMLにはレコード更新の機能がなく、日常的に苦労している
すげえ、日常的にか。仕事に使ってるの?
>ただ、欲を言うと、レコード拡張も言語としてサポートして欲しかった。
レコード拡張って?
302:デフォルトの名無しさん
10/05/17 17:27:31 .net
MLton って無限ストリーム使ったプログラムも最適化してくれるの?
303:デフォルトの名無しさん
10/05/18 22:20:33 .net
>>297
小規模な数値計算をしているだけで、すごいことはしていません。
Fortranで十分ですが、いくつかの部品を定義して、NJの対話環境
で評価することで、試行錯誤できて重宝してます。
レコードの拡張
連結と言うべきだった。
{a=1,b=2}#{c=3}
val it={a=1,b=2,c=3}
ができると嬉しい。
304:デフォルトの名無しさん
10/05/21 01:51:26 .net
Vimのインデントファイルで
ocaml.vimやomlet.vimより
いいものありませんか?
305:デフォルトの名無しさん
10/05/21 21:02:03 .net
MLで書くときはスタイルに悩むね。
inの前で改行すべきか?
連続するletはインデントすべきか?
などなど
306:デフォルトの名無しさん
10/05/22 23:36:50 .net
スタイルは悩みますね。
今のところ連続するletもinの後も
インデントしないようにしています。
ただ、こう書きたいという思いがあっても
Vimのインデントファイルでは
うまくいかないことがあって困ります。
ユーザーの多そうなEmacsを使った方が
いいのかもしれません。ま、それを
言ったら関数型言語もHaskellということ
になるかもしれませんが…
307:デフォルトの名無しさん
10/06/04 16:33:24 .net
Ocamlで
let plus x y = x + y があるとき
xより先にyに代入する方法はあるますか?
308:デフォルトの名無しさん
10/06/04 20:40:08 .net
λ式を使えば良いのでは。
すでに、y = aの代入が決まっているときは、
(fun x -> plus x a)
まだのときは、
(fun y -> fun x -> plus x y)
を使う。
※SML使いなので、構文上の間違いはあるかもしれぬ。
309:デフォルトの名無しさん
10/06/04 20:44:13 .net
これも、一種のスタイル問題だが、
列挙型を定義するときに、
datatype X = X1 | X2 | X3 | ...
とするか
type X = int
val X1 = 1
val X2 = 2
...
とするかで悩んでしまう。最初は、vector (ランダムアクセス)を使わない
見込みだったのだが、必要になったときのことを心配してしまう。
310:デフォルトの名無しさん
10/06/04 22:34:46 .net
そういう心配をしなくていいくらいコンパイラの最適化は賢いから安心して代数データ型を使えという話をどこかで見た気がするのだがどこだか忘れてしまったな。
311:デフォルトの名無しさん
10/06/04 22:41:07 .net
succ X1が欲しいという話だと思ったんだが。
……俺ならObj.magicしちゃうな
312:デフォルトの名無しさん
10/06/04 22:44:58 .net
URLリンク(d.hatena.ne.jp)
これだった。あんまり突っ込んだこと書かれてなかったな。でもこういう話じゃないの?
313:デフォルトの名無しさん
10/06/05 18:55:54 .net
>>304
ありがとうございます。
314:デフォルトの名無しさん
10/06/05 23:46:13 .net
>> 308, 307
ありがとうございます。そうです、O(1)で整数に変換できるかを心配していました。
315:デフォルトの名無しさん
10/06/10 00:10:32 .net
O(1)での変換速度を気にしなきゃいけないくらい沢山定義するなら、
DEFINEマクロ使った方がいいんじゃないかなぁ。あ、OCamlの場合だけど。
(* compile with -pp "camlp4orf" *)
DEFINE A = 1
let _ = print_int A
316:デフォルトの名無しさん
10/06/14 19:50:39 .net
>> 311
Ocamlマクロ使えましたね。いいなぁ~
317:デフォルトの名無しさん
10/06/14 19:54:03 .net
破壊的代入(参照型)の利用はひかえめに、とはいろんなガイド/教科書に書いて
あるけど、どの程度が許容範囲なんだろう。
与えられたリストの部分和を要素とするリストを返す関数を書いてみると、
破壊的代入を使ったバージョンが一番短く直観的に思う。
fun series xs =
(fn s => map (fn i => i + !s before s := !s + i) xs) (ref 0)
fun series2 xs =
(rev o #2) (foldl (fn (i,(s,ys)) => (i+s,(i+s)::ys)) (0,nil) xs)
fun series3' s (i::is) = (i+s) :: series3' (i+s) is
| series3' s nil = nil;
val series3 = series3' 0
関数プログラマ的には、どれがいいのだろう。
(もっといい書き方もあるかもしれない)
318:デフォルトの名無しさん
10/06/14 19:58:31 .net
個人的にはこだわらずに破壊的代入もがんがん使えって思うけど、その前にmapの捜査順は前からって保証されてるのか?
319:デフォルトの名無しさん
10/06/14 21:34:29 .net
確かに、一般的には規格違反かもしれない。ちなみに
URLリンク(www.smlnj.org)
には
map f l
applies f to each element of l from left to right, returning the list of results.
と書かれているが、"from left to right"を副作用を持つfを考慮して、そう書いているのか
は不明。
320:デフォルトの名無しさん
10/06/16 05:25:03 .net
>>313
効率気にしないなら下のようにも.
fun series nil = nil
| series (h::t) = h :: map (fn x => x + h) (series t)
効率を気にするなら,series3がいいと思った.
refを使うと現在の変数の状態を気にする必要があって大変.
series2はやってることはわかったけど,コードがなんとなく見づらい.
321:デフォルトの名無しさん
10/06/16 12:11:01 .net
>現在の変数の状態を気にする必要があって大変
refが大変で、引数変数が大変でないと思う辺り、関数型言語プログラマだなあ。
俺はまだそこまでの境地には達してないや
322:デフォルトの名無しさん
10/06/16 18:09:00 .net
「こんなこともあろうかと」いいながら、用意しておいたscanlを使うのが一番直感的。
323:デフォルトの名無しさん
10/06/16 20:47:50 .net
なるほど scanl か
mapAccumL で満足しそうになっていた
324:デフォルトの名無しさん
10/06/17 21:08:40 .net
>> 316
ひさしぶりに何か美しいものを見た気がします。
>> 318,319
HaskellのData.Listにある関数ですね。GHCは入れてあるが、ほとんど使って
いないので、知らなかったのですが、いっぱい関数が用意されてますね。
325:デフォルトの名無しさん
10/06/18 19:16:35 .net
NJに付属するCMLって、multicore対応じゃないみたいですね。
(tar ballのToDoに書いてあった)
ノード内並列には使えない。残念。
326:デフォルトの名無しさん
10/06/18 19:31:43 .net
SML なら Poly/ML がネイティブスレッドに対応してるよ
327:デフォルトの名無しさん
10/06/18 20:52:49 .net
>>322
ありがとうございます。
ここを URLリンク(www.polyml.org) さらっと見てみましたが、
結構しっかりした実装のようですね。
これは、SML/NJからの移行を検討する価値がある。
他に、
- Windowsプログラミング
- FFIが簡単(のように見える)
が気に入った。
328:デフォルトの名無しさん
10/06/18 21:45:31 .net
MLでGUIプログラミング、って時々やろうとするんだけど準備が面倒で挫折する。
lablgtk2とその依存ライブラリを標準で取り込んでくれ~
329:デフォルトの名無しさん
10/07/04 19:42:48 .net
ファンクターでモジュールを作ったときに実行される関数がほしいんだけど
OOのコンストラクタみたいなの
330:デフォルトの名無しさん
10/07/05 12:51:06 .net
V V
(´・ω・`) うさちゃんピース
331:デフォルトの名無しさん
10/07/05 15:03:08 .net
長澤うさみ
332:デフォルトの名無しさん
10/07/09 01:03:21 .net
>>325
module F (A : sig val x : int end) = struct
let _ = print_int A.x
end
このファンクターに適当なモジュールを適用してごらん
333:デフォルトの名無しさん
10/07/09 22:25:03 .net
MLが関数型言語とか、最初に言い出したのは誰なのかしら
334:名無しさん@そうだ選挙に行こう
10/07/11 11:47:27 .net
\ /
\ 丶 i. | / ./ /
\ ヽ i. .| / / /
\ ヽ i | / / /
\
-‐
ー
__ わ た し で す --
二 / ̄\ = 二
 ̄ | ^o^ |  ̄
-‐ \_/ ‐-
/
/ ヽ \
/ 丶 \
/ / / | i, 丶 \
/ / / | i, 丶 \
335:デフォルトの名無しさん
10/07/23 23:57:35 .net
プログラミング言語ML
URLリンク(www.amazon.co.jp)
J. D. Ullmanのこの本絶版になってたのか。
11年前に図書館で世話になったときは、面白かった。
336:デフォルトの名無しさん
10/08/06 17:34:51 .net
3.12.0来たのか
337:デフォルトの名無しさん
10/08/14 16:35:21 .net
OCaml出たばっかりなのに人が少ないってどういうことなの
338:デフォルトの名無しさん
10/08/16 01:05:07 .net
平和ってすばらしい
339:デフォルトの名無しさん
10/08/16 01:22:01 .net
windows用の最新版は3.11.0ってことですか?公式のリンクが切れてるという。。
340:デフォルトの名無しさん
10/08/16 12:57:13 .net
自分でビルドすればいいし、URLの修正ぐらい自分でやればいいし
341:デフォルトの名無しさん
10/08/21 23:26:49 .net
windows 3.11.0
URLリンク(ocaml.jp)
>threads ライブラリを使用するプログラムは以下のようにリンクしてください:
>ocamlc -thread other options unix.cma threads.cma other files
って書いてあるのに
ocamlc -thread unix.cma threads.cma thread.ml
File "thread.ml", line 7, characters 8-21:
Error: Unbound value Thread.create
Threadはどこにあるんだ・・・
342:デフォルトの名無しさん
10/08/22 01:37:10 .net
いっこうにMacPortsにこねえ>3.12.0
なんか既存アプリ壊してるとかあるのかね
>>337
志村ー、"thread.ml"ー
343:デフォルトの名無しさん
10/08/22 02:53:00 .net
>>337
圧倒的感謝
悩んでた自分が馬鹿らしい つーか馬鹿だった
344:デフォルトの名無しさん
10/08/22 02:54:15 .net
ミス
>>338
345:デフォルトの名無しさん
10/08/23 01:39:58 .net
unitをどうやって代入させるかで数分悩んでしまった。
346:デフォルトの名無しさん
10/08/30 15:11:49 .net
可読なCに変換してくれるコンパイラはないのか
347:デフォルトの名無しさん
10/09/19 08:18:17 .net
これはOCamlの仕様書と思って良いのでしょうか?
URLリンク(caml.inria.fr)
348:デフォルトの名無しさん
10/09/19 22:05:30 .net
仕様なんてない
349:デフォルトの名無しさん
10/09/21 22:59:45 .net
最近SML#が活発に更新されているようなので、0.56インストールしてみました。
集合演算を使ったプログラムを書こうとしているのですが、
CM周りの問題のせいか上手く動きません。
例えば、sml#では、
# structure SSet = RedBlackSetFn(struct type ord_key = string; val compare = String.compare end);
stdIn:1.18-1.94 Error: unbound functor: RedBlackSetFn
となります。smlだと、
- structure SSet = RedBlackSetFn(struct type ord_key = string; val compare = String.compare end);
[autoloading]
[library $SMLNJ-BASIS/basis.cm is stable]
[library $SMLNJ-LIB/Util/smlnj-lib.cm is stable]
[autoloading done]
structure SSet : ORD_SET?
と上手く動いています。
どのあたりを調べれば良いかのポインタだけでも構いませんので、
解決方法ご存知の方、教えていただけますでしょうか。
350:デフォルトの名無しさん
10/09/21 23:10:05 .net
SML#ってMSの.Net系言語だと思って無視してたんだけど、
全然関係無しなんだね。まぎらわしすぎw
解決方法でないレスでゴメソ >>345
351:デフォルトの名無しさん
10/09/22 02:13:02 .net
>>345
SML/NJだと自動でライブラリを読み込むようだが,SML#ではそうでないみたいね.
ソースの smlsharp-0.56/smlnj-lib/Util/redblack-set-fn.sml
にRedBlackSetFnが入ってるから,必要なファイル込みでuseすればいいんじゃないかな.
352:345
10/09/22 21:06:32 .net
>>347
$prefix/lib/smlsharp/smlnj-lib/Util 以下に各set用のfunctorが
あったので、こちらをuseしてみたところ、
上手く動くようになりました。
ありがとうございます。
sml#ではCM上手く動かないのはやっぱり嫌だなぁ。
なんとかならないものか…
353:デフォルトの名無しさん
10/09/26 18:45:17 .net
初歩の初歩ですいません、symbolic nameって何?
ML for the working programmerを読み始めて早速引っ掛かってしまいました。
354:デフォルトの名無しさん
10/09/28 01:50:38 .net
alphabeticでない名前
355:デフォルトの名無しさん
10/10/16 00:36:53 .net
Jane StreetのCoreってOCaml 3.12に対応してる?
コンパイルに失敗する
356:デフォルトの名無しさん
10/10/24 18:34:30 .net
エディタの桁数はいくつに設定していますか?
357:デフォルトの名無しさん
10/11/10 00:02:31 .net
遅レスだけど、桁数は80でインデントは4。
:se nu ai sw=4 ts=4
358:デフォルトの名無しさん
10/11/10 23:06:49 .net
私も桁は80(インデントは2)。
でも無名関数を多用すると桁が足りなくなるので
増やすべきか悩む。横長モニタ買いたくなる。
359:デフォルトの名無しさん
10/11/11 21:11:38 .net
通常は80に設定しているが、MLを編集するときは、120に増す。
とはいえ、100を超えると読みにくくなるので、適当に折り返すことにしている。
ただ、このコーディングルールに従えばOK、というようなのがないので、
毎回困っている。
360:デフォルトの名無しさん
10/11/11 21:19:26 .net
>>305 解決策(SML/NJの場合の)が見つかった。
data label = A | B | C
Unsafe.cast A: int;
Unsafe.cast B: int;
Unsafe.cast C: int;
とすると、それぞれ0,1,2になる。
361:デフォルトの名無しさん
10/11/11 21:49:53 .net
>>356
MLは初心者だけど、>>305は(コードの問題ではなく)設計の問題だと思う。
代数構造として、直積(組型やレコード型)と列(リスト型や配列型)は全く別の概念。
コンパイルの前に要素の数が決定できるなら直積を使うべきだし、
実行してみないと決定できないのなら列を使う。あるいは動的なシンボルで
ランダムアクセスしたいならハッシュ型を、更に順序性が必要ならB木型を。
これらすべてはプログラムの設計工程で決定しておくべきもの。
設計工程での不具合をコーディング工程で取り返そうとするのは、よくある過ち。
>>356の解決策というのは、いわゆる「泥縄」的手法。いずれ破綻する。
いくらMLが美しい言語でも、設計が汚ければコードはグチャグチャになるよ。
逆に、設計が適切であれば手続き型言語であっても美しいコードは書ける。
362:デフォルトの名無しさん
10/11/11 21:54:05 .net
そんな大仰な話でもないだろ。
Pascal、Modula系からMLやら(その他EiffelやらOberonやら)への流れで、
なぜか列挙型を配列のインデックスに使う機能が捨てられた悲しいね、ってだけの話だ。
363:デフォルトの名無しさん
10/11/11 22:25:29 .net
だから「なぜ列挙型を配列のインデックスに使う機能が捨てられたのか?」と
364:いう 疑問の答えを考えなさい、と言ってる。 列挙型(特に関数型言語の直和、MLのdatatype定義)というのは、要素を数え上げることで 集合を定義している。いわゆる「内包的定義」だ。集合なのだから、その要素間に順序性は無い。 もし要素間に順序性が求められるのなら、列として(集合とは別に)それら要素を定義する。 そしてそれらの間の関係を写像(関数あるいはハッシュ型などで)させることで対応づける。 こういった考え方(設計技術)無しに、力任せのコーディングテク(技法)で解決しようとするのでは、 (特にMLのような明瞭な型体系を持つ)関数型言語の利点は、全く生きないよ。 型をわずらわしく感じるうちは、いつまでたってもIT土方のままだ。(型定義 = 設計なのに....。) 結果的に「関数型言語を使っても美しい(高品質な)コードは書けなかった。チクショウ騙された。」 という誤解が生まれる。
365:デフォルトの名無しさん
10/11/11 22:25:48 .net
>>357
305が既にコーディング工程まで来ているという根拠は?
366:デフォルトの名無しさん
10/11/11 22:29:03 .net
>>359とか自分で読み返して恥ずかしくないのか?
列挙型がインデックスの配列なんて、単にmapの効率的な表現でしかないだろ……。
367:デフォルトの名無しさん
10/11/11 22:33:39 .net
あと「なぜ列挙型を配列のインデックスに使う機能が捨てられたのか?」は
単純に(非常に残念ながら)固定長配列型が採用されなかったからだろうね。
全部可変長配列ならインデックスに演算不可能な型を使えてもしょうがないから。
368:デフォルトの名無しさん
10/11/11 22:39:12 .net
>>357
根拠は、>>305が使った「スタイル」と言う言葉。
>>361
>単にmapの効率的な表現でしかないだろ……。
その通り。より正確には「写像の効率的な実装(コード化)」だね。
>>357で書いたのは、実装(コード化)で解決しようとせずに設計に立ち返りなさい、という話。
369:デフォルトの名無しさん
10/11/11 22:44:09 .net
正直「いちいちmap作るの効率悪い&めんどくさいからちゃっちゃとUnsafe.castしてしまえ」ってだけの話なのに
設計どうこうの話で絡む理由がわからんな。
それこそ言語機能の問題でしか無いんだから、実装の詳細もいいとこだろうに。
370:デフォルトの名無しさん
10/11/11 22:52:14 .net
そうだね。プログラミング言語なんて道具にすぎないんだから、本人がどう使おうが自由だし。
下流工程で延々とモガき続ける、いわゆる土方から抜け出せるよう助言したつもりだったが、
余計なお世話だったかもしれない。これで落ちるよ。
371:デフォルトの名無しさん
10/11/11 22:57:51 .net
だから、その本人が今現在下流工程にいるという根拠はなんなの?
372:デフォルトの名無しさん
10/11/11 22:59:31 .net
大体設計としてはインデックス値集合からのmap確定で、見直す要素なんて全く無いだろ。
余計なお世話どころか、勘違い甚だしすぎる。
SML使う土方現場なんて日本にあったら俺が行きてーよw
373:365
10/11/11 23:14:44 .net
落ちたつもりだったけど、自分のカキコにアンカ間違いがあったから、そこだけ訂正。
>>366
スマン。>>363の
>>>357
>根拠は、>>305が使った「スタイル」と言う言葉。
という部分の>>357というアンカは間違いだった。>>360宛のレスとして読み直してくれ。
374:デフォルトの名無しさん
10/11/11 23:22:16 .net
今ひどい泥縄を見た。
375:デフォルトの名無しさん
10/11/11 23:27:02 .net
こんなに人いたんだな
376:デフォルトの名無しさん
10/11/12 00:43:43 .net
305&356です。
私はただの数値計算屋なので、このような助言はありがたい。
型の設定は大切にしています。ただ、研究用のプログラムなの
で、予想外の変更が生じるし、過剰に一般的に作ると使いにくく
なるので、なかなか難しいところです。
いまの問題でゆうと、対象の要素数が100とか1000であれば、
ハッシュを使う選択をしますが、当面の問題では、10以下の
固定個なので、列挙子を使いたい訳です。これは、NJの対話型
環境で式を評価したときに、
列挙子名が表示されるためです。
※NJのハッシュは組み込み型であるvectorほど使いやすくはない
ので、ハッシュを避けがちになるという別の問題はある。
なおUnsafe.castは前にOcamlにはmagicがあるという話が出たの
で、備忘録的に書いただけです。
377:デフォルトの名無しさん
10/11/13 19:02:17 .net
SML# 0.60 は大堀先生からアナウンス
378:デフォルトの名無しさん
10/11/13 21:11:23 .net
いらねー
379:デフォルトの名無しさん
10/11/16 01:51:58 .net
ML が研究されているという情報。
それも国内で。
結構なことじゃないの。
380:デフォルトの名無しさん
10/11/17 03:57:12 .net
ようやくMPIを使っての並列起動に成功した……。Intel MPIの32bit版
が使えることのに気付くのにも時間が掛かったが、まさか、.cm/への
書きこみで競合が起こるとは想像だにできなかった。
381:デフォルトの名無しさん
10/12/07 20:39:56 .net
なにこれ?
From: Julian Assange <proff@i...>
Subject: call for ocaml volunteers
URLリンク(caml.inria.fr)
382:デフォルトの名無しさん
10/12/17 00:13:19 .net
windowsでグラフィックスを扱うライブラリ
としてsml_tkがあるようだが、Posixストラクチャ
とか使っててコンパイルできない。
383:デフォルトの名無しさん
11/02/11 13:52:35 .net
standard MLとかって、もう終わった言語なの?
384:デフォルトの名無しさん
11/02/16 22:27:36 .net
NJのバージョンはときどき上がっているようだが、64bit版の開発が着手される
気配はないねぇ。
385:デフォルトの名無しさん
11/02/17 00:06:39 .net
Objective SML とかあればなあ・・・
386:デフォルトの名無しさん
11/02/17 00:16:06 .net
ええ。
ocamlのobject的な機能って使ってる人いるのかね?
387:デフォルトの名無しさん
11/02/17 00:31:11 .net
Ocaml みたいな奴だったらイラン