◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

関数型言語ML (SML, OCaml, etc.), Part 6->画像>1枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1245017721/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん
2009/06/15(月) 07:15:21
関数型言語MLについて語るスレッドです。

MLは、確固とした理論的背景を持つ言語でありながら、
現実的なソフトの開発にも使用できる実用性を備えた言語です。
また、プログラミングの初心者が最初に学習する言語としても優れています。

総本山
Standard ML http://www.smlnj.org/
Objective Caml http://caml.inria.fr/ocaml/

前スレ
関数型言語ML(SML, OCaml, etc.), Part 5
http://pc12.2ch.net/test/read.cgi/tech/1186292994/
2デフォルトの名無しさん
2009/06/15(月) 19:45:36
プログラミングの初心者が最初に学習する言語としても優れているのに、
学習者が増えないのはなぜなの?
3デフォルトの名無しさん
2009/06/15(月) 19:57:50
>>2
教える側が理解していないから。
4デフォルトの名無しさん
2009/06/15(月) 20:04:59
>>2
初心者が日常で使うにはハードルが高いからかな
5デフォルトの名無しさん
2009/06/16(火) 01:24:50
前スレでもあったけどOcamlとHaskellってどっちが初心者に向いてるのかな?
Lispいじってた俺にとってはOcamlの方が見た感じ楽そうに見えるけど
Lisp、Ocaml、Haskellマスターの意見が聞いてみたいな
6デフォルトの名無しさん
2009/06/16(火) 09:59:16
standard MLをさらっとやってから決めれば。
7デフォルトの名無しさん
2009/06/16(火) 22:59:25
>>5
型つき関数型言語の背景にある背景理論(ラムダ計算)をぱっと勉強したいならHaskell,
実用で長いこと使いたいならOCaml。
8デフォルトの名無しさん
2009/06/16(火) 23:52:08
オブジェクトを使わずにステートマシンを作るのによい方法はありますか?

勉強のためにStateパターンをモジュールを使ってやってみようと思ったのですが、
相互依存を回避するうまい方法が思いつきません。
また、状態をそれぞれ別モジュールにするにせよ、一箇所にまとめるにせよ、動的に切り替えるためには
結局パターンマッチさせてそれらを呼び出すようになると思いますが、もっとスマートな方法はありますか?
9デフォルトの名無しさん
2009/06/17(水) 10:23:08
>>8
まずは具体的な実装例を挙げてみたら?
10デフォルトの名無しさん
2009/06/17(水) 10:43:32
うん、なんか簡単な問題例を出してくれないとわかんないよ。
11デフォルトの名無しさん
2009/06/17(水) 10:51:36
state machineの問題例というとよくあるのはストップウォッチとか。
128
2009/06/17(水) 12:36:14
実際の問題を簡単にした問題例です。

流れ:
キャラクタがバイトをして財布がいっぱいになったら銀行へ行く
ということを目標金額まで繰り返し、到達したらその金がなくなるまで
家でごろ寝し、なくなったらまた働く

キャラクタは
  ・バイトをする : 手持ちが1増える
  ・銀行で貯金をする : 手持ちを0にし、貯金が1増える
  ・家で寝る : 貯金が1減る
の状態を取ります。
財布の許容量は3、目標貯金額は5とします。

Ocaml的な解決方法のアドバイスをいただけると幸いです。

ちなみに元々の問題は「実例で学ぶゲームAIプログラミング」
という本の2章に出てくる、上記の問題例にいくつか余分な状態を
追加したようなものです。
元々の問題をとりあえず実装してみたソースとサンプルソースも
あげてみました。
http://www1.axfc.net/uploader/Sc/so/9827.lzh
138
2009/06/17(水) 12:42:44
スレ違いではありますが、もう1つ後学のために質問をさせてください。
アップロードするのは初めてでよくわからないままaxfcを
使用したのですが、プログラム板で一般的に使用されている
アップローダーというものはあるのでしょうか?
14デフォルトの名無しさん
2009/06/17(水) 14:43:02
>12
その手の奴って素直に状態保持した方が色々スッキリしそうなんだけどどうなのエロイ人
15デフォルトの名無しさん
2009/06/17(水) 16:54:33
>>12
> キャラクタは
>   ・バイトをする : 手持ちが1増える
>   ・銀行で貯金をする : 手持ちを0にし、貯金が1増える
>   ・家で寝る : 貯金が1減る
> の状態を取ります。

ニート解:

キャラクタはバイトせず取り敢えず銀行へ行く
ということを目標金額まで繰り返し、到達したらその金がなくなるまで
家でごろ寝し、なくなったらまた働かずにまた銀行へ行く
16デフォルトの名無しさん
2009/06/17(水) 17:28:06
継続っぽくすればいいんじゃない?
17デフォルトの名無しさん
2009/06/17(水) 22:02:12
コードを晒すにはここがいいよ
http://codepad.org/
18デフォルトの名無しさん
2009/06/17(水) 22:22:20
なんで12の問題にStateパターンが適してるのかよくわからない。。
19デフォルトの名無しさん
2009/06/17(水) 22:31:48
interface State { void whatToDoNext(); } みたいなインターフェイスがあって、
class RichState implements State { public void whatToDoNext() { goToTheBank(); }
class PoorState implements State { public void whatToDoNext() { work(); }
...
みたいなイメージですか?
20デフォルトの名無しさん
2009/06/17(水) 23:05:02
これくらいなら引数に状態を持たせて各状態を手続きで表せばよくね?
21デフォルトの名無しさん
2009/06/17(水) 23:07:47
>>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);;
22デフォルトの名無しさん
2009/06/17(水) 23:09:23
(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#です
238
2009/06/18(木) 00:21:17
>>16
継続について調べてみます。

>>17
ありがとうございます。今度コードを晒すときに使ってみます。

>>19
おそらくそのイメージで合っていると思います。
(とはいってもJavaはよくわからないのですが・・・)
トップレベルでキャラクタクラスのUpdateを呼び出すと、保持している
派生状態クラスのインターフェースに自身を渡して実行。あとはよろしく。
状態の切り替えも勝手にお願いね。
的なコードが元々のサンプルコードです。

>>21
コードを書いていただきありがとうございます。

例題を簡略化したせいで反ってわかりにくくなってしまい、すみませんでした。
とりあえず継続というものを調べつつもう少し考えて見ます。
皆様ありがとうございました。
24デフォルトの名無しさん
2009/06/18(木) 22:18:10
考えてみたけどこれじゃだめ?

(* 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'
)}
25デフォルトの名無しさん
2009/06/18(木) 22:19:23
(* 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
26デフォルトの名無しさん
2009/06/19(金) 09:08:15
この規模だといいけど、
行動の結果と選択を独立に実装できる方が
将来の拡張にはよいんじゃないかな、
特に質問者はゲームAIの本読んでるらしいし。
27デフォルトの名無しさん
2009/06/19(金) 14:59:30
いつのまにやらObjective Caml is 3.11.1でてる
28デフォルトの名無しさん
2009/06/20(土) 12:20:07
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
29デフォルトの名無しさん
2009/06/20(土) 16:54:49
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
30デフォルトの名無しさん
2009/06/20(土) 17:01:54
上とか下でなくて、行って戻ってくるイメージですね。ブーメランみたいな。
31デフォルトの名無しさん
2009/06/20(土) 17:02:56
IDないんですね。29,30,31は、29です。
32デフォルトの名無しさん
2009/06/20(土) 17:16:19
インデントを浅くしろw

基本的に再帰は漸化式と同じと考えれば良い。
それで合ってるが、一々動作を深く考えずに関数を定義出来るようになるのが
最初の一歩だから精進すべし。
33129
2009/06/20(土) 17:41:30
ども。インデントはあれかなぁと書いた後に思いました。

命令型言語だとカウントする変数を作ってa = a + 1みたいな
イメージが強くて直感的にこのソース見て理解出来なかったので。
書いて見ると理解出来るもんですね。精進します。
34デフォルトの名無しさん
2009/06/20(土) 21:21:43
>>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
35デフォルトの名無しさん
2009/06/21(日) 13:16:20
>>34
こういうのあったんですね。助かります。どもです。

36デフォルトの名無しさん
2009/06/21(日) 19:21:20
前スレって埋まる前に落ちたんですか?
37デフォルトの名無しさん
2009/06/21(日) 19:24:33
うん
38デフォルトの名無しさん
2009/06/22(月) 09:18:56
>>28
質問をまず推敲してくれ。「期待」とやらが何かわかんねー。
> てことはOCamlのオブジェクト指向部分ちゃんと覚えないとだめかな
それは違うだろ。
3938
2009/06/22(月) 09:32:13
>>28
let c x f = a x (b x f);;
これが28の期待に沿っているといいのだが。
40デフォルトの名無しさん
2009/06/23(火) 09:00:15
http://flyingfrogblog.blogspot.com/2009/03/hlvm-has-been-released.html
HLVMってのはLLVMの関数型特化版、みたいなイメージ?
OCamlはこっちになるの? おしえてエロいひと
41デフォルトの名無しさん
2009/06/23(火) 10:34:57
釣りなの?釣りなの?
> HLVMってのはLLVMの関数型特化版、みたいなイメージ?
そういう理解でいい。

HLVM そのものの批判は詳細を知らないのでできないけど、

- Caml team は HLVM プロジェクトには全く噛んでない。
- Caml team と consortium が関知しない code generation の総入れ替えはありえない。
- HLVM で騒いでいる奴は各種言語メーリングリストの有名粘着。何かというとすぐ自分の有料メールマガジンに誘導。
- なんかちょっとした toy example が出来るたびに大騒ぎ。正直みんな食傷している。

将来化ける事もあるかもしれない。が、今は放置をお薦め。時間の無駄。
42デフォルトの名無しさん
2009/06/23(火) 13:27:16
>>41
前スレでも話題になってたHarropのこと?
43デフォルトの名無しさん
2009/06/23(火) 16:00:15
http://www.infoq.com/jp/news/2008/03/revoerability-and-testing-oo-fp

ここに
「Feathers氏に反対する人の多くは、関数型のコード乱雑になる原因は、
関数型ではないイディオムを関数型言語に持ち込んだこと以外にはないと
信じている。」
っていう記述があるけど、関数型言語のイディオム(とかデザインパターン)って
どんなのがあるの?おしえてエロいひとー
44デフォルトの名無しさん
2009/06/23(火) 16:23:20
>>43
原文を読んでみると、単に副作用のない純粋関数型のコードを
関数型のイディオムと呼んでいるように思えるな。
45デフォルトの名無しさん
2009/06/23(火) 17:28:56
>>43
そうだとするとあまりに漠然としていて多少の窮屈感が欲しくなるな。
ノーパンでスカートを穿いているような、あるいは力戦になって次に
なにを指せばいいのかわからない、そんな感じ。
そのうちそういうのがまとめられればいいなぁ。
46デフォルトの名無しさん
2009/06/23(火) 17:29:56
>>45のアンカーまちがえた。
>>44が正解
47デフォルトの名無しさん
2009/06/23(火) 17:58:00
>>45
おっしゃる事があまりに漠然としていて多少の具体感が欲しくなるな。
ノーパンでスカートも穿いてないような、あるいは序盤なのに次に
なにを指せばいいのかわかってない、そんな感じ。
そのうちそういうのをまとめられるようになってくれ。
48デフォルトの名無しさん
2009/06/23(火) 18:23:04
>>45
関数型が嫌いor慣れてない人の多くは純粋関数型の副作用の無い世界を
非常に窮屈だと感じるわけで。不感症になったのも慣れということだなw
49デフォルトの名無しさん
2009/06/23(火) 18:37:21
>>43
そのまんま、関数型スタイルだろ。
50デフォルトの名無しさん
2009/06/23(火) 21:34:35
>>41
ありがとん参考になった!

ベンチマークだけみて速いなーとか思っただけなんで、
そんな背景があったとはまったく知らんかったyo
51デフォルトの名無しさん
2009/06/24(水) 09:15:16
>>50
GC なしで早いよーと叫ばれてもね。
普通にMLのプログラムがコンパイル出来るようになったら
ベンチを見てみてもいい。

52デフォルトの名無しさん
2009/06/24(水) 09:18:35
>>43
デザインパターンってぶっちゃけてみれば、バッドノウハウのことでしょ。
関数型言語にそんなのないよ。
53デフォルトの名無しさん
2009/06/24(水) 09:23:49
昨晩の議論の結果、「デザインパターン」はありませんが、「あるあるネタ集」ならあることになりました。
54デフォルトの名無しさん
2009/06/24(水) 19:11:49
>>52
関数型言語にデザインパターンがないということはないだろう。要は「あるあるネタ集」(の粒度がある程度あるもの)のことなんだから。
オブジェクト指向でのデザインパターンは関数型言語ではバッドノウハウになり得るというのは同意。
55デフォルトの名無しさん
2009/06/24(水) 19:16:04
>>52
バッドノウハウはアンチパターン
56デフォルトの名無しさん
2009/06/24(水) 21:07:53
F#>Java いずれこうなるから安心しろ。
57デフォルトの名無しさん
2009/06/24(水) 21:30:13
いずれw
58デフォルトの名無しさん
2009/06/24(水) 21:36:15
あらゆる意味でF#>>>>Javaだろ。Windows上では。
特に関数型言語が好きだからとかではなく。客観的事実。
59デフォルトの名無しさん
2009/06/24(水) 21:37:58
Javaはネイティブで動かないからうんこ。
スレッドで動いてるガベコレも時々挙動がおかしくなるからうんこ。
60デフォルトの名無しさん
2009/06/24(水) 22:47:46
最終話「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が世界を救うと信じて…! ご愛読ありがとうございました!
61デフォルトの名無しさん
2009/06/24(水) 23:13:22
> OCaml : こ…ここがWindowsだったのか…!感じる…Javaの魔力を…
ワロタ
62デフォルトの名無しさん
2009/06/25(木) 00:05:56
F#ってOCamlとどれほど違うの?
63デフォルトの名無しさん
2009/06/25(木) 00:40:01
>>62
F#スレにこんなのあったよ

553 名前:デフォルトの名無しさん[sage] 投稿日:2009/06/01(月) 22:32:37
>>552
OCamlのみ
 多相ヴァリアント、ファンクタ、注釈ありで型がつく箇所では省略しても必ず型推論できる性質
 Camlp4/5、ビルド関係のツール(F#はしょぼい)

オブジェクト指向部分は根本的に違う(nominal/structural)
64デフォルトの名無しさん
2009/06/25(木) 00:47:26
>>63
ありがとう。なんか半分以上わからないけど。わかった事にしとく。
65デフォルトの名無しさん
2009/06/25(木) 02:30:58
>>60
ワロタw
WindowsのWindowにやられたww
66デフォルトの名無しさん
2009/06/25(木) 11:26:18
>>50
caml-list で Harrop が
New HLVM examples!
というサブジェクトで騒いでるから、それ見て、判断して。
67デフォルトの名無しさん
2009/06/25(木) 11:37:09
>>63
ここで聞くのもアレだけど
型推論が残念なことになったのは演算子のオーバーロードのせい?
68デフォルトの名無しさん
2009/06/25(木) 21:23:16
>Java : そうか
そうかってwww
どんだけスルー
69デフォルトの名無しさん
2009/06/26(金) 03:32:33
List.fold_left (fun (x,_) y -> x + y) 0 [(1,1)];;
を通そうとしたところ
This expression has type int but is here used with type int * 'a
といわれてしまいます。うまい方法はないのでしょうか?
70デフォルトの名無しさん
2009/06/26(金) 04:50:58
>>69
高階関数の引数が順番逆なだけじゃね
フォールドライトならそれでおkかも
71デフォルトの名無しさん
2009/06/26(金) 11:43:48
すいません スレよごしてしまって .... おっしゃる通りでした .... orz
72デフォルトの名無しさん
2009/06/26(金) 12:25:05
fold 辺りまで来たら、フィーリングでデバッグするんじゃなくて、
ちゃんと型を確認しだしたほうがいいね。
73デフォルトの名無しさん
2009/06/28(日) 22:06:11
http://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: このアプリケ
ーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケ
ーションを再度インストールすることにより問題が解決する場合があります。
※ここまで
74デフォルトの名無しさん
2009/06/28(日) 22:25:15
原因はわからんが、参考までに
 labltkはインストールしてるか
 ocamlはネイティブコンパイラまでインストール済か
 Activetclはバージョン8.5系だと動かなかったので8.4を入れる

 build.mlを実行した際に
 cygwinのlink.exeが使われるとエラーになるので
 環境変数からcygwinのパスをはずす

glutはそれと同じバージョンで動いたよ
75デフォルトの名無しさん
2009/06/29(月) 03:11:27
>>74
レスありがとうございます。
ですがどうも上手く行かないので、悩んでいます。
どこかで薦められてOCamlは
"Self installer (3.11.0) for the port based on the MinGW toolchain"
が入ってますが、Cygwin入れてないんです。これが原因なのかなぁ。
Cygwin以前入れたのですが今は外してしまってます。
近いうちに再度Cygwinをインストールしてみることにします。

読み進めたいので、このまま>>73の第五回は一応読むだけ読んで、
次に行きたいと思います。
76デフォルトの名無しさん
2009/06/29(月) 13:21:20
ocaml用のサウンドライブラリ(スピーカーから音を出したりマイクの音を拾ったり)で一番ポピュラーなのって何かな?
77デフォルトの名無しさん
2009/06/29(月) 13:34:48
>>76
OCamlSDL でサポートしてなかったら自作して公開よろ。
78デフォルトの名無しさん
2009/06/29(月) 13:40:59
>>77
だって、作るとしたらWin32APIとかOSSとかALSAとかいろいろサポートして、なおかつメンテもしないといけないんでしょう?
嫌ですよ。
79デフォルトの名無しさん
2009/06/29(月) 16:08:25
>>78
うわなんかヘタレられた。
自分のやりたいAPIのインターフェースだけ作りゃいいじゃん。
メンテもしたけりゃするだけでいいじゃん。
初期化とかは何かのライブラリ関数呼ぶだけだし。
やりたいことはほとんどデバイスから
ノンブロッキングに読んだり書いたりするだけで大抵出来るっしょ。
80デフォルトの名無しさん
2009/06/29(月) 17:35:00
>>79
そんな俺しか使わないライブラリを公開するぐらいなら、公開せずに手元に持っておいて、作り溜めしときますよ。
81デフォルトの名無しさん
2009/06/29(月) 20:12:55
>>75
俺もなんかそうなる。
OCamlは3.10.2でLablGLは1.03にもどしたら上手くいった
82デフォルトの名無しさん
2009/06/29(月) 21:04:21
>>81
ありがとうございます。1.03にしたら "OCaml build.ml"は上手く行ったようです。


しかし
「ocamlrun.exe - コンポーネントが見つかりません
 ocamlrun.dll が見つからなかったため、このアプリケーションを開始できませんでした。」
となってしまいまたもや失敗。

>>73のリンク先を見るとLablGLのインストールが失敗してるというのですが
インストールしなおしても同じエラーメッセージが出ます。はてさて。

OCaml本体は"ocaml-3.11.0-win-msvc.exe"をインストールしなおしました。
83デフォルトの名無しさん
2009/06/29(月) 22:06:31
Windowsだとライブラリのビルドでつまづくことが多いよね。
OcamlSDL関連のビルドで上手くいなかくてビルドを諦めた。
OCaml自体はプログラミング入門者にも比較的優しいと
思うけど環境は若干敷居が高めだと思う。
んでWindows使うのが悪いとかいわれちゃうとしょんぼりする。
そもそもLinux系を使うこと自体、本職でない人にとっては
普通ではないわけで。
84デフォルトの名無しさん
2009/06/29(月) 22:14:49
あれぇ?書き込めた。どうせアク禁の巻き添えで書き込めないだろうと
勉強不足を棚に上げた愚痴>>83を書いてみたら・・・。
ごめんなさい。反省しています。
85デフォルトの名無しさん
2009/06/29(月) 22:15:43
OCamlユーザは計算機科学の研究者が多いんだから、それは仕方ないだろ
86デフォルトの名無しさん
2009/06/29(月) 22:17:23
教育用というか初心者向けのサイトですらUNIX前提の記述が多いように思えるけどな。
87デフォルトの名無しさん
2009/06/29(月) 22:17:58
UnixやLinuxがプログラミング教育に適しているからだろう。
88デフォルトの名無しさん
2009/06/29(月) 22:18:10
>>85
>>86
うん。わかってはいるんだ。あんな書き込みをしてしまってごめんとしかいいようがない。
89デフォルトの名無しさん
2009/06/29(月) 22:29:17
まあ、ドザーはおとなしくF#でも弄ってなさいって事だw
90デフォルトの名無しさん
2009/06/29(月) 23:16:11
>>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が必要なんだと思われる。
英語は雰囲気で読んでいるので間違っていたら誰かやさしく叱ってくれ。
91デフォルトの名無しさん
2009/06/29(月) 23:40:30
>>84
> あれぇ?書き込めた。どうせアク禁の巻き添えで書き込めないだろうと
> 勉強不足を棚に上げた愚痴>>83を書いてみたら・・・。

この精神でビルドがんばれ。
どうせビルドできないと思ってもできるかも。
92デフォルトの名無しさん
2009/06/30(火) 00:26:31
いやcygwin/mingw系はさっさとあきらめるのが吉だと思う
93デフォルトの名無しさん
2009/06/30(火) 03:36:38
>>89
そんなこと言ってるから関数型はいつまでたってもドマイナーなんだよ
94デフォルトの名無しさん
2009/06/30(火) 04:59:31
それって何か問題があるんだっけ?
95デフォルトの名無しさん
2009/06/30(火) 12:32:44
スレとは関係ないが、東北型言語を使用する俺は「だっけ?」が方言かどうかわからなくなるときがある。
96デフォルトの名無しさん
2009/06/30(火) 12:45:46
そうですけ?
97デフォルトの名無しさん
2009/06/30(火) 12:50:27
>>95
それは、ずいぶん、どい なか です ね
98デフォルトの名無しさん
2009/06/30(火) 13:13:58
東北型言語と聞いたら、語尾に#を付けるんだと思った。
9982
2009/06/30(火) 17:56:45
そういうもんなんだとあきらめる事にしましたw
結局Cygwinなんか入れるよりもお勉強用のLinuxマシンを用意した方が早そうですね。
レス頂いてありがとうございます。
100デフォルトの名無しさん
2009/06/30(火) 18:50:55
>>99
完全にスレチだが、別にマシンを用意しなくても仮想環境を使えば楽なのに。
10182
2009/06/30(火) 18:57:35
セレロン1G、メモリ256Mしかないノートなんです。仮想環境は無理では。
Knopixとかならできるのかな?
102デフォルトの名無しさん
2009/06/30(火) 23:12:27
>>101
virtual boxでdebianがおすすめです。
かなり低スペックでも動いて、何よりaptーgetでocamlも含め、たいていのライブラリが簡単にインストール出来ます。
103デフォルトの名無しさん
2009/07/01(水) 00:05:15
プログラミングinOCamlの練習問題5.6

@を使わずにquick_sortを書き換えよ
ヒント:引数を一つ増やして整列済みのリストを受け取る

ってやつが解けまへん。。
教えて、偉い人
104デフォルトの名無しさん
2009/07/01(水) 01:27:12
>>102
まじっすかー!ありがとうございます。
今Ubuntuのデュアルブート環境作成厨…orz
ウブンツ重かったらそちらを試してみます。
105デフォルトの名無しさん
2009/07/01(水) 01:35:56
>>103
本読んでないけど末尾再帰じゃないすかね。
106デフォルトの名無しさん
2009/07/01(水) 08:39:57
>>104
apt getはububtuもdebianもほぼ同じなので、ububtuでも大丈夫ですよ。
107デフォルトの名無しさん
2009/07/01(水) 16:48:02
virtual box + debian + OCamlで作成したネイティブコードはやっぱり
Windows上では動かないん?会社がWindowsだから・・・。
動くなら今すぐそっちの環境に移行したい。
108デフォルトの名無しさん
2009/07/01(水) 16:55:45
>>107
当然動く訳無い。
大体Linux上で生成されるオブジェクトファイルはELFフォーマットだし。
109デフォルトの名無しさん
2009/07/01(水) 21:24:54
OCamlってLLVMのコード吐けるんじゃなかったっけ
110デフォルトの名無しさん
2009/07/02(木) 09:07:04
>>109
憶測で物を言うな。吐かない。終わり。

111デフォルトの名無しさん
2009/07/02(木) 09:15:48
LLVMのocamlバインディングはある。という話と取り違えたのかな。
112デフォルトの名無しさん
2009/07/02(木) 12:14:41
>>110
終わったところすまないが、>>109は吐ける!と断定しているわけではないから
もう少し生暖かくてもいいと思うんだ。
113デフォルトの名無しさん
2009/07/02(木) 12:49:21
>>112
>>110はいい加減なこと言う奴にうんざりしてるんだろうな。
この板はそんな奴ばかりだから、せめてソースくらい示さないと。
114デフォルトの名無しさん
2009/07/03(金) 05:15:37
LLVMのコード吐けるようにしようぜ、という話だけなら有った気がするが
115デフォルトの名無しさん
2009/07/03(金) 08:55:56
>>114
しーっ!そういうこと言うと
憶測で(ry
とか言われちゃう
116デフォルトの名無しさん
2009/07/03(金) 12:38:28
>>103
「書き換えよ」とか「引数を一つ増やして」といわれても元々のコードがないと
答えられないぜよ。
117デフォルトの名無しさん
2009/07/03(金) 17:08:59
偉い人は プログラミング in OCaml を買ってないので答えられないのではないか。
118デフォルトの名無しさん
2009/07/03(金) 18:05:20
>>117
そういえばOcaml-nagoyaの連中(有限会社ITプランニング)ってどうなったの?
なんか公式サイトにつながらないんだけど。
119デフォルトの名無しさん
2009/07/03(金) 19:23:03
OCamlは大文字で始まるidはconstructor扱いになるんだな
SMLのコードを移植していてはまった
120デフォルトの名無しさん
2009/07/04(土) 11:16:05
ocaml触ってみたんだけど、やっぱりライブラリが少ないね。
練習でちょっとしたものを作ろうとしたけど、ライブラリの少なさでたちまち不便で止まってしまった。
121デフォルトの名無しさん
2009/07/04(土) 11:52:02
そんなに副作用たっぷりのコードを書きたいならF#でも使えばいいのに
122デフォルトの名無しさん
2009/07/04(土) 12:10:39
副作用の無いライブラリを作るのは難しいの?
123デフォルトの名無しさん
2009/07/04(土) 12:19:32
>>122
HaskellならMonad IOがスタンダードだが、OCamlにはないからね。
IOはどうしても副作用になってしまう。
124デフォルトの名無しさん
2009/07/04(土) 12:32:25
それでF#でも使えと言われると辛いね…
125デフォルトの名無しさん
2009/07/04(土) 13:37:39
>>120
どんなライブラリが欲しかったのん?
126デフォルトの名無しさん
2009/07/04(土) 13:58:47
>>118
憶測(ry
じゃなくて、本が違う。
ITplan は知らんけど、一日ぐらいサイトが落ちてていいだろ。週末だし。
127デフォルトの名無しさん
2009/07/04(土) 14:19:25
>>126
どうでも良いけど、365日接続できないサイト運営してる時点で技術力を疑う。
128デフォルトの名無しさん
2009/07/04(土) 14:34:19
休日にメンテなら仕方ないけど、平日の夕方に落ちてるのは問題だな。
129ogasawara
2009/07/04(土) 17:30:22
>>118,126,127,128
恐縮です。うちが契約してるデータセンター屋さんの電源障害だそうで、何ともならなくて。
そろそろ復活するらしいのですが、うーん。
130ogasawara
2009/07/05(日) 09:28:07
>>120
The Caml Hump(http://caml.inria.fr//cgi-bin/hump.en.cgi)という
ところがあって、ここでライブラリを探すとかなり見付かりますよ。
CGI、DB接続、GUI、UTF-8、アルゴリズム色々など有ます。
131デフォルトの名無しさん
2009/07/05(日) 15:57:43
質問です。match文に関する質問です。
これは文法の慣習みたいなものかなと思うんですがどうなのかなぁと。

リストを受け取って何かを返す関数の場合、リストの要素が組やレコードだと
match文の中にmatch文を書くことがありますが、match文ではなく直接パターンマッチさせる書き方の方が
良いのでしょうか?

>>83
vmwareを使ってxp上でubuntuを動かして、ocaml勉強してます。
132デフォルトの名無しさん
2009/07/05(日) 16:48:01
>>131
質問をするときはサンプルコードを示したほうが回答してもらいやすいよ。
この文章だと
>match文ではなく直接パターンマッチさせる書き方の方が良いのでしょうか?
あたりがわかりづらいと思われ。
133デフォルトの名無しさん
2009/07/05(日) 17:28:04
>>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 ->

134デフォルトの名無しさん
2009/07/05(日) 17:44:47
>>133
お好きな方を。ただ、
let rec kekkon anata = match anata with

let rec kekkon = function
の方が簡潔。
135デフォルトの名無しさん
2009/07/05(日) 17:46:33
どっちでもいいんですね。どもです。
136デフォルトの名無しさん
2009/07/05(日) 18:49:38
>>133
このサンプルコードのようにレコードであれば直接アクセスするっていう手も
あるよ。タプルの場合は状況にもよるけど2番目の方法が多いんじゃないかな。
137デフォルトの名無しさん
2009/07/06(月) 09:38:23
record label に折角意味のある名前を付けてあるのに、
pattern match でワザワザ意味不明な変数に束縛するスタイルはおかしい。
そんなことするから s が二回束縛されてるヨ。
136 の言うように r.name とかでアクセスするほうが普通。
138デフォルトの名無しさん
2009/07/10(金) 16:02:51
データ構造について調べていたら
http://en.wikipedia.org/wiki/VList
のVlistというものを見つけたのですが、これはリストを使った
動的配列のようなものでしょうか。(英語が苦手のためよくわかりませんでした)
また、OCamlで書くとどのようになるのでしょうか。
分かる方がいたら教えてください。
139デフォルトの名無しさん
2009/07/10(金) 20:09:46
まぁ、List.nth が妙に早い list と思えばいいね。
答えが欲しいの?それとも一緒に考えてほしいの?
Okasaki には載ってないね。

140(* 〜 *)
2009/07/10(金) 22:04:04
長さが倍になっていくarrayが中身のリンクリストにしか見えないんですけど。
英語が読めなくても図は見えますよね。
構造はこんな感じでいいんじゃないの(図のまんま)。

type 'a vlisti = VLNil | VLCel of 'a vlisti * int * 'a array
type 'a vlist = 'a vlisti * int

操作は自分で考えませう。
141デフォルトの名無しさん
2009/07/10(金) 22:38:27
>>140
ありがとうございます。コードのおかげでなんとなくですが
イメージできました。(とはいってもこのデータ構造が
どんな風にありがたいのかは、まだ理解できてはいないのですが・・・)
142139
2009/07/11(土) 08:49:39
教育上は
type 'a vlisti = VLNil | VLCel of 'a vlisti * int * 'a option array
のほうが良いです。
140 だと埋まって無いトコを埋める値が必要ですね。(Obj.magic 0 などで埋めるのはダメ絶対。)


143デフォルトの名無しさん
2009/07/12(日) 20:12:39
ctags5.8でOCamlがサポートされたらしいよ。
144143
2009/07/12(日) 20:52:01
ctags -> Exuberant Ctagsに訂正。
145デフォルトの名無しさん
2009/07/16(木) 08:02:09
otagsがいらなくなると嬉しいな
微妙にctagsとオプションが違ったりするのがウザかったんだ
146デフォルトの名無しさん
2009/07/23(木) 08:24:19
OCamlからCへのトランスレーターってありませんか?
147デフォルトの名無しさん
2009/07/23(木) 09:00:30
>>146
http://groups.google.com/group/fa.caml/browse_thread/thread/cc13807fa7204874/91529afa62a52640
148デフォルトの名無しさん
2009/07/25(土) 19:43:01
OCamlで
(('a -> 'b) -> 'a -> 'b) -> 'a -> 'b = <fun>
int -> int = <fun>

で型だけを指定して変数を宣言することはできますか?
149デフォルトの名無しさん
2009/07/25(土) 23:52:22
変数何それ怖い

というか何がやりたいのか全くわからん
150デフォルトの名無しさん
2009/07/26(日) 00:07:08
>>148の型を持つ識別子なら定義出来る
151デフォルトの名無しさん
2009/07/26(日) 00:07:51
ただ、上は-rectypesなしで出来るかはわからん
152デフォルトの名無しさん
2009/07/26(日) 20:13:20
型注釈を使った無名関数をかいていて、ふと閃いて

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は拘束されていないようですし。

153148
2009/07/26(日) 21:13:50
それはxという識別子をxはintである、ということだけ指定して
宣言できるということですよね?やりかたを教えていただけますか?
154148/153
2009/07/26(日) 21:15:14
>>148

>>149
>>150
様あてです。失礼しました。それと回答ありがとうございます。
155デフォルトの名無しさん
2009/07/26(日) 22:59:56
変数が宣言できるとは言ってない
ただ、関数の引数などにアノテーションすることで
関数の定義範囲を狭めることは出来る

普通の定義
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で制限したもの
156デフォルトの名無しさん
2009/07/26(日) 23:00:46
int->intじゃなくて'a->'bだった
157デフォルトの名無しさん
2009/07/27(月) 10:29:45
質問者はもう少し動機などを書き加えてほしい。推敲した上で。
背景説明無しに、間違った用語で質問されても答えられません。
逆に説明があれば、多少間違っていても回答者の方で正しく解釈できます。

148 だけだとホントに意味不明だが 153 からすると、C における int x;
の様に「変数を宣言」できるか、というのが質問の意図だと思いますが、
ML では値の無い「識別子の束縛」は出来ません。

154、お前は未来に向けて話しているのか。

>>152
z:'a の z は識別子ではなくラベルです。後の z とは関係ありません。
文法をちゃんと確認して、ラベル付き引数の解説を読んでください。
158デフォルトの名無しさん
2009/07/28(火) 12:36:02
切口上的に始まる親切なレス乙!
159デフォルトの名無しさん
2009/07/29(水) 00:57:41
val come_on : orz -> or2
160デフォルトの名無しさん
2009/07/29(水) 13:23:33
>>159
ありがとうございます。Yコンビネータのようなものを作ろうとしていました。
非常に参考になりました。 

>>154が回答に感謝しているのは
>>150の、出来る、が回答になっていると思ったからなのですが。
161デフォルトの名無しさん
2009/07/29(水) 21:32:04
(('a -> 'b) -> 'a -> 'b) -> 'a -> 'bという型の識別子を定義できる



Yコンビネータを定義できる

は100光年くらい離れてる気がする
162デフォルトの名無しさん
2009/08/15(土) 12:47:34
(///)のような演算子をつくってhaskellのようなリスとりてらるを部分的に実現したいです。
(3///5) == [3;4;5] みたいな感じ。
演算記号は何が適当ですか?
163デフォルトの名無しさん
2009/08/15(土) 15:34:30
( -- ) をどっかのサンプルコードで見たな
164デフォルトの名無しさん
2009/08/15(土) 17:40:51
>>163
List.iter print_int (1--100)
とかですか? いいですね。見やすいです。
165デフォルトの名無しさん
2009/08/22(土) 15:26:49
SML/NJから移ってきましたが、SMLとは色々と違う部分が多くて戸惑います。
OCamlの標準ライブラリに無いものは自分で実装しているのですが、SMLとの
コンパチを取るライブラリなどがあったりするのでしょうか?
166165
2009/08/22(土) 22:50:51
再度すいません。SML/NJにはCompilation Managerというものがあってmake相当
のことが出来るのですが、OCamlではUnixのmakeを使うのが普通なのでしょうか?
OCamlのドキュメントではmakeを使った例が書いてありました。
それとも、omakeというものがあるようですが、これを使うのが今時のやり方で
しょうか。
167デフォルトの名無しさん
2009/08/22(土) 23:24:33
それはおまけ
168デフォルトの名無しさん
2009/08/23(日) 21:30:22
なんかhttp://caml.inria.frが異様に重いんだけど、どうかしたのかな。
http://www.inria.frは普通に繋がるだけに。
169デフォルトの名無しさん
2009/08/24(月) 09:06:37
SMLとのコンパチを取るライブラリなんていう後向きの物は聞いたことありません。
OCaml の stdlib は「標準ライブラリ」にあらず、 OCaml 自身をコンパイル
するために最低限必要な関数を集めただけと考えたほうが幸せです。
「次世代」標準ライブラリ候補として Extlib, OCaml Batteries Included, Jane Street Core
などありますからそれのウチ好きなのを使ってください。(Batteries は Extlib を内包しているはず)

ビルドは make か OCaml 付属の ocamlbuild か omake か、別に何でも良いんじゃない?
- GNU make : どこにでもある。他でも使える。枯れてる。
- ocamlbuild : OCaml に付属。全く使えない。
- omake : 超強力、普通インストールされていない。強力過ぎて一線を超えた使いかたが難しい。
170165
2009/08/24(月) 23:26:43
>>169
ありがとうございます。
ExtLib, Batteriesの双方に同じ名前のモジュールが含まれていたので疑問に思って
いたのですが謎が解けました。SML Basis Libraryにあるような関数は、名前違いで
大体ExtLibでサポートされているようで安心しました。

ビルドツールはGNU makeを主に使ってきたのですが、omakeはファイル更新の
チェックが素晴らしいようなので、omakeを使ってみます。
171デフォルトの名無しさん
2009/08/25(火) 11:41:33
なんでもいいから早く標準に入れてくれ
追加インストールとか面倒だし
172デフォルトの名無しさん
2009/08/25(火) 12:34:52
こんなとこで呟いても何も起こらんよ。
173デフォルトの名無しさん
2009/09/01(火) 14:33:39
だれかOCaml Meetingいった?
174デフォルトの名無しさん
2009/09/01(火) 20:45:28
いったよー

おもろかったけどgolfとかコンパイラ改造とかネタが裏街道過ぎて
実用志向のユーザー増えねえだろこれじゃ、とか思った
175デフォルトの名無しさん
2009/09/01(火) 22:15:16
行かなかったが、ストリーミングでアメリカ人?の発表のところまで見た。
Golfの話は意外と参考になった。演算子定義周りとか、普段あまり使わないから。
演算子によって優先順位が固定されているの勉強になった。
あとObj.magic。あれは反則技だろw
176デフォルトの名無しさん
2009/09/07(月) 05:40:38
OCamlが+-*/等の演算子をpolymorphicに出来ない理由って何?
177デフォルトの名無しさん
2009/09/09(水) 17:30:37
jocamlをmingw上でコンパイルするにはどうすれば良いでしょうか。
178デフォルトの名無しさん
2009/09/09(水) 17:32:57
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
・・・
179デフォルトの名無しさん
2009/09/09(水) 18:09:02
多分 configure したのが間違い。
OCaml の mingw のビルドを参考にしたら?
JoCaml には付いて無いけど OCaml の README.win32 に書いてある。

180デフォルトの名無しさん
2009/09/09(水) 20:36:00
>>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が入っていないようですが、これは不具合ということでよろしいでしょうか。
181デフォルトの名無しさん
2009/09/09(水) 21:23:00
mingwなんだからMakefile.mingw使わなきゃならないと
182179
2009/09/09(水) 21:31:19
さーねぇ、俺は JoCaml 使ったこと無いからこれ以上は判らんね。
同じバージョンの OCaml から引っ張って来たら運が良かったらビルドできるかも知れないが、
こんなトコで聞くくらいだったら JoCaml の人に win32.c 無いって聞く方がいいんじゃない?
183179
2009/09/09(水) 21:45:10
>>181
ん?あ、確かに。リンクエラーも判らんし README も読めんのに挑戦かよ。

184デフォルトの名無しさん
2009/09/09(水) 22:30:08
OCamlから足りないソース持ってこないといかんかもね
それで動く保証はないけど
185デフォルトの名無しさん
2009/09/09(水) 22:31:05
unix でやるのが早いでしょ。
186デフォルトの名無しさん
2009/09/09(水) 22:34:59
>>181
あ、Makefile.mingwでやりました。
上のはコピペで修正し忘れていました。
187デフォルトの名無しさん
2009/09/09(水) 22:36:17
>>185
JoCamlでアプリを書くつもりなので、Windowsでないとダメなんですよ。
188デフォルトの名無しさん
2009/09/09(水) 22:47:01
Luc でさえ、windows で試してないって言ってるし、
イバラの道じゃないかねー。Luc に聞かんと誰もわからんよ。
ちなみに win32.c は jocaml のレポから随分前に消えてる。
189デフォルトの名無しさん
2009/09/09(水) 22:49:38
http://jocaml.inria.fr/
We distribute JoCaml as sources. Those sources are for Unix systems
と書いてあるが、これは読んだのか?
190デフォルトの名無しさん
2009/09/11(金) 20:25:19
Batteries Included のドキュメントみてたら
リスト内包標記とか where 節とか open Module in とかあってびびった
使ってる人いる?
191デフォルトの名無しさん
2009/09/12(土) 11:44:43
既存のp4拡張をいろいろ集めただけでしょ。
open in はオーバーヘッドを理解してれば使える。
192デフォルトの名無しさん
2009/09/17(木) 12:29:49
オーバーヘッドあるんだ。
193デフォルトの名無しさん
2009/09/17(木) 12:56:31
open M in e は
let module M' = struct open M let v = e end in v
に変換されるので、ブロックを一つ作る。
普通はたいしたこと無いが、再帰関数中で open M in するのは少し考え物だ。
194デフォルトの名無しさん
2009/09/17(木) 13:09:21
すまん、let module M' = struct open M let v = e end in M'v の間違い

let rec f x = open M in e (* e 中に f の再帰呼出あり *)

とか書くと f の呼出しごとにブロックが出来て、時間とメモリを食う。
195デフォルトの名無しさん
2009/09/17(木) 13:13:49
M'.v ですー。
196デフォルトの名無しさん
2009/09/19(土) 14:39:44
時間とメモリを食うのはコンパイル時じゃないの?
197デフォルトの名無しさん
2009/09/21(月) 22:22:32
実行時にもオーバーヘッドがある。気になるならベンチ取ってね。
198デフォルトの名無しさん
2009/10/18(日) 14:08:13
浅井さんの「プログラミングの基礎」のサポートページって消えてる?
199デフォルトの名無しさん
2009/10/31(土) 11:31:30
birdの書いたsudokuの解放プログラム面白かった。
http://www.cs.tufts.edu/~nr/comp150fp/archive/richard-bird/sudoku.pdf
200デフォルトの名無しさん
2009/11/09(月) 04:34:20
Practical OCaml 買おうかと思ったのですが、評判悪いのが気になりました。
実際に読んだ方いましたら、感想を聞かせてください。
201デフォルトの名無しさん
2009/11/09(月) 23:09:48
> Practical OCaml 買おうかと思ったのですが、評判悪いのが気になりました。
> 実際に読んだ方いましたら、感想を聞かせてください。

たった今、ゴミだからいらないという人にもらいました。確かにゴミです。ネタとしてならどうぞ。
202デフォルトの名無しさん
2009/11/10(火) 00:11:27
俺はocamllex ocamlyacc の簡単なチュートリアルが欲しくて買ったけど、
そこについては別にひどくは無かったと思ったよ。
203デフォルトの名無しさん
2009/11/10(火) 04:23:58
コードのインデントが至るところで狂っている時点でダメでしょう。
どのページを開いても何かツッコミどころがあるというある意味貴重な本。
値段も安くはないし絶対にお薦めしない。
204デフォルトの名無しさん
2009/11/10(火) 21:20:02
http://d.hatena.ne.jp/camlspotter/20091110/1257833616
http://rainyday.blog.so-net.ne.jp/2006-11-25
http://shuns.sakura.ne.jp/?%BD%B5%B5%AD%2F2006-4-

これ出た当時はオライリーのフランス語のやつ(当時すでに絶版)以外ではこれしか本がなかったけど
日本語書籍がいくつもある今買う価値はないと思いますね。
205デフォルトの名無しさん
2009/11/12(木) 00:57:52
SML#の大堀先生は、最近、何してるの?
継続してれば、有望だと思ったんだけどな・・・ > SML#
206デフォルトの名無しさん
2009/11/14(土) 00:34:44
>>201
apressの書籍ってほとんどハズレだと思う
これもハズレだったよ
207デフォルトの名無しさん
2009/11/14(土) 02:34:17
【科学】道路に軍手が落ちているワケ、名城大研究チームが突き止める[09/11/05]

http://namidame.2ch.net/test/read.cgi/hidari/1257990721/


208デフォルトの名無しさん
2009/11/17(火) 02:45:27
くそう軍手……気になる
209デフォルトの名無しさん
2009/11/17(火) 13:34:53
推測の為の方程式として,土礼君の方程式がよく知られている.
しかし,パラメータの値には様々な見解がある.
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:道路上の軍手の寿命
210デフォルトの名無しさん
2009/11/17(火) 17:11:18
靴とか靴下が落ちているワケも気になるぞ
誰か研究してくれ
211デフォルトの名無しさん
2009/11/17(火) 23:27:17
そりゃ浮いてたら邪魔だからじゃないか。
212デフォルトの名無しさん
2009/11/17(火) 23:53:58
軍手なんて色気のないものに血眼になるなよ。
213デフォルトの名無しさん
2009/11/18(水) 00:15:00
>>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:道路上のパンティーの寿命
214デフォルトの名無しさん
2009/11/18(水) 01:10:38
パンツのことをパンティと呼ぶのは40代以上。
40代未満はパンツかショーツと呼ぶ。
215デフォルトの名無しさん
2009/11/18(水) 01:23:51
>>214
ウーロン知らないの?
216デフォルトの名無しさん
2009/11/18(水) 02:10:39
最近は単語で会話するのが流行っているの?
例:
「お茶」→「俺は紅茶が飲みたい。お茶といえば緑茶じゃなくて紅茶でしょ。緑茶とかジジくさいし。」
217デフォルトの名無しさん
2009/11/18(水) 02:30:26
>>214
類似定理に「キャロライン洋子を知っている人は1969年以前生まれ」がある。
218デフォルトの名無しさん
2009/11/18(水) 03:07:49
ならばこれはどうだ

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:道路上のブラジャーの寿命
219デフォルトの名無しさん
2009/11/18(水) 03:16:53
やめてけーれ
220デフォルトの名無しさん
2009/11/18(水) 03:50:10
>>217
72年生まれでびっくり日本新記録を見ていた私はなんですか?
221デフォルトの名無しさん
2009/11/18(水) 12:01:06
びっくり日本新記録は1975年から1985年までやっていたようだから、
72年生まれなら13歳中一まで見れていたことになる。
特別なことはなにもないと思うが。

マッハGoGoGoとか鉄腕アトムの第一作目をリアルタイムに見ていたとかいうなら驚愕ものだが。
222デフォルトの名無しさん
2009/11/18(水) 19:34:27
ここに1967年生まれの俺が居るわけだが
223デフォルトの名無しさん
2009/11/18(水) 20:22:40
5年前の俺なら老害呼ばわりしたかもしれないが、
最近はむしろ尊敬するようになってきた。
なんつーか、歳を重ねるってのはそれだけで立派だよ。

対して俺はゆとりに「この昭和生まれが」と言われてショックを受けた
224デフォルトの名無しさん
2009/11/18(水) 20:26:52
>>223
rougai
225デフォルトの名無しさん
2009/11/18(水) 21:29:42
>>223
そうは思わない

> 最近はむしろ尊敬するようになってきた。
ああ・・・ついにお前も老害の仲間入りか。
人間というのは自分の置かれた環境や立場によって考え方を変える生き物だというだけのこと。
お前が老害ジジイを擁護するようになったということは、
老害扱いされる時期がもうすぐ目の前に来ている証拠なんだよ。

たしか60歳以上の老人たちは日本が持っているカネの55%を持っているんだよな。
そしてそのカネを何に使うかというアンケートによると、
がんばってきた自分へのご褒美に贅沢するために使うのだそうだ。
若者が苦しんでいるときにそんなことを許していいわけがないだろ。
老人を過剰に保護するのをやめても老人は困らないし、
財源確保のために老人たちから搾り取ればいいと思う。
226デフォルトの名無しさん
2009/11/18(水) 21:37:01
あと、就業における年齢制限もやめるべきだと思う。
定年を設けている企業や官公庁が大半だと思うけど、それって年齢差別だよね。
60歳でもまだまだ働ける人がほとんどなのに定年で辞めさせるのはどうかと思う。
そうする代わりに、経営者に自由に解雇する権利を与えて、年功上列・終身雇用も撤廃して、
終身雇用に安住している無能なやつ(老害)をどんどん解雇していけばいいと思う。
無能な奴は一生平社員の単純労働でこき使えばいいよ。
長い間単純労働してるからといって才能の無い奴を無理に昇進させる必要もないと思う。
227デフォルトの名無しさん
2009/11/18(水) 21:41:57
アホかw
228デフォルトの名無しさん
2009/11/18(水) 21:42:48
>>223
歳を重ねるだけで得られるようなものなら誰でも手に入るから価値は無い。
229デフォルトの名無しさん
2009/11/18(水) 21:45:57
>>226
解雇すればいいのに、こき使うの?
230デフォルトの名無しさん
2009/11/18(水) 21:49:56
俺も高齢者は手厚く保護されすぎているように思う。
もっと若者と同じように扱えばいいのにね。
具体的にどこか体が故障している人を障害者認定して、
障害者として文化的な生活をおくるために補助をするなら分かるけど、
高齢者だからという理由だけで保護するのは過保護というものじゃないかな。
231デフォルトの名無しさん
2009/11/18(水) 21:52:31
ML と関係ない話は他所でやれ
232デフォルトの名無しさん
2009/11/18(水) 21:53:24
ジジババとかマジいらねえ
団塊世代は頭が鈍くて経験も役に立たないし物事を計画的にするのも下手だし散らかすのだけは一流で後片付けのことは微塵も考えないゴミなんだよなぁ
233デフォルトの名無しさん
2009/11/18(水) 21:53:31
>>225
> がんばってきた自分へのご褒美に贅沢するために使うのだそうだ。

金が回るならいいことじゃないか
234デフォルトの名無しさん
2009/11/18(水) 21:54:24
そう、そのウンコどもが苦手な分野こそが関数型言語
235デフォルトの名無しさん
2009/11/18(水) 21:56:33
>>233
ところが、使った分が戻っていくのが世にも奇妙な現象
236デフォルトの名無しさん
2009/11/18(水) 21:57:38
さっさとMLをブームにして金を使わせろ
237デフォルトの名無しさん
2009/11/18(水) 22:02:41
>>236
ダメ、ジジババはコンピュータ音痴だから。
238デフォルトの名無しさん
2009/11/18(水) 22:17:02
なにやら怨念めいたものを感じるな
南無阿弥陀仏
239デフォルトの名無しさん
2009/11/25(水) 12:41:38
'M`L < 新言語できたよー
240デフォルトの名無しさん
2009/11/26(木) 15:44:50
団塊世代は経済の成長期に楽しくお仕事して、下向きになったらつまらないから働くのやめるとか言い出す。
おいしいところだけ食べてトンズラとかマジきめえw
自分たちの責任を後世に押し付けて、自分は今まで楽しく稼いだお金で楽しく老後を過ごす予定なのか?
そんなことが許されるわけがない。
世の中みんなが辛いと思っているんだから自分だけ良い思いをしようとするなんて許されるわけがない。
団塊世代は身勝手だ。
搾取されるべきは団塊世代だ。
金があるんだから搾取してもかまわないだろ?
241デフォルトの名無しさん
2009/11/26(木) 16:25:40
一番の癌は大企業にぶらさがってる労組だな
特にJALやJRや某新聞社の労組
それから日教組
こいつらが日本のまじめな生産者の利益を貪ってる
242デフォルトの名無しさん
2009/11/26(木) 16:27:14
企業経営者が自由に社員をクビにできないのが問題。
243デフォルトの名無しさん
2009/11/26(木) 16:47:17
正社員を簡単にクビに出来ないから
会社は正社員じゃなくて派遣を使いたがる
派遣ピンハネ業だけが儲かる
244デフォルトの名無しさん
2009/11/26(木) 16:52:24
クビにできないのを良いことに労働組合を背景にやりたい放題やって楽して金だけもらって逃げた団塊世代
245デフォルトの名無しさん
2009/11/26(木) 16:53:19
良いこと考えた
正社員を派遣すればいいんじゃん
246デフォルトの名無しさん
2009/11/26(木) 18:11:29
マルチのコピペにいちいち釣られてんのか
コピペした奴が自分で反応してんのか
どっちにしてもアホだ
247デフォルトの名無しさん
2009/11/26(木) 18:58:16
>>245
面倒だから経営も外注するか。

労組嫌ってるやつは公務員か?死ねよ
248デフォルトの名無しさん
2009/11/26(木) 19:03:43
http://pc12.2ch.net/test/read.cgi/tech/1189246532/l50
249デフォルトの名無しさん
2009/12/06(日) 22:09:27
>>243
欧州のどこだかは、派遣使うとそれだけ割高になるような法律になってるとか
聞いたことある。
250デフォルトの名無しさん
2009/12/07(月) 00:49:50
>>245
プログラマの派遣なら、正社員の派遣が主流じゃないか?

>>249
法律なんか作らなくても、市場原理に任せておけば派遣のほうが高くなる。
レンタルとリースのどっちが割高かってこと。
むしろ、法律によって市場を歪めているのが諸悪の原因。
251デフォルトの名無しさん
2009/12/31(木) 15:29:23
>>250
どの法律のこと?
252デフォルトの名無しさん
2009/12/31(木) 19:26:50
おい、押すなよ、、絶対だぞ」
253デフォルトの名無しさん
2009/12/31(木) 21:53:25
ポチっとな
254デフォルトの名無しさん
2010/01/03(日) 16:49:17
val () = print "あけおめ\n"
255デフォルトの名無しさん
2010/01/07(木) 21:35:11
OCaml用のlibcurlバインディングらしい、ocurlを入れようとしたのですがエラーが出ます。
curl-helper.c
主に「dereferencing pointer to incomplete type」というエラーが大量に出ます。
どうすればいいのでしょうか。
./configやlibcurlのインストールなどは済ませています。
環境はMSYS + MinGW、Windows 7です。
256デフォルトの名無しさん
2010/01/08(金) 18:36:46
libcurl のバージョンは。
257デフォルトの名無しさん
2010/01/08(金) 18:43:34
バージョンはよいみたい。一度古いので苦労した記憶がある
258デフォルトの名無しさん
2010/01/09(土) 03:51:07
libcurlはWindows版では最新の7.19.7を入れました。
MinGWは最新のものを入れています。
ところで、http://jocaml.inria.fr/http://caml.inria.fr/ が落ちているのですが。
259デフォルトの名無しさん
2010/01/09(土) 04:31:29
http://caml.inria.fr/pub/docs/manual-ocaml/manual032.html#toc135
ここの例通りに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でやりました。
260デフォルトの名無しさん
2010/01/09(土) 08:51:21
>>259
Cランタイムのシンボルを見つけられてない、ということで
>Cygwinでocamlc -c modwrap.cすると何故かアクセスが拒否されるので modwrap.cとmod.mlのコンパイルはMinGWでやりました。
が怪しい。
この部分MinGWとCygwinの互換性はあるの?Cygwin知らんけど、全部-mnocygwinならどうだろう。
261デフォルトの名無しさん
2010/01/09(土) 09:28:15
>260
>この部分MinGWとCygwinの互換性はあるの?
エラーが出てるのは正に MinGW と Cygwin で互換性のなさそうな部分だね。

>259
>何故かアクセスが拒否される
modwrap.c を Windows ネイティブのアプリで編集していたりすると発生する場合もあるので
・Cygwin アプリで編集する
・mkpasswd とか使って /etc/passwd を見直してみる
・とりあえず chown / chmod してみる
・ACL 周りの設定を変えてみる(mount とか環境変数 CYGWIN とか)
あたりはどうだろ。
262デフォルトの名無しさん
2010/01/11(月) 21:48:13
>>260
>>261
助言ありがとうございます。
レスを頼りにいろいろ試してみましたが、だめでした。
OcamlもCygwinも使ってまだ日が浅いので大事なところを見落としているのかもしれません。
今忙しいのであまり時間が取れないのですが、Cygwinで揃えてまたいろいろと試してみようと思います。
本当にありがとうございました。
263デフォルトの名無しさん
2010/02/06(土) 21:54:14
Moscow ML 使ってみようと思ったら、もうずっと更新されてないんだね…
264デフォルトの名無しさん
2010/02/19(金) 00:01:29
SchemeとMLは、心が洗われるわー
265デフォルトの名無しさん
2010/02/19(金) 23:52:14
あー汚れてるんですね
266デフォルトの名無しさん
2010/02/22(月) 10:15:16
はい
267デフォルトの名無しさん
2010/02/26(金) 18:43:33
        
268デフォルトの名無しさん
2010/03/18(木) 02:27:03
OCamlはCにembedできますか?
269デフォルトの名無しさん
2010/03/22(月) 23:27:08
Milnerが亡くなったそうだね
270デフォルトの名無しさん
2010/03/22(月) 23:32:10
http://lambda-the-ultimate.org/node/3863

ホントだ。ご冥福をお祈りします。
ML は勉強していて楽しかったです。
271デフォルトの名無しさん
2010/03/28(日) 22:50:27
『プログラミングの基礎』 浅井健一著 を買ってポチポチ楽しく
やってるんですが、著者のサポートサイトに書いてあるように
やっても、未だに日本語の表示が出来ません。

http://pllab.is.ocha.ac.jp/~asai/book/Linux.html

環境はWinXPのVMPlayer上のDebian(lenny)でやってます。
端末でインタープリタ走らせてる場合も、Emacs上でtuareg-
modeでやってる場合も文字コードが表示されてしまいます。

助けてけろ〜
272デフォルトの名無しさん
2010/03/28(日) 23:42:03
分からんけど、なんでLANG=en_USのISOなんとかなんだろ?ja_JP.eucJPとかじゃないのか
273デフォルトの名無しさん
2010/04/09(金) 23:58:56
OCamlはoreilly本来ないね
274デフォルトの名無しさん
2010/04/11(日) 20:56:52
>>270
奥さん亡くなった三日後に心筋梗塞か。
275デフォルトの名無しさん
2010/04/11(日) 21:10:03
ご冥福をお祈りします。
276デフォルトの名無しさん
2010/04/12(月) 22:51:23
あの世で福??
277デフォルトの名無しさん
2010/04/21(水) 21:04:50
signatureのfunctorの使い方がよくわかりません。

signatureを受け取ってstructureを返すfunctor Aと、
signatureを受け取ってsignatureを返すfunctor Bを定義したとします。

signature CにAとBを適用したものをA(C), B(C)としたとき、
A(C)にB(C)を適用したstructureはどうしたら使えますか?
278277
2010/04/21(水) 21:06:26
言い忘れました。OCamlの話です。
279277
2010/04/21(水) 22:56:41
すみません、自己解決しました。
280デフォルトの名無しさん
2010/04/22(木) 01:34:18
あれ?OCamlのfunctorってsignatureを受け取ったり返したり出来るの?
受け取るのも返すのstructureだけだと思ってた
281デフォルトの名無しさん
2010/04/22(木) 01:38:21
ドキュメント読んでみたけど、
http://caml.inria.fr/pub/docs/manual-ocaml/manual019.html#toc67
やっぱりfunctorがsignatureを受け取れるようには見えないなぁ
282デフォルトの名無しさん
2010/04/25(日) 12:26:40
質問していいですか。
'a * 'bの値を受け取り、型'aと'bが等しいか否かを判定する関数はo'camlで書けますか?
283デフォルトの名無しさん
2010/04/25(日) 22:33:07
>>283
284デフォルトの名無しさん
2010/04/25(日) 22:54:26
>>284
285デフォルトの名無しさん
2010/04/26(月) 00:03:13
>>282
何がしたいのか分からないけど
OCamlでは型情報は実行時には残っていないので
そういう型を扱うプログラムは一切かけないとおもう
286デフォルトの名無しさん
2010/04/26(月) 21:09:56
OCamlってなんで最上位ビットをゴミ集め様に使っちゃうようにしたのかな。
なんか、これが凄くアダになってるように思えるのだが
287デフォルトの名無しさん
2010/04/27(火) 20:51:34
Lisp系含めてわりと見かける仕様なんじゃ
288デフォルトの名無しさん
2010/04/29(木) 20:07:48
$ 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 のディスク領域が新たに消費されます。

(#^ω^)ピキピキ
289デフォルトの名無しさん
2010/04/29(木) 20:14:14
>>288
ocaml-nox
290デフォルトの名無しさん
2010/04/30(金) 12:32:47
こそは自分でMakeだろJK
291デフォルトの名無しさん
2010/05/01(土) 16:43:51
SML#は生きていた
292デフォルトの名無しさん
2010/05/02(日) 01:19:01
音沙汰なくてちょっと諦めかけてたから新バージョンリリースめでたい
293デフォルトの名無しさん
2010/05/05(水) 04:16:18
OCamlの型で 'a. 'a list というのを見たんですけど、この「.」って何ですか?
294デフォルトの名無しさん
2010/05/05(水) 07:24:38
「.」が何かと言われるとむずいな
「'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だからエラー
295デフォルトの名無しさん
2010/05/05(水) 15:33:12
>>294
ありがとうございます
296デフォルトの名無しさん
2010/05/15(土) 22:35:32
SMLにはレコード更新の機能がなく、日常的に苦労しているので、ネイティブコードが
はけるSML#のリリースは待ち遠しかった。
ただ、欲を言うと、レコード拡張も言語としてサポートして欲しかった。
297デフォルトの名無しさん
2010/05/16(日) 08:50:49
>SMLにはレコード更新の機能がなく、日常的に苦労している
すげえ、日常的にか。仕事に使ってるの?
>ただ、欲を言うと、レコード拡張も言語としてサポートして欲しかった。
レコード拡張って?
298デフォルトの名無しさん
2010/05/17(月) 17:27:31
MLton って無限ストリーム使ったプログラムも最適化してくれるの?
299デフォルトの名無しさん
2010/05/18(火) 22:20:33
>>297
小規模な数値計算をしているだけで、すごいことはしていません。
Fortranで十分ですが、いくつかの部品を定義して、NJの対話環境
で評価することで、試行錯誤できて重宝してます。

レコードの拡張
連結と言うべきだった。
{a=1,b=2}#{c=3}
val it={a=1,b=2,c=3}
ができると嬉しい。
300デフォルトの名無しさん
2010/05/21(金) 01:51:26
Vimのインデントファイルで
ocaml.vimやomlet.vimより
いいものありませんか?
301デフォルトの名無しさん
2010/05/21(金) 21:02:03
MLで書くときはスタイルに悩むね。
inの前で改行すべきか?
連続するletはインデントすべきか?
などなど
302デフォルトの名無しさん
2010/05/22(土) 23:36:50
スタイルは悩みますね。
今のところ連続するletもinの後も
インデントしないようにしています。

ただ、こう書きたいという思いがあっても
Vimのインデントファイルでは
うまくいかないことがあって困ります。

ユーザーの多そうなEmacsを使った方が
いいのかもしれません。ま、それを
言ったら関数型言語もHaskellということ
になるかもしれませんが…
303デフォルトの名無しさん
2010/06/04(金) 16:33:24
Ocamlで
let plus x y = x + y があるとき
xより先にyに代入する方法はあるますか?
304デフォルトの名無しさん
2010/06/04(金) 20:40:08
λ式を使えば良いのでは。
すでに、y = aの代入が決まっているときは、
(fun x -> plus x a)
まだのときは、
(fun y -> fun x -> plus x y)
を使う。
※SML使いなので、構文上の間違いはあるかもしれぬ。
305デフォルトの名無しさん
2010/06/04(金) 20:44:13
これも、一種のスタイル問題だが、
列挙型を定義するときに、
datatype X = X1 | X2 | X3 | ...
とするか
type X = int
val X1 = 1
val X2 = 2
...
とするかで悩んでしまう。最初は、vector (ランダムアクセス)を使わない
見込みだったのだが、必要になったときのことを心配してしまう。
306デフォルトの名無しさん
2010/06/04(金) 22:34:46
そういう心配をしなくていいくらいコンパイラの最適化は賢いから安心して代数データ型を使えという話をどこかで見た気がするのだがどこだか忘れてしまったな。
307デフォルトの名無しさん
2010/06/04(金) 22:41:07
succ X1が欲しいという話だと思ったんだが。

……俺ならObj.magicしちゃうな
308デフォルトの名無しさん
2010/06/04(金) 22:44:58
http://d.hatena.ne.jp/sumii/20060918/1158537612
これだった。あんまり突っ込んだこと書かれてなかったな。でもこういう話じゃないの?
309デフォルトの名無しさん
2010/06/05(土) 18:55:54
>>304
ありがとうございます。
310デフォルトの名無しさん
2010/06/05(土) 23:46:13
>> 308, 307
ありがとうございます。そうです、O(1)で整数に変換できるかを心配していました。
311デフォルトの名無しさん
2010/06/10(木) 00:10:32
O(1)での変換速度を気にしなきゃいけないくらい沢山定義するなら、
DEFINEマクロ使った方がいいんじゃないかなぁ。あ、OCamlの場合だけど。

(* compile with -pp "camlp4orf" *)
DEFINE A = 1
let _ = print_int A
312デフォルトの名無しさん
2010/06/14(月) 19:50:39
>> 311
Ocamlマクロ使えましたね。いいなぁ〜
313デフォルトの名無しさん
2010/06/14(月) 19:54:03
破壊的代入(参照型)の利用はひかえめに、とはいろんなガイド/教科書に書いて
あるけど、どの程度が許容範囲なんだろう。

与えられたリストの部分和を要素とするリストを返す関数を書いてみると、
破壊的代入を使ったバージョンが一番短く直観的に思う。

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

関数プログラマ的には、どれがいいのだろう。
(もっといい書き方もあるかもしれない)

314デフォルトの名無しさん
2010/06/14(月) 19:58:31
個人的にはこだわらずに破壊的代入もがんがん使えって思うけど、その前にmapの捜査順は前からって保証されてるのか?
315デフォルトの名無しさん
2010/06/14(月) 21:34:29
確かに、一般的には規格違反かもしれない。ちなみに
http://www.smlnj.org/doc/basis/pages/list.html
には
map f l
 applies f to each element of l from left to right, returning the list of results.
と書かれているが、"from left to right"を副作用を持つfを考慮して、そう書いているのか
は不明。
316デフォルトの名無しさん
2010/06/16(水) 05:25:03
>>313
効率気にしないなら下のようにも.
fun series nil = nil
  | series (h::t) = h :: map (fn x => x + h) (series t)
効率を気にするなら,series3がいいと思った.
refを使うと現在の変数の状態を気にする必要があって大変.
series2はやってることはわかったけど,コードがなんとなく見づらい.
317デフォルトの名無しさん
2010/06/16(水) 12:11:01
>現在の変数の状態を気にする必要があって大変
refが大変で、引数変数が大変でないと思う辺り、関数型言語プログラマだなあ。
俺はまだそこまでの境地には達してないや
318デフォルトの名無しさん
2010/06/16(水) 18:09:00
「こんなこともあろうかと」いいながら、用意しておいたscanlを使うのが一番直感的。
319デフォルトの名無しさん
2010/06/16(水) 20:47:50
なるほど scanl か
mapAccumL で満足しそうになっていた
320デフォルトの名無しさん
2010/06/17(木) 21:08:40
>> 316
ひさしぶりに何か美しいものを見た気がします。
>> 318,319
HaskellのData.Listにある関数ですね。GHCは入れてあるが、ほとんど使って
いないので、知らなかったのですが、いっぱい関数が用意されてますね。


321デフォルトの名無しさん
2010/06/18(金) 19:16:35
NJに付属するCMLって、multicore対応じゃないみたいですね。
(tar ballのToDoに書いてあった)
ノード内並列には使えない。残念。
322デフォルトの名無しさん
2010/06/18(金) 19:31:43
SML なら Poly/ML がネイティブスレッドに対応してるよ
323デフォルトの名無しさん
2010/06/18(金) 20:52:49
>>322
ありがとうございます。
ここを http://www.polyml.org/Doc.html さらっと見てみましたが、
結構しっかりした実装のようですね。
これは、SML/NJからの移行を検討する価値がある。
他に、
- Windowsプログラミング
- FFIが簡単(のように見える)
が気に入った。
324デフォルトの名無しさん
2010/06/18(金) 21:45:31
MLでGUIプログラミング、って時々やろうとするんだけど準備が面倒で挫折する。
lablgtk2とその依存ライブラリを標準で取り込んでくれ〜
325デフォルトの名無しさん
2010/07/04(日) 19:42:48
ファンクターでモジュールを作ったときに実行される関数がほしいんだけど
OOのコンストラクタみたいなの
326デフォルトの名無しさん
2010/07/05(月) 12:51:06
 V V
(´・ω・`) うさちゃんピース
327デフォルトの名無しさん
2010/07/05(月) 15:03:08
長澤うさみ
328デフォルトの名無しさん
2010/07/09(金) 01:03:21
>>325
module F (A : sig val x : int end) = struct
let _ = print_int A.x
end

このファンクターに適当なモジュールを適用してごらん
329デフォルトの名無しさん
2010/07/09(金) 22:25:03
MLが関数型言語とか、最初に言い出したのは誰なのかしら
330名無しさん@そうだ選挙に行こう
2010/07/11(日) 11:47:27
 \                    /
   \  丶       i.   |      /     ./       /
    \  ヽ     i.   .|     /    /      /
      \  ヽ    i  |     /   /     /
   \
                                  -‐
  ー
 __          わ た し で す            --
     二          / ̄\           = 二
   ̄            | ^o^ |                 ̄
    -‐           \_/                ‐-

    /
            /               ヽ      \
    /                    丶     \
   /   /    /      |   i,      丶     \
 /    /    /       |    i,      丶     \ 
331デフォルトの名無しさん
2010/07/23(金) 23:57:35
プログラミング言語ML
http://www.amazon.co.jp/dp/4756116418

J. D. Ullmanのこの本絶版になってたのか。
11年前に図書館で世話になったときは、面白かった。
332デフォルトの名無しさん
2010/08/06(金) 17:34:51
3.12.0来たのか
333デフォルトの名無しさん
2010/08/14(土) 16:35:21
OCaml出たばっかりなのに人が少ないってどういうことなの
334デフォルトの名無しさん
2010/08/16(月) 01:05:07
平和ってすばらしい
335デフォルトの名無しさん
2010/08/16(月) 01:22:01
windows用の最新版は3.11.0ってことですか?公式のリンクが切れてるという。。
336デフォルトの名無しさん
2010/08/16(月) 12:57:13
自分でビルドすればいいし、URLの修正ぐらい自分でやればいいし
337デフォルトの名無しさん
2010/08/21(土) 23:26:49
windows 3.11.0

http://ocaml.jp/Chapter%2024%20The%20threads%20library

>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はどこにあるんだ・・・
338デフォルトの名無しさん
2010/08/22(日) 01:37:10
いっこうにMacPortsにこねえ>3.12.0
なんか既存アプリ壊してるとかあるのかね

>>337
志村ー、"thread.ml"ー
339デフォルトの名無しさん
2010/08/22(日) 02:53:00
>>337
圧倒的感謝
悩んでた自分が馬鹿らしい つーか馬鹿だった
340デフォルトの名無しさん
2010/08/22(日) 02:54:15
ミス
>>338
341デフォルトの名無しさん
2010/08/23(月) 01:39:58
unitをどうやって代入させるかで数分悩んでしまった。
342デフォルトの名無しさん
2010/08/30(月) 15:11:49
可読なCに変換してくれるコンパイラはないのか
343デフォルトの名無しさん
2010/09/19(日) 08:18:17
これはOCamlの仕様書と思って良いのでしょうか?
http://caml.inria.fr/pub/docs/manual-ocaml/index.html
344デフォルトの名無しさん
2010/09/19(日) 22:05:30
仕様なんてない
345デフォルトの名無しさん
2010/09/21(火) 22:59:45
最近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?

と上手く動いています。

どのあたりを調べれば良いかのポインタだけでも構いませんので、
解決方法ご存知の方、教えていただけますでしょうか。
346デフォルトの名無しさん
2010/09/21(火) 23:10:05
SML#ってMSの.Net系言語だと思って無視してたんだけど、
全然関係無しなんだね。まぎらわしすぎw

解決方法でないレスでゴメソ >>345
347デフォルトの名無しさん
2010/09/22(水) 02:13:02
>>345
SML/NJだと自動でライブラリを読み込むようだが,SML#ではそうでないみたいね.
ソースの smlsharp-0.56/smlnj-lib/Util/redblack-set-fn.sml
にRedBlackSetFnが入ってるから,必要なファイル込みでuseすればいいんじゃないかな.
348345
2010/09/22(水) 21:06:32
>>347
$prefix/lib/smlsharp/smlnj-lib/Util 以下に各set用のfunctorが
あったので、こちらをuseしてみたところ、
上手く動くようになりました。
ありがとうございます。

sml#ではCM上手く動かないのはやっぱり嫌だなぁ。
なんとかならないものか…
349デフォルトの名無しさん
2010/09/26(日) 18:45:17
初歩の初歩ですいません、symbolic nameって何?

ML for the working programmerを読み始めて早速引っ掛かってしまいました。
350デフォルトの名無しさん
2010/09/28(火) 01:50:38
alphabeticでない名前
351デフォルトの名無しさん
2010/10/16(土) 00:36:53
Jane StreetのCoreってOCaml 3.12に対応してる?
コンパイルに失敗する
352デフォルトの名無しさん
2010/10/24(日) 18:34:30
エディタの桁数はいくつに設定していますか?
353デフォルトの名無しさん
2010/11/10(水) 00:02:31
遅レスだけど、桁数は80でインデントは4。

:se nu ai sw=4 ts=4
354デフォルトの名無しさん
2010/11/10(水) 23:06:49
私も桁は80(インデントは2)。
でも無名関数を多用すると桁が足りなくなるので
増やすべきか悩む。横長モニタ買いたくなる。
355デフォルトの名無しさん
2010/11/11(木) 21:11:38
通常は80に設定しているが、MLを編集するときは、120に増す。
とはいえ、100を超えると読みにくくなるので、適当に折り返すことにしている。
ただ、このコーディングルールに従えばOK、というようなのがないので、
毎回困っている。
356デフォルトの名無しさん
2010/11/11(木) 21:19:26
>>305 解決策(SML/NJの場合の)が見つかった。
data label = A | B | C
Unsafe.cast A: int;
Unsafe.cast B: int;
Unsafe.cast C: int;
とすると、それぞれ0,1,2になる。
357デフォルトの名無しさん
2010/11/11(木) 21:49:53
>>356
MLは初心者だけど、>>305は(コードの問題ではなく)設計の問題だと思う。

代数構造として、直積(組型やレコード型)と列(リスト型や配列型)は全く別の概念。
コンパイルの前に要素の数が決定できるなら直積を使うべきだし、
実行してみないと決定できないのなら列を使う。あるいは動的なシンボルで
ランダムアクセスしたいならハッシュ型を、更に順序性が必要ならB木型を。

これらすべてはプログラムの設計工程で決定しておくべきもの。
設計工程での不具合をコーディング工程で取り返そうとするのは、よくある過ち。
>>356の解決策というのは、いわゆる「泥縄」的手法。いずれ破綻する。

いくらMLが美しい言語でも、設計が汚ければコードはグチャグチャになるよ。
逆に、設計が適切であれば手続き型言語であっても美しいコードは書ける。
358デフォルトの名無しさん
2010/11/11(木) 21:54:05
そんな大仰な話でもないだろ。
Pascal、Modula系からMLやら(その他EiffelやらOberonやら)への流れで、
なぜか列挙型を配列のインデックスに使う機能が捨てられた悲しいね、ってだけの話だ。
359デフォルトの名無しさん
2010/11/11(木) 22:25:29
だから「なぜ列挙型を配列のインデックスに使う機能が捨てられたのか?」という
疑問の答えを考えなさい、と言ってる。

列挙型(特に関数型言語の直和、MLのdatatype定義)というのは、要素を数え上げることで
集合を定義している。いわゆる「内包的定義」だ。集合なのだから、その要素間に順序性は無い。
もし要素間に順序性が求められるのなら、列として(集合とは別に)それら要素を定義する。
そしてそれらの間の関係を写像(関数あるいはハッシュ型などで)させることで対応づける。

こういった考え方(設計技術)無しに、力任せのコーディングテク(技法)で解決しようとするのでは、
(特にMLのような明瞭な型体系を持つ)関数型言語の利点は、全く生きないよ。
型をわずらわしく感じるうちは、いつまでたってもIT土方のままだ。(型定義 = 設計なのに....。)
結果的に「関数型言語を使っても美しい(高品質な)コードは書けなかった。チクショウ騙された。」
という誤解が生まれる。
360デフォルトの名無しさん
2010/11/11(木) 22:25:48
>>357
305が既にコーディング工程まで来ているという根拠は?
361デフォルトの名無しさん
2010/11/11(木) 22:29:03
>>359とか自分で読み返して恥ずかしくないのか?
列挙型がインデックスの配列なんて、単にmapの効率的な表現でしかないだろ……。
362デフォルトの名無しさん
2010/11/11(木) 22:33:39
あと「なぜ列挙型を配列のインデックスに使う機能が捨てられたのか?」は
単純に(非常に残念ながら)固定長配列型が採用されなかったからだろうね。
全部可変長配列ならインデックスに演算不可能な型を使えてもしょうがないから。
363デフォルトの名無しさん
2010/11/11(木) 22:39:12
>>357
根拠は、>>305が使った「スタイル」と言う言葉。

>>361
>単にmapの効率的な表現でしかないだろ……。
その通り。より正確には「写像の効率的な実装(コード化)」だね。
>>357で書いたのは、実装(コード化)で解決しようとせずに設計に立ち返りなさい、という話。
364デフォルトの名無しさん
2010/11/11(木) 22:44:09
正直「いちいちmap作るの効率悪い&めんどくさいからちゃっちゃとUnsafe.castしてしまえ」ってだけの話なのに
設計どうこうの話で絡む理由がわからんな。
それこそ言語機能の問題でしか無いんだから、実装の詳細もいいとこだろうに。
365デフォルトの名無しさん
2010/11/11(木) 22:52:14
そうだね。プログラミング言語なんて道具にすぎないんだから、本人がどう使おうが自由だし。
下流工程で延々とモガき続ける、いわゆる土方から抜け出せるよう助言したつもりだったが、
余計なお世話だったかもしれない。これで落ちるよ。
366デフォルトの名無しさん
2010/11/11(木) 22:57:51
だから、その本人が今現在下流工程にいるという根拠はなんなの?
367デフォルトの名無しさん
2010/11/11(木) 22:59:31
大体設計としてはインデックス値集合からのmap確定で、見直す要素なんて全く無いだろ。
余計なお世話どころか、勘違い甚だしすぎる。

SML使う土方現場なんて日本にあったら俺が行きてーよw
368365
2010/11/11(木) 23:14:44
落ちたつもりだったけど、自分のカキコにアンカ間違いがあったから、そこだけ訂正。

>>366
スマン。>>363

 >>>357
 >根拠は、>>305が使った「スタイル」と言う言葉。

という部分の>>357というアンカは間違いだった。>>360宛のレスとして読み直してくれ。
369デフォルトの名無しさん
2010/11/11(木) 23:22:16
今ひどい泥縄を見た。
370デフォルトの名無しさん
2010/11/11(木) 23:27:02
こんなに人いたんだな
371デフォルトの名無しさん
2010/11/12(金) 00:43:43
305&356です。
私はただの数値計算屋なので、このような助言はありがたい。
型の設定は大切にしています。ただ、研究用のプログラムなの
で、予想外の変更が生じるし、過剰に一般的に作ると使いにくく
なるので、なかなか難しいところです。

いまの問題でゆうと、対象の要素数が100とか1000であれば、
ハッシュを使う選択をしますが、当面の問題では、10以下の
固定個なので、列挙子を使いたい訳です。これは、NJの対話型
環境で式を評価したときに、
列挙子名が表示されるためです。
※NJのハッシュは組み込み型であるvectorほど使いやすくはない
ので、ハッシュを避けがちになるという別の問題はある。

なおUnsafe.castは前にOcamlにはmagicがあるという話が出たの
で、備忘録的に書いただけです。    
372デフォルトの名無しさん
2010/11/13(土) 19:02:17
SML# 0.60 は大堀先生からアナウンス
373デフォルトの名無しさん
2010/11/13(土) 21:11:23
いらねー
374デフォルトの名無しさん
2010/11/16(火) 01:51:58
ML が研究されているという情報。
それも国内で。
結構なことじゃないの。
375デフォルトの名無しさん
2010/11/17(水) 03:57:12
ようやくMPIを使っての並列起動に成功した……。Intel MPIの32bit版
が使えることのに気付くのにも時間が掛かったが、まさか、.cm/への
書きこみで競合が起こるとは想像だにできなかった。
376デフォルトの名無しさん
2010/12/07(火) 20:39:56
なにこれ?
From: Julian Assange <proff@i...>
Subject: call for ocaml volunteers

http://caml.inria.fr/pub/ml-archives/caml-list/2000/08/6b8b195b3a25876e0789fe3db770db9f.en.html
377デフォルトの名無しさん
2010/12/17(金) 00:13:19
windowsでグラフィックスを扱うライブラリ
としてsml_tkがあるようだが、Posixストラクチャ
とか使っててコンパイルできない。
378デフォルトの名無しさん
2011/02/11(金) 13:52:35
standard MLとかって、もう終わった言語なの?
379デフォルトの名無しさん
2011/02/16(水) 22:27:36
NJのバージョンはときどき上がっているようだが、64bit版の開発が着手される
気配はないねぇ。
380デフォルトの名無しさん
2011/02/17(木) 00:06:39
Objective SML とかあればなあ・・・
381デフォルトの名無しさん
2011/02/17(木) 00:16:06
ええ。
ocamlのobject的な機能って使ってる人いるのかね?
382デフォルトの名無しさん
2011/02/17(木) 00:31:11
Ocaml みたいな奴だったらイラン
383デフォルトの名無しさん
2011/02/27(日) 19:00:35.30
なんでCoqのスレとかないの?
384デフォルトの名無しさん
2011/02/28(月) 06:23:51.79
>>384
あなたやその他の人が誰も立てないから。
385デフォルトの名無しさん
2011/03/02(水) 23:24:04.60
>> 383
先日のRuby会議でCoqの話題が多かったようです。
http://partake.in/events/47ccda3b-82d2-4f89-aa83-395a26545b62
386デフォルトの名無しさん
2011/03/03(木) 07:11:19.47
またITプランニングのやつらか!
387デフォルトの名無しさん
2011/03/11(金) 15:27:53.72
「最近、関数型言語が流行ってんだってね?」
私にそう言ったのは、大法螺吹きの異名で名高い営業マン。
もちろん、彼はプログラミングのことは全然知らない。
たぶん関数型言語のこともどっかのポルノ雑誌ででも読んだのだろう。やれやれだ。
「岡村ってのが新しいらしいね。」
なんだよ、その岡村って…。もしかして日本人の開発した関数型言語か?岡村って誰だよ。
「やねさんなら、当然、岡村、使ったことあるよね?」
使ったことあるどころか、名前すら知らんよ。なんだよ、岡村って…。
「あれー?やねさんともあろう御人が、岡村も知らないとは…」
いや、マジで知らんよ。なんなんだよ、それ。
「そうかー。知らないのかー。やねさんでも知らないのかー。」
そう言われて「なんだかなぁ」と思いながら帰ってきて、「関数型言語 岡村」でググって見たけど、そんなの出てこねーよ。
「なんだよ、また、いつもの大法螺かよ!」と思って、布団に入って寝てたら、深夜の三時に、「もしかして、岡村ってOCamlのことじゃね?」と夢のなかで気づいて、いま悔しくて壁を思いっきりグーパンチで殴ってるところ。
388デフォルトの名無しさん
2011/03/11(金) 19:43:34.45
おいおい、岡村!アラン、見ランダ?
Yacc束してたのに、Matlab。

あだー。アラン、隙間フェチ、すから。
見つけるのは一苦労じゃろーね。Sque無い
嗚呼、くっ。一緒にエイダみる予定だったのに・・
遅coqしたら理彩のレイジがMaximaになる
メーリングリストで蓮家等に聞いてミルか
Amigaとう。んじゃ,またAgda!
Orc、またAgdaな
389デフォルトの名無しさん
2011/03/11(金) 21:16:39.93
おつかれ〜
390デフォルトの名無しさん
2011/03/13(日) 21:05:50.23
たててやったぞ

Coqスレ
http://hibari.2ch.net/test/read.cgi/tech/1300017923/
391デフォルトの名無しさん
2011/04/02(土) 19:12:41.89
>>388
ワロタwww
392デフォルトの名無しさん
2011/04/04(月) 00:00:15.57
NJのUnsafe.castのあまり意味のない使い道
(fn x => x (Unsafe.cast x)) (fn x => (Unsafe.cast x))
393デフォルトの名無しさん
2011/04/04(月) 00:35:09.27
type 'a safe = Safe of ('a safe -> 'a);;
let safe (Safe x) = x;;

print_char((fun x -> safe x x) (Safe (fun x -> safe x x)));;
394デフォルトの名無しさん
2011/04/05(火) 21:49:01.21
>>392
OCamlならこんなかんじ?
(fun x -> x (Obj.magic x))(fun x -> x (Obj.magic x));;
395デフォルトの名無しさん
2011/04/14(木) 09:44:35.08
OCamlに興味が湧いてとりあえず五十嵐某の書籍買ってみた。
で、技術書買って真っ先にやることと言えば正誤チェック。

つ・・つかえねぇ・・・この本
誤謬の嵐だぜこりゃw
量がハンパネェ
本として機能してない

残念だがゴミ箱へ
396デフォルトの名無しさん
2011/04/14(木) 21:22:48.50
>>395
そんなにひどいの?
397デフォルトの名無しさん
2011/04/15(金) 00:44:37.03
>>395
うん?
自分にとっては、haskellの学習に大きく寄与したぞ?

コラムの再帰に関する格言と、その本質に言及した言葉が無かったら、関数型言語を挫折してた
(関数型言語の魅力が解らなかっただろう)

自分は、この人にhaskell版を書いて欲しいぞ

今なら言える

手続き型言語は全体的に(それをするには)「どうする」で作り、関数型言語は、全体的に(それは)「何か(あるいは、どんなものか)」で作る言語だと
398デフォルトの名無しさん
2011/04/16(土) 12:37:58.03
>>395
俺も最近買ってしまって読んでるんだが、誤植の場所を教えてくれ。
素人でもわかるものなのか?
399デフォルトの名無しさん
2011/04/16(土) 12:57:42.57
あれってネット上で読めなかったか
400デフォルトの名無しさん
2011/04/16(土) 13:50:43.61
>>395
> 誤謬の嵐だぜこりゃw
>>398
> 俺も最近買ってしまって読んでるんだが、誤植の場所を教えてくれ。

「誤謬」のある本と「誤植」のある本の違いは大きい。
本当はどっち?
401398
2011/04/16(土) 17:02:39.70
>>400
すまん。ちゃんと見てなかった。誤植じゃなくて誤謬か。
で、どこなんだろう。
402デフォルトの名無しさん
2011/04/17(日) 20:32:04.80
>>401
両方。誤植も誤謬もある。

http://www.sato.kuis.kyoto-u.ac.jp/~igarashi/OCaml/
技術書でこれだけの間違いがあったら、どうやって本として機能するんだろう?



403デフォルトの名無しさん
2011/04/17(日) 21:40:45.30
>>402
そのページ印刷して本に挟んどけよ
404デフォルトの名無しさん
2011/04/17(日) 22:50:12.49
間違いは無いに越したことはないけれど、
これぐらいの量の間違いは大したことないと思う。
405デフォルトの名無しさん
2011/04/17(日) 22:51:29.38
十分大した事あるな
406デフォルトの名無しさん
2011/04/18(月) 00:31:01.42
技術書読んだことあんのか?
407デフォルトの名無しさん
2011/04/18(月) 08:22:14.27
技術書は静的型付けじゃないからな
408デフォルトの名無しさん
2011/04/18(月) 11:08:36.97
コーダとベリファイヤの性能が低い
409デフォルトの名無しさん
2011/04/20(水) 18:55:51.89
> 自分は、この人にhaskell版を書いて欲しいぞ

アマゾンで下のレビュー書いた人かいw
410デフォルトの名無しさん
2011/04/20(水) 20:57:40.94
ちょっと困っていることがあるので、助けてください。

ヨウ素がリストの参照になっているようなベクトルを用意して、各要素に
データを追記していくような処理をさせると(具体的には、複数の時系列を記録
したファイルがあって、これを時間順に読む)、追記回数の自乗のオーダの
処理時間が掛る。リストの先頭に追加しているだけなので、線形時間でやって
ほしい。


411デフォルトの名無しさん
2011/04/20(水) 20:58:06.52
(* コード例)
val bigV = Vector.tabulate(1000000, fn _ => ref (nil:int list))
val dat = Vector.tabulate(1000000, fn i => i)

val t0 = Time.now();
val tLast = ref (Time.-(t0,t0));
fun showTime() = let
val tLast' = !tLast
val () = tLast := Time.- (Time.now(), t0)
val dt = Time.-(!tLast, tLast')
in
Time.toString (!tLast)^","^ Time.toString dt
end

fun append k =
(print (Int.toString k ^ "," ^ showTime()^ "\n")
;Vector.app (fn box => box := k :: !box) bigV
)

val () = Vector.app append dat
412デフォルトの名無しさん
2011/04/20(水) 21:15:18.30
ヨウ素とかベクレルの話かとオモタ
413sage
2011/04/20(水) 21:46:08.88
辞書(と見逃した自分も)がそっち方向に過学習してしまったらしい。すまん。
414デフォルトの名無しさん
2011/04/21(木) 00:19:44.70
自分の環境ではサンプルプログラムの実行に二乗オーダは見られなかった。
bigVの大きさを一桁下げると速度がぐっと変わるし、GCとかのせいな気がする。
415デフォルトの名無しさん
2011/04/26(火) 20:50:17.84
SMLの勉強していて思ったけど、最初に学ぶ言語として関数型言語はやはり難しいかも知れない。
C言語だとHello Worldから始まって、リスト処理は構造体とポインタの応用問題という位置づけだった。
SMLはいきなりリストと再帰の話から始まるw

BASICは、LISPよりも後から開発されて、しかも同じダートマス大学発祥だけど、
リスト処理が実装されていないのもそれなりの理由があったのかなと思う。
416デフォルトの名無しさん
2011/04/26(火) 21:56:29.55
奥さん、そこで Factorですよ。
417デフォルトの名無しさん
2011/04/26(火) 22:12:07.58
>>415
> BASICは、LISPよりも後から開発されて、しかも同じダートマス大学発祥だけど、
> リスト処理が実装されていないのもそれなりの理由があったのかなと思う。

LISPとBASICじゃ作られた目的が全然違う
それに当時の計算機の性能ではリスト処理は時間的にもメモリ的にも大変重い処理だった
今の感覚や価値観は60年代の計算機や言語・ソフトの評価や判断には全く通用しない
418デフォルトの名無しさん
2011/04/27(水) 00:17:49.66
最初は易しい言語で、ってことが重要に思えるところ、
その信念に基づいた妄想を長々と書きこむところ、
これはその人の性質をよく表していると思う。
こういうひとのためにも緩い言語は必要。
ML系はそういうのとは全然違う。
419デフォルトの名無しさん
2011/04/27(水) 14:00:52.81
>> 415
ポインタ+構造体+慎重な操作を免除して、いきなりリストが使えるのが
売りだと思うのだけれど。

また、MLは破壊的代入+whileループが特別な儀式をしなくても使えるの
で、再帰を学ばなくてもある程度は使える。

420デフォルトの名無しさん
2011/05/18(水) 01:03:29.10
眉間のτとλ皺が特徴。
                            やつを追う前に言っておくッ!
                    おれは今やつのStateTをほんのちょっぴりだが体験した
                  い…いや…体験したというよりはまったく理解を超えていたのだが……
         ,. -‐'''''""¨¨¨ヽ
         (.___,,,... -ァァフ|          あ…ありのまま 今 起こった事を話すぜ!
          |i i|    }! }} //|
         |l、{   j} /,,ィ//|       『おれは奴の前で階層を lift していたと
        i|:!ヾ、_ノ/ u {:}//ヘ        思ったらいつのまにか lift が消えていた』
        |リ u' τ ,ノ _,!V,ハ |
       /´fト、_{λ{,ィ'eラ , タ人        な… 何を言ってるのか わからねーと思うが
     /'   ヾ|宀| {´,)⌒`/ |<ヽトiゝ        おれも何をされたのかわからなかった…
    ,゙  / )ヽ iLレ  u' | | ヾlトハ〉
     |/_/  ハ !ニ⊇ '/:}  ∀:::ヽ        頭がどうにかなりそうだった…
    // 二二二7'T'' /u' __ /:::::::/`ヽ
   /'´r -―一ァ‐゙T´ '"´ /::::/-‐  \    キャストだとかサブタイピングだとか
   / //   广¨´  /'   /:::::/´ ̄`ヽ ⌒ヽ    そんなチャチなもんじゃあ 断じてねえ
  ノ ' /  ノ:::::`ー-、___/::::://       ヽ  }
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::...       イ  もっと恐ろしいものの片鱗を味わったぜ…
421デフォルトの名無しさん
2011/06/08(水) 22:38:54.29
保守
422デフォルトの名無しさん
2011/06/20(月) 02:35:53.95
Ocamlとか関数型言語とか難しいことはよくわからないが
ターミナルでTwitterクライアントが動くらしいので
Ocamltterに手を出してみる。
そういえば親父がLISP好きだったのを思い出す。
423デフォルトの名無しさん
2011/06/20(月) 02:43:18.06
フランス人と日本人って意外に共通点があるよな
424デフォルトの名無しさん
2011/06/20(月) 02:48:34.90
皇女様をギロチンにかけたりな
425デフォルトの名無しさん
2011/06/20(月) 07:42:00.20
OcamltterあきらめてOcaml入門やってるんだが再起呼び出しとかちょっと難しいな。
for文と違う。

数学者にやらせると面白いことになりそうな謎のワクワク感を感じる言語ではある。
426デフォルトの名無しさん
2011/06/30(木) 22:40:46.75
みんな Haskell に移行してしまったんかいなぁ
427天使 ◆uL5esZLBSE
2011/07/05(火) 04:45:54.85
2011年、Ruby,Perl,PHP,Pythonって並べたときにさ
ここで、Ruby以外を選ぶ奴ってマジでなんなんだろうな


ゴミの分際でw
428デフォルトの名無しさん
2011/07/05(火) 11:37:20.29
>>427
科学計算を主に念頭においてるものだったら、Python一択になってくるよ。
それだけライブラリが充実している。scipy,numpy,matplotlib,mayaviなんて
のがあるからね。

>>415
手続き脳から見れば当然難しいけど、数学の漸化式を知ってれば再帰は
馴染みやすいし問題ないよ。難しくしてるのは頭の中で無理やり手続き型
に想定して理解しようとする癖があるからだよ。手続き型に染まった連中が
苦労するのはその悪癖が抜けないから。
リストとか関数の取り扱い(Cでいうと関数ポインタだな。)は手続きにとって
みれば高嶺の花だけど、そこが一番簡単にさせている要因なんだよね。
手続きに染まった人ってただ頭が硬直しただけなんだよ。
429デフォルトの名無しさん
2011/07/05(火) 11:40:45.99
ファーストクラスの関数を、関数ポインタのようなもの、とかいうのは、
誤解を招くだけでないかな。
430デフォルトの名無しさん
2011/07/05(火) 12:09:28.96
>>429
じゃあどう簡潔に言えばいいか示してくれ。それだけでいいよ。
431デフォルトの名無しさん
2011/07/05(火) 12:14:26.97
「ファーストクラスの関数」
432デフォルトの名無しさん
2011/07/05(火) 12:20:26.45
>>431
手続き脳の人相手に話をする場合、それで通じれば問題がないけど
彼らの試行の中で比較的近いものを取り上げて説明しようとしないと
たぶん、言葉が通じないと思うよ。CS専攻の連中相手に話をするならば
それで問題はないよ。もし知らなければ不勉強だってことだからさ。
433デフォルトの名無しさん
2011/07/05(火) 19:57:30.54
環境をキャプチャした関数ポインタのようなもの?
434デフォルトの名無しさん
2011/07/05(火) 20:12:36.48
それはもうポインタでも何でもねぇw

クロージャは、下手にCの概念で説明するよりは、定義をしっかり伝えたほうが、
相手に伝わりやすい代表例じゃないかな。モナドとか継続とかと一緒で。
435デフォルトの名無しさん
2011/07/05(火) 20:37:31.44
一応Cでもgcc拡張ならクロージャはある
C++ユーザならC++用語で言うファンクタ(関数オブジェクト)を結構使うはずなので、
ただの関数ポインタとの違いはわかっていると思う
クロージャが近いのは勿論ファンクタのほうだけど、C++のようにいちいち
classやstructでそれを記述する必要がない
もっともC++のそれがあまりに面倒くさかったので、C++でも0xでついにlambdaが
導入されたわけだけど
436デフォルトの名無しさん
2011/07/07(木) 11:04:09.84
他のスレでやれ
437デフォルトの名無しさん
2011/07/07(木) 13:02:54.88
>>427
誤爆?
438デフォルトの名無しさん
2011/07/09(土) 19:06:45.30
>>435
>一応Cでもgcc拡張ならクロージャはある

nested function の事なら、内部関数から参照している変数のスコープの
外からは使えないのでクローズしているとは言えないんじゃないかな。

http://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html

C なら Blocks を使う方が良さそう。
439デフォルトの名無しさん
2011/07/12(火) 19:45:27.51
>>438
そこを読むとinner functionのアドレスを取れると書いてあるけど、
upward funarg problemを解決しているわけではないの?
440デフォルトの名無しさん
2011/07/12(火) 20:32:45.49
>>439
環境を保存しておいてくれる訳じゃないからね
441デフォルトの名無しさん
2011/07/12(火) 22:06:56.99
>>440 なるほど。危険ではあるが役に立つかも知れないから機能は提供する
ということか。
442デフォルトの名無しさん
2011/07/30(土) 19:06:44.85
OCamlにしようか、それともHaskellにしようか迷ってます。
こういう用途ならこっちのほうがいいとか、なんかアドバイスお願いします。
443デフォルトの名無しさん
2011/07/30(土) 19:45:47.15
>>442
では、用途を教えてくだしあ
444デフォルトの名無しさん
2011/07/30(土) 20:08:56.47
>>443
こーいうやつはプログラミングの勉強自体が目的だろ。
445デフォルトの名無しさん
2011/07/30(土) 20:16:25.35
>>444
プログラミングの勉強自体が目的ならhaskell一択
446デフォルトの名無しさん
2011/07/30(土) 20:42:08.59
>>444
はい、その通りです。
PHPとJavaとJavaScriptはある程度書けますが、関数型言語をなにかひとつみにつけようと思います。

>>445
よろしければ理由を教えてください。
ぐぐった感じでは、haskellはモナドというのが難しくて多くの人が挫折しているようので、OCamlに傾いてます。
447デフォルトの名無しさん
2011/07/30(土) 20:52:58.37
>>446
勉強ってことだし、関数な考え方を得ようってなら純粋なHaskellの方を推奨
448デフォルトの名無しさん
2011/07/30(土) 20:54:22.93
勉強自体が目的ならなんで両方やらないのっていう
449デフォルトの名無しさん
2011/07/30(土) 20:56:02.64
あと入門用に、英語読めるなら、比較的平易な英文で書いてある

http://learnyouahaskell.com/

を挙げておきます。下の方にあるonlineを選ぶと、売っているものに近い内容が読めますよ。
450デフォルトの名無しさん
2011/07/30(土) 21:05:00.48
OCamlの入門書が1冊、Haskellの入門書が数冊出てるからどれか1つ、
とりあえず借りるか買うかして、それぞれ第1章ぐらいやってみなさい。
451デフォルトの名無しさん
2011/07/30(土) 21:05:33.97
>>446
関数型言語の特徴が余す事なく取り入れられてる
モナドは使う分には難しくない
使う分にはシンプル イズ ベストな書き方がやり易い言語

モナドを分からないと使えるようにならないと勘違いして脱落する人多いけど、モナドの理論的背景を理解する必要は無い
気になるなら気長に勉強しなされ

OCamlはループも有るし、副作用対策諦めてるし、手続き型言語に限りなく近い関数型言語って感じ

速いコード吐けるけど、昨今の関数型言語の特徴取り入れた手続き型言語が多い時代に勉強する意味は薄い
452デフォルトの名無しさん
2011/07/30(土) 21:07:10.73
手続きばっかだっし、古典のschemeでいいんじゃねーの?
453デフォルトの名無しさん
2011/07/30(土) 21:10:08.69
Lisp族はLisp族で悪くないけど、関数型プログラミングを今時勉強するならその選択はない。
454デフォルトの名無しさん
2011/07/30(土) 21:16:22.99
>>452
カリー分と遅延評価がデフォルトで付いてない
自分で同じ事を再現とかは出来るけど、それじゃ関数型言語の学習とは違う
455デフォルトの名無しさん
2011/07/30(土) 21:20:58.25
>>449
haskellスレで翻訳中って聞いたぞ
あと、kindleでサンプル読んだ限りじゃプログラミングhaskellの内容を砕けた言葉とイラストで書いてるだけに見える
内容的にはすでに翻訳されてるプログラミングhaskellで十分
456デフォルトの名無しさん
2011/07/30(土) 21:28:52.08
みなさん、ありがとうございます。
OCamlスレなのにHaskell勧める人ばかりなので、OCamlに未練はあるけど、思い切ってHaskellやってみようと思います。
457デフォルトの名無しさん
2011/07/30(土) 21:34:22.91
>>456
いや。。。
haskellもMLの子孫なんだが。。。
458デフォルトの名無しさん
2011/07/30(土) 21:36:14.27
>>456
俺はHaskell→OCamlと来た。
どっち先でもいいし、両方やればいいんじゃないだろうか。
片方しかやっちゃいけない決まりはないんだし。
面白いことは何でもやるべきだよ。
ミニ四駆だって、マグナムセイバーを買う傍ら、ソニックセイバーも買っただろ。それと同じ。
459デフォルトの名無しさん
2011/07/30(土) 22:15:41.84
そんなことはどうでもいい。OCamlのサイトが404だ。
http://caml.inria.fr/ocaml
460デフォルトの名無しさん
2011/07/30(土) 23:17:43.26
げ、ほんとだ
461デフォルトの名無しさん
2011/07/30(土) 23:23:32.07
すごいタイミング
>>456にはOCamlと縁が無かったんだな。。。
462デフォルトの名無しさん
2011/07/30(土) 23:29:26.27
ついにオワコンか
463デフォルトの名無しさん
2011/07/30(土) 23:50:18.39
OCamlがOCamlとして生まれ変わった際のゴタゴタだそうだよ
464デフォルトの名無しさん
2011/07/31(日) 21:38:50.21
http://twitter.com/#!/camlspotter/status/97519093602717696
>描いたのは俺!
>RT @y_echo
>RT @kinaba: なにがあったのwww
>RT @kikx これは変わりすぎだろ!
>RT @yoshihiro503 ちょ、 OCaml のサイトが激しくイメチェンしてる caml.inria.fr
465デフォルトの名無しさん
2011/08/01(月) 08:56:35.19
OCamlってもう手に入らないん?
466デフォルトの名無しさん
2011/08/01(月) 10:15:28.29
>>465
http://twitter.com/#!/camlspotter/status/97683309177475073
>一つだけ皆さんに言っておきます。毎年この時期には OCaml には何かが起きます。
>それはリア充関係者がバカンスに行ってしまって連絡が取れなくなるからです。
> RT @ytomino ocamlがついに滅んだと聞いて(遅い
http://twitter.com/#!/camlspotter/status/97685810127716353
>てか週末にサーバ不調になったら48時間止まるのあたりまえやろ?人間として。
http://twitter.com/#!/camlspotter/status/97686190618181632
>と haskell.org が落ちたときには wktk してた人が言っても説得力ありませんな

とりあえずフランスの月曜日昼(日本時間21時ごろ)まで待ちましょう。
それまでに復旧しなければ長期化確定ですね。
467デフォルトの名無しさん
2011/08/01(月) 10:34:00.78
http://proofcafe.co.cc/ocaml/
468デフォルトの名無しさん
2011/08/01(月) 22:02:08.55
>>466
直らんね。もうしばらく待つか。
469デフォルトの名無しさん
2011/08/01(月) 22:10:14.76
復活したね
470デフォルトの名無しさん
2011/08/02(火) 18:02:01.87
Lisp族はいいぞ。でもclojureを触っているとhaskellの影響がかなり大きい。

ocamlも触ってみたいけど、いまHaskell勉強中なんだ。たぶん、来年くらいには
やれればな。HaskellってLispと同じでプログラム作成までの抽象化も含めた
戦略を練るのに時間がかかる言語って感じがしました。Ocamlも同じなんだろうね。
471デフォルトの名無しさん
2011/08/02(火) 20:08:11.41
haskellはデータ構造を作るプログラミングになるって、山本和彦さんが言ってた
472デフォルトの名無しさん
2011/08/02(火) 20:23:02.98
>>470
Haskell影響は並列周りでしょ。
そもそもSTMはHaskell由来じゃないし。
他はもろLisp直系じゃん。
473デフォルトの名無しさん
2011/08/02(火) 21:58:52.67
>>472
見た目だけで話してるでしょ?
実際に触ってみればわかるけど、無限ストリーム近辺の関数はHaskellと
かなり近いよ。takeとかその辺のことね。common lispでも自作する方法は
あってもこの手の物は標準でないしね。
だから、リストの取り扱いってがhaskellに近くなってる。
>>471
なるほど
474デフォルトの名無しさん
2011/08/02(火) 23:33:03.74
takeはHaskell以前からある。
475デフォルトの名無しさん
2011/08/03(水) 02:04:20.65
>>472
> そもそもSTMはHaskell由来じゃないし。

でも中興の祖はHaskellの人(Tim Harris)じゃないっけ?
476デフォルトの名無しさん
2011/08/03(水) 02:21:43.19
それはそう。Monadの経験が役に立った。
477デフォルトの名無しさん
2011/08/03(水) 09:37:38.27
>>474
ミランダとかなの?よくしらないけど(wikiでちょっと見たけど、
haskellの親玉っぽかった。)
それはともかく、Clojureが関数型の大きな影響をかんじるのは
イミュータブルなところかも。あれのお陰で、副作用をもたせようと
思ったら基本的にSTMの部分を活用しなきゃならない。(java固有の
ライブラリは例外的なんだけど。)それと遅延評価言語だって
ところがcommon lisp を触ってる時よりhaskellの影響を感じやすいのかも。
あとは内包表記かな。wikiにはlisp,ML, haskell erlangが影響を受けた言語
とかかれている。
478デフォルトの名無しさん
2011/08/19(金) 10:50:16.31
R診たいなことが全部できるMLないのかよ。
479デフォルトの名無しさん
2011/09/19(月) 21:56:29.91
卒業研究でOCamlのライブラリ作ってます。
おもしろいことありますでしょうか?
480デフォルトの名無しさん
2011/09/19(月) 23:59:49.52
SML#の新verがひっそり出てた
481デフォルトの名無しさん
2011/09/24(土) 23:23:23.61
>>479
どんなライブラリでしょうか?
482デフォルトの名無しさん
2011/09/25(日) 11:44:54.04
>>479
どんなライブラリをつくったら面白いでしょうか?
なのか
ライブラリを作ることはテーマとして面白味があるでしょうか?
なのか。
483デフォルトの名無しさん
2011/09/27(火) 20:28:58.48
^^;
484デフォルトの名無しさん
2011/09/27(火) 20:52:03.96
OpenFlow コントローラのライブラリなどはいかが?
比較的、ホットなトピックだと思うけど。

http://www.google.co.jp/search?q=functional+reactive+programming+openflow
485デフォルトの名無しさん
2011/09/29(木) 14:23:07.44
MLの型推論の部分だけ「俺言語」の中に取り込みたい
型推論の部分だけ分かりやすくコンパクトにまとめられたコードどこかにないでしょうか
486デフォルトの名無しさん
2011/09/29(木) 15:11:00.44
>>485
http://en.wikipedia.org/wiki/Hindley%E2%80%93Milner
487デフォルトの名無しさん
2011/09/29(木) 15:56:30.36
>>485
このテキストの17章
http://www.scala-lang.org/docu/files/ScalaByExample.pdf
タイガー本の16章
http://www.cs.princeton.edu/~appel/modern/ml/
488365
2011/09/29(木) 18:07:57.87
>>485
Prolog で型チェック:Rainy Day Codings:So-net blog
 http://rainyday.blog.so-net.ne.jp/2008-06-16

題名は型チェックだけど、コードはまぎれもなく型推論
489デフォルトの名無しさん
2011/09/29(木) 19:09:02.35
ああPrologだから単一化で型推論が起きるのか。
490デフォルトの名無しさん
2011/10/04(火) 18:43:07.61
prologで型推定が一番楽にできそう
しかし返値しか推定してないね
491デフォルトの名無しさん
2011/10/06(木) 15:33:53.10
SMLやろうと思うんだけど、関数書いたファイルはどこ入れときゃいいの?
492デフォルトの名無しさん
2011/10/06(木) 19:31:29.68
WinにもOCaml3.12.1きてるー
http://gallium.inria.fr/~protzenk/caml-installer.html
493sage
2011/10/06(木) 20:07:16.49
>>492
SML/NJの場合だと、適当なファイル(例えばhoge.sml)に保存して、保存した
フォルダでNJの対話環境を起動して、
use "hoge.sml"
とすればよい。useはカレントディレクトリからソースを読み込む関数で、
カレントディレクトリの取得/変更は、
OS.FileSys.getDirとOS.FileSys.chDirでできる。




494デフォルトの名無しさん
2011/10/06(木) 21:24:34.13
>>493
ありがとう!
495デフォルトの名無しさん
2011/10/11(火) 22:10:01.73
http://queue.acm.org/detail.cfm?id=2038036

これみるとC#とかやってられんな
496デフォルトの名無しさん
2011/10/13(木) 22:44:28.70
型推論があるから簡潔になるのか
パターンマッチがあるから簡潔になるのか
497デフォルトの名無しさん
2011/10/13(木) 22:47:43.98
両方
498デフォルトの名無しさん
2011/10/13(木) 23:19:58.73
高階関数とカリー化も簡潔に書くのに一役買ってる
499デフォルトの名無しさん
2011/10/14(金) 07:40:42.96
>>495
ひどいよな。C#じゃ複雑なデータ構造を扱おうなんてすると沼じゃないか!
今Haskellの勉強をしててOcamlは読んだことはなかったんだけど
読めるもんだなとも思った。
500デフォルトの名無しさん
2011/10/14(金) 07:48:35.09
The C# code, while functionally equivalent, looks cluttered,
with the real structure obscured by syntactic noise.

事実だけど、辛辣だな。
501デフォルトの名無しさん
2011/10/14(金) 11:38:18.36
>>499
関数型言語群はMLの影響が強いからね。
C言語系という言い方では、ML系と言ってしまってもいい。
502デフォルトの名無しさん
2011/10/14(金) 21:38:01.24
>>501
なるほど、ML系かぁ。そういわれれば納得です。
503デフォルトの名無しさん
2011/10/14(金) 22:41:41.95
C#とかJavaとかはジェネリックが狂ってるな
504デフォルトの名無しさん
2011/10/16(日) 05:15:33.48
js_of_ocaml が面白そうだな
505デフォルトの名無しさん
2011/10/19(水) 21:52:08.21
ocamlてmain関数的なエントリポイントって無いの?
Pythonみたいな泥臭い方法でもいいんだけど.
506デフォルトの名無しさん
2011/10/20(木) 12:56:49.09
具体的に OCaml で何をしたいのか、Python のどこがダサいのか
書いた方が答をもらいやすいよ
507デフォルトの名無しさん
2011/10/20(木) 14:05:46.81
>>505
OCamlにエントリポイントはないです。__main__とかないです。
ocamlc -o a.out a.ml b.ml c.mlとしてコンパイルすると、
a.outの動きとしてはmodule A,B,Cの順番で評価されるイメージになります。
508デフォルトの名無しさん
2011/11/06(日) 03:27:50.02
最近HaskellからOCamlに興味を持って少し触り始めたんですが,OCamlの対話環境にはghciの「:i 」みたいなものは無いんでしょうか?
509デフォルトの名無しさん
2011/11/06(日) 06:11:24.22
「なぜ次に学ぶ言語は関数型であるべきか」
http://d.hatena.ne.jp/ymotongpoo/20111105/1320506449
原文: http://queue.acm.org/detail.cfm?id=2038036
510デフォルトの名無しさん
2011/11/06(日) 22:31:50.25
toplevel の pretty printer を普通のプログラム内で使う方法ってありますか。
511デフォルトの名無しさん
2011/11/07(月) 22:42:07.36
>>509
どしょっぱつの,Sometimes, が訳されていないとか,いろいろと
気になるところはあるけれど,大意は伝わった。うむうむ。
512デフォルトの名無しさん
2011/11/12(土) 05:42:33.31
>>510 #install_printer のやつ?
513デフォルトの名無しさん
2011/11/12(土) 05:53:40.36
>>510 言語は?
514デフォルトの名無しさん
2011/11/19(土) 10:47:17.91
http://scan.netsecurity.ne.jp/article/img/2011/11/13/27625/93.html
tokuhirom、ma.la?っていう人の話だけ聞きたい
色々なスレで見かけるけどWEB業界で有名らしいね
動画ありませんか?
515デフォルトの名無しさん
2011/11/23(水) 00:53:05.05
The little MLerの情報って調べたけど少ないね。大学の図書館
とかなら有りそうに思うけど、今は大学と関係ないから探せんわ。
SML中心で書いてるようだ。Ocamlへの改変の仕方ものってる
というのはgoogle booksでわかった。
使って学習した人っておらんの?
516デフォルトの名無しさん
2011/11/23(水) 09:07:06.79
NACSIS Webcatで検索するか買えば?
面白いよ。
517デフォルトの名無しさん
2011/11/23(水) 14:49:34.72
NACSIS Webcatか
http://webcat.nii.ac.jp/cgi-bin/shsproc?id=BA3501073X
意外とおいてるところ少ないね。今学習してる本が片付いたら
購入検討するわ。
518デフォルトの名無しさん
2011/11/23(水) 15:07:11.14
http://www.d12k.org/tso/intro.html
519デフォルトの名無しさん
2011/12/10(土) 10:15:38.86
age
520デフォルトの名無しさん
2011/12/18(日) 01:18:07.20
MLってCACHEに使われてるんだっけ?
RDBでないDBに興味を持ったので調べ始めたんだけど、 ML、CACHEとも事例が中々見つからない...
521デフォルトの名無しさん
2012/01/02(月) 00:09:12.82
OCaml のモジュールについて質問です.
たとえば
A.B
A.C
A.D
みたいにネストしたモジュールをそれぞれ分割されたファイル(a/b.ml, a/c.ml, a/d.ml など階層化されたディレクトリに分けられる?)に書くには OCaml ではどういう方法が一般的でしょうか?
522デフォルトの名無しさん
2012/01/19(木) 07:56:03.89
ocamlc -pack
523営利利用に関するLR審議中@詳細は自治スレへ
2012/03/29(木) 00:44:48.75
SML#
http://partake.in/events/f04706e0-0eac-4751-901f-41707bdfb1ef
524デフォルトの名無しさん
2012/04/22(日) 14:29:24.78
MLの無名関数 (fn x => x + 1 みたいなの)って再帰的な定義をする記法はないのですか?
fn n => n * (fn n-1) みたいな感じで。
525デフォルトの名無しさん
2012/04/22(日) 17:17:03.18
>>524
どうしてもやりたいならY combinatorを定義して使うとか:
let rec y f x = f (y f) x;;
(y (fun f x -> match x with 0 -> 1 | n -> n * f (n-1))) 10;;
526デフォルトの名無しさん
2012/04/23(月) 08:12:58.62
>>524 そのため(名前を付けて循環定義にするため)に let rec があるので
let rec と組み合わせればいいと思うんだけど、let rec と組み合わせたくない
理由とかある?
527デフォルトの名無しさん
2012/04/23(月) 20:37:41.35
SML/NJでdatatype 'a tree = Empty | Node of 'a * 'a tree * 'a treeとかやっといて、適当な深い木を定義してやると
表示が"Node #"と出てきて省略されてしまうんだけど、略記せずに全部出力させる方法があれば教えて。
528デフォルトの名無しさん
2012/04/23(月) 21:20:09.21
自分でプリンタ書けよ
529デフォルトの名無しさん
2012/04/27(金) 00:54:20.88
camlp4 使った奴でよくみる pa_* な名前の奴の pa って何の略なんだ?
530デフォルトの名無しさん
2012/04/29(日) 02:59:34.92
PArsing
http://mjambon.com/extend-ocaml-syntax.html
531デフォルトの名無しさん
2012/04/30(月) 15:05:27.19
>>530
おお、ありがとう!
532デフォルトの名無しさん
2012/05/08(火) 20:26:45.44
>>527
以下2つに適当に大きな数字を書き込む。
Control.Print.printLength;
Control.Print.printDepth;
あと、
Control.Print.out
も便利。何もしない関数に置き換えると、エコーバックを消せる。
533デフォルトの名無しさん
2012/06/07(木) 13:35:08.25
http://www.amazon.co.jp/Modern-Functional-Programming-Chris-Reade/dp/0201648644/ref=sr_1_2?s=english-books&ie=UTF8&qid=1339043582&sr=1-2

www
534デフォルトの名無しさん
2012/06/07(木) 13:40:40.11
どこからつっこめばいいの…w
535デフォルトの名無しさん
2012/06/07(木) 17:40:09.00
> 掲載画像とお届けする商品の表紙が異なる場合があります。ご了承ください。

とあるけど、どういうことだろう
536デフォルトの名無しさん
2012/06/07(木) 21:01:28.02
オリンピックをもう一回
537デフォルトの名無しさん
2012/06/11(月) 15:25:00.19
300?
538デフォルトの名無しさん
2012/07/25(水) 19:10:23.62
>>534
>出版社: Addison-Wesley (2017/11/20)

2017年・・・
539デフォルトの名無しさん
2012/07/25(水) 20:56:09.52
OCamlで
 int_of_float -0.7;;
がエラーになるんですが、どうして?

Error: This expression has type float -> int
but an expression was expected of type int

ちなみに、、
# int_of_float 0.7;;
- : int = 0

# -0.7;;
- : float = -0.7

-0.7はfloatじゃないの?何がダメなの?
540デフォルトの名無しさん
2012/07/25(水) 21:13:02.20
中置関数 (-) : int -> int -> int
ががっつり int_of_float を引数に取っているわけで。
int_of_float (-0.7) で使ってください。
541デフォルトの名無しさん
2012/07/25(水) 22:13:31.14
>>540
そういうことでしたか!
ありがとうございます
542デフォルトの名無しさん
2012/07/28(土) 13:56:10.63
>>541
~-.0.7 と書いても良いね
543デフォルトの名無しさん
2012/07/29(日) 11:24:50.70
いつの間にか OCaml4.00.0
544デフォルトの名無しさん
2012/07/29(日) 12:34:47.25
岡村4.00.0
545デフォルトの名無しさん
2012/07/30(月) 17:15:20.50
OCaml
コンパイルして、nativeなコード吐いて、不思議な実行のさせかたしてるのね
546デフォルトの名無しさん
2012/07/30(月) 22:50:31.73
どのへんが不思議なんだ?
547デフォルトの名無しさん
2012/08/12(日) 14:06:23.13
わからない?
548デフォルトの名無しさん
2012/08/12(日) 23:04:07.50
わからない。教えて下さい。お願いします。
549デフォルトの名無しさん
2012/08/13(月) 00:04:10.53
#!/usr/bin/ocamlrun
550デフォルトの名無しさん
2012/08/13(月) 01:29:14.36
nativeの意味を取り違えてない?
551デフォルトの名無しさん
2012/08/13(月) 03:03:42.64
スクリプトじゃないのはdumpすればわかるでしょ
552デフォルトの名無しさん
2012/08/13(月) 11:53:42.11
http://www002.upp.so-net.ne.jp/mamewo/ml.html#compile
553デフォルトの名無しさん
2012/08/29(水) 23:04:20.96
ねんがんのLittle MLerをてにいれたぞ

OCamlの場合の読み替え方法も載ってるけど、素直にSMLでやった方が良いのかな
てか読んでる人はいるんだろうか・・・
554デフォルトの名無しさん
2012/09/02(日) 03:59:59.39
以下の関数でprint_int x という文を入れると構文エラーになってしまうのですが、何がいけないのでしょうか?

let hoge x =
print_int x ← これ
if x=0 then 0
else x + 10

let test1 = hoge 0 = 0
let test2 = hoge 10 = 20


# #use "printtest.ml";;
File "printtest.ml", line 3, characters 4-6:
Error: Syntax error ← 原因は?
555デフォルトの名無しさん
2012/09/02(日) 08:57:34.05
print_int x;
556デフォルトの名無しさん
2012/09/02(日) 10:39:53.93
>>555
Thx!出来ました
セミコロンを使うのはインタプリタだけなのかと思っていました
調べてみたら、配列の区切りでも使われるんですね
557デフォルトの名無しさん
2012/09/02(日) 10:47:02.65
ocamlか。おかのコードはごみごみしくて醜いな
558デフォルトの名無しさん
2012/09/02(日) 10:53:23.84
print_string "あ、OCamlです。言ってませんでしたね。すいません¥n";
559デフォルトの名無しさん
2012/09/02(日) 15:19:34.02
>>556
インタプリタの文の区切りは ;; (セミコロンが2つ)
逐次実行は ; (この場合セミコロンの前の式の型が unit でない場合警告が出る)
配列の区切りも ; (これは配列の括弧 [ ] の中でのみ出現する)
560デフォルトの名無しさん
2012/09/28(金) 23:37:26.16
.net におけるOcamlがF#ですが、
JVM上でのOcaml相当のものはないのでしょうか?
561デフォルトの名無しさん
2012/09/29(土) 11:26:57.28
OCaml-Javaは? http://ocamljava.x9c.fr/
562デフォルトの名無しさん
2012/09/30(日) 17:21:46.18
>>561
おお、これってチラ見したときは単なるライブラリレベルでのサポートかと
思ってましたが、完全なJVM実装なんですね。
563デフォルトの名無しさん
2012/10/03(水) 00:49:32.12
http://www.lexifi.com/ml2012/
今年のMLワークショップでもocaml-javaの紹介してたみたい。
どのぐらい出来てるんだろう。
パフォーマンスの話も載ってた。
1/3ぐらい?
564デフォルトの名無しさん
2012/10/12(金) 11:22:15.18
# type t = int * t;;
Error: The type abbreviation u is cyclic
# type t = { x: int; y: t };;
type t = { x : int; y : t; }

# type u = u option;;
Error: The type abbreviation u is cyclic
# type u = Some of u | None;;
type u = Some of u | None

だれか解説してくれ。
565デフォルトの名無しさん
2012/10/12(金) 12:17:07.41
>>563
http://shootout.alioth.debian.org/
の中くらいのサイズのやつを8つベンチマーク。
0.96倍から7.14倍の実行速度。
3倍内に収まったのが6つあるぜ。

intを扱うベンチが遅い。boxingされちゃうから。
そういうベンチを省くと平均で倍は遅くない。
566デフォルトの名無しさん
2012/10/12(金) 12:26:46.91
>>564
最初のやつは値を作れないし、三番目の型パラメータとして渡すようなのもoptionの中身次第では同じ事になるからじゃね?
と思ったが二番目が通るのがよくわからん。
567デフォルトの名無しさん
2012/10/12(金) 17:55:16.91
>>564
(**** スマンがOCamlは久しく触っていないので、SMLで解説してみる -- 処理系は SML/NJ ****)
- type t = int * t;
Error: unbound type constructor: t
  (* まだ束縛されていない型構成子 t を右辺の型式内で参照しているからエラー *)
- type t = { x: int, y: t};
Error: unbound type constructor: t
  (* 最初の例と同様に、型構成子 t はまだ束縛されていないのでエラー *)
- type u = u option;
Error: unbound type constructor: u
  (* これも同じ理由でエラー *)
- datatype u = Some of u | None;
datatype u = None | Some of u
  (* 上記のtype宣言文とは異なり、datatype宣言文であれば再帰的なデータ型定義が許されている *)
(**** 以上だけど、SMLなら不可解な振る舞いは無く、現象を明解に説明できるよ.... ****)
568デフォルトの名無しさん
2012/10/12(金) 18:44:39.63
>>564
abbreviationではない新しい型がcyclicかどうかは仕様を決める人が自由に決める

一方、タプルとoptionがcyclicではないという仕様は既に決まっているので
タプルのabbreviationとoptionのabbreviationはcyclicではないはず
569デフォルトの名無しさん
2012/10/12(金) 19:52:28.31
>>565
おお、ちゃんと動くもんなんだね!
570デフォルトの名無しさん
2012/10/13(土) 10:18:23.39
おお。皆さん回答ありがとう。

>> 566
値を作れないわけではなかったりする。

# type t = { x: int; y: t };;
type t = { x : int; y : t; }
# let rec loop () = loop ();;
val loop : unit -> 'a = <fun>
# { x = 0; y = { x = 1; y = loop () } };;

いや、作れてはいないんだけど、型は付く。
CPS っぽい感じのプログラムで最後に exit するような場合、こういう型が出現することもある…気がする。
tuple で許されず、 record で許されるのに何か理由があるのかと思ったけど、
>>567 さんの通り、 SML ではどちらも許されないそうだし、あんまり深い意味はないのかな。

>>568
人(言語仕様)が自由に決めるとして、なんでこんなチグハグに(素人目には)見える仕様に
なってるのかなーという。 record が通るってことは、どっちの仕様でも型安全性は保証されるのだよね?
それぞれの仕様の pros/cons が知りたい。

あと、 option の方は、処理系が option の内容を辿るように頑張って実装すればイケるのか、
型理論的になにか問題があるのかよく分からない。
571デフォルトの名無しさん
2012/10/13(土) 10:30:56.43
ああ書いていて気づいた。 record は mutable なフィールドを許すから、

# type t = { x: int; mutable y: t };;
type t = { x : int; mutable y : t; }
# let rec v = { x = 0; y = v };;

こういう循環している値を使うことが普通にあるわけで、 cyclic な型を認めておいた方が便利なのだ。
一方で tuple は常に immutable だから、無限ループになるような通常は起こりにくい状況でしか
cyclic な型が出てこない。

たぶん。
572デフォルトの名無しさん
2012/11/03(土) 17:26:40.17
久々にtuareg-mode使ったけど、インデントが変わったのな。
昔のはletをネストするとだんだん右に行って見づらかった
573デフォルトの名無しさん
2012/11/07(水) 04:55:27.01
Ocaml関数引数の省略説明って簡単に嵌ってしまた
let plus x y = x + y
let incr = plus 1
incr 1
2

let minus x y = x - y
let decr = minus 1
decr 2
-1 ????
let decr = plus -1
error
let decr = plus (-1)
decr 2
1

let decr x = minus x 1
decr 2
1
こんな感じww
途中で
val incr : int -> int = <fun>
こんな説明出てくるけど、何それ?ってw
574デフォルトの名無しさん
2012/11/07(水) 19:10:06.18
そうですね。
575デフォルトの名無しさん
2012/11/08(木) 20:48:16.69
例えばこの例は間際らしい
let capitalize = function
| 'a' .. 'z' as letter -> Char.uppercase letter
| 'A' .. 'Z' as letter -> letter
| _ -> failwith "Not a valid letter"

これを、こう書き換えても問題ない
let capitalize = function
| 'a' .. 'z' as lett -> Char.uppercase lett
| 'A' .. 'Z' as lette -> lette
| _ -> failwith "Not a valid letter"
何が言いたいかと言うと、初見の場合as letter が何か特別な予約語に思えて混乱する(letterの綴りが省略されていないため)
で、下のように書き換えて動作を確認した
576デフォルトの名無しさん
2012/11/11(日) 07:45:41.63
これ
let head_head = function
| [] -> failwith "the list is empty"
| []::_ -> failwith "the head is the empty list"
| (h::_)::_ -> h

head_head [[1;2;3];[4;5;6]]
1
とか、listのlistから、頭のlistの頭を取り出す関数なんだけど
head_head []
head_head [[];[1]]
とかはエラーを返すけど
head_head [1;2;3]
とかするとlistの要素がlistじゃないってエラーが出てくる
この場合を検出してエラーを返す書き方が思いつかない
検出する意味も必要もないのかどうかも分からない
577デフォルトの名無しさん
2012/11/11(日) 08:04:45.04
head_headの型を理解してるか?
578デフォルトの名無しさん
2012/11/11(日) 09:47:55.90
はい、たぶん
基本[[];[]]な形式、list のlist構造
でも、なんか色々自由がありそうと感じる分、制約とか制限についての認識が欠落してしまう
制約制限がないと意味不明のバクが爆発するから必須なんだけど
なのに、魂が叫ぶ、もっと自由にやらせろ
間違って[1;2;3]な通常のlistを渡したときなんとか出来そうな思い込みをしてしまう。

[]要素のないlist
[[];[1;]] listの最初のlistが[]なlist
[[];[]]   同上
[1;2;3] 必要な要件を全然満たさないlist構造
579デフォルトの名無しさん
2012/11/11(日) 14:45:44.54
型が違えば処理系に弾かれてお終い
580デフォルトの名無しさん
2012/11/11(日) 18:10:18.79
考え方が動的型付けに染まってる印象。
581デフォルトの名無しさん
2012/11/12(月) 02:30:05.37
>>579,580
すいません
その通りで御座います。
582デフォルトの名無しさん
2012/11/17(土) 14:20:04.43
let f = function
| [] -> failwith "empty list"
| [| _; (_, x) |]::_ -> x
| _ -> failwith "the first array should be of size two"

f [[|(1,2);(3,4)|];[|(5,6);(7,8)|]];;
でint = 4の結果が得られる
でも、 エラー"the first array should be of size two"が表示される引数が上手く作れない
システムが先にエラーを吐き出す。
583デフォルトの名無しさん
2012/11/17(土) 18:42:30.31
# f [[|(1,2)|];[|(5,6);(7,8)|]];;
Exception: Failure "the first array should be of size two".

いかんのか?
584デフォルトの名無しさん
2012/11/17(土) 19:34:18.32
>>583
ありがとうございます。
出来ました。
関数fの受け付ける
('a * 'b) array list -> 'b = <fun>
の形式がどの様な表現なのか直感的に理解できなかったので助かりました。
('a * 'b) array list形式の引数が与えられると
2番目の条件にマッチングできなくて、3つ目の条件で"the first ~~ two"が表示されるんですね。
[[|(1,2)|]] の様に表現するとタイプミスマッチとか処理系がエラーを出すと思っていました。
でも、('a * 'b) array list形式なので引数としては間違っていない。
585デフォルトの名無しさん
2012/11/19(月) 03:26:09.19
結局、[1,2]と入力すると[(1,2)]と返ってくるのでlistの要素構造を勘違いしてた(この部分"[(1,2)]"を見落とし)
[1;2]は整数1と2によるlist、これと[(1,2)]の省略した入力[1,2]と混同してた
だから、[1;(2,3)]とか入力してエラー出されて??な感じ。
正しくは、[(1,4);(2,3)]と表現しないといけない。
[1,4;2,3]とタイプしても正しく[(1,4);(2,3)]と返ってくる
こんな初歩的な部分で躓くとは、これではソースが読めないわけだ。
586デフォルトの名無しさん
2012/12/02(日) 17:11:41.64
http://caml.inria.fr/pub/docs/manual-ocaml-4.00/expr.html
には書いてないけど、+ や +. って - -. と同じく二項演算子かつ単項演算子じゃないのか?
+. (1.0 + 2.0);; とか通るし。
587デフォルトの名無しさん
2012/12/02(日) 17:46:32.55
Characters 4-7:
+. (1.0 + 2.0);;
^^^
Error: This expression has type float but an expression was expected of type
int
588デフォルトの名無しさん
2012/12/02(日) 17:57:04.40
+. (1.0 +. 2.0);;
589デフォルトの名無しさん
2012/12/03(月) 01:35:54.04
Characters 0-2:
+. (1.0 +. 2.0);;
^^
Error: Syntax error
590デフォルトの名無しさん
2012/12/03(月) 01:37:54.28
parsing/parser.mliを見ると確かにそうらしい

| subtractive expr %prec prec_unary_minus
{ mkuminus $1 $2 }
| additive expr %prec prec_unary_plus
{ mkuplus $1 $2 }
591デフォルトの名無しさん
2012/12/03(月) 16:07:32.97
pervasives.mliにこんなん書かれてた
147 external ( ~- ) : int -> int = "%negint"
148 (** Unary negation. You can also write [- e] instead of [~- e]. *)
592デフォルトの名無しさん
2012/12/03(月) 17:08:25.93
むしろ、
http://caml.inria.fr/pub/docs/manual-ocaml-4.00/libref/Pervasives.html

> val (~+) : int -> int
> Unary addition. You can also write + e instead of ~+ e.
> Since 3.12.0

> val (~+.) : float -> float
> Unary addition. You can also write +. e instead of ~+. e.
> Since 3.12.0

言語拡張が間に合わなかった感じだねこれ
Ad-hockぽいし
593デフォルトの名無しさん
2012/12/03(月) 17:48:39.20
なるほど。+. が単項opとして機能するのは Since 3.12.0 からの拡張なのか。
で間に合ってないというのは 589 の環境のことか。最新の ocaml では通る。

色々ありがとうございました。
594デフォルトの名無しさん
2013/02/10(日) 19:42:11.39
最近、OCamlを勉強し始めたんだけど、標準関数で int listを印字する方法ってありますか?
REPLの出力みたいのを求めているんですが。
595デフォルトの名無しさん
2013/02/28(木) 00:26:28.39
>>594 コンパイラ内部の関数をごにょごにょすれば別かもしれないけど基本的にない。
対象がint listって決まってるなら、自分で書いたほうが楽だと思う。
596デフォルトの名無しさん
2013/02/28(木) 01:13:07.87
REPL環境に限定すれば実はREPLのプリティプリンタを使えたりするんだけど、
使ってしまうと単独の実行ファイルにできなくなる罠。
597デフォルトの名無しさん
2013/03/24(日) 17:14:56.10
OCamlで、(=)等を渡す
let check b f = if b then f 1 1 else f 1.0 1.0
みたいな関数を定義したいんですけど、こういったやり方は駄目ですか?
そのままだとfはintを取ると推論されて?エラーになるので、
型を(f: 'a -> 'a -> bool)と指定してみたんですが変わりませんでした。
598デフォルトの名無しさん
2013/04/20(土) 01:56:05.49
>>597
よくわからないけど、型環境に intかつfloat みたいなのが積めないからだめなんじゃない?
確かこういうときはヴァリアントを使えばよかったはず
type intfloat = E | I of int | F of float
let check b (f: intfloat -> intfloat -> bool) = if b then f (I 1) (I 1) else f (F 1.0) (F 1.0)
599デフォルトの名無しさん
2013/06/09(日) 21:47:36.26
OCaml のはなしです。

module type IO =
sig
 type 'a t
 val write: string -> unit t
 val read: string t
 val run: 'a t -> 'a
 val bind: 'a t -> ('a -> 'b t) -> 'b t
end

module MyIO : IO =
struct
 type 'a t = unit -> 'a
 let read = read_line
 let write str = fun () -> print_string str
 let run m = m ()
 let bind m f = fun () -> (run (f (run m)))
end

で Haskell の IO monad 風にできるのはわかったけど、
'a t を x -> b という関数の形じゃなくて、バリアント型で実現したい。
read に対応したアクションまたは write に対応したアクション、という感じで。
けど、どうやってもうまくいかない。誰か教えてくださいませ。
600デフォルトの名無しさん
2013/06/16(日) 21:34:59.42
opamを導入して適当なモジュール(今回はextlib)をインストールして
ソースコードにopen Extlibと書いたところExtlibが見つからないと言われてしまいました
何かパス通しのようなものが必要なのでしょうか
OSはmacでhomebrewを使っています
601デフォルトの名無しさん
2013/06/16(日) 22:08:09.11
よくわかりませんがOCamlFindを使えば良いのですね
ocamlfind ocamlc -package extlib -linkpkg test.ml
で通りました
602デフォルトの名無しさん
2013/06/16(日) 23:27:52.03
あとopen ExtLibがタイポしてました
603デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN
Coqもここでいいの?
604デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN
そういえば、Coqスレ昔あったけど今はないのか。
定理証明支援のスレのないのかな?
Coqスレ
http://toro.2ch.net/test/read.cgi/tech/1300017923/
605デフォルトの名無しさん
2013/08/13(火) NY:AN:NY.AN
活気が無いように見えるのはきっと皆コーディングに夢中なんだ。きっとそうだ。
606デフォルトの名無しさん
2013/08/13(火) NY:AN:NY.AN
MLに限った事じゃないけど、関数型言語を学び始めて思ったのは、なんで一次元(線形)リストベースに作られてるのかなって。

一番シンプルな一次元から始めたとして、その先にn次元、までは行かなくても2次元・3次元にして言語体型を考えてみるとかやった人いないのかな。
既にトライして無意味と分かったとか、今まさに挑戦中とか、そう言う話はあるのかい?
メモリ空間が一次元空間だから、やるだけ無駄なんだろうか?
607デフォルトの名無しさん
2013/08/13(火) NY:AN:NY.AN
>>606
因果が逆。再帰がベースにあるのでリストが使いやすい。

特定のデータ構造をベースにした言語ってSQLくらいしか思いつかない。
608デフォルトの名無しさん
2013/08/13(火) NY:AN:NY.AN
>>606
Linked List は一次元じゃないと思う。
609デフォルトの名無しさん
2013/08/13(火) NY:AN:NY.AN
>>607
だったら再帰の考え方も拡張すればいい。別にデータ構造をベースにする意図ではない。
考え方の向きは相互に変わって良いし、そうする事で何が見えてくるか、こないとしたら何故なのかを考えるきっかけにすればよい。
610デフォルトの名無しさん
2013/08/13(火) NY:AN:NY.AN
>>609
考え方の向きが一方向なのは、関数(写像)が集合間における一方向のn:1関係だから。
もし双方向やn:m関係を扱いたいのなら、述語論理をベースにした言語にすればいい。
論理型言語であれば、リストも順序性がある一方向関係として自然に扱える。
611デフォルトの名無しさん
2013/08/13(火) NY:AN:NY.AN
そう言う話じゃなく、考えたかの向きってのは再帰→リストと発想する考え方の逆向き、と言う意味です。
これ以上の議論は無意味のようですね。終わり
612デフォルトの名無しさん
2013/08/13(火) NY:AN:NY.AN
消えてくれてありがとう
613デフォルトの名無しさん
2013/08/13(火) NY:AN:NY.AN
>>609
関数型言語を学び始めてどれくらいだ。第一印象でリストベースなのかと感じても3日もすればそんなことないって分かるだろうに。
きっと俺と同じように慣れない酒で益体もないことを考えているんだろうけど。
n次元のリストを捉えるのに再帰が不十分なら拡張とか考えるけどさ、n-1次元のリストを再帰的に処理すればいいだけの話であって、拡張なんて必要ない。
再帰という概念の拡張に1次元->n次元の拡張は使えない。何の需要も喚起しない。
614デフォルトの名無しさん
2013/08/14(水) NY:AN:NY.AN
>>613
なれない酒で頭がいかれてるお馬鹿さんさようなら
615デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.AN
ひどいなこりゃ。
616デフォルトの名無しさん
2013/08/21(水) NY:AN:NY.AN
「ひどい」と不平を言うよりも、進んでネタを振りましょう。
617デフォルトの名無しさん
2013/08/27(火) NY:AN:NY.AN
正直関数型言語がどんなところで優位を持っているのかわからん
618デフォルトの名無しさん
2013/08/31(土) NY:AN:NY.AN
リスト内包表記ってOCcamlでできるの?
619デフォルトの名無しさん
2013/08/31(土) NY:AN:NY.AN
Camlp4でできる
620デフォルトの名無しさん
2013/09/02(月) 01:13:00.20
OCaml でのゲームプログラミングに興味がわいて
MLGame http://mlgame.sourceforge.net/
ってライブラリを導入しようと思ったのですが
準備段階であるSDL, OCamlSDL の cygwin への導入で
もうよくわからなくなってしまいました。

http://sourceforge.net/projects/mlgame/files/mlgame/cross-platform%20devel%20util/
cygwin ごと入ってるらしいパックもためそうとしましたが
cygwin コンソールの起動ができません。

あきらめてCで初心者向けのDXLibrary でもつかって
適当にやってればいいのでしょうか?
621デフォルトの名無しさん
2013/09/02(月) 01:55:09.13
やる前から自分が興味を持ったことを投げ出すなよ
やってみて、思っていたのと違ったらそのときに別の方法を考えればいい

要は関数型言語でゲームプログラミングをしたいんだろ?
ならF# + DirectXを試してみたら?

もしくはCygwinを捨ててLinux環境でMLGameに挑戦してみるとか
MLGameなんて地雷臭がするから、いろいろと苦労しそう。その分、力は付くかもしれないけど。

どんな方法をとるにせよ、まずはある程度のところまで突き詰めたほうがいい
622デフォルトの名無しさん
2013/09/02(月) 01:59:44.29
「プログラミングする」という観点においては
Windowsはウンコということを肝に命じた方が良い
623デフォルトの名無しさん
2013/09/02(月) 02:33:30.43
なんで?.NETは便利だぞ
624デフォルトの名無しさん
2013/09/02(月) 02:47:12.09
>>621-622
素早い返答ありがとうございます。
とりあえず OCaml + cygwin + へんなの は捨てて
F# + DirectX をためしてみます。
windoes はプログラム書くのにうんこなのですね?
Ubuntu いちおう VMware でつかえるけど
とりあえず win に F# インストールしてねます
明日
http://www.codeproject.com/Articles/121194/Managed-DirectX-via-F
でもよもう
625デフォルトの名無しさん
2013/09/02(月) 09:36:30.13
そっか F#だとAPIが叩けるんだな
プログラム自体を関数型言語から入ると
なかなかできない発想だなと思った
626デフォルトの名無しさん
2013/09/03(火) 01:42:29.15
let foo () =
let bar = baz () in begin
(* fooを使ってunitを返すような処理がいくつか *)
bar
end

個人的にこれはダサいと思うんですけど他の書き方が思いつきません
何かありませんか?
627デフォルトの名無しさん
2013/09/03(火) 08:33:35.63
何がダサいと感じるのかよくわからんので何も言えない
628デフォルトの名無しさん
2013/09/03(火) 10:22:05.74
endの直前にbarをもう一度書かないといけないところがダサいと思うのです
629デフォルトの名無しさん
2013/09/03(火) 13:34:18.83
tap や finally で書けない?
630デフォルトの名無しさん
2013/09/04(水) 19:54:28.33
#load "dynlink.cma";;
#load "camlp4o.cma";;
#load "Camlp4Parsers/Camlp4ListComprehension.cmo";;


[x | x <- [1;2;3] ];;
- : int list = [1; 2; 3]

できた! すげー感動
631デフォルトの名無しさん
2013/09/04(水) 20:04:23.38
[(x,y,z)|x<-[1;2;3;4;5;6;7;8;9;10];y<-[1;2;3;4;5;6;7;8;9;10];z<-[1;2;3;4;5;6;7;8;9;10];x*x+y*y=z*z;x+y+z=24];;
haskellの すごHの問題もできた! うおー俺は猛烈に感動している
ところでhaskellの[1,2..10]って書いて[1;2;3;4;5;6;7;8;9;10]のリストを一瞬で作る機能は流石にないよな
632デフォルトの名無しさん
2013/09/04(水) 20:10:09.50
>>631
残念ながら出来ない

それにしても楽しそうだねw
633デフォルトの名無しさん
2013/09/04(水) 20:16:21.51
うん 楽しい
関数型言語は最高やでぇぇ
634デフォルトの名無しさん
2013/09/04(水) 20:45:29.31
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10103970335

こんな問題もサクっと4つの組
(85,71,59,50)が出てくる
凄いよぉぉぉ マヂで小学生からプログラムやるべきだな
635デフォルトの名無しさん
2013/09/04(水) 21:02:36.14
日本語が理解できない
自然数の集合から無作為に選んだ4個の数が存在して、この4つの中から、さらに無作為に3個を選んで和を取り、それを4回試行したところ、
 180, 194, 206, 215
になった、ってことでいいの?
636デフォルトの名無しさん
2013/09/04(水) 21:18:35.37
こいつこの調子でずっと喋り続ける気?
637デフォルトの名無しさん
2013/09/04(水) 22:22:27.90
>>612==>>614==>>636
638デフォルトの名無しさん
2013/09/04(水) 22:47:24.97
>>637
うむ
正しい == の使い方だ
639デフォルトの名無しさん
2013/09/05(木) 01:56:06.71
camlp4で今ある文法を制限することって出来ますか?
括弧無しのタプルを排除してリストの区切りをコロンにしたいのですが。
640デフォルトの名無しさん
2013/09/07(土) 03:15:14.14
>>629
batteriesの関数ですよね?まさにそういうのを探していました
batteriesは何となく名前が気に入らなくてスルーしてましたが食わず嫌いは良くないですね
641デフォルトの名無しさん
2013/09/07(土) 03:56:00.85
OCamlのクロージャはそれなりにコストがあって、最適化もしてくれないので
>>626ぐらいならそのままにするなあ
642デフォルトの名無しさん
2013/09/09(月) 15:49:15.59
初めての言語に関数型選んでしまったから
Objectで詰んだ!
さっぱりわからん
643デフォルトの名無しさん
2013/09/09(月) 17:10:04.82
OCamlのobjectは忘れるんだ、そうすればお前は強くなれる
っていうかfirst class moduleが入って、ただでさえ継子扱いだったobject/classに存在価値は無くなった
644デフォルトの名無しさん
2013/09/09(月) 17:38:01.62
おっとwikiみたらCoqの日本語版が登場してた
俺がCoqネタつぶやいたから誰か追加してくれたんだな
645デフォルトの名無しさん
2013/09/10(火) 10:39:57.58
CoqIDEでCtrl+Alt+↓ってやると
画面が上下さかさまになってビビったw
どんなバグなんだよwww
646デフォルトの名無しさん
2013/09/10(火) 13:04:29.50
coqideってのが何かしらんが俺のWindowsでもそうなる
647デフォルトの名無しさん
2013/09/10(火) 13:15:41.31
>> 644
Coqのwikiってどこですか?私も気になります。
648デフォルトの名無しさん
2013/09/10(火) 23:47:36.91
ディスプレイドライバの機能をCoqのせいにするなよ
649デフォルトの名無しさん
2013/09/11(水) 00:25:24.14
CoqIDEの正当性はCoqで証明されておらんの?
650デフォルトの名無しさん
2013/09/11(水) 18:00:49.24
http://www.cis.upenn.edu/~bcpierce/sf/
http://proofcafe.org/sf/
Coq自身はしらんが
Coqの元のOCamlの正しさは証明されてるっぽい
651デフォルトの名無しさん
2013/09/11(水) 19:05:49.78
型システム入門って読むべき?
652デフォルトの名無しさん
2013/09/11(水) 19:35:45.08
よみなさい
653デフォルトの名無しさん
2013/09/11(水) 19:54:09.22
>>651
入門書なんて読まなくていいよ
654デフォルトの名無しさん
2013/09/11(水) 20:41:01.16
入門って書いてあるけど
パラパラっと見たら全然入門じゃないんだけど・・・
大学受験数学参考書の
やさ理みたいな・・・全然優しく無いじゃんって
655デフォルトの名無しさん
2013/09/11(水) 21:34:52.86
そもそも対象読者はどこを想定してるんだw
656デフォルトの名無しさん
2013/09/11(水) 21:50:49.86
とりあえず英語できない人でしょ
657デフォルトの名無しさん
2013/09/12(木) 14:07:31.89
スレ違いも甚だしいが、お前らの英語力ってどんくらい?今まで技術書は大体は読めるからいいもんと思っていたのだが、
http://www.readingsoft.com/
ここで測ったらwords per minuteが115とかいうとんでもない数値だった。
英語ネイティブの人間と同じ量の本を読むのに数倍の差をつけられてて、マジで不安になった。
同じ時間を費やして得られる知識が圧倒的に少ないのは如何なものか。全然読めないじゃないか。
658デフォルトの名無しさん
2013/09/12(木) 14:36:25.22
http://www.zynas.co.jp/genius/sokudoku/sokutei.html
日本語でどのぐらいよ
俺で1400字/分 
英語だと20letter(s)/minぐらいだろなw 1ページ読む頃には熟睡モードだぜ
659657
2013/09/12(木) 14:52:35.79
1025文字/分だった。日本語読むのは速い方だけどトップには及ばない。
自分は視力が矯正入れて0.7くらいだし、これ以上速くしようと思ったら怪しげな速読メソッドに手を出すしか無いのではと思っている。
というか1400って速すぎじゃね?すげーな。
660デフォルトの名無しさん
2013/09/12(木) 15:10:15.73
103wpmに1080文字/分だった。
http://www.readingsoft.com/ は英文が平易すぎて、英語の小説読むより数倍速く読めたが……
661デフォルトの名無しさん
2013/09/12(木) 15:19:20.14
>>657
73 wpm
理解優先で後戻りしまくったからな
テストと見せかけて宣伝文句を熟読させる手口とすぐに分かったw
662デフォルトの名無しさん
2013/09/12(木) 15:29:49.44
>>660
読み易いように心を砕いて書いた文章と思った
663デフォルトの名無しさん
2013/09/12(木) 16:23:13.27
146/wpm 100%だった
もうちょっと早く読めそうだ
664デフォルトの名無しさん
2013/09/12(木) 18:20:09.98
思いきり話の腰を折ってすまないが、
日本語英語に関わらず、知識やイディオム仕入れておいて、
理解速度自体を上げる方のが遥かに重要だから、
ページ送りが遅くても気にするなよ。
665デフォルトの名無しさん
2013/09/12(木) 20:00:36.43
いやいやその知識やイディオムを仕入れる速度にもかかってくるのよ。読み書きの速度ってさ。
これ以上はスレ違いだし荒らしになるからやめるけど、上で挙げられてたSoftware Foundationsの和訳をして公開したCoqスレの住人達には感謝してもしきれん。
666デフォルトの名無しさん
2013/09/13(金) 10:05:08.46
ホントこんなに価値ある情報を無料で提供してくれるって凄いよね
667デフォルトの名無しさん
2013/09/13(金) 10:13:47.96
let goukei = 720;;
let aa = 100
and bb = 350
and cc = 620
and dd = 705
;;


List.concat (List.map (fun a ->
List.concat (List.map (fun b ->
List.concat (List.map (fun c ->
List.concat (List.map (fun d ->
if a+b+c+d = goukei then [(a,b,c,d)] else []) [0;aa])) [0;bb])) [0;cc])) [0;dd]);;

こんな感じでaa商品100円 bb商品350円 cc商品620円 dd商品705円があって
720円になる組み合わせを考えてみました

ネストすればアイテム数をいくらでも増やせそうですが
もっとスッキリ書く方法はありませんか?
668デフォルトの名無しさん
2013/09/13(金) 12:38:34.63
batteriesありなら
List.n_cartesian_product [[0;aa]; [0;bb]; [0;cc]; [0;dd]]
|> List.filter (fun [a;b;c;d] -> a+b+c+d = goukei)
669デフォルトの名無しさん
2013/09/13(金) 14:05:17.63
batteriesってどうやってつかうの?
670デフォルトの名無しさん
2013/09/13(金) 15:13:13.02
>>665
どういう意味?
和訳してた人が速読を推奨してたの?
671デフォルトの名無しさん
2013/09/13(金) 21:10:35.73
>>669
opamやocamlfindの使い方分かる?
その辺の設定済んでれば、ソースの最初でopen Batteriesするだけ
672デフォルトの名無しさん
2013/09/14(土) 01:13:42.13
>>671
わかんない
ググったらlinuxならできそうだけど
これwindowsで行けるの?cygwinってのが要る?
673デフォルトの名無しさん
2013/09/14(土) 03:59:21.98
batteries-2.1.tar.gz をダウソしてきて
cygwinってのから

$ tar zxvf batteries-2.1.tar.gzすればええんやな
674デフォルトの名無しさん
2013/09/14(土) 21:13:00.38
>>622
んなわけねえだろ
コンパイラ作ってる奴がクソなだけだ
675デフォルトの名無しさん
2013/09/14(土) 21:17:30.82
やはりwindowsでOCamlならF#行った方がいい?
676デフォルトの名無しさん
2013/09/14(土) 21:21:47.50
プラットフォームがWindowsに限定できるのなら、あえて茨の道を選ぶこともあるまい
677デフォルトの名無しさん
2013/09/15(日) 03:38:59.44
F#ってべつにwindowsじゃなくても動くでしょ
678デフォルトの名無しさん
2013/09/15(日) 04:18:36.52
動くけど、monoを入れる羽目になるし、.NET Frameworkが無いから旨さ半減
679デフォルトの名無しさん
2013/09/15(日) 06:47:38.91
F#とOcamlって実行速度ちがってくるものなの?
680デフォルトの名無しさん
2013/09/15(日) 08:16:48.29
OCamlはネイティブ
681デフォルトの名無しさん
2013/09/15(日) 09:50:20.17
.NETはJITコンパイルされるし、OCamlのネイティブコンパイラの最適化は最低限だし
682デフォルトの名無しさん
2013/09/15(日) 10:45:01.28
F#は.NETでも遅い方だろ
683デフォルトの名無しさん
2013/09/15(日) 10:52:12.02
はいはい荒れるからこれで終わり
http://benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&;lang=all&data=u64q
684デフォルトの名無しさん
2013/09/15(日) 22:25:53.10
Real World OCaml読もうぜ!OCamlSpotterの人も評価してたがAppendix A: installationでopam + core + utopをいきなりインストールさせるのはびっくりした。
こいつらガチでOCamlを普段使いにしてやがる。
685デフォルトの名無しさん
2013/09/15(日) 22:30:57.96
日本語版早く
686デフォルトの名無しさん
2013/09/15(日) 23:00:17.64
>>684
実際、実務でOCaml使っている人たちが書いてるからね
687デフォルトの名無しさん
2013/09/15(日) 23:02:44.61
って英語版も12月発売な上に
日本語版ってそれから1年後ぐらいになるのか
688デフォルトの名無しさん
2013/09/15(日) 23:05:28.42
普段使いってどういうこと?
スクリプト言語みたいに
ちょこちょこっとのコーディングもOCamlって事?
689デフォルトの名無しさん
2013/09/15(日) 23:15:21.68
あー やっぱLinuxかぁ
690デフォルトの名無しさん
2013/09/16(月) 00:03:20.35
プログラミング演習のようなの実装させるより
Coreの拡張モジュールやp4使わせてるし
標準でやれることでもJane系にもっと便利なのあれば使ってる
691デフォルトの名無しさん
2013/09/16(月) 16:10:19.60
opamってlinuxの64bit専用?!
692デフォルトの名無しさん
2013/09/17(火) 01:27:30.95
あー opam installで途中で止まるー
もう寝る 
693デフォルトの名無しさん
2013/09/17(火) 03:26:52.06
アパーム!!
694デフォルトの名無しさん
2013/09/17(火) 09:53:15.37
>>692 エラーメッセージはなんて出てますか? #opam
695デフォルトの名無しさん
2013/09/17(火) 12:09:35.38
>>694
寝て起きたら終わってた


エラーメッセージらしきものが出てたら
まだググればなんとなく解決の糸口を探せるんだけど
止まったように見えるのは勘弁してほしい・・・
696デフォルトの名無しさん
2013/09/17(火) 12:15:30.59
Ubuntuだと入ってるのかもしらんが
Lubuntu入れたからm4ってのが足りなくて進まないのに難儀したわぁ
697デフォルトの名無しさん
2013/09/17(火) 12:36:12.34
とりあえず opamからutopとcore入れたけど
他に入れといた方がいいってのある?
698デフォルトの名無しさん
2013/09/17(火) 14:31:45.87
asyncとか?
699デフォルトの名無しさん
2013/09/17(火) 20:04:07.17
open Core.Std しても
ウンともスンとも言わないのはどうして?
700デフォルトの名無しさん
2013/09/17(火) 20:37:23.49
toplevelなら最後に;;付けないと評価されないぞ。
701デフォルトの名無しさん
2013/09/17(火) 21:34:31.77
付けてもダメ
702デフォルトの名無しさん
2013/09/18(水) 10:24:04.40
OSの問題か?
UbuntuでbatteriesとかCore使えてる人いますか?
703デフォルトの名無しさん
2013/09/18(水) 10:42:31.06
違うと思うけど
標準のモジュールは使える?
open List;;とか
704デフォルトの名無しさん
2013/09/18(水) 11:54:58.58
open List;;も
#load "nums.cma";;
も行ける
705デフォルトの名無しさん
2013/09/18(水) 17:03:13.40
#use "topfind";;
#require "batteries";;
open Batteries;;

でバッテリーつかえたぁぁぁ
疲れた
でもCoreはスーパーユーザーやないと使えないんだけど
emacsからスーパーユーザーってどうするんだ?
706デフォルトの名無しさん
2013/09/18(水) 17:09:49.70
su emacs # ?
707デフォルトの名無しさん
2013/09/18(水) 17:22:01.73
ってかここで聞く事じゃないけど
.emacsなんてなんだよ・・意味不明
708デフォルトの名無しさん
2013/09/19(木) 02:32:35.94
可能性1. Coreライブラリのパーミション指定がおかしいため、通常ユーザーでは読めない。(あまり現実的じゃない)
可能性2. opamをsudoで実行した。
可能性3. Ubuntuリポジトリにあるcoreパッケージをインストールした一方で、opam+findlibを個人権限で導入し、
      そのため/usr/lib/ocaml/以下をfindlibが探していない。

可能性3なら、~/.opam/system/lib/findlib.confを編集することで解決する。
709デフォルトの名無しさん
2013/09/19(木) 09:33:14.80
できた!ありがトン

端末たちあげたら先ず初めになんでも
sudo -iしてたのがダメだったのかなぁ

utopだと出来るけどemacsだと
Error: Reference to undefined global Conditionsってでる
うーん emacsの勉強が必要だなぁ
core_kernelだと大丈夫なのはなぜなんだぜ?
coreとcore_kernelって同じもの?だよね
710デフォルトの名無しさん
2013/09/19(木) 16:09:42.28
>>709
/home/fuga/.opam/system/lib/findlib.conf
------------------------------------
destdir="/home/fuga/.opam/system/lib"
path="/usr/lib/ocaml:/home/fuga/.opam/system/lib"
ocamlc="ocamlc.opt"
ocamlopt="ocamlopt.opt"
ocamldep="ocamldep.opt"
------------------------------------
pathをちゃんとしてれば、Linuxディストリビューションが提供するocamlライブラリとopamで個人利用のライブラリが併用できる。
普通にopam導入したら/usr/lib/ocaml以下を無視して全部~/.opam以下に入れようとしてくる。

面倒だから俺もちゃんとしてない(findlibがシステムとユーザー両方にあって気持ち悪い)が、
OCAMLFIND_CONFを指定したり何だりすればいいらしい。気が向いたら試してみてください。
711デフォルトの名無しさん
2013/09/20(金) 02:37:57.07
>>707
emacsの設定ファイルだよ。弄ってる間に学生生活が終わった。
712デフォルトの名無しさん
2013/09/21(土) 18:47:36.60
opamの1.1.0betaが出てるね
713デフォルトの名無しさん
2013/09/25(水) 00:38:24.09
https://twitter.com/cliffordbeshers/status/382505685084160001
ICFPの季節か
714デフォルトの名無しさん
2013/09/28(土) 08:17:20.19
SML#の話題ってここでいいの?
715デフォルトの名無しさん
2013/09/28(土) 09:00:06.71
いいよ
716デフォルトの名無しさん
2013/09/28(土) 18:49:36.94
SML#のページにあったスライドより:
SML# は,Cやデータベースとの連携を備えた「ふつうの言語」を目指すML系関数型言語です.

SQLをそのまま使える「ふつうの言語」...こいつ頭がお詳しいぜ!
C、SQL、MLっていうのは欲張りだな。polyglotは楽しめるのかもしれんが。
717667
2013/09/30(月) 10:28:11.89
let rec add_h a = function
[] -> []
| h::t -> (a::h) :: add_h a t;;

let rec powerset = function
[] -> [[]]
| h::t -> let pt = powerset t in
pt @ add_h h pt;;

let nedan_list list goukei =
List.filter (fun xs -> List.fold_left (+) 0 xs = goukei) (powerset list);;

nedan_list [100;350;620;705] 720;;


過去スレにいいヒントがあったのでそれを使って
やりたい事を実現できました。
OCamlの素晴らしさを実感するとともに
もっと良い方法があれば教えてください。
718667
2013/09/30(月) 10:36:53.22
あー 数がちょっと増えるとすぐオーバーフローしちゃう
これはダメだぁ・・・
719667
2013/09/30(月) 11:26:09.48
let rec powerset = function
| [] -> [[]]
| h::t -> List.fold_left (fun xs t -> (h::t)::t::xs) [] (powerset t);;

あ、自己解決
こうすれば20数個行ける
720デフォルトの名無しさん
2013/10/01(火) 17:56:59.75
ごっちゃになってたけど
print_string "hello"; print_newline ();;

print_endline "hello"
が同じ意味なんだな

print_string "hello\n" が普通の書き方?
721デフォルトの名無しさん
2013/10/04(金) 23:18:06.53
その程度ならどれも意味がすぐ分かるから、特に伝統は無い。

改行コードはOS毎にLF+CRだったりLFだったりするけど、そこら辺はどう考慮されているんだろう。
Linuxだと\nで改行、\rで現在の行を消して先頭からやり直し、みたいだけど。他のOSでも統一されてんのかね?
722デフォルトの名無しさん
2013/10/05(土) 09:27:34.70
副作用にも色々表現方法があって迷うなぁ
まぁOCamlはそれがいいんだろうけど
723デフォルトの名無しさん
2013/10/05(土) 14:18:01.03
文字列だけなら print_string とか print_endline とかでいいだろうけど、
数値とか含むのを出力するときはどうするのがスマートなんだろう?
俺はだいたい Printf.printf を使ってしまうのだけど。
724デフォルトの名無しさん
2013/10/05(土) 14:42:49.03
>>721
間違ってる
Windows は CR+LF すなわち現在行を消して先頭に戻してから改行するのだッ
725デフォルトの名無しさん
2013/10/05(土) 14:51:34.09
> Linuxだと\nで改行、\rで現在の行を消して先頭からやり直し、
OSのアプリが, 慣習的に "\n" を論理改行文字として扱ってる(tty ドライバーも
このように扱いやすく作ってある)だけで, 端末制御として使う CR だとか LF とは
分けて考えるべきだと思うよ.

実際に tty を raw モードに設定すると, CR - LF("\r\n") を "\n" にマップする
作業はアプリの仕事になる.

端末から見た, 各制御文字の役割は以下であってそれ以外の何者でもない
CR: カーソルを行の先頭に戻す,
LF: カーソルを次の行に移動する(カラムは移動しない)
726デフォルトの名無しさん
2013/10/05(土) 17:25:39.93
ocamlのcryptokit使おうとしたら、エラーになるんだがなんでなんだぜ。

Fatal error: cannot load shared library dllcryptokit_stubs
Reason: dllcryptokit_stubs.so: cannot open shared object file: No such file or directory
727デフォルトの名無しさん
2013/10/06(日) 08:19:42.15
#ocaml #opam 自己解決したっす dllcryptokit_stubs.so はopamゆーざーなら以下の環境変数の設定が必要っぽい
export CAML_LD_LIBRARY_PATH=~/.opam/system/lib/stublibs/
728デフォルトの名無しさん
2013/10/09(水) 00:18:05.42
なんかopamも便利なんだか不便なんだかわからんな
729デフォルトの名無しさん
2013/10/10(木) 12:26:47.83
フィボナッチ計算させるときに
メモ化するのもアキュムレータ使うのも
同じ振る舞いな気がするんだが
何か違うのかな?
730デフォルトの名無しさん
2013/10/10(木) 13:44:52.77
複数回呼び出したら違うんじゃないの
731デフォルトの名無しさん
2013/10/10(木) 14:11:03.39
それぞれの f(n)までの値をそれぞれ1回ずつ計算して
テーブルに入れるかレコードに入れるかの違いだから
計算回数は同じじゃね?
732デフォルトの名無しさん
2013/10/10(木) 18:11:17.89
fibを何回か呼ぶことを言ってるんじゃねぇの
733デフォルトの名無しさん
2013/10/10(木) 18:49:43.04
呼ぶ回数=計算回数じゃないの?
どっちもO(n)っぽいんだけど
734デフォルトの名無しさん
2013/10/10(木) 19:24:41.41
fib(n) = fib(n-1) + fib(n-2)
fib(n-2)は呼ばれるが、計算済みだから新に計算はしないってことでしょ。
735デフォルトの名無しさん
2013/10/10(木) 21:27:14.82
そういう二重再帰じゃない方のフィボナッチだよ
736デフォルトの名無しさん
2013/10/10(木) 21:50:36.16
let fib x =
let rec fib_sub (x, accumulator1, accumulator2) =
if x = 0 then accumulator1
else
fib_sub (x - 1, accumulator1 + accumulator2, accumulator1)
in
fib_sub (x, 1, 0)

こういう感じでアキュムレータ使うようなフィボナッチ
737デフォルトの名無しさん
2013/10/10(木) 23:36:42.55
何が言いたいのかわからん
末尾再帰のアキュムレータだろうが、
fib nをm回呼び出す場合メモ化ならO(m+n)だろ
738デフォルトの名無しさん
2013/10/11(金) 01:37:05.82
>>734この
二重再帰の計算オーダーはそうじゃないだろ??
739デフォルトの名無しさん
2013/10/11(金) 02:57:20.14
>>735
>>738
メモ化のコード書いてくれないとわからない。
あと計算オーダーはそうじゃないのそうって何?
740デフォルトの名無しさん
2013/10/11(金) 03:24:27.66
>>738
>>734の場合でも、f(n)はf(n-1), f(n-2)がメモ化されている場合常にO(1)
メモ化していない場合(最初の一回目)は再帰計算だからO(n)
これはわかるな?

その後 再帰メモ化版のfib(n)は、
それまでn以上の値が呼び出されていたならO(1)であり、
fib nをm回呼び出すならO(m)、2つ合わせて O(m+n)

アキュムレータだけの場合、fib(n)は "常に" O(n)
つまりfib nをm回呼び出すならO(nm)
わかったか?
741デフォルトの名無しさん
2013/10/11(金) 04:17:04.97
HaMLet がまさかのニューバージョン。

http://www.mpi-sws.org/~rossberg/hamlet/
742デフォルトの名無しさん
2013/10/11(金) 10:20:41.62
>>740
あー >>734はメモ化の再帰バージョンの話ね
理解した

とすると
>>729この違いは
使い捨てならアキュムバージョンは
簡潔に書けて早く
使いまわすならメモ化した方が
再呼び出しは早くていいって感じか
743デフォルトの名無しさん
2013/10/11(金) 19:30:47.32
SMLも開発すすんでるんだな
744デフォルトの名無しさん
2013/10/14(月) 18:44:12.10
http://www.pllab.riec.tohoku.ac.jp/smlsharp/docs/1.0/ja/Ch1.S1.xhtml
SMLの開発って、もしかしてSML#のこと?
745デフォルトの名無しさん
2013/10/14(月) 18:45:23.58
あ、上のhamletのことか。
746デフォルトの名無しさん
2013/10/14(月) 18:54:06.65
SML#は64ビット対応せんのかな。結構期待してるんだけど。
747デフォルトの名無しさん
2013/10/15(火) 01:40:51.77
SML/NJとかも
748デフォルトの名無しさん
2013/10/15(火) 01:52:43.43
Standard SMLってなんだろ?
749デフォルトの名無しさん
2013/10/15(火) 15:17:19.69
int型のmaxって1073741823ですよね
これを超えたらBig_intに切り替えたいんですが
int型の計算でmax_intを超えたかどうかの判定って
どうやったらいいですか?
750デフォルトの名無しさん
2013/10/15(火) 17:14:51.41
無理じゃね
最初からBig_int使えばいいんじゃね
751デフォルトの名無しさん
2013/10/15(火) 18:42:26.56
大学の研究室のプロジェクトだと、パワーのある院生がいる時にどかっと
進んだりするんだよなぁ。
752デフォルトの名無しさん
2013/10/15(火) 22:18:09.71
キャリーフラグを無視しない高級言語ってごくわずかしかないよね。
753デフォルトの名無しさん
2013/10/15(火) 23:25:06.01
そもそも1bit分フラグに使ってるからキャリーフラグなんて役に立たんでしょ
SML#はどうか知らんけど
754デフォルトの名無しさん
2013/10/16(水) 22:57:21.15
C++
http://blog.regehr.org/archives/593
ocaml batteriesには、SafeIntというのがあるらしい。参考になるかもよ。
http://dutherenverseauborddelatable.wordpress.com/2008/08/27/whats-up-with-batteries/
755デフォルトの名無しさん
2013/10/18(金) 10:52:33.25
オブジェクトがさっぱりわからん
レコードと何が違うんだ・・・
756デフォルトの名無しさん
2013/10/18(金) 12:04:36.71
Obj.magic使えば
型なんて関係無くなる?
757デフォルトの名無しさん
2013/10/18(金) 12:12:18.87
[Obj.magic 'a'; Obj.magic "abc"; Obj.magic 123];;
すげー リストに型が違っても入るぞ
何に使えるんだろ?
758デフォルトの名無しさん
2013/10/18(金) 12:52:31.16
Obj.magic 'a' + 1 ;;
すげー こんなのもできるんだwwww
関数型言語界のgotoやで
759デフォルトの名無しさん
2013/10/18(金) 14:08:58.82
奇跡も魔法もあるんだよ。
760デフォルトの名無しさん
2013/10/18(金) 18:35:29.49
ただしよくわからんで使うと死ぬ
761デフォルトの名無しさん
2013/10/18(金) 18:46:15.03
OCamlって最強の言語じゃね?
なんでみんなやらないんだろ
762デフォルトの名無しさん
2013/10/18(金) 18:49:32.53
変なライセンスだから
763デフォルトの名無しさん
2013/10/18(金) 18:53:24.02
intが1ビット少ないとか、モジュールの仕様上スマートリンクができないとか
ファーストクラスモジュールでOCamlのOたるオブジェクトがゴミになりましたとか
そのファーストクラスモジュールは後付けで構文がカオスですとか、あと+.(笑)とかGC遅いとか
ケチを付けようと思ったらいくらでも付けられるからなあ
764デフォルトの名無しさん
2013/10/18(金) 19:13:13.78
Windows版の更新サボってるのが一番の原因だな
765デフォルトの名無しさん
2013/10/18(金) 19:31:42.10
みんなって誰だよ
766デフォルトの名無しさん
2013/10/18(金) 19:33:25.20
研究室ではよく使ってる
767デフォルトの名無しさん
2013/10/18(金) 20:02:22.74
>>765
健常者の集合
768デフォルトの名無しさん
2013/10/18(金) 22:46:49.64
言語の素性はともかくマンパワーは全然足りてないしな
769デフォルトの名無しさん
2013/10/18(金) 23:43:15.36
スマートリンクってなんぞ?
770デフォルトの名無しさん
2013/10/18(金) 23:50:11.98
sageたら教えてやる
771sage
2013/10/18(金) 23:56:08.97
教えてください
772sega
2013/10/19(土) 19:03:49.62
俺にも教えて
773デフォルトの名無しさん
2013/10/19(土) 22:25:27.91
じゃあおれも
774デフォルトの名無しさん
2013/10/28(月) 11:48:04.04
汎関数と高階関数って同じ意味ですか?
775デフォルトの名無しさん
2013/10/28(月) 13:22:54.90
ちがいます
776デフォルトの名無しさん
2013/10/28(月) 13:38:38.58
おなじです
777デフォルトの名無しさん
2013/10/28(月) 13:43:33.45
どっちだよ・・・
778デフォルトの名無しさん
2013/10/28(月) 13:58:52.58
>>774
関数を計算の対象とすること、いいかえると、関数を引数として受け付けたり
関数を返す関数のことを「高階の関数」または「高階関数」という
さらに、高階関数の中で計算の対象が関数だけなものを「汎関数」という
つまり高階関数は広い概念で、汎関数は狭い概念

たとえば関数 map や filter は高階関数であるけれど、リストも計算対象だから汎関数ではない
それに対して、合成関数 o は高階関数であるし汎関数でもある
779デフォルトの名無しさん
2013/10/28(月) 14:26:11.39
let foo f g x = g (f x) ;;
val foo : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c = <fun>
って合成関数があったとして
'aの引数は計算対象外になるの?
780デフォルトの名無しさん
2013/10/28(月) 15:17:35.72
>>779
記法のせいでわかりにくいけど
('a -> 'b) -> ('b -> 'c) -> ('a -> 'c) って考えればいい
781デフォルトの名無しさん
2013/10/28(月) 15:25:02.71
あと汎関数は量を返す物をいうはず。
だから合成関数は汎関数でなく、高階関数。
782デフォルトの名無しさん
2013/10/28(月) 15:27:39.31
間違えた
合成関数を"返す" 関数は汎関数でなく、高階関数。
783デフォルトの名無しさん
2013/10/28(月) 15:32:51.19
>>779
まず 'a は型変数だから、「'a の引数は...」という用法は日本語として不適切

で、もし質問の意図が「関数 foo の定義における第三引数 x は、関数 foo の計算対象外か?」
であるならば、答えは Yes
引数 x は関数 f の計算対象であるけれど、汎関数 foo の計算対象ではない

汎関数を定義する場合、>>779 も決して間違いではないが、以下のように書いたほうが、
「x は(fooの引数ではなく)無名関数の引数である」という意図が理解しやすいだろう(言語はSML)

- fun foo f g = fn x => g (f x);
> val ('a, 'b, 'c) foo = fn : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c


>>781
では、その量を返すという汎関数の具体例を挙げてみてくれないか?
784デフォルトの名無しさん
2013/10/28(月) 16:06:23.87
例えばmapをばらしたときに

let rec map f ls = match ls with
[] -> []
| x::xs -> f x :: map f xs ;;

val : ('a -> 'b) -> 'a list -> 'b list = <fun>

たぶんこんな感じで再帰になってるけど
無名関数は再帰で書けないから
無名関数で書けたら汎関数でよい?
785デフォルトの名無しさん
2013/10/28(月) 16:10:19.68
>>783
>では、その量を返すという汎関数の具体例を挙げてみてくれないか?
なんで?
とりあえず、定義っぽいのは見つけたよ。
http://www.encyclopediaofmath.org/index.php/Functional
786デフォルトの名無しさん
2013/10/28(月) 16:41:42.96
ん?schemeはYコンビネータを使って
Y = (λf . (λx . f (x x)) (λx . f (x x)))
無名再帰ができると書いてあるな
何が違うんだろ?動的言語だと出来るとか?
787デフォルトの名無しさん
2013/10/28(月) 17:26:32.96
>>784
汎関数の定義に無名関数を使うことは多いけど、
だからといって、すべての無名関数を用いた定義が汎関数となる訳ではない
だから「無名関数で書けたら汎関数でよい?」という質問については No だ
ただし「引数としてある関数を渡すとmapと同等な無名関数を返す」汎用的な関数が
定義できるのであれば、その関数は汎関数であるといえるだろう

なお、再帰と汎関数は直交するから再帰を伴わない汎関数も存在する(たとえば合成関数 o)
したがって「再帰で書けたら汎関数でよい?」という質問についても No となる


>>785
数学における用語「汎関数」と計算機科学における「汎関数」をごっちゃにしているのでは?
で、ここは(数学板ではなく)プログラム板だ
788デフォルトの名無しさん
2013/10/28(月) 17:37:07.70
>>787
>数学における用語「汎関数」と計算機科学における「汎関数」をごっちゃにしているのでは?
えええー!初耳だよそんなの。
計算機科学の汎関数の定義は?
789デフォルトの名無しさん
2013/10/28(月) 19:17:55.24
同値再帰型なんてのもあるんだね
OCamlって最強言語じゃね?
790デフォルトの名無しさん
2013/10/30(水) 09:26:41.50
高階関数のままと
簡約した形と
評価までの速度に違いがあるのかな?
見やすさで選ばれてるだけ?
791デフォルトの名無しさん
2013/10/30(水) 13:20:56.16
cygwin64bitにもOCaml登場
792デフォルトの名無しさん
2013/10/30(水) 19:40:53.15
簡約した形とは
793デフォルトの名無しさん
2013/10/31(木) 18:52:31.73
ゴルフに出てくる;;の後の
1@0
って何ですか??
794デフォルトの名無しさん
2013/11/01(金) 12:27:52.67
kwsk >>793 #ゴルフ
795デフォルトの名無しさん
2013/11/01(金) 21:39:55.79
コードゴルフか?
'a list -> 'a list -> 'a list じゃなさそうだし自分で定義してるんじゃね?
796デフォルトの名無しさん
2013/11/02(土) 18:53:12.88
S式みたいに
(< 1 2 3 4 5 6 7 8 9)
でtrue みたいに一発で計算ってできますか?
797デフォルトの名無しさん
2013/11/02(土) 19:14:43.17
そういうの書けばできるでしょ
798デフォルトの名無しさん
2013/11/03(日) 00:39:10.77
let rec less_than lst = match lst with
[] -> None
| x :: [] -> Some true
| x :: y :: xs -> if x < y then less_than (y :: xs)
else Some false ;;

なんか一行ですっきり書きたい
799デフォルトの名無しさん
2013/11/03(日) 09:57:51.24
f op xs = and $ zipWith op xs (tail xs)
800デフォルトの名無しさん
2013/11/03(日) 11:18:30.19
ん?それHaskellじゃね?
801デフォルトの名無しさん
2013/11/03(日) 11:27:32.82
こうかな。

fun lessThanForAll l = ListPair.all (op <) (l, tl l);
802デフォルトの名無しさん
2013/11/03(日) 21:33:04.10
ocamlだとむずい
803デフォルトの名無しさん
2013/11/21(木) 06:02:11.85
盛り上がってるね。
804デフォルトの名無しさん
2013/11/25(月) 19:28:29.05
camlp4の入手先を教えて下さい
805デフォルトの名無しさん
2013/11/25(月) 20:49:45.57
https://github.com/ocaml/camlp4
806デフォルトの名無しさん
2013/11/25(月) 23:43:19.04
camlp4ってなんか開発側のよくわからない方針により大幅に変更されてもともと乏しかったドキュメントが一層整備されてない状態になってから使う気なくした。
807デフォルトの名無しさん
2013/12/13(金) 08:01:15.59
ああ、ハームが強いとか言ってたキルハイエナさんか
808デフォルトの名無しさん
2013/12/13(金) 08:02:13.53
誤爆
809デフォルトの名無しさん
2013/12/14(土) 16:52:12.01
fezにお帰りください
810デフォルトの名無しさん
2013/12/19(木) 13:30:02.87
ABC予想をOCamlで書いて
811デフォルトの名無しさん
2014/01/16(木) 19:03:28.13
row polymorphism(< method_foo : foo -> bar ; .. >の"..")が何か泥臭い感じがしてOCamlのOが好きじゃないのですが、
row polymorphismとexact typeを区別するべき理由ってあるのでしょうか。
812デフォルトの名無しさん
2014/01/20(月) 01:16:23.89
こんな本でた

JavaScriptで学ぶ関数型プログラミング
http://www.amazon.co.jp/dp/4873116600/

なんか面白そう
813デフォルトの名無しさん
2014/01/25(土) 20:39:37.59
みんなどこいったんや
814デフォルトの名無しさん
2014/01/27(月) 00:37:41.63
VBAを捨てて関数型言語がデフォルトでサポートされるのは、いつだろうか
815デフォルトの名無しさん
2014/01/27(月) 01:45:51.79
そんな日は来なくていい
816デフォルトの名無しさん
2014/01/28(火) 03:59:19.18
ExcelマクロにVBAとF#の選択肢が標準だったなら、関数型は主流になれる
817デフォルトの名無しさん
2014/01/28(火) 04:04:55.48
>>813
クオンツやアクチュアリーもどきの個体数が増えすぎて、
市場価値が下がらないように口を紡ぎだしたとみた
818デフォルトの名無しさん
2014/01/29(水) 01:01:52.05
口を・・・つむぐ?
819デフォルトの名無しさん
2014/01/29(水) 01:04:27.44
口をつぐんだ人ならいるかもね
820デフォルトの名無しさん
2014/01/29(水) 21:56:44.82
あれでしょ、世の中に不満があるなら自分を変えろ、それが嫌なら耳と目を閉じ、口を紡いで…あれ?
821デフォルトの名無しさん
2014/01/29(水) 21:58:26.24
お口にチャックノリス
822デフォルトの名無しさん
2014/02/12(水) 23:38:39.41
Batteriesを使用しているコードをjs_of_ocamlで変換するとMissing primitivesという警告?が出て
JavaScriptの実行時エラーが出てしまいます
これはどうしたら解消できるのでしょうか

コマンド
ocamlfind ocamlc -syntax camlp4o -package lwt,js_of_ocaml.syntax,batteries -g -c foo.ml
ocamlfind ocamlc -package lwt,js_of_ocaml,batteries -linkpkg -o foo.byte foo.cmo
js_of_ocaml foo.byte

出ているメッセージ
Missing primitives:
caml_ba_init
caml_sys_const_big_endian
caml_sys_const_ostype_cygwin
caml_sys_const_ostype_unix
caml_sys_const_ostype_win32
caml_sys_const_word_size
create_nat
incr_nat
initialize_nat
mult_digit_nat
set_digit_nat
set_to_zero_nat
unix_inet_addr_of_string
823デフォルトの名無しさん
2014/02/13(木) 19:52:50.09
いくつかはjs_of_ocamlを更新すれば定義されてる
nat関係のは提供されてないのでダミーの関数を
funciton create_nat(){}のように自分で追加するか
batteriesのサブセットを切り出して使うか

core_kernel使ってる人もいるらしい
824デフォルトの名無しさん
2014/02/13(木) 23:42:09.86
js_of_ocaml 1.4.0を使っていますがこれではダメなのでしょうか?
nat関係は適当にスクリプトを書いて対応しようと思います
unix_inet_addr_of_stringはbatteries関係なく出てしまうようですね
825デフォルトの名無しさん
2014/02/13(木) 23:59:27.54
bigarrayサポートがまだgit版にしかない
unix_inet_addr_of_stringはruntime/unix.jsをリンクすれば大丈夫だけど
opamで入れたなら多分入ってない
826デフォルトの名無しさん
2014/02/14(金) 00:28:20.76
bigarrayサポートはnat関係のことですよね?
もしそうだとするとcaml_XXXは一体何が原因なのでしょう
それとunix_inet_addr_of_stringはopamで入れている以上直る?ことはないということなのでしょうか
827デフォルトの名無しさん
2014/02/14(金) 00:35:30.75
調べてから書くべきでした
caml_XXXがbitarrayの関数ですね
828デフォルトの名無しさん
2014/02/14(金) 00:36:59.24
big・・・
829デフォルトの名無しさん
2014/02/14(金) 00:45:48.03
> それとunix_inet_addr_of_stringはopamで入れている以上直る?ことはないということなのでしょうか
公式のも唯の空の関数なんで自分で定義しても一緒だし
開発版では修正済みだから1.99だか2.0が出てopamパッケージになれば大丈夫
830デフォルトの名無しさん
2014/02/14(金) 01:06:19.10
なるほど
いずれ修正されることと今でも少し手を入れれば動くことがわかったので良かったです
親切にありがとうございました
831デフォルトの名無しさん
2014/02/16(日) 20:02:36.51
http://www.reddit.com/r/programming/comments/1xtohg/ocaml_replacing_python_what_you_gain/
832デフォルトの名無しさん
2014/02/24(月) 14:22:45.10
toplevelで、コンパイルした自作のライブラリを使いたいとき、
#load "/foo/bar/my.cmo";;
とやったのですが、モジュールMyが無いと怒られたため、試行錯誤した結果、toplevelで
#directory "/foo/bar";;
#load "my.cmo";;
と2段階に分けるか、コマンドラインで -I /foo/bar としなければならなかったのですが、こんな不便な仕様が存在しているはずがないと感じました。
別ディレクトリにあるファイルを読み込む正しいやり方ではどうすればいいのでしょうか。誰か教えていただけたらと思います。
my.cmoは/foo/bar内で:`ocamlfind ocamlc -pkg batteries my.ml`とやって生成しています。
833832
2014/02/24(月) 14:28:40.75
>>832
あ、使用しているOSはLinuxで、OCamlのバージョンは4.01.0です。
834832
2014/02/24(月) 21:13:12.02
findlibのソースを読み、ocamlのソースを読んだ結果、不便な仕様は不便な仕様のようです。
諦めます。
835デフォルトの名無しさん
2014/04/20(日) 03:11:50.67ID:8gJTdsza
初学者の質問で申し訳ないのですが、
type hoge ={ t : 'a. ('a -> 'a) -> 'a -> 'a };;
という型で'a.('a -> 'a)の「 . (ドット)」は何を意味するのでしょうか?
836デフォルトの名無しさん
2014/04/20(日) 10:33:29.81ID:Ar2j+hn/
∀x. P(x) とかλx. x のドットと同じなんじゃない。
837デフォルトの名無しさん
2014/04/20(日) 15:50:34.61ID:jkTnuZFL
structureのドットじゃないのか
838デフォルトの名無しさん
2014/04/23(水) 20:07:50.69ID:yuYA7aLZ
>>835
型hogeは('a -> 'a) -> 'a -> 'aという関数tを持つものだよ、というだけなんだが、
まずその'a.っていう表記が無いとエラーが出る。
エラーメッセージに脊髄反射してtype 'a hoge = { t : ('a -> 'a) -> 'a -> 'a }と定義すると、
hoge型の値を作ったときint hogeとかstring hogeとかになって、
tも(int -> int) -> int -> intとかになっちゃう。
いや違う、オレはhoge型の値にidentity:'a -> 'aや(=): 'a -> 'a -> boolのように、多相性を持った関数tが欲しいんだって時に
'a.っていう表記を使う。

用途は何と問われるとちょっと困る程度にはマイナー。
839デフォルトの名無しさん
2014/04/23(水) 20:47:43.26ID:Rx5WvURy
何言ってるか分からないですね
840デフォルトの名無しさん
2014/04/23(水) 22:11:28.21ID:fVb21MOO
aはずっと自由変数ですよ、特殊化されませんよ、ってのを明示するのに使うのか
841デフォルトの名無しさん
2014/04/23(水) 22:41:15.05ID:OJl2bhdr
基本的に、変数は(もし多相性を持っていても)初期化された時点で単相型になる
関数は呼び出されると引数が初期化されるのでその時点で単相型になる
関数自身を変数に入れると、呼び出してなくても変数を初期化しただけで単相型になる

>>835のhoge型の変数は基本とは違って、初期化しただけでは単相型にならないっぽい
842デフォルトの名無しさん
2014/04/23(水) 23:18:57.87ID:ddVBuvib
ためになるわー。
843835
2014/04/24(木) 21:17:13.51ID:4Y8KSBKa
回答ありがとうございます。与えられたチャーチ数の定義がこれだったのですが、周りに聞いてもあまり良い回答を得られなかったので、とても助かりました。
確かにチャーチ数であれば、多相性が維持されなければ駄目ですね。
844デフォルトの名無しさん
2014/05/09(金) 06:41:29.78ID:gmFOA17u
最近JITが高速と聞くのですが
MLtonよりもJITが高速になる場合も
あったりするのでしょうか
845デフォルトの名無しさん
2014/05/09(金) 11:29:52.70ID:88BxxZ+X
早くなるケースもあるけど
大抵のケースは、工夫しないと遅いので作り込みが大変
なので、大体が学生の研究で作って、終わっちゃうんじゃないかな。

速さというより、F#みたいにVM環境向けにbytecodeに落とし込むケースは、あるかも。

C言語の例だと、CERNで、HPのGotoさんが作ってたCINTというCインタプリタがインターラクティブ環境が必要ということで採用されてた。
現在は、規格に追従&共通基盤の恩恵を受けられるllvmベースのclingを開発中。
846デフォルトの名無しさん
2014/05/09(金) 12:50:13.67ID:viF1oq7i
10年以上前だがJavaのShuJITとかあったけど、その作者のプロジェクトを終えるに
あたってのまとめが、少々の理論的な優位点なんて、カネとヒトがたくさんある奴
(よーするにSun(当時)やIBMやHPの作ってるJVM)のパワーの前には吹き飛ぶ、
だった。
847デフォルトの名無しさん
2014/05/09(金) 23:01:59.86ID:2uUNFhKi
いまは、LLVM使うと巨人の肩に乗れるね。
JVMはHotSpotVMベースになってOpenJDKがオープンソースになってるからその上でいじれるように
JSのVMは激戦だけど、IEの実装以外はオープンソースという。
LuaJITは、個人でつくってるのでオーパーツ。
848デフォルトの名無しさん
2014/05/10(土) 22:51:43.07ID:SJ0/UQRG
言語処理系の最適化はマンパワーが必要なので……今はトレンドがLLVMに色々集まる方向性かな
849デフォルトの名無しさん
2014/05/12(月) 21:26:19.65ID:dnbz3Cdj
C++11という巨人の肩に乗ろう
850デフォルトの名無しさん
2014/05/12(月) 22:10:36.00ID:xvKPpHt2
コンパイラは、MLで作ると楽という話もあるが、、、
そこらへんはジレンマ?
851デフォルトの名無しさん
2014/05/13(火) 09:28:41.53ID:34BaoroY
>>848 js_of_ocaml ってJavaScriptで書くより最適化で高速になるからそういう方向もあるかも。
http://jsperf.com/js-of-ocaml
852デフォルトの名無しさん
2014/05/13(火) 20:13:34.93ID:5OIUPatf
Excelのセル中で、F#で定義した関数が使えたら面白いかもと思った。
853デフォルトの名無しさん
2014/05/16(金) 08:18:12.70ID:72NRi/gE
altJS としては最適化手法が数学的に議論されていて論文も出ている js_of_ocaml が最強なのでは:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.224.7457&rep=rep1&type=pdf
854デフォルトの名無しさん
2014/05/16(金) 16:19:49.33ID:PtE4FBA8
LuaJITって個人のなの?ブラジル生まれだとは知ってたが。
あとllvmってコンパイラ基盤としては楽だけど、インタプリタとしてはちょっと難ありじゃないかしら。
適当に使うと最初の起動時間がかなり遅い。
855デフォルトの名無しさん
2014/05/17(土) 03:51:33.29ID:RMSyflwZ
Luaは、ブラジル、リオデジャネイロの大学の研究グループから
LuaJIT作ってるのはドイツ、ミュンヘンの人
856デフォルトの名無しさん
2014/06/01(日) 17:00:19.03ID:3NiYSkpU
TAPLのexercise 3.2.5が分からん。なんで3.2.3の定義で S_i ⊆ S_{i+1} になるんだ?
各S_iは最初のS_1とかを除いて、disjointになるように思える。
本持ってる人教えて
857デフォルトの名無しさん
2014/06/01(日) 20:16:49.72ID:dwNATPFa
https://bitbucket.org/camlspotter/ocaml-zippy-tutorial-in-japanese/src/434b26af16405ba8aaae0d89ba12bd2275eac9d3/4.02.md?at=default
858デフォルトの名無しさん
2014/06/09(月) 23:28:07.14ID:g6XVfS4Z
ocamlの演算子、**より~-.の方が優先順位が高いのはなぜ?
859デフォルトの名無しさん
2014/06/22(日) 23:27:34.81ID:kfNNTRTT
単項だからでは
860デフォルトの名無しさん
2014/07/05(土) 07:26:50.37ID:uomUGxMD
OCamlの日本語の文字列扱うのて
上手く行かないものですか?
861デフォルトの名無しさん
2014/08/01(金) 09:24:52.78ID:Z/VI2an6
どの程度のレベルで上手くやろうとしているのか分からないけど、単純にstring型に代入、表示は何も無しでも動作するが、Stringモジュールは多言語に対応しているわけではない。String.lengthなどは狙い通りには動かない。
ライブラリ(Batteries, Camomile)等を使えば日本語できる。

と思ってBatUTF8を弄ってみたが、containsとかiterとかでBatUChar.tを取り扱う必要があるくせに、
BatUChar.t型を作る方法が面倒だなあ。of_digitしか無い。BatUTF8.get "あ" 0で誤魔化せるが、迂遠。
862デフォルトの名無しさん
2014/08/28(木) 00:17:52.33ID:KKzfTscW
SML/NJ version 110.77 リリース!
バージョン番号を4.0にリセットする前に、数回のリリースがあって、その中に64bitサポート
が含まれるらしいが、今回はbugfixのマイナー・リリースらしい。
外部関数の32bitコンパイルがそろそろサポートされなくなりつつあるので、64bitサポートが
はやくリリースされてほしい。
863デフォルトの名無しさん
2014/08/28(木) 00:31:14.45ID:3eVJnuNA
まだやってるんだな NJ
864デフォルトの名無しさん
2014/08/28(木) 22:23:43.51ID:fRdOqM0/
camomileの使い方が全然わからないんですがどこを読めばいいんでしょうか
主に文字コード変換と正規表現について知りたいです
865デフォルトの名無しさん
2014/08/29(金) 22:52:22.51ID:LjCjaXt3
いつの間にかOCaml4.02.0
866デフォルトの名無しさん
2014/08/30(土) 23:41:43.96ID://K1VbLN
test
867デフォルトの名無しさん
2014/09/02(火) 08:32:32.40ID:3nEDqgz+
OCamlのマニュアルにocamlbrowserがまだあるのはバグっすな

ocamldoc/trunk/manual/cmds/Makefile line#2
remove "browser.tex "
868デフォルトの名無しさん
2014/09/02(火) 22:57:08.51ID:h4iRRc1G
ocaml標準のlexでは日本語が扱えないのでulexに差し替えたらparserが死んだでござる。
ダメだこりゃ
869デフォルトの名無しさん
2014/09/16(火) 16:34:15.58ID:smkPtKEd
>>868
https://github.com/darioteixeira/ccss/blob/master/src/ccss.ml#L25
menhirとulexを一緒に使う方法。
870デフォルトの名無しさん
2014/09/24(水) 22:11:44.77ID:ChDiOOXp
ocaml 4.01.0で
# Obj.size @@ Obj.repr 1
がバグるんだけど、理由わかる?
871デフォルトの名無しさん
2014/09/24(水) 23:08:38.11ID:wtmzOZEz
仕様です。
ソースはおろかドキュメントすら読まずにObjを使うとはアホの極みです。

Chapter "Interfacing C with OCaml", Section 2..3
872デフォルトの名無しさん
2014/09/26(金) 02:16:11.74ID:63HfXufw
OCamlのすごさはもっと知られるべき #オブジェクト指向 や #関数型 は「敗者の道具」である http://itpro.nikkeibp.co.jp/atcl/watcher/14/334361/092200062/?ST=develop&;amp;P=3
873デフォルトの名無しさん
2014/09/26(金) 11:58:16.90ID:p4JSIuT/
>>872
これタイトルで損してる記事だろ
874デフォルトの名無しさん
2014/09/26(金) 11:59:36.06ID:LJo7FzMV
みかかデータ、マンセー記事っぽかったけど
875デフォルトの名無しさん
2014/09/26(金) 12:42:39.46ID:/S6uCtFc
関数型とかマルチパラ代務とかドカタには無理。オブジェクトだって散々語られてようやく、いや未だ、か

一部の突出した集団以外は、ほかにどうしようもない人が沈殿する職業になってるイメージ
876デフォルトの名無しさん
2014/09/26(金) 20:12:51.02ID:+dkMIegW
do構文の使用禁止の規約って全部>>=で書くってことなのだろうか。理由も含めて気になる。
877デフォルトの名無しさん
2014/09/26(金) 20:54:07.13ID:mU/FSdzC
>>872
前半で散々オブジェクト指向をこきおろしておきながら、
中盤でOCamlを推すという意味不明な文章の論理の展開がある
ML族を推すのなら Caml か SML にしないと一貫性が無いし、
Caml にオブジェクト指向を後付けした "O"Caml 開発時の判断は
今となっては流行に踊らされた大きな失敗であったと断罪すべき

おまけに「個人的にOCamlがすごいと思う」とあるから何かと読んでみたら、
単なるパラメタ型多相の話でしかないことに笑ってしまった
「とがった」とか「すごい」とか、小学生の感想文とレベルは変わらない
こんなポエム記事で給料をもらえるのだから、日経ITproの記者とは楽な職業だね

>>873
タイトル以前の問題で、記事に中身が無くて話にならん

>>876
ソースコード解析ツールなら言語処理系と似た構造になるから、
(一般的には副作用を模倣するために使われる)do記法を使う必要性は無いと思われ
878デフォルトの名無しさん
2014/09/26(金) 21:11:21.88ID:+dkMIegW
ちょっとぐぐってみたらこういうページがあった。
http://www.haskell.org/haskellwiki/Do_notation_considered_harmful
879デフォルトの名無しさん
2014/09/26(金) 21:24:18.32ID:rzI+KhbO
たしかにタイトルで損したみたいだな
880デフォルトの名無しさん
2014/09/27(土) 09:02:30.03ID:aRJ76A2x
ああいう煽り記事読んでドキドキするのは思春期の子供だけ
もっと大人向けの真面目に面白い記事は無いのか?
881デフォルトの名無しさん
2014/09/27(土) 09:08:36.15ID:V9AoMXji
 もし完全無欠のプログラマが存在するのであれば、そうした方法論に頼らなくても、
完全に意図通りに動作するプログラムを頭から書き下していけばいいのです。
オブジェクト指向プログラミングや関数型プログラミングは、不完全な人間のために用意されたもの、
いわば「敗者の道具」といえます。

 もちろん、これは極端すぎる表現です。例えば、人は空を飛べないので飛行機に乗ります。
このことをもって「飛行機は敗者の道具である」と言う人はいません。
そうした意味では、オブジェクト指向プログラミングや関数型プログラミングを敗者の道具と呼ぶのは、
単なる言葉遊びにすぎません。人間が全知全能でないのは当たり前ですから。



完全に朝日脳だな
882デフォルトの名無しさん
2014/09/27(土) 17:11:59.10ID:lJpImKEe
産経信者も一緒に死ねカス
883デフォルトの名無しさん
2014/09/28(日) 11:09:58.25ID:yTX/1oq/
今回朝日がしでかしたことを誰かまとめてくれ
884デフォルトの名無しさん
2014/09/28(日) 12:21:46.09ID:MFWVwvB9
スレ違いカスはお引き取り下さい
885デフォルトの名無しさん
2014/09/28(日) 12:22:16.97ID:/z7vQ2zP
>>883
どいたかこ死亡
886デフォルトの名無しさん
2014/09/28(日) 12:38:21.08ID:3fm9b2hk
土井たか子がリアルに退いた過去になったのか
887デフォルトの名無しさん
2014/09/28(日) 12:39:24.70ID:/z7vQ2zP
土井がどいた過去
888デフォルトの名無しさん
2014/09/28(日) 12:40:25.54ID:/z7vQ2zP
おんたけさんが噴火して
おたけさんが逝った
889デフォルトの名無しさん
2014/10/07(火) 01:19:25.02ID:RDe60glL
対話環境を再起動せずに、リコンパイルしたライブラリをロードし直す方法ってありますか?
#load でもう一度ロードすると、シグニチャが異なると怒られてしまいます
890デフォルトの名無しさん
2014/11/07(金) 22:47:28.24ID:jjvVlXlA
OCamlで型クラスを実現する方法ある?
あとカインドも
891デフォルトの名無しさん
2014/12/28(日) 01:38:33.30ID:t9XFY33G
モジュールで型クラス的なものを作ることができる。便利とは言いがたいが
892デフォルトの名無しさん
2015/02/05(木) 08:14:28.48ID:0RN82SQI
Haskell より OCaml の方が部分部分で好みなんだけど、
OCaml は最近何か進展とか発展とか無いのかな。
893デフォルトの名無しさん
2015/02/05(木) 13:15:20.83ID:tkrhoEGU
4.0出たばっかじゃなかったっけ
894デフォルトの名無しさん
2015/02/05(木) 14:50:21.24ID:j+EW35P1
岡村はソース醜いのがなあ
895デフォルトの名無しさん
2015/02/05(木) 19:17:09.87ID:Omd6cUWA
>>894
たとえば?
896デフォルトの名無しさん
2015/02/05(木) 20:40:25.53ID:SFYHhnYx
上から読んでいけば何しているのか分かるOCamlのソースは読みやすい部類
batteriesとかcoreといった大きいライブラリでも、モジュールと同名のファイル見ればいいだけなので、
どこに何があるのか探しやすい

基本的に手続き脳なので、haskellはどこから読めばいいのか分からない
悪名高いimport文のおかげでもっと読めない
897デフォルトの名無しさん
2015/02/05(木) 21:27:52.95ID:uGoWQo5h
OCamlなんとなくソースの見た目のバランスが悪いっていうのはなんかわかるわ。
898894
2015/02/06(金) 00:00:17.76ID:mrZTa4bi
>>897
まさにそんなとこ。ぱっと見よくない
899デフォルトの名無しさん
2015/02/06(金) 11:46:04.54ID:qvKWViHE
ソースが読みにくい言語は致命的に生産&保守効率が悪い。
900デフォルトの名無しさん
2015/02/06(金) 11:56:15.06ID:uqQOSJHn
>>898

SMLならいいの?
901デフォルトの名無しさん
2015/02/19(木) 21:32:44.77ID:VWBqr6Q7
レコード型ある言語、多相レコードある言語、フィールドがファーストクラスにできる言語
おしえて。
ぜんぶもってるのがいい。
902デフォルトの名無しさん
2015/02/19(木) 22:31:13.58ID:/rXoqLFu
>>901
SML# という Standard ML の処理系は「ぜんぶもってる」よ
  # fun get_x {X = x, ...} = x;
  val get_x = fn : ['a#{X: 'b}, 'b. 'a -> 'b]
  # val point_2d = {X=1.0, Y=2.0};
  val point_2d = {X = 1, Y = 2} : {X: real, Y: real}
  # val point_3d = {X=10.0, Y=20.0, Z=15.0};
  val point_3d = {X = 10, Y = 20, Z = 15} : {X: real, Y: real, Z: real}
  # get_x point_2d;
  val it = 1 : real
  # get_x point_3d;
  val it = 10 : real

Standard ML の場合、前2つは言語仕様で規定されているからすべての処理系で利用できるけど、
最後の「フィールドがファーストクラス」であることは仕様では要求されていない
たとえば SML/NJ という処理系だと、上記のコードはエラーになる
  - fun get_x {X = x, ...} = x;
  stdIn:1.2-1.28 Error: unresolved flex record
  (can't tell what fields there are besides #X)

SML# が独自に拡張したレコード型に関しては、SML# プロジェクトのホームページに
日本語の解説があるから、まず最初に読んでみるのがいいと思う
・SML#の拡張機能:レコード多相性 in プログラミング言語SML#解説
 http://www.pllab.riec.tohoku.ac.jp/smlsharp/docs/2.0/ja/Ch7.xhtml
903デフォルトの名無しさん
2015/02/19(木) 22:34:08.05ID:VWBqr6Q7
↑ありがと。
ほんとにぜんぶ!? フィールドファーストクラスなのその言語?
904デフォルトの名無しさん
2015/02/19(木) 22:35:11.19ID:VWBqr6Q7
あ、かいてあった、ごめん。
905デフォルトの名無しさん
2015/02/19(木) 22:37:49.31ID:VWBqr6Q7
SML/NJってやつは、フィールドがファーストじゃないとして、
SML#ってやつはファーストなの?

ほかにも>>900 全部持ってる言語とかあればおしえて。みんな。
906デフォルトの名無しさん
2015/02/20(金) 03:39:21.83ID:V63A/fo0
1.レコード型、あるいは、それに類する型を持つ
2.レコード型(or それに類する型)の構造的部分型関係を扱える
3.できれば、多相レコード型とかそれと同様なのを持つ
4.できれば、レコードのフィールド名がファーストクラス
( x = [name = 3] : [name : int] なら nameがファーストクラス)

これカバーできる言語ない?
うえでおしえてもらったのしらべてみたけど
SML/NJってのは1,2を満たしてそう
SML#ってのが1,2,3を満たしてそう、
あと
scalaが無名オブジェクトみたいなやつで1,2,3を満たしてそう?
   型を一部か書かないとダメだけど
ほかにこの辺でなんかいい言語ない?
clojure? ってのが4みたして相だけどコンパイル時に型ちぇっくしてくれないよねそれ?
  うーんなんかない?
907デフォルトの名無しさん
2015/02/20(金) 09:34:49.39ID:vrO8Sxqb
1
908デフォルトの名無しさん
2015/02/20(金) 10:31:17.89ID:N6pKHonh
じゃあ俺は2
909デフォルトの名無しさん
2015/02/20(金) 10:55:47.88ID:sOgXDRpH
宿題は自力でやれw
910デフォルトの名無しさん
2015/02/21(土) 00:55:59.35ID:KgB/c0aN
>>906
Standard ML のレコード型は構造的部分型関係を持たないよ
構造的部分型関係を持つレコード型に類する型を持つのは OCaml や Java
いわゆるオブジェクト指向におけるクラスとそれらの間の継承関係のこと

また「多相レコード型」という用語の意味が「パラメタ型多相なレコード型」
であるならば、Standard ML は多相レコード型を持つことになる
ここでパラメタ型多相は、Java だとジェネリクス(総称型)と呼ばれている

結論として、Standard ML(とその処理系 SML/NL および SML#)は1と3を満たす


次にファーストクラスについて、>>902 のコードにおける関数 get_x の定義だけど、
 「フィールドとはレコード値からフィールド値への写像(関数)である」
という関係に気付けば、その定義は以下のように簡潔になる
  # val get_x = #X;
  val get_x = fn : ['a#{X: 'b}, 'b. 'a -> 'b]  (* SML/# *)
つまりフィールド #X は(val宣言で)識別子に束縛したり、他の関数へ適用したり。
ある関数の評価結果として返すことができる
こうした数値や文字列といった値と同等に扱える性質を指してファーストクラスと呼ぶ

さらに上記の例は SML# だけど、SML/NJ も型システムが単純たから型推論に失敗するだけで、
データ型を明示的に宣言すれば関数 get_x を定義できる
  - val get_x = #X : {X: real, Y: 'a} -> real;
  val get_x = fn : {X:real, Y:'a} -> real   (* SML/NJ *)
型システムの制約とファーストクラスという性質をごっちゃにすべきではない

まとめると、Standard ML(とそのすべての処理系)のフィールドはファーストクラスである
911デフォルトの名無しさん
2015/02/21(土) 01:03:27.14ID:KaIHMFIz
>   - val get_x = #X : {X: real, Y: 'a} -> real;
でもこの get_x って、>>902 の point_3d には使えないよね。
912デフォルトの名無しさん
2015/02/21(土) 01:45:43.43ID:KgB/c0aN
うん、使えない
それが >>910 で書いた(Standard ML言語仕様における)「型システム」の制約だね
その制約を無くした SML# が特異なだけで、SML/NJ 以外の大半の SML 処理系に同じ制約がある
913デフォルトの名無しさん
2015/02/21(土) 20:03:59.94ID:KgB/c0aN
>>910
>Standard ML のレコード型は構造的部分型関係を持たないよ
>構造的部分型関係を持つレコード型に類する型を持つのは OCaml や Java
>いわゆるオブジェクト指向におけるクラスとそれらの間の継承関係のこと

自己レスだけど、この段落は間違いが含まれていたので訂正する

まず:
>Standard ML のレコード型は構造的部分型関係を持たないよ
この文章は正しいけど、SML# は「構造的」部分型関係に類する型を持つ
だから >>902 の関数 get_x は point_2d とpoint_3d のどちらにも適用できる(>>911)
そして SML# だと、point_2d と point_3d のそれぞれの型について、
{X: real, Y:real} >= {X: real, Y:real, Z: real} という部分型関係を持ち、
ここで 関係 a >= b は「a の部分型が b である」ことを意味する

次に:
>構造的部分型関係を持つレコード型に類する型を持つのは OCaml や Java
>いわゆるオブジェクト指向におけるクラスとそれらの間の継承関係のこと
この文章は完全な間違いで、正しくは
「「非構造的」部分型関係を持つレコード型に類する型を持つのは OCaml や Java (...後略)」になる
たとえば(架空言語で)二次元座標上の点として 抽象クラス {} を定義し、その具象クラスとして
{X軸: real, Y軸: real} および(原点からの相対的な) {角度: real, 距離: real} を定義できる
ここで、2つの具象クラスのフィールド構成(=内部的構造)は全く異なるけれど、
{} >= {X軸: real, Y軸: real} および {} >= {角度: real, 距離: real} という部分型関係を持つ
914片山博文MZ ◆T6xkBnTXz7B0
2015/03/06(金) 00:20:10.28ID:Utx2vhNJ
MLで株取引してるヤツおる?
915デフォルトの名無しさん
2015/03/06(金) 19:18:02.97ID:z8rf25M9
>>914
https://www.janestreet.com/
916デフォルトの名無しさん
2015/04/11(土) 09:23:04.09ID:4MGH5loU
『関数型プログラミングに目覚めた! IQ145の女子高校生の先輩から受けた特訓5日間』
http://www.amazon.co.jp/dp/4798043761/

なんか面白そう。
ベストセラー1位だし。
917デフォルトの名無しさん
2015/04/11(土) 11:09:33.39ID:6e+Pm3/z
著者名みてどん引き
918デフォルトの名無しさん
2015/04/11(土) 14:52:19.95ID:kM0sKeAC
>>916
まーたハゲの人バカやってるのか
919デフォルトの名無しさん
2015/04/30(木) 22:13:28.21ID:CyAc4DaC
これあわせで、qiitaで何ヶ月か前に宣伝始めたんだよな。

今回のMSの開発者向けイベントで、マルチプラットフォームアピールしてたから、F#にもチャンスが増えるかも。
920デフォルトの名無しさん
2015/06/21(日) 14:35:56.40ID:jZdgW1bu
ML系でマルチスレッドプログラミングってどうやるの?
できれば、プリエンプティブで。
ノンプリなら、バインディングさえ準備できればpthreadとか使うだけで出来る?

あと、マルチコアで動く処理系ってどんなのがありますか?
921デフォルトの名無しさん
2015/06/21(日) 15:56:19.44ID:h+2IwqsQ
ノンプリエンプティブな並行のフレームワークとしてはConcurrent ML、
マルチコアでプリエンプティブで動く処理系は…MultiMLton?使ったことないけど
922デフォルトの名無しさん
2015/06/21(日) 21:09:48.45ID:jZdgW1bu
>>921
ありがとう!参考にしてみます。
923デフォルトの名無しさん
2015/06/22(月) 21:17:40.35ID:NI+fH6po
SML/NJにCMLが入ってるみたいだけど
呼び出しかた自体が良く分かりませんでした,,,
924デフォルトの名無しさん
2015/06/22(月) 22:19:01.14ID:OHI7eLtz
まだバイトコードだけなんで処理速度的にはメリット薄いがocaml-multicoreも開発中
https://github.com/ocamllabs/ocaml-multicore

諦めてF#が一番楽そう
925デフォルトの名無しさん
2015/07/04(土) 11:48:28.89ID:D//5Uocc
新潮10月号(9/7発売)に最新長編『モナドの領域』330枚一挙掲載
926デフォルトの名無しさん
2015/07/19(日) 15:49:50.98ID:1yK25cK1
Haskell ガチムチいい男
F# タマもサオも取ったニューハーフ
OCaml タマは摘出、サオは残したオカマ

Java ノン気の一般人
C 古風な一般人
C++ 団塊の世代の一般人
C# ゆとり世代
927デフォルトの名無しさん
2015/08/01(土) 08:14:56.43ID:keSdeN9Q
Ocamlってschemeのvaluesに相当するのないのですか?
928デフォルトの名無しさん
2015/08/02(日) 05:19:00.73ID:OeY6iFU6
+ と+. って絶対に区別しないといけないのです?浮動小数と整数でコードわけるのめんどくさい
929デフォルトの名無しさん
2015/11/01(日) 12:21:17.11ID:FL14q5P6
min-camlを読み解こうと思ってできれば小さく分けてコンパイルして確かめたいです
parser.mly/lexer.mll/id.ml/syntax.ml/type.ml
ここまでが最初の塊のようなのでocamlyacc/ocamllexしたあとインタプリタで
#use "type.ml"
#use "id.ml"
#use "syntax.ml"
#use "parser.ml"
#use "lexer.ml"
までやるとlexer.mlを読み込んでいるのにlexer.mllでエラーがでます
どうやってインタプリタに読み込めばいいのでしょうか
930デフォルトの名無しさん
2016/03/06(日) 17:23:06.30ID:LFfI8YF2
C++11とboostでmlと等価なこと出来るようになってない?
931デフォルトの名無しさん
2016/03/07(月) 12:29:48.85ID:IQOnvxBL
楽にはなっても等価にはなってない
932デフォルトの名無しさん
2016/06/16(木) 23:45:45.68ID:ogi8+DdB
OCaml覚えてHaxeのターゲット自分で書けるようになったらなあって思ったけど
パット見何が書いてあるのか良くわからない
933デフォルトの名無しさん
2016/07/09(土) 07:50:35.12ID:lXAilHyr
>>926
JavaScript 苦労人
934デフォルトの名無しさん
2016/07/22(金) 00:00:06.57ID:Zm57F0sF
OCaml インストールしてたら �� が出てきた。
絵文字がこんなところにも進出してるとは……
935デフォルトの名無しさん
2016/07/23(土) 20:35:22.56ID:K/hEThar
F#はいまいち盛り上がらんのでOCamlに戻るか
936デフォルトの名無しさん
2016/07/31(日) 08:26:29.15ID:FitcqrL7
OCamlには関数合成がないと訊くんですが、@@は合成ではないのですか
937デフォルトの名無しさん
2016/09/02(金) 10:19:54.63ID:75SbB3DN
OCaml勉強しはじめの初心者の質問なんですが、どなたか教えてください

https://ocaml.org/learn/tutorials/modules.ja.html
ここの説明によると、行末の;;を避けるためみんなこう書く
open Amodule
let () = hello ()

ってあるんですが、これがまず理解できない
()ってunitの定数値というかリテラルみたいなものなのではないですか?
letで束縛する的なコードが書けることが腑に落ちないのですが・・・
938デフォルトの名無しさん
2016/09/02(金) 13:34:30.13ID:xfbClL/y
() って C の void みたいなもんやろ。
hello() の戻り値が void で両辺 void = void で OK みたいな。
939デフォルトの名無しさん
2016/09/02(金) 18:21:07.36ID:anKFyHj7
=が等号ならそんな感じってするのですが、
let 変数名 = 値 って形に当てはまると
unitの()って変数名であり値でもあるってこと?
とか考え出すと混乱してしまいます・・・
940デフォルトの名無しさん
2016/09/02(金) 18:22:47.76ID:h+44ee0t
>>937
その用途の場合単なるエントリポイントなので()にそんなに意味はない。
let _ =〜でも動作するよ。
941デフォルトの名無しさん
2016/09/02(金) 19:39:25.71ID:MnPjnRyk
>>939
letは代入ではなくパターンマッチ
普段は let パターン = 式 のパターンのところに新規の束縛(変数名)を一個置いてるだけ
let 1 =2 とか書けてMatch_failureになるよ
942デフォルトの名無しさん
2016/09/02(金) 21:44:32.31ID:TuW8Vb/N
皆さんありがとう、何となく分かりました
実際に「let x::xs = [1;2;3;4];;」とかやるとx=1、xs=[2;3;4]とかなりますね
letってのはmatchの単独パターンバージョンみたいな感じなんですね、きっと
943デフォルトの名無しさん
2016/09/03(土) 14:38:27.01ID:xDozGH3Q
OCamlも捨てがたい
http://qiita.com/HirofumiYashima/items/98d35b40dde12bbb5d6d
944デフォルトの名無しさん
2016/09/04(日) 01:00:38.68ID:m/Nfzz4G
たびたび初心者的質問ですいません
OCamlにはListやArrayに対するgroup by関数って無いんでしょうか?
標準ライブラリ(ideoneやyukicoderで利用可能)の範囲内で存在すれば嬉しいんですが・・・
945デフォルトの名無しさん
2016/09/04(日) 21:14:26.78ID:ZFd7dRv3
List.filter : ('a -> bool) -> 'a list -> 'a list ならある。
Arrayにはないから自力で実装するかExtLibでも使おう。

っていうか標準ライブラリだったら自分で検索しようね。
馬鹿なの?
946デフォルトの名無しさん
2016/09/04(日) 21:40:33.19ID:m/Nfzz4G
>>945
標準ライブラリは探したけど、無かったから自作したよ
最近だとF#にしろscalaにしろgroupbyがあるのが当たり前だから、確認のため聞いてみた
その程度の事情も察せないお前が馬鹿じゃねw
947デフォルトの名無しさん
2016/09/05(月) 20:50:26.74ID:uZnwqH5s
宿題や競プロでもやるんじゃなきゃCoreかBatteries入れないとやってられない
948デフォルトの名無しさん
2016/09/10(土) 11:17:54.65ID:hxR4/XV4
標準ライブラリゴミすぎ
949デフォルトの名無しさん
2016/09/10(土) 20:27:19.82ID:vL431mpn
map reduceに相当するもんがあればいけるんじゃね
950デフォルトの名無しさん
2017/02/27(月) 20:54:32.60ID:nBcs47LL
「プログラミングの基礎」を買ってきてOcamlを始めようとしたのですがインタプリタが日本語を表示してくれません。ぐぐっても知識が足らず解決法がわからなくて途方に暮れています。誰か助けて…
951デフォルトの名無しさん
2017/02/27(月) 21:06:38.41ID:nBcs47LL
使ってる環境はubuntu16.10です。
952デフォルトの名無しさん
2017/02/28(火) 21:46:08.53ID:hBxDt9/3
>>950解決しました
953デフォルトの名無しさん
2017/03/01(水) 12:55:25.91ID:jLbNtrZK
どのようにして解決したのか書いてもらえると
同じ状況に陥った人の助けになるかも知れないわけだが…
954デフォルトの名無しさん
2017/03/01(水) 16:07:29.52ID:ZtKy2rs9
>>953
解決策を2つ試しました

まず、著者のサポートサイト(http://pllab.is.ocha.ac.jp/~asai/book/Linux.html)を見て、
 @端末起動→上部メニューバーの端末タブ→文字コードの設定→日本語(EUC-JP)に設定してから
 ALANG=en_US.ISO88591 ocamlを実行しましたが解決しませんでした。

次に、http://qiita.com/KenjiYamauchi/items/40aaab56b65777950877を参考にして、
 @任意テキストエディタで~/(ホームディレクトリ配下の意味)に.ocamlinitというファイルを作り、
 A「let printer ppf = Format.fprintf ppf "\"%s\"";;
   #install_printer printer」と記述した所、解決しました。

コンピュータやプログラミングに詳しい方にはかなりくどいと思いますが、多分自分のようなプログラミング初心者が読む本だと思うので念入りに書いておきます。
955デフォルトの名無しさん
2017/03/01(水) 16:10:35.17ID:ZtKy2rs9
というか、誰も見てないと思ってた・・・
956デフォルトの名無しさん
2017/03/01(水) 16:46:02.21ID:8oSlLlXA
957デフォルトの名無しさん
2017/05/01(月) 06:16:47.63ID:Cn5FkhjE
純粋関数型データ構造が発売されたってのに盛り上がってないな
958デフォルトの名無しさん
2017/05/01(月) 08:26:08.29ID:X5RvQ3AI
>>957
あれを読むような層は、既に原書で読んでるから気にもしないのでは。
959デフォルトの名無しさん
2017/05/30(火) 11:59:51.61ID:heN7Y+lD
Real World OCaml で OCaml入門中です。

https://realworldocaml.org/v1/en/html/variables-and-functions.html
... As a result, when passing labeled functions as arguments,
you need to take care to be consistent in your ordering of labeled arguments.

要は、ラベル付引数持ちの関数 は 引数の順序気にしなくて良くなるので便利だねって話だったのに、
そういう関数を 他の関数に引数として渡す時は 順序気にしないと型エラーになるかもよ、と。
現 (OCaml ver. 4.04.1) にそうなってるのはしょうがないとして、ユーザーは不満だったりしないんですかね?
仕様変えてどこでも順序気にしなくてよくなるようにするのは何か不都合があるんでしょうか?
960デフォルトの名無しさん
2017/05/31(水) 12:35:03.09ID:nyiBm3r5
はい
961デフォルトの名無しさん
2017/06/02(金) 14:10:54.16ID:v4wV8DId
>>957
書店で立ち読みしてみたんだけど微妙に扱っているデータ構造少なくね?
サンプルコードがStandard MLというのは驚いたが。
962デフォルトの名無しさん
2017/06/09(金) 03:43:45.31ID:Z/PWf/cV
末尾再帰がイメージできないんだけど
963デフォルトの名無しさん
2017/06/09(金) 10:56:43.72ID:jgO9PNm3
「なんでも再帰」や「なんでも継続」を読んでみたら?例はSchemeだが
964デフォルトの名無しさん
2017/06/09(金) 13:37:56.60ID:3OdcZ+id
fact 0 = 1
fact n = n * (fact (n-1))
だと,fact (n-1)の再帰呼出の後で nとの掛け算を
しなければならない.計算の最後(=末尾)が再帰では
なく乗算となる.
fact2 0 n = n
fact2 n k = fact2 (n-1) (n*x)
として
fact1 n = fact2 n 1
としておけば,fact2の計算の最後はfact2の
再帰呼出で,callをgotoに変えたループで実行できる.
こんな感じでイメージできる?
965デフォルトの名無しさん
2017/06/09(金) 14:50:46.84ID:rw1qC18c
f_outer(n){
f_inner(n, accumulator){
if 1 == n
accumulator
else
f_inner(n - 1, n * accumulator)
}
}

accumulator に蓄積すれば?
966965
2017/06/09(金) 14:56:24.07ID:rw1qC18c
f_outer(n){
f_inner(n, accumulator){
if 1 == n
accumulator
else
f_inner(n - 1, n * accumulator)
}
return f_inner(n, 0)
}

修正。
内部関数を、return するのが抜けていた
967デフォルトの名無しさん
2017/06/09(金) 16:51:44.77ID:VCuqCK40
おおおわかった気がする
ありがとう!
なんでも再起とやらも読んで見ることにする
968デフォルトの名無しさん
2017/06/09(金) 17:05:35.04ID:3Dqy8l+L
>>966
return f_inner(n, 1)
じゃない?
969デフォルトの名無しさん
2017/06/25(日) 18:30:26.47ID:v1ZjLLZV
OcamlとかCoqって名古屋以外でも大学での授業とか研究に使われているの?
一時期のブームは去ったみたいだけど。
大学の情報学部とかの現状にはちょっとだけ興味がある。

そして流行に後れて今頃勉強している40代のオレ。
970デフォルトの名無しさん
2017/07/03(月) 09:21:46.88ID:ipQv+IYB
東大東北大お茶の水では使ってた
971デフォルトの名無しさん
2017/07/03(月) 17:44:24.93ID:/M1wO8+Z
授業で使ったのに広まらなかったということか。
つまり啓蒙に失敗したと。
972デフォルトの名無しさん
2017/07/04(火) 13:46:26.44ID:VgVQ93XC
Occamなら知っとるぞよ?
973デフォルトの名無しさん
2017/07/12(水) 14:21:04.56ID:06OhWRFP
>971
広まらなかったというかキラーアプリがなかったというか…
結局Ocamlで作られたアプリで唯一プログラマ間で流行ったのがCoqなんじゃね?
974デフォルトの名無しさん
2017/07/12(水) 14:33:02.68ID:bLDjTsNM
OCaml は金融とかで使われてるんじゃ無かったか。

そういや Rust も最初は OCaml でコンパイラー書かれてたんだよな。
975デフォルトの名無しさん
2017/07/14(金) 23:08:50.92ID:UJz0OWoz
俺がocaml覚えたきっかけはとあるエロゲーのチートツールなんだが
あれの作者がなぜそれを採用したかにはずごい興味ある
976デフォルトの名無しさん
2017/07/15(土) 12:06:36.80ID:03i9G/wL
>>975
どっかの学生だったんじゃないの?兄妹ものエロゲだけに京大とか。
977デフォルトの名無しさん
2017/08/16(水) 21:00:55.34ID:H/HIEf+2
(*´・ω・`*)
978デフォルトの名無しさん
2017/08/17(木) 13:02:39.82ID:5mQoD0+b
(´・ω・`)
979デフォルトの名無しさん
2017/09/01(金) 18:43:59.45ID:RxXe6GrD
8月はちょっと纏まった時間がとれたので、
「ソフトウェアの基礎」日本語訳の練習問題を解きすすめてみた。

まだPoly.vが終わった序盤だけどだいぶCoqに慣れてきた。
星三つrecommendedでもたまに難しい問題があるなー、というのが感想。

論理学の命題というのは高校・大学教育で慣れているだけで
見直してみると思ったよりも複雑な構造をしていたのだと今更ながらに感じた。

実務でCoqが要求されることは当分ないと思うけど、
逆変換の関数は少なからず実装することがあるので
ときどき「Coq使って証明したい」という気分にはなるんだよなー。
980デフォルトの名無しさん
2017/09/05(火) 11:03:28.55ID:a/Cb1ZW9
http://ocaml.jp/
死んでるな……

> ( ! ) Parse error: syntax error, unexpected 'new' (T_NEW) in /virtual/osiire/public_html/lib/func.php on line 531
981デフォルトの名無しさん
2017/09/08(金) 14:02:07.35ID:swD2wqBn
ocaml.jpは息してる?
982デフォルトの名無しさん
2017/09/24(日) 12:35:45.27ID:VL5Szw+L
いつまで死んでるんだよ
983デフォルトの名無しさん
2017/10/03(火) 00:31:09.35ID:JZnIdnEQ
復活した
984デフォルトの名無しさん
2017/10/03(火) 02:20:47.65ID:upqeSfz9
復活したのは良いけど、一言何か無いのかよ。誰が管理してるんだ。
985979
2017/10/05(木) 12:08:08.18ID:SZzrAZT5
日本語訳の古さに苦戦しつつLogic.vまで進めていたところ……
久しぶりに英語の本家を見たら、
なんかVol.1 〜 Vol.3に増えてるー!?
あまりの道のりの遠さに絶望しつつ内容を見ると、
旧版からホーア理論まわりをVol..2に分離し、
Vol.3は赤黒木等の少し高度なデータ構造について色々とCoqで証明して感じらしい(新規)。

……く、面白そうじゃないか。
986デフォルトの名無しさん
2017/10/05(木) 19:45:51.56ID:72rIdNeW
>>979
リンクpls
987デフォルトの名無しさん
2017/10/07(土) 12:06:25.63ID:689sKi0/
>>986
https://softwarefoundations.cis.upenn.edu/
988979
2017/10/30(月) 19:39:25.32ID:asGH9s/c
ここ一ヶ月、旧くなった日本語版を捨て英語版に再挑戦してみた。
以前は出来るだけ写経していたが時間がかかり過ぎるので、
付属の.vファイルを直接書き換える方針に変更。

結構章立てと共に内容変わってるなぁ……追加された良問も多いし。
英語の非形式的証明は書く機会もなさそうだし、パスするか。
しかし、答えがWeb上に転がってないのは自習者には正直辛い。

どうもSICPみたいな標準教科書を目指してるっぽい?
こーゆうの(coq)を国立研究所で作れる国はやっぱり凄いと思う今日この頃。
989デフォルトの名無しさん
2017/11/01(水) 07:27:01.78ID:wuKEf1Sh
a
990デフォルトの名無しさん
2017/11/01(水) 07:27:36.60ID:wuKEf1Sh
sit
991デフォルトの名無しさん
2017/11/01(水) 07:27:56.41ID:wuKEf1Sh
dot
992デフォルトの名無しさん
2017/11/01(水) 07:28:13.79ID:wuKEf1Sh
egg
993デフォルトの名無しさん
2017/11/01(水) 07:28:31.25ID:wuKEf1Sh
994デフォルトの名無しさん
2017/11/01(水) 07:28:48.81ID:wuKEf1Sh
this
995デフォルトの名無しさん
2017/11/01(水) 07:29:26.33ID:wuKEf1Sh
combi
996デフォルトの名無しさん
2017/11/01(水) 07:30:08.09ID:wuKEf1Sh
it
997デフォルトの名無しさん
2017/11/01(水) 07:30:42.85ID:wuKEf1Sh
2
998デフォルトの名無しさん
2017/11/01(水) 07:31:16.98ID:wuKEf1Sh
ping
999デフォルトの名無しさん
2017/11/01(水) 07:32:05.81ID:wuKEf1Sh
pong
1000デフォルトの名無しさん
2017/11/01(水) 07:32:32.73ID:wuKEf1Sh
wild
ニューススポーツなんでも実況



lud20251005044843ca

ID:yTX/1oqのレス一覧:


883デフォルトの名無しさん
2014/09/28(日) 11:09:58.25ID:yTX/1oq/
今回朝日がしでかしたことを誰かまとめてくれ
884デフォルトの名無しさん
2014/09/28(日) 12:21:46.09ID:MFWVwvB9
スレ違いカスはお引き取り下さい
885デフォルトの名無しさん
2014/09/28(日) 12:22:16.97ID:/z7vQ2zP
>>883
どいたかこ死亡
886デフォルトの名無しさん
2014/09/28(日) 12:38:21.08ID:3fm9b2hk
土井たか子がリアルに退いた過去になったのか
887デフォルトの名無しさん
2014/09/28(日) 12:39:24.70ID:/z7vQ2zP
土井がどいた過去
888デフォルトの名無しさん
2014/09/28(日) 12:40:25.54ID:/z7vQ2zP
おんたけさんが噴火して
おたけさんが逝った
889デフォルトの名無しさん
2014/10/07(火) 01:19:25.02ID:RDe60glL
対話環境を再起動せずに、リコンパイルしたライブラリをロードし直す方法ってありますか?
#load でもう一度ロードすると、シグニチャが異なると怒られてしまいます
890デフォルトの名無しさん
2014/11/07(金) 22:47:28.24ID:jjvVlXlA
OCamlで型クラスを実現する方法ある?
あとカインドも
891デフォルトの名無しさん
2014/12/28(日) 01:38:33.30ID:t9XFY33G
モジュールで型クラス的なものを作ることができる。便利とは言いがたいが
892デフォルトの名無しさん
2015/02/05(木) 08:14:28.48ID:0RN82SQI
Haskell より OCaml の方が部分部分で好みなんだけど、
OCaml は最近何か進展とか発展とか無いのかな。
893デフォルトの名無しさん
2015/02/05(木) 13:15:20.83ID:tkrhoEGU
4.0出たばっかじゃなかったっけ
894デフォルトの名無しさん
2015/02/05(木) 14:50:21.24ID:j+EW35P1
岡村はソース醜いのがなあ
895デフォルトの名無しさん
2015/02/05(木) 19:17:09.87ID:Omd6cUWA
>>894
たとえば?
896デフォルトの名無しさん
2015/02/05(木) 20:40:25.53ID:SFYHhnYx
上から読んでいけば何しているのか分かるOCamlのソースは読みやすい部類
batteriesとかcoreといった大きいライブラリでも、モジュールと同名のファイル見ればいいだけなので、
どこに何があるのか探しやすい

基本的に手続き脳なので、haskellはどこから読めばいいのか分からない
悪名高いimport文のおかげでもっと読めない
897デフォルトの名無しさん
2015/02/05(木) 21:27:52.95ID:uGoWQo5h
OCamlなんとなくソースの見た目のバランスが悪いっていうのはなんかわかるわ。
898894
2015/02/06(金) 00:00:17.76ID:mrZTa4bi
>>897
まさにそんなとこ。ぱっと見よくない
899デフォルトの名無しさん
2015/02/06(金) 11:46:04.54ID:qvKWViHE
ソースが読みにくい言語は致命的に生産&保守効率が悪い。
900デフォルトの名無しさん
2015/02/06(金) 11:56:15.06ID:uqQOSJHn
>>898

SMLならいいの?
901デフォルトの名無しさん
2015/02/19(木) 21:32:44.77ID:VWBqr6Q7
レコード型ある言語、多相レコードある言語、フィールドがファーストクラスにできる言語
おしえて。
ぜんぶもってるのがいい。
902デフォルトの名無しさん
2015/02/19(木) 22:31:13.58ID:/rXoqLFu
>>901
SML# という Standard ML の処理系は「ぜんぶもってる」よ
  # fun get_x {X = x, ...} = x;
  val get_x = fn : ['a#{X: 'b}, 'b. 'a -> 'b]
  # val point_2d = {X=1.0, Y=2.0};
  val point_2d = {X = 1, Y = 2} : {X: real, Y: real}
  # val point_3d = {X=10.0, Y=20.0, Z=15.0};
  val point_3d = {X = 10, Y = 20, Z = 15} : {X: real, Y: real, Z: real}
  # get_x point_2d;
  val it = 1 : real
  # get_x point_3d;
  val it = 10 : real

Standard ML の場合、前2つは言語仕様で規定されているからすべての処理系で利用できるけど、
最後の「フィールドがファーストクラス」であることは仕様では要求されていない
たとえば SML/NJ という処理系だと、上記のコードはエラーになる
  - fun get_x {X = x, ...} = x;
  stdIn:1.2-1.28 Error: unresolved flex record
  (can't tell what fields there are besides #X)

SML# が独自に拡張したレコード型に関しては、SML# プロジェクトのホームページに
日本語の解説があるから、まず最初に読んでみるのがいいと思う
・SML#の拡張機能:レコード多相性 in プログラミング言語SML#解説
 http://www.pllab.riec.tohoku.ac.jp/smlsharp/docs/2.0/ja/Ch7.xhtml

レス:1-200 201-400 401-600 601-800 801-1000 ALL

このスレへの固定リンク: http://5chb.net/r/tech/1245017721/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「関数型言語ML (SML, OCaml, etc.), Part 6->画像>1枚 」を見た人も見ています:
関数型言語ML (SML, OCaml, etc.), Part 8
関数型言語一般
関数型言語とオブジェクト指向型言語って
関数型プログラミング言語Haskell Part33
関数型プログラミング言語Haskell Part34
竹内道宏「当初BABYMETALを鼻で笑っていたが今は夢中。彼女達のダンスは世界共通言語。「まがい物」と言うが、大事な事は「本気」かどうかだけ」★3
次世代言語議論スレ[Go Rust Kotlin Scala]第4世代
日本語プログラミング言語『なでしこ』スレ6.1&#169;2ch.net (155)
【Lisp】プログラミング言語 Clojure #4【JVM】
プログラミング言語 Scala 12冊目 (69)
次世代言語27 Nim Zig Pony Carbon Gleam (308)
【.NET】F#について語れ3【OCAML】
MenuetOS 64bit版 アセンブリ言語 プログラミング
c言語初心者なんだが
C言語なら俺に聞け
言語デザイン
C言語なら俺に聞け 146
C言語なら俺に聞け 155
C言語なら俺に聞け 163
C言語なら俺に聞け 154
C言語なら俺に聞け 156
C言語なら俺に聞け 159
C言語なら俺に聞け 161
C言語なら俺に聞け 160
C言語なら俺に聞け 139
C言語なら俺に聞け 140
C言語なら俺に聞け 150
C言語なら俺に聞け 151
C言語なら俺に聞け 152
C言語なら俺に聞け 153
C言語なら俺に聞け 147
C言語なら俺に聞け 145
C言語相談室(上級者専用)
【純粋関数型AltJS】PureScript
C言語なら俺たちに聞け パート0001
PCソフト開発で一番便利な言語教えて
C言語でコミュニケーションを取るスレ
プログラミングBASIC言語について。
【超高速】C/C++に代わる低級言語を開発したい 8
C++諦めたから他のオススメの言語教えて!
(悲報)邦楽、言語の壁により世界でマイナー
自称次世代言語議論スレ[PHP PHP PHP]
C言語でテトリス作れる人来て!👾
ラズパイ4でc言語開発する方法教えてくれ
成田悠輔「化学は汎用性の低い言語」パート2
【IT】人気プログラミング言語トップ10【2019版】
グラフィック特化言語 Processingを語るスレ
1行ずつC言語を書いてくスレ(目標なし)
【Cは】毛の壁ファンクラブ65【関数型】
LinuxカーネルはC言語なのにオブジェクト指向
【GNU】スクリプト言語 Guile【scheme】
C言語はバイトオーダー等のハードウェア構造を意識しなければ
【C?】最初の言語に何を選ぶか【Haskell?】
学習サイトで言語習った後って何したらいいの?
最長不倒関数■C言語でmain関数に全コードを入れる
訃報: C 言語の開発者、デニス・リッチー氏が死去
C#は中途半端←言語仕様パクったくせに何言ってんだ
世界中でプレイされるゲーム 異なる言語でどのように表現されているのか?
次世代言語12 Go Rust Swift Kotlin TypeScript
次世代言語15 Go Rust Swift Kotlin TypeScript
プログラミング言語のBASICが60周年を迎える [朝一から閉店までφ★]
次世代言語24 Go Nim Rust Swift Kotlin TypeScript
次世代言語23 Go Nim Rust Swift Kotlin TypeScript
次世代言語29 TypeScript Swift Go Kotlin Rust Nim
次世代言語Part8[Haskell Rust Kotlin TypeScript]
【翻訳】NEC、多言語翻訳の専用デバイスを発売 訪日外国人の接客支援で
04:54:42 up 5 days, 5:08, 8 users, load average: 62.96, 66.02, 65.40

in 0.067858934402466 sec @[email protected] on 102217