[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 09/01 11:11 / Filesize : 241 KB / Number-of Response : 1017
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

関数型言語ML (SML, OCaml, etc.), Part 6



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

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

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

前スレ
関数型言語ML(SML, OCaml, etc.), Part 5
pc12.2ch.net/test/read.cgi/tech/1186292994/

2 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 19:45:36 .net]
プログラミングの初心者が最初に学習する言語としても優れているのに、
学習者が増えないのはなぜなの?

3 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 19:57:50 .net]
>>2
教える側が理解していないから。

4 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 20:04:59 .net]
>>2
初心者が日常で使うにはハードルが高いからかな

5 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 01:24:50 .net]
前スレでもあったけどOcamlとHaskellってどっちが初心者に向いてるのかな?
Lispいじってた俺にとってはOcamlの方が見た感じ楽そうに見えるけど
Lisp、Ocaml、Haskellマスターの意見が聞いてみたいな

6 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 09:59:16 .net]
standard MLをさらっとやってから決めれば。

7 名前:デフォルトの名無しさん [2009/06/16(火) 22:59:25 .net]
>>5
型つき関数型言語の背景にある背景理論(ラムダ計算)をぱっと勉強したいならHaskell,
実用で長いこと使いたいならOCaml。


8 名前:デフォルトの名無しさん [2009/06/16(火) 23:52:08 .net]
オブジェクトを使わずにステートマシンを作るのによい方法はありますか?

勉強のためにStateパターンを

9 名前:cWュールを使ってやってみようと思ったのですが、
相互依存を回避するうまい方法が思いつきません。
また、状態をそれぞれ別モジュールにするにせよ、一箇所にまとめるにせよ、動的に切り替えるためには
結局パターンマッチさせてそれらを呼び出すようになると思いますが、もっとスマートな方法はありますか?
[]
[ここ壊れてます]

10 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 10:23:08 .net]
>>8
まずは具体的な実装例を挙げてみたら?



11 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 10:43:32 .net]
うん、なんか簡単な問題例を出してくれないとわかんないよ。


12 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 10:51:36 .net]
state machineの問題例というとよくあるのはストップウォッチとか。

13 名前:8 [2009/06/17(水) 12:36:14 .net]
実際の問題を簡単にした問題例です。

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

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

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

ちなみに元々の問題は「実例で学ぶゲームAIプログラミング」
という本の2章に出てくる、上記の問題例にいくつか余分な状態を
追加したようなものです。
元々の問題をとりあえず実装してみたソースとサンプルソースも
あげてみました。
www1.axfc.net/uploader/Sc/so/9827.lzh


14 名前:8 [2009/06/17(水) 12:42:44 .net]
スレ違いではありますが、もう1つ後学のために質問をさせてください。
アップロードするのは初めてでよくわからないままaxfcを
使用したのですが、プログラム板で一般的に使用されている
アップローダーというものはあるのでしょうか?

15 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 14:43:02 .net]
>12
その手の奴って素直に状態保持した方が色々スッキリしそうなんだけどどうなのエロイ人

16 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 16:54:33 .net]
>>12
> キャラクタは
>   ・バイトをする : 手持ちが1増える
>   ・銀行で貯金をする : 手持ちを0にし、貯金が1増える
>   ・家で寝る : 貯金が1減る
> の状態を取ります。

ニート解:

キャラクタはバイトせず取り敢えず銀行へ行く
ということを目標金額まで繰り返し、到達したらその金がなくなるまで
家でごろ寝し、なくなったらまた働かずにまた銀行へ行く


17 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 17:28:06 .net]
継続っぽくすればいいんじゃない?


18 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 22:02:12 .net]
コードを晒すにはここがいいよ
codepad.org/

19 名前:デフォルトの名無しさん [2009/06/17(水) 22:22:20 .net]
なんで12の問題にStateパターンが適してるのかよくわからない。。

20 名前:デフォルトの名無しさん [2009/06/17(水) 22:31:48 .net]
interface State { void whatToDoNext(); } みたいなインターフェイスがあって、
class RichState implements State { public void whatToDoNext() { goToTheBank(); }
class PoorState implements State { public void whatToDoNext() { work(); }
...
みたいなイメージですか?



21 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 23:05:02 .net]
これくらいなら引数に状態を持たせて各状態を手続きで表せばよくね?

22 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 23:07:47 .net]
>>20のやり方がいいんじゃねーかな
たぶん>>16も同じこと?

たぶん両者が言ってるのはこんな感じ?(1/2)
type action =
| Work // バイトをする
| Deposite // 銀行で貯金をする
| Rest;; // 家で寝る

type life_state =
| Working // …ということを目標金額まで繰り返し
| Resting;; // ごろ寝

let sigma event state =
match (event, state) with
// バイトをする: 手持ちが1増える
| (Work, (budget, account)) -> (budget + 1, account)
// 銀行で貯金をする: 手持ちを0にし、貯金が1増える
| (Deposite, (budget, account)) -> (0, account + 1)
// 家で寝る: 貯金が1減る
| (Rest, (budget, account)) -> (budget, account - 1);;

23 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 23:09:23 .net]
(2/2)
let rec life state days =
printfn "%A" (state, days);
if days = 0
then ()
else
match state with
// 財布がいっぱいになったら銀行へ行く
| (Working, (3, account)) -> life (Working, sigma Deposite (3, account)) (days - 1)
// ということを目標金額まで繰り返し
| (Working, (budget, 5)) -> life (Resting, sigma Rest (budget, 5)) (days - 1)
// (財布がいっぱいになるまでは働く)
| (Working, s) -> life (Working, sigma Work s) (days - 1)
// 到達したらその金がなくなるまで家でごろ寝し、なくなったらまた働く
| (Resting, (budget, 0)) -> life (Working, sigma Work (budget, 0)) (days - 1)
// (なくなるまではごろ寝する)
| (Resting, s) -> life (Resting, sigma Rest s) (days - 1);;

改行が…まぁいいか
ちなみにF#です

24 名前:8 [2009/06/18(木) 00:21:17 .net]
>>16
継続について調べてみます。

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

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

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

例題を簡略化したせいで反ってわかりにくくなってしまい、すみませんでした。
とりあえず継続というものを調べつつもう少し考えて見ます。
皆様ありがとうございました。


25 名前:デフォルトの名無しさん [2009/06/18(木) 22:18:10 .net]
考えてみたけどこれじゃだめ?

(* 1/2 *)
type state = { cash: int; deposit: int; action: unit -> state }

let rec work_state cash deposit = {
cash = cash;
deposit = deposit;
action = (fun () ->
print_endline "work";
let cash' = succ cash in
if cash' < 3 then work_state cash' deposit
else rich_state cash' deposit
)}
and rich_state cash deposit = {
cash = cash;
deposit = deposit;
action = (fun () ->
print_endline "go to the bank";
let deposit' = succ deposit in
if deposit' < 5 then work_state 0 deposit'
else neet_state 0 deposit'
)}

26 名前:デフォルトの名無しさん [2009/06/18(木) 22:19:23 .net]
(* 2/2 *)
and neet_state cash deposit = {
cash = cash;
deposit = deposit;
action = (fun () ->
print_endline "sleep";
let deposit' = pred deposit in
if deposit' > 0 then neet_state cash deposit'
else work_state cash deposit'
)}

let initial_state = work_state 0 0


27 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 09:08:15 .net]
この規模だといいけど、
行動の結果と選択を独立に実装できる方が
将来の拡張にはよいんじゃないかな、
特に質問者はゲームAIの本読んでるらしいし。


28 名前:デフォルトの名無しさん mailto:sage [2009/06/19(金) 14:59:30 .net]
いつのまにやらObjective Caml is 3.11.1でてる

29 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 12:20:07 .net]
OCamlで副作用のあるライブラリを使っていて、
クロージャの(環境の)合成がしたくなったのですが失敗します
再現コードを書くと
ma,mbは期待通りですがmcは毎回1が出力されます
環境の中の環境ってのは呼ばれるごとに新しい環境になるからってことですかね
let a x f=
let r = ref x in
fun ()->Printf.printf "%d" !r;f(); r:=!r+1;;
let b x f=
let r = ref x in
fun ()->Printf.printf "%d" !r;f(); r:=2* !r;;
let c x f =
fun ()->(a x (b x f))();;
let ma = a 0 (fun ()->Printf.printf "a\n" );;
let mb = b 1 (fun ()->Printf.printf "b\n");;
let mc = c 1 (fun ()->Printf.printf "c\n");;
ma();;ma();;ma();;
mb();;mb();;mb();;
mc();;mc();;mc();;
てことはOCamlのオブジェクト指向部分ちゃんと覚えないとだめかな
by poor man

30 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 16:54:49 .net]
let rec length list =
 match list with
  [] -> 0
 | x::rest -> 1 + length rest;;

このリストの長さを返す再帰関数の動きなんですが、下へ展開していって
ループが終了したら、上に値が戻ってくるイメージでOKですか?

length [2; 1; 3] = match [2; 1; 3] with
  | 2 :: [1; 3] -> 1 +
            length [1; 3] = match [1; 3] with
              | 1 :: [3] -> 1 +
                       length [3] = match [3] with
                        | 3 :: [] -> 1 +
                                length [] = match [] with   
                                   [] -> 0
                              1 + 0        
                     1 + 1
           1 + 2
length [2; 1; 3] = 3




31 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 17:01:54 .net]
上とか下でなくて、行って戻ってくるイメージですね。ブーメランみたいな。

32 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 17:02:56 .net]
IDないんですね。29,30,31は、29です。

33 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 17:16:19 .net]
インデントを浅くしろw

基本的に再帰は漸化式と同じと考えれば良い。
それで合ってるが、一々動作を深く考えずに関数を定義出来るようになるのが
最初の一歩だから精進すべし。

34 名前:129 mailto:sage [2009/06/20(土) 17:41:30 .net]
ども。インデントはあれかなぁと書いた後に思いました。

命令型言語だとカウントする変数を作ってa = a + 1みたいな
イメージが強くて直感的にこのソース見て理解出来なかったので。
書いて見ると理解出来るもんですね。精進します。

35 名前:デフォルトの名無しさん mailto:sage [2009/06/20(土) 21:21:43 .net]
>>29
ocamlのトップレベルには#traceというディレクティブがあって、
指定した関数の動きが表示される
再帰関数の動きを確認するのにはやや便利だから使ってみて
# #trace length;;
length is now traced.
# length [1;2;3];;
length <-- [<poly>; <poly>; <poly>]
length <-- [<poly>; <poly>]
length <-- [<poly>]
length <-- []
length --> 0
length --> 1
length --> 2
length --> 3
- : int = 3


36 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 13:16:20 .net]
>>34
こういうのあったんですね。助かります。どもです。



37 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 19:21:20 .net]
前スレって埋まる前に落ちたんですか?

38 名前:デフォルトの名無しさん mailto:sage [2009/06/21(日) 19:24:33 .net]
うん

39 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 09:18:56 .net]
>>28
質問をまず推敲してくれ。「期待」とやらが何かわかんねー。
> てことはOCamlのオブジェクト指向部分ちゃんと覚えないとだめかな
それは違うだろ。


40 名前:38 mailto:sage [2009/06/22(月) 09:32:13 .net]
>>28
let c x f = a x (b x f);;
これが28の期待に沿っているといいのだが。




41 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 09:00:15 .net]
ttp://flyingfrogblog.blogspot.com/2009/03/hlvm-has-been-released.html
HLVMってのはLLVMの関数型特化版、みたいなイメージ?
OCamlはこっちになるの? おしえてエロいひと

42 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 10:34:57 .net]
釣りなの?釣りなの?
> HLVMってのはLLVMの関数型特化版、みたいなイメージ?
そういう理解でいい。

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

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

将来化ける事もあるかもしれない。が、今は放置をお薦め。時間の無駄。


43 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 13:27:16 .net]
>>41
前スレでも話題になってたHarropのこと?

44 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 16:00:15 .net]
ttp://www.infoq.com/jp/news/2008/03/revoerability-and-testing-oo-fp

ここに
「Feathers氏に反対する人の多くは、関数型のコード乱雑になる原因は、
関数型ではないイディオムを関数型言語に持ち込んだこと以外にはないと
信じている。」
っていう記述があるけど、関数型言語のイディオム(とかデザインパターン)って
どんなのがあるの?おしえてエロいひとー

45 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 16:23:20 .net]
>>43
原文を読んでみると、単に副作用のない純粋関数型のコードを
関数型のイディオムと呼んでいるように思えるな。

46 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 17:28:56 .net]
>>43
そうだとするとあまりに漠然としていて多少の窮屈感が欲しくなるな。
ノーパンでスカートを穿いているような、あるいは力戦になって次に
なにを指せばいいのかわからない、そんな感じ。
そのうちそういうのがまとめられればいいなぁ。

47 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 17:29:56 .net]
>>45のアンカーまちがえた。
>>44が正解

48 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 17:58:00 .net]
>>45
おっしゃる事があまりに漠然としていて多少の具体感が欲しくなるな。
ノーパンでスカートも穿いてないような、あるいは序盤なのに次に
なにを指せばいいのかわかってない、そんな感じ。
そのうちそういうのをまとめられるようになってくれ。


49 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 18:23:04 .net]
>>45
関数型が嫌いor慣れてない人の多くは純粋関数型の副作用の無い世界を
非常に窮屈だと感じるわけで。不感症になったのも慣れということだなw

50 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 18:37:21 .net]
>>43
そのまんま、関数型スタイルだろ。



51 名前:デフォルトの名無しさん mailto:sage [2009/06/23(火) 21:34:35 .net]
>>41
ありがとん参考になった!

ベンチマークだけみて速いなーとか思っただけなんで、
そんな背景があったとはまったく知らんかったyo

52 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 09:15:16 .net]
>>50
GC なしで早いよーと叫ばれてもね。
普通にMLのプログラムがコンパイル出来るようになったら
ベンチを見てみてもいい。



53 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 09:18:35 .net]
>>43
デザインパターンってぶっちゃけてみれば、バッドノウハウのことでしょ。
関数型言語にそんなのないよ。

54 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 09:23:49 .net]
昨晩の議論の結果、「デザインパターン」はありませんが、「あるあるネタ集」ならあることになりました。


55 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 19:11:49 .net]
>>52
関数型言語にデザインパターンがないということはないだろう。要は「あるあるネタ集」(の粒度がある程度あるもの)のことなんだから。
オブジェクト指向でのデザインパターンは関数型言語ではバッドノウハウになり得るというのは同意。

56 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 19:16:04 .net]
>>52
バッドノウハウはアンチパターン

57 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 21:07:53 .net]
F#>Java いずれこうなるから安心しろ。

58 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 21:30:13 .net]
いずれw

59 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 21:36:15 .net]
あらゆる意味でF#>>>>Javaだろ。Windows上では。
特に関数型言語が好きだからとかではなく。客観的事実。

60 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 21:37:58 .net]
Javaはネイティブで動かないからうんこ。
スレッドで動いてるガベコレも時々挙動がおかしくなるからうんこ。



61 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 22:47:46 .net]
最終話「structをfunctorに」  すべてを終わらせる時…!
                   C・Y・C第1巻は、発売未定です。夢野カケラ
OCaml : チクショオオオオ!くらえC++!ガベージコレクション!
C++ : さあ来いOCaml!実はオレは一回不正なメモリ操作しただけで死ぬぞオオ!
(ガッ)
C++ : グアアアア!こ、この地上でもっともバカな言語と呼ばれる四天王のC++が…
  こんな不純粋関数言語に…バ…バカなアアアアアア
(ドドドドド)
C++ : グアアアア
Delphi : C++がやられたようだな…
VB : フフフ…奴は四天王の中でも最弱…
C# : MLごときに負けるとは手続き型言語の面汚しよ…
OCaml : くらええええ!
(ズサ)
3言語 : グアアアアアアア
OCaml : やった…ついに四天王を倒したぞ…これでJavaのいるWindowsのWindowが開かれる!!
Java : よく来たなObjective Caml…待っていたぞ…
(ギイイイイイイ)
OCaml : こ…ここがWindowsだったのか…!感じる…Javaの魔力を…
Java : OCamlよ…戦う前に一つ言っておくことがある。お前は私を倒すのに
  『オブジェクト指向』が必要だと思っているようだが…別になくても倒せる
OCaml : な 何だって!?
Java : そしてお前の入門書は増えてきたので最寄りの本屋へお取り寄せしておいた。
  あとは私を倒すだけだなクックック…
(ゴゴゴゴ)
OCaml : フ…上等だ…オレも一つ言っておくことがある。このオレに生き別れたF#が
  いるような気がしていたが別にそんなことはなかったぜ!
Java : そうか
OCaml : ウオオオいくぞオオオ!
Java : さあ来いOCaml!
OCamlのnative codeが世界を救うと信じて…! ご愛読ありがとうございました!


62 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 23:13:22 .net]
> OCaml : こ…ここがWindowsだったのか…!感じる…Javaの魔力を…
ワロタ

63 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 00:05:56 .net]
F#ってOCamlとどれほど違うの?

64 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 00:40:01 .net]
>>62
F#スレにこんなのあったよ

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

オブジェクト指向部分は根本的に違う(nominal/structural)

65 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 00:47:26 .net]
>>63
ありがとう。なんか半分以上わからないけど。わかった事にしとく。

66 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 02:30:58 .net]
>>60
ワロタw
WindowsのWindowにやられたww

67 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 11:26:18 .net]
>>50
caml-list で Harrop が
New HLVM examples!
というサブジェクトで騒いでるから、それ見て、判断して。


68 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 11:37:09 .net]
>>63
ここで聞くのもアレだけど
型推論が残念なことになったのは演算子のオーバーロードのせい?

69 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 21:23:16 .net]
>Java : そうか
そうかってwww
どんだけスルー

70 名前:デフォルトの名無しさん [2009/06/26(金) 03:32:33 .net]
List.fold_left (fun (x,_) y -> x + y) 0 [(1,1)];;
を通そうとしたところ
This expression has type int but is here used with type int * 'a
といわれてしまいます。うまい方法はないのでしょうか?




71 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 04:50:58 .net]
>>69
高階関数の引数が順番逆なだけじゃね
フォールドライトならそれでおkかも

72 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 11:43:48 .net]
すいません スレよごしてしまって .... おっしゃる通りでした .... orz

73 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 12:25:05 .net]
fold 辺りまで来たら、フィーリングでデバッグするんじゃなくて、
ちゃんと型を確認しだしたほうがいいね。


74 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 22:06:11 .net]
itpro.nikkeibp.co.jp/article/COLUMN/20061212/256657/?ST=develop
↑ここを読んでいて、LablGLをインストールしようとして失敗しました。
どうしたらいいか教えてください。
OSはWindowsXPです。
・lablgl-1.04-win32.zipをObjective Caml以下のディレクトリに直接展開しました。
・Microsoft Visual C++ 2008 Redistributable Package (x86).をインストールしました。
・glut-3.7.6-bin.zipをダウンロードし、glut32.dllをsystem32フォルダにコピーしました。
・コマンドプロンプトを開き、
 C:\Program Files\Objective Caml\lib\lablGLまで移動し、
 ocaml build.mlをコマンドプロンプトから実行しました。
途中までは走っていたのですが、以下のようにエラーが出ました。
C:/Tcl/lib tk84.lib tcl84.lib gdi32.lib user32.lib " togl.cmo
ocamlc.opt -w s -I +labltk -a -o lablglut.cma -cclib -llablglut -dllib -llablglu
t -cclib "glut32.lib " glut.cmo
ocamlopt.opt -w s -I +labltk -c raw.ml
'ml' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
File "raw.ml", line 1, characters 0-1:
Error: Assembler error, input left in file C:\DOCUME~1\****<※ユーザ名>\LOCALS~1\Temp\camla
smd25ac5.asm
Native build failed: error 2
You can still use the bytecode version
Now ready to use on an OCaml MSVC port
※ここまで

またコマンドプロンプトから > lablglut を実行した際にもエラーが出ました。
Cannot load required shared library dlllablgl.
Reason: C:\Program Files\Objective Caml\lib\stublibs\dlllablgl.dll: このアプリケ
ーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケ
ーションを再度インストールすることにより問題が解決する場合があります。
※ここまで

75 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 22:25:15 .net]
原因はわからんが、参考までに
 labltkはインストールしてるか
 ocamlはネイティブコンパイラまでインストール済か
 Activetclはバージョン8.5系だと動かなかったので8.4を入れる

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

glutはそれと同じバージョンで動いたよ


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

読み進めたいので、このまま>>73の第五回は一応読むだけ読んで、
次に行きたいと思います。

77 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 13:21:20 .net]
ocaml用のサウンドライブラリ(スピーカーから音を出したりマイクの音を拾ったり)で一番ポピュラーなのって何かな?

78 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 13:34:48 .net]
>>76
OCamlSDL でサポートしてなかったら自作して公開よろ。


79 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 13:40:59 .net]
>>77
だって、作るとしたらWin32APIとかOSSとかALSAとかいろいろサポートして、なおかつメンテもしないといけないんでしょう?
嫌ですよ。

80 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 16:08:25 .net]
>>78
うわなんかヘタレられた。
自分のやりたいAPIのインターフェースだけ作りゃいいじゃん。
メンテもしたけりゃするだけでいいじゃん。
初期化とかは何かのライブラリ関数呼ぶだけだし。
やりたいことはほとんどデバイスから
ノンブロッキングに読んだり書いたりするだけで大抵出来るっしょ。




81 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 17:35:00 .net]
>>79
そんな俺しか使わないライブラリを公開するぐらいなら、公開せずに手元に持っておいて、作り溜めしときますよ。

82 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 20:12:55 .net]
>>75
俺もなんかそうなる。
OCamlは3.10.2でLablGLは1.03にもどしたら上手くいった

83 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 21:04:21 .net]
>>81
ありがとうございます。1.03にしたら "OCaml build.ml"は上手く行ったようです。


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

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

OCaml本体は"ocaml-3.11.0-win-msvc.exe"をインストールしなおしました。

84 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:06:31 .net]
Windowsだとライブラリのビルドでつまづくことが多いよね。
OcamlSDL関連のビルドで上手くいなかくてビルドを諦めた。
OCaml自体はプログラミング入門者にも比較的優しいと
思うけど環境は若干敷居が高めだと思う。
んでWindows使うのが悪いとかいわれちゃうとしょんぼりする。
そもそもLinux系を使うこと自体、本職でない人にとっては
普通ではないわけで。

85 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:14:49 .net]
あれぇ?書き込めた。どうせアク禁の巻き添えで書き込めないだろうと
勉強不足を棚に上げた愚痴>>83を書いてみたら・・・。
ごめんなさい。反省しています。

86 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:15:43 .net]
OCamlユーザは計算機科学の研究者が多いんだから、それは仕方ないだろ

87 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:17:23 .net]
教育用というか初心者向けのサイトですらUNIX前提の記述が多いように思えるけどな。

88 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:17:58 .net]
UnixやLinuxがプログラミング教育に適しているからだろう。

89 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:18:10 .net]
>>85
>>86
うん。わかってはいるんだ。あんな書き込みをしてしまってごめんとしかいいようがない。

90 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:29:17 .net]
まあ、ドザーはおとなしくF#でも弄ってなさいって事だw



91 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 23:16:11 .net]
>>82
(いまさらだが)OCamlのReadmeを見ると MinGWの場合は

Do *not* install the Mingw/MSYS development tools from www.mingw.org:
these are not compatible with this Caml port (@responsefile not
recognized on the command line).

って書いてあるからCygwinが必要なんだと思われる。
英語は雰囲気で読んでいるので間違っていたら誰かやさしく叱ってくれ。

92 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 23:40:30 .net]
>>84
> あれぇ?書き込めた。どうせアク禁の巻き添えで書き込めないだろうと
> 勉強不足を棚に上げた愚痴>>83を書いてみたら・・・。

この精神でビルドがんばれ。
どうせビルドできないと思ってもできるかも。


93 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 00:26:31 .net]
いやcygwin/mingw系はさっさとあきらめるのが吉だと思う

94 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 03:36:38 .net]
>>89
そんなこと言ってるから関数型はいつまでたってもドマイナーなんだよ

95 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 04:59:31 .net]
それって何か問題があるんだっけ?

96 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 12:32:44 .net]
スレとは関係ないが、東北型言語を使用する俺は「だっけ?」が方言かどうかわからなくなるときがある。

97 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 12:45:46 .net]
そうですけ?

98 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 12:50:27 .net]
>>95
それは、ずいぶん、どい なか です ね

99 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 13:13:58 .net]
東北型言語と聞いたら、語尾に#を付けるんだと思った。


100 名前:82 mailto:sage [2009/06/30(火) 17:56:45 .net]
そういうもんなんだとあきらめる事にしましたw
結局Cygwinなんか入れるよりもお勉強用のLinuxマシンを用意した方が早そうですね。
レス頂いてありがとうございます。



101 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 18:50:55 .net]
>>99
完全にスレチだが、別にマシンを用意しなくても仮想環境を使えば楽なのに。

102 名前:82 mailto:sage [2009/06/30(火) 18:57:35 .net]
セレロン1G、メモリ256Mしかないノートなんです。仮想環境は無理では。
Knopixとかならできるのかな?

103 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 23:12:27 .net]
>>101
virtual boxでdebianがおすすめです。
かなり低スペックでも動いて、何よりaptーgetでocamlも含め、たいていのライブラリが簡単にインストール出来ます。

104 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 00:05:15 .net]
プログラミングinOCamlの練習問題5.6

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

ってやつが解けまへん。。
教えて、偉い人

105 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 01:27:12 .net]
>>102
まじっすかー!ありがとうございます。
今Ubuntuのデュアルブート環境作成厨…orz
ウブンツ重かったらそちらを試してみます。

106 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 01:35:56 .net]
>>103
本読んでないけど末尾再帰じゃないすかね。

107 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 08:39:57 .net]
>>104
apt getはububtuもdebianもほぼ同じなので、ububtuでも大丈夫ですよ。

108 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 16:48:02 .net]
virtual box + debian + OCamlで作成したネイティブコードはやっぱり
Windows上では動かないん?会社がWindowsだから・・・。
動くなら今すぐそっちの環境に移行したい。

109 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 16:55:45 .net]
&g

110 名前:t;>107
当然動く訳無い。
大体Linux上で生成されるオブジェクトファイルはELFフォーマットだし。
[]
[ここ壊れてます]



111 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 21:24:54 .net]
OCamlってLLVMのコード吐けるんじゃなかったっけ

112 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 09:07:04 .net]
>>109
憶測で物を言うな。吐かない。終わり。



113 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 09:15:48 .net]
LLVMのocamlバインディングはある。という話と取り違えたのかな。

114 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 12:14:41 .net]
>>110
終わったところすまないが、>>109は吐ける!と断定しているわけではないから
もう少し生暖かくてもいいと思うんだ。

115 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 12:49:21 .net]
>>112
>>110はいい加減なこと言う奴にうんざりしてるんだろうな。
この板はそんな奴ばかりだから、せめてソースくらい示さないと。

116 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 05:15:37 .net]
LLVMのコード吐けるようにしようぜ、という話だけなら有った気がするが

117 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 08:55:56 .net]
>>114
しーっ!そういうこと言うと
憶測で(ry
とか言われちゃう

118 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 12:38:28 .net]
>>103
「書き換えよ」とか「引数を一つ増やして」といわれても元々のコードがないと
答えられないぜよ。

119 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 17:08:59 .net]
偉い人は プログラミング in OCaml を買ってないので答えられないのではないか。


120 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 18:05:20 .net]
>>117
そういえばOcaml-nagoyaの連中(有限会社ITプランニング)ってどうなったの?
なんか公式サイトにつながらないんだけど。



121 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 19:23:03 .net]
OCamlは大文字で始まるidはconstructor扱いになるんだな
SMLのコードを移植していてはまった

122 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 11:16:05 .net]
ocaml触ってみたんだけど、やっぱりライブラリが少ないね。
練習でちょっとしたものを作ろうとしたけど、ライブラリの少なさでたちまち不便で止まってしまった。

123 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 11:52:02 .net]
そんなに副作用たっぷりのコードを書きたいならF#でも使えばいいのに

124 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 12:10:39 .net]
副作用の無いライブラリを作るのは難しいの?

125 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 12:19:32 .net]
>>122
HaskellならMonad IOがスタンダードだが、OCamlにはないからね。
IOはどうしても副作用になってしまう。

126 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 12:32:25 .net]
それでF#でも使えと言われると辛いね…

127 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 13:37:39 .net]
>>120
どんなライブラリが欲しかったのん?

128 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 13:58:47 .net]
>>118
憶測(ry
じゃなくて、本が違う。
ITplan は知らんけど、一日ぐらいサイトが落ちてていいだろ。週末だし。

129 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 14:19:25 .net]
>>126
どうでも良いけど、365日接続できないサイト運営してる時点で技術力を疑う。

130 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 14:34:19 .net]
休日にメンテなら仕方ないけど、平日の夕方に落ちてるのは問題だな。



131 名前:ogasawara mailto:sage [2009/07/04(土) 17:30:22 .net]
>>118,126,127,128
恐縮です。うちが契約してるデータセンター屋さんの電源障害だそうで、何ともならなくて。
そろそろ復活するらしいのですが、うーん。

132 名前:ogasawara mailto:sage [2009/07/05(日) 09:28:07 .net]
>>120
The Caml Hump(caml.inria.fr//cgi-bin/hump.en.cgi)という
ところがあって、ここでライブラリを探すとかなり見付かりますよ。
CGI、DB接続、GUI、UTF-8、アルゴリズム色々など有ます。

133 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 15:57:43 .net]
質問です。match文に関する質問です。
これは文法の慣習みたいなものかなと思うんですがどうなのかなぁと。

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

>>83
vmwareを使ってxp上でubuntuを動かして、ocaml勉強してます。

134 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 16:48:01 .net]
>>131
質問をするときはサンプルコードを示したほうが回答してもらいやすいよ。
この文章だと
>match文ではなく直接パターンマッチさせる書き方の方が良いのでしょうか?
あたりがわかりづらいと思われ。

135 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 17:28:04 .net]
>>132
kekkonっていう関数で、anataというレコードが要素のリストを引数にして
条件に合う人数を返すとかいう場合に・・・

let rec kekkon anata = match anata with
[] -> 0
| first :: rest -> (match first with
{name = n; toshi = t; syunyu = s; tyotiku = t; sisan = s; youshi = y}
-> 0 
とかと書かずに、以下のように書くほうがいいのかなぁという質問です。

let rec kekkon anata = match anata with
[] -> 0
| {name = n; toshi = t; syunyu = s; tyotiku = t; sisan = s; youshi = y} :: rest ->



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

let rec kekkon = function
の方が簡潔。

137 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 17:46:33 .net]
どっちでもいいんですね。どもです。


138 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 18:49:38 .net]
>>133
このサンプルコードのように

139 名前:激Rードであれば直接アクセスするっていう手も
あるよ。タプルの場合は状況にもよるけど2番目の方法が多いんじゃないかな。
[]
[ここ壊れてます]

140 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 09:38:23 .net]
record label に折角意味のある名前を付けてあるのに、
pattern match でワザワザ意味不明な変数に束縛するスタイルはおかしい。
そんなことするから s が二回束縛されてるヨ。
136 の言うように r.name とかでアクセスするほうが普通。




141 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 16:02:51 .net]
データ構造について調べていたら
ttp://en.wikipedia.org/wiki/VList
のVlistというものを見つけたのですが、これはリストを使った
動的配列のようなものでしょうか。(英語が苦手のためよくわかりませんでした)
また、OCamlで書くとどのようになるのでしょうか。
分かる方がいたら教えてください。


142 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 20:09:46 .net]
まぁ、List.nth が妙に早い list と思えばいいね。
答えが欲しいの?それとも一緒に考えてほしいの?
Okasaki には載ってないね。



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

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

操作は自分で考えませう。

144 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 22:38:27 .net]
>>140
ありがとうございます。コードのおかげでなんとなくですが
イメージできました。(とはいってもこのデータ構造が
どんな風にありがたいのかは、まだ理解できてはいないのですが・・・)

145 名前:139 mailto:sage [2009/07/11(土) 08:49:39 .net]
教育上は
type 'a vlisti = VLNil | VLCel of 'a vlisti * int * 'a option array
のほうが良いです。
140 だと埋まって無いトコを埋める値が必要ですね。(Obj.magic 0 などで埋めるのはダメ絶対。)




146 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 20:12:39 .net]
ctags5.8でOCamlがサポートされたらしいよ。

147 名前:143 mailto:sage [2009/07/12(日) 20:52:01 .net]
ctags -> Exuberant Ctagsに訂正。

148 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 08:02:09 .net]
otagsがいらなくなると嬉しいな
微妙にctagsとオプションが違ったりするのがウザかったんだ

149 名前:デフォルトの名無しさん [2009/07/23(木) 08:24:19 .net]
OCamlからCへのトランスレーターってありませんか?

150 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 09:00:30 .net]
>>146
groups.google.com/group/fa.caml/browse_thread/thread/cc13807fa7204874/91529afa62a52640




151 名前:デフォルトの名無しさん [2009/07/25(土) 19:43:01 .net]
OCamlで
(('a -> 'b) -> 'a -> 'b) -> 'a -> 'b = <fun>
int -> int = <fun>

で型だけを指定して変数を宣言することはできますか?

152 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 23:52:22 .net]
変数何それ怖い

というか何がやりたいのか全くわからん

153 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 00:07:08 .net]
>>148の型を持つ識別子なら定義出来る

154 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 00:07:51 .net]
ただ、上は-rectypesなしで出来るかはわからん

155 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 20:13:20 .net]
型注釈を使った無名関数をかいていて、ふと閃いて

fun (x:('a->'b)->(z:'a->'b)) z -> z;;としたところ

- : (('a -> 'b) -> z:'a -> 'b) -> 'c -> 'c = <fun>
のように受理されましたが、3つのうちの最初、z:'aのz はどういう意味があるのか
わかりません。
fun (x:('a->'b)->(z:'a->'b)) -> z;;
としてもzは拘束されていないようですし。



156 名前:148 mailto:sage [2009/07/26(日) 21:13:50 .net]
それはxという識別子をxはintである、ということだけ指定して
宣言できるということですよね?やりかたを教えていただけますか?


157 名前:148/153 mailto:sage [2009/07/26(日) 21:15:14 .net]
>>148

>>149
>>150
様あてです。失礼しました。それと回答ありがとうございます。


158 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 22:59:56 .net]
変数が宣言できるとは言ってない
ただ、関数の引数などにアノテーションすることで
関数の定義範囲を狭めることは出来る

普通の定義
let f x = x;;

型全体
let f x : int = x;;
let f x : int ->int = x;;

引数
let f (x:int) = x;;
let f (x:int->int) = x;;

>>148の上の型は、これを使って
Yコンビネータの型をint->intで制限したもの

159 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:00:46 .net]
int->intじゃなくて'a->'bだった

160 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 10:29:45 .net]
質問者はもう少し動機などを書き加えてほしい。推敲した上で。
背景説明無しに、間違った用語で質問されても答えられません。
逆に説明があれば、多少間違っていても回答者の方で正しく解釈できます。

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

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

>>152
z:'a の z は識別子ではなくラベルです。後の z とは関係ありません。
文法をちゃんと確認して、ラベル付き引数の解説を読んでください。




161 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 12:36:02 .net]
切口上的に始まる親切なレス乙!

162 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 00:57:41 .net]
val come_on : orz -> or2

163 名前:デフォルトの名無しさん [2009/07/29(水) 13:23:33 .net]
>>159
ありがとうございます。Yコンビネータのようなものを作ろうとしていました。
非常に参考になりました。 

>>154が回答に感謝しているのは
>>150の、出来る、が回答になっていると思ったからなのですが。


164 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 21:32:04 .net]
(('a -> 'b) -> 'a -> 'b) -> 'a -> 'bという型の識別子を定義できる



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

は100光年くらい離れてる気がする


165 名前:デフォルトの名無しさん [2009/08/15(土) 12:47:34 .net]
(///)のような演算子をつくってhaskellのようなリスとりてらるを部分的に実現したいです。
(3///5) == [3;4;5] みたいな感じ。
演算記号は何が適当ですか?

166 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 15:34:30 .net]
( -- ) をどっかのサンプルコードで見たな

167 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 17:40:51 .net]
>>163
List.iter print_int (1--100)
とかですか? いいですね。見やすいです。


168 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 15:26:49 .net]
SML/NJから移ってきましたが、SMLとは色々と違う部分が多くて戸惑います。
OCamlの標準ライブラリに無いものは自分で実装しているのですが、SMLとの
コンパチを取るライブラリなどがあったりするのでしょうか?

169 名前:165 mailto:sage [2009/08/22(土) 22:50:51 .net]
再度すいません。SML/NJにはCompilation Managerというものがあってmake相当
のことが出来るのですが、OCamlではUnixのmakeを使うのが普通なのでしょうか?
OCamlのドキュメントではmakeを使った例が書いてありました。
それとも、omakeというものがあるようですが、これを使うのが今時のやり方で
しょうか。

170 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 23:24:33 .net]
それはおまけ



171 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 21:30:22 .net]
なんかcaml.inria.frが異様に重いんだけど、どうかしたのかな。
www.inria.frは普通に繋がるだけに。

172 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 09:06:37 .net]
SMLとのコンパチを取るライブラリなんていう後向きの物は聞いたことありません。
OCaml の stdlib は「標準ライブラリ」にあらず、 OCaml 自身をコンパイル
するために最低限必要な関数を集めただけと考えたほうが幸せです。
「次世代」標準ライブラリ候補として Extlib, OCaml Batteries Included, Jane Street Core
などありますからそれのウチ好きなのを使ってください。(Batteries は Extlib を内包しているはず)

ビルドは make か OCaml 付属の ocamlbuild か omake か、別に何でも良いんじゃない?
- GNU make : どこにでもある。他でも使える。枯れてる。
- ocamlbuild : OCaml に付属。全く使えない。
- omake : 超強力、普通インストールされていない。強力過ぎて一線を超えた使いかたが難しい。


173 名前:165 mailto:sage [2009/08/24(月) 23:26:43 .net]
>>169
ありがとうございます。
ExtLib, Batteriesの双方に同じ名前のモジュールが含まれていたので疑問に思って
いたのですが謎が解けました。SML Basis Libraryにあるような関数は、名前違いで
大体ExtLibでサポートされているようで安心しました。

ビルドツールはGNU makeを主に使ってきたのですが、omakeはファイル更新の
チェックが素晴らしいようなので、omakeを使ってみます。

174 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 11:41:33 .net]
なんでもいいから早く標準に入れてくれ
追加インストールとか面倒だし

175 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 12:34:52 .net]
こんなとこで呟いても何も起こらんよ。


176 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 14:33:39 .net]
だれかOCaml Meetingいった?

177 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 20:45:28 .net]
いったよー

おもろかったけどgolfとかコンパイラ改造とかネタが裏街道過ぎて
実用志向のユーザー増えねえだろこれじゃ、とか思った

178 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 22:15:16 .net]
行かなかったが、ストリーミングでアメリカ人?の発表のところまで見た。
Golfの話は意外と参考になった。演算子定義周りとか、普段あまり使わないから。
演算子によって優先順位が固定されているの勉強になった。
あとObj.magic。あれは反則技だろw

179 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 05:40:38 .net]
OCamlが+-*/等の演算子をpolymorphicに出来ない理由って何?

180 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 17:30:37 .net]
jocamlをmingw上でコンパイルするにはどうすれば良いでしょうか。



181 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 17:32:57 .net]
jocamlをmingw上でコンパイルしようとするとこんなエラーが出ます。

$ ./configure
$ make world
・・・
gcc -o ocamlrun \
prims.o libcamlrun.a -lm
libcamlrun.a(main.o):main.c:(.text+0x26): undefined reference to `caml_expand_command_line'
libcamlrun.a(sys.o):sys.c:(.text+0x4ea): undefined reference to `caml_win32_random_seed'
libcamlrun.a(startup.o):startup.c:(.text+0x936): undefined reference to `caml_signal_thread'
libcamlrun.a(signals_byt.o):signals_byt.c:(.text+0x46): undefined reference to `caml_win32_signal'
libcamlrun.a(signals_byt.o):signals_byt.c:(.text+0xab): undefined reference to `caml_win32_signal'
collect2: ld returned 1 exit status
・・・

182 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 18:09:02 .net]
多分 configure したのが間違い。
OCaml の mingw のビルドを参考にしたら?
JoCaml には付いて無いけど OCaml の README.win32 に書いてある。



183 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 20:36:00 .net]
>>179
ありがとうございます。

cp config/m-nt.h config/m.h
cp config/s-nt.h config/s.h
cp config/Makefile.msvc config/Makefile

config/Makefileの中身のOTHERLIBRARIESからlabltkを削除し、PREFIXをインストールしたいディレクトリに変更し、

make -f Makefile.nt world

を実行したまでは良かったのですが、

make[1]: *** No rule to make target `win32.c', needed by `win32.o'. Stop.
make[1]: Leaving directory `/d/tmp/jocaml-3.11.1/byterun'
make: *** [coldstart] Error 2

と出てストップしてしまいます。
jocaml-3.11.1にはwin32.cが入っていないようですが、これは不具合ということでよろしいでしょうか。

184 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 21:23:00 .net]
mingwなんだからMakefile.mingw使わなきゃならないと

185 名前:179 mailto:sage [2009/09/09(水) 21:31:19 .net]
さーねぇ、俺は JoCaml 使ったこと無いからこれ以上は判らんね。
同じバージョンの OCaml から引っ張って来たら運が良かったらビルドできるかも知れないが、
こんなトコで聞くくらいだったら JoCaml の人に win32.c 無いって聞く方がいいんじゃない?


186 名前:179 mailto:sage [2009/09/09(水) 21:45:10 .net]
>>181
ん?あ、確かに。リンクエラーも判らんし README も読めんのに挑戦かよ。



187 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 22:30:08 .net]
OCamlから足りないソース持ってこないといかんかもね
それで動く保証はないけど

188 名前:デフォルトの名無しさん [2009/09/09(水) 22:31:05 .net]
unix でやるのが早いでしょ。

189 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 22:34:59 .net]
>>181
あ、Makefile.mingwでやりました。
上のはコピペで修正し忘れていました。

190 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 22:36:17 .net]
>>185
JoCamlでアプリを書くつもりなので、Windowsでないとダメなんですよ。



191 名前:デフォルトの名無しさん [2009/09/09(水) 22:47:01 .net]
Luc でさえ、windows で試してないって言ってるし、
イバラの道じゃないかねー。Luc に聞かんと誰もわからんよ。
ちなみに win32.c は jocaml のレポから随分前に消えてる。


192 名前:デフォルトの名無しさん [2009/09/09(水) 22:49:38 .net]
jocaml.inria.fr/
We distribute JoCaml as sources. Those sources are for Unix systems
と書いてあるが、これは読んだのか?


193 名前:デフォルトの名無しさん mailto:sage [2009/09/11(金) 20:25:19 .net]
Batteries Included のドキュメントみてたら
リスト内包標記とか where 節とか open Module in とかあってびびった
使ってる人いる?

194 名前:デフォルトの名無しさん [2009/09/12(土) 11:44:43 .net]
既存のp4拡張をいろいろ集めただけでしょ。
open in はオーバーヘッドを理解してれば使える。

195 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 12:29:49 .net]
オーバーヘッドあるんだ。

196 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 12:56:31 .net]
open M in e は
let module M' = struct open M let v = e end in v
に変換されるので、ブロックを一つ作る。
普通はたいしたこと無いが、再帰関数中で open M in するのは少し考え物だ。


197 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 13:09:21 .net]
すまん、let module M' = struct open M let v = e end in M'v の間違い

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

とか書くと f の呼出しごとにブロックが出来て、時間とメモリを食う。


198 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 13:13:49 .net]
M'.v ですー。

199 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 14:39:44 .net]
時間とメモリを食うのはコンパイル時じゃないの?

200 名前:デフォルトの名無しさん [2009/09/21(月) 22:22:32 .net]
実行時にもオーバーヘッドがある。気になるならベンチ取ってね。



201 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:08:13 .net]
浅井さんの「プログラミングの基礎」のサポートページって消えてる?

202 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 11:31:30 .net]
birdの書いたsudokuの解放プログラム面白かった。
www.cs.tufts.edu/~nr/comp150fp/archive/richard-bird/sudoku.pdf

203 名前:デフォルトの名無しさん [2009/11/09(月) 04:34:20 .net]
Practical OCaml 買おうかと思ったのですが、評判悪いのが気になりました。
実際に読んだ方いましたら、感想を聞かせてください。

204 名前:デフォルトの名無しさん [2009/11/09(月) 23:09:48 .net]
> Practical OCaml 買おうかと思ったのですが、評判悪いのが気になりました。
> 実際に読んだ方いましたら、感想を聞かせてください。

たった今、ゴミだからいらないという人にもらいました。確かにゴミです。ネタとしてならどうぞ。


205 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 00:11:27 .net]
俺はocamllex ocamlyacc の簡単なチュートリアルが欲しくて買ったけど、
そこについては別にひどくは無かったと思ったよ。

206 名前:デフォルトの名無しさん [2009/11/10(火) 04:23:58 .net]
コードのインデントが至るところで狂っている時点でダメでしょう。
どのページを開いても何かツッコミどころがあるというある意味貴重な本。
値段も安くはないし絶対にお薦めしない。


207 名前:デフォルトの名無しさん [2009/11/10(火) 21:20:02 .net]
d.hatena.ne.jp/camlspotter/20091110/1257833616
rainyday.blog.so-net.ne.jp/2006-11-25
shuns.sakura.ne.jp/?%BD%B5%B5%AD%2F2006-4-

これ出た当時はオライリーのフランス語のやつ(当時すでに絶版)以外ではこれしか本がなかったけど
日本語書籍がいくつもある今買う価値はないと思いますね。


208 名前:デフォルトの名無しさん [2009/11/12(木) 00:57:52 .net]
SML#の大堀先生は、最近、何してるの?
継続してれば、有望だと思ったんだけどな・・・ > SML#


209 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 00:34:44 .net]
>>201
apressの書籍ってほとんどハズレだと思う
これもハズレだったよ

210 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 02:34:17 .net]
【科学】道路に軍手が落ちているワケ、名城大研究チームが突き止める[09/11/05]

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






211 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 02:45:27 .net]
くそう軍手……気になる

212 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 13:34:53 .net]
推測の為の方程式として,土礼君の方程式がよく知られている.
しかし,パラメータの値には様々な見解がある.
N = R_s * f_p * n_e * f_l * f_i * f_c * L
N:道路に落ちている軍手の数
R_s:軍手の年間生産量
f_p:軍手を使用する作業の割合
n_e:軍手を屋外で使用する割合
f_l:軍手が使用される作業の割合
f_i:軍手を着脱する回数
f_c:軍手の移動距離
L:道路上の軍手の寿命


213 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 17:11:18 .net]
靴とか靴下が落ちているワケも気になるぞ
誰か研究してくれ


214 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:27:17 .net]
そりゃ浮いてたら邪魔だからじゃないか。

215 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 23:53:58 .net]
軍手なんて色気のないものに血眼になるなよ。

216 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 00:15:00 .net]
>>212
ほらよ。

N = R_s * f_p * n_e * f_l * f_i * f_c * L
N:道路に落ちているパンティーの数
R_s:パンティーの年間生産量
f_p:パンティーを使用する作業の割合
n_e:パンティーを屋外で使用する割合
f_l:パンティーが使用される作業の割合
f_i:パンティーを着脱する回数
f_c:パンティーの移動距離
L:道路上のパンティーの寿命

217 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 01:10:38 .net]
パンツのことをパンティと呼ぶのは40代以上。
40代未満はパンツかショーツと呼ぶ。

218 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 01:23:51 .net]
>>214
ウーロン知らないの?

219 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 02:10:39 .net]
最近は単語で会話するのが流行っているの?
例:
「お茶」→「俺は紅茶が飲みたい。お茶といえば緑茶じゃなくて紅茶でしょ。緑茶とかジジくさいし。」


220 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 02:30:26 .net]
>>214
類似定理に「キャロライン洋子を知っている人は1969年以前生まれ」がある。



221 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 03:07:49 .net]
ならばこれはどうだ

N = R_s * f_p * n_e * f_l * f_i * f_c * L
N:道路に落ちているブラジャーの数
R_s:ブラジャーの年間生産量
f_p:ブラジャーを使用する作業の割合
n_e:ブラジャーを屋外で使用する割合
f_l:ブラジャーが使用される作業の割合
f_i:ブラジャーを着脱する回数
f_c:ブラジャーの移動距離
L:道路上のブラジャーの寿命

222 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 03:16:53 .net]
やめてけーれ

223 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 03:50:10 .net]
>>217
72年生まれでびっくり日本新記録を見ていた私はなんですか?


224 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 12:01:06 .net]
びっくり日本新記録は1975年から1985年までやっていたようだから、
72年生まれなら13歳中一まで見れていたことになる。
特別なことはなにもないと思うが。

マッハGoGoGoとか鉄腕アトムの第一作目をリアルタイムに見ていたとかいうなら驚愕ものだが。

225 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 19:34:27 .net]
ここに1967年生まれの俺が居るわけだが

226 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 20:22:40 .net]
5年前の俺なら老害呼ばわりしたかもしれないが、
最近はむしろ尊敬するようになってきた。
なんつーか、歳を重ねるってのはそれだけで立派だよ。

対して俺はゆとりに「この昭和生まれが」と言われてショックを受けた

227 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 20:26:52 .net]
>>223
rougai

228 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:29:42 .net]
>>223


229 名前:そうは思わない

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

たしか60歳以上の老人たちは日本が持っているカネの55%を持っているんだよな。
そしてそのカネを何に使うかというアンケートによると、
がんばってきた自分へのご褒美に贅沢するために使うのだそうだ。
若者が苦しんでいるときにそんなことを許していいわけがないだろ。
老人を過剰に保護するのをやめても老人は困らないし、
財源確保のために老人たちから搾り取ればいいと思う。
[]
[ここ壊れてます]

230 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:37:01 .net]
あと、就業における年齢制限もやめるべきだと思う。
定年を設けている企業や官公庁が大半だと思うけど、それって年齢差別だよね。
60歳でもまだまだ働ける人がほとんどなのに定年で辞めさせるのはどうかと思う。
そうする代わりに、経営者に自由に解雇する権利を与えて、年功上列・終身雇用も撤廃して、
終身雇用に安住している無能なやつ(老害)をどんどん解雇していけばいいと思う。
無能な奴は一生平社員の単純労働でこき使えばいいよ。
長い間単純労働してるからといって才能の無い奴を無理に昇進させる必要もないと思う。



231 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:41:57 .net]
アホかw

232 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:42:48 .net]
>>223
歳を重ねるだけで得られるようなものなら誰でも手に入るから価値は無い。

233 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:45:57 .net]
>>226
解雇すればいいのに、こき使うの?

234 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:49:56 .net]
俺も高齢者は手厚く保護されすぎているように思う。
もっと若者と同じように扱えばいいのにね。
具体的にどこか体が故障している人を障害者認定して、
障害者として文化的な生活をおくるために補助をするなら分かるけど、
高齢者だからという理由だけで保護するのは過保護というものじゃないかな。

235 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:52:31 .net]
ML と関係ない話は他所でやれ

236 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:53:24 .net]
ジジババとかマジいらねえ
団塊世代は頭が鈍くて経験も役に立たないし物事を計画的にするのも下手だし散らかすのだけは一流で後片付けのことは微塵も考えないゴミなんだよなぁ

237 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:53:31 .net]
>>225
> がんばってきた自分へのご褒美に贅沢するために使うのだそうだ。

金が回るならいいことじゃないか

238 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:54:24 .net]
そう、そのウンコどもが苦手な分野こそが関数型言語

239 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:56:33 .net]
>>233
ところが、使った分が戻っていくのが世にも奇妙な現象

240 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 21:57:38 .net]
さっさとMLをブームにして金を使わせろ



241 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 22:02:41 .net]
>>236
ダメ、ジジババはコンピュータ音痴だから。

242 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 22:17:02 .net]
なにやら怨念めいたものを感じるな
南無阿弥陀仏

243 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 12:41:38 .net]
'M`L < 新言語できたよー

244 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 15:44:50 .net]
団塊世代は経済の成長期に楽しくお仕事して、下向きになったらつまらないから働くのやめるとか言い出す。
おいしいところだけ食べてトンズラとかマジきめえw
自分たちの責任を後世に押し付けて、自分は今まで楽しく稼いだお金で楽しく老後を過ごす予定なのか?
そんなことが許されるわけがない。
世の中みんなが辛いと思っているんだから自分だけ良い思いをしようとするなんて許されるわけがない。
団塊世代は身勝手だ。
搾取されるべきは団塊世代だ。
金があるんだから搾取してもかまわないだろ?

245 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 16:25:40 .net]
一番の癌は大企業にぶらさがってる労組だな
特にJALやJRや某新聞社の労組
それから日教組
こいつらが日本のまじめな生産者の利益を貪ってる

246 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 16:27:14 .net]
企業経営者が自由に社員をクビにできないのが問題。

247 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 16:47:17 .net]
正社員を簡単にクビに出来ないから
会社は正社員じゃなくて派遣を使いたがる
派遣ピンハネ業だけが儲かる

248 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 16:52:24 .net]
クビにできないのを良いことに労働組合を背景にやりたい放題やって楽して金だけもらって逃げた団塊世代

249 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 16:53:19 .net]
良いこと考えた
正社員を派遣すればいいんじゃん

250 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 18:11:29 .net]
マルチのコピペにいちいち釣られてんのか
コピペした奴が自分で反応してんのか
どっちにしてもアホだ



251 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 18:58:16 .net]
>>245
面倒だから経営も外注するか。

労組嫌ってるやつは公務員か?死ねよ

252 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 19:03:43 .net]
pc12.2ch.net/test/read.cgi/tech/1189246532/l50

253 名前:デフォルトの名無しさん [2009/12/06(日) 22:09:27 .net]
>>243
欧州のどこだかは、派遣使うとそれだけ割高になるような法律になってるとか
聞いたことある。


254 名前:デフォルトの名無しさん [2009/12/07(月) 00:49:50 .net]
>>245
プログラマの派遣なら、正社員の派遣が主流じゃないか?

>>249
法律なんか作らなくても、市場原理に任せておけば派遣のほうが高くなる。
レンタルとリースのどっちが割高かってこと。
むしろ、法律によって市場を歪めているのが諸悪の原因。

255 名前:デフォルトの名無しさん [2009/12/31(木) 15:29:23 .net]
>>250
どの法律のこと?


256 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 19:26:50 .net]
おい、押すなよ、、絶対だぞ」

257 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 21:53:25 .net]
ポチっとな

258 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 16:49:17 .net]
val () = print "あけおめ\n"

259 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 21:35:11 .net]
OCaml用のlibcurlバインディングらしい、ocurlを入れようとしたのですがエラーが出ます。
curl-helper.c
主に「dereferencing pointer to incomplete type」というエラーが大量に出ます。
どうすればいいのでしょうか。
./configやlibcurlのインストールなどは済ませています。
環境はMSYS + MinGW、Windows 7です。

260 名前:デフォルトの名無しさん [2010/01/08(金) 18:36:46 .net]
libcurl のバージョンは。




261 名前:デフォルトの名無しさん [2010/01/08(金) 18:43:34 .net]
バージョンはよいみたい。一度古いので苦労した記憶がある


262 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 03:51:07 .net]
libcurlはWindows版では最新の7.19.7を入れました。
MinGWは最新のものを入れています。
ところで、jocaml.inria.fr/caml.inria.fr/ が落ちているのですが。

263 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 04:31:29 .net]
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でやりました。


264 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 08:51:21 .net]
>>259
Cランタイムのシンボルを見つけられてない、ということで
>Cygwinでocamlc -c modwrap.cすると何故かアクセスが拒否されるので modwrap.cとmod.mlのコンパイルはMinGWでやりました。
が怪しい。
この部分MinGWとCygwinの互換性はあるの?Cygwin知らんけど、全部-mnocygwinならどうだろう。

265 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 09:28:15 .net]
>260
>この部分MinGWとCygwinの互換性はあるの?
エラーが出てるのは正に MinGW と Cygwin で互換性のなさそうな部分だね。

>259
>何故かアクセスが拒否される
modwrap.c を Windows ネイティブのアプリで編集していたりすると発生する場合もあるので
・Cygwin アプリで編集する
・mkpasswd とか使って /etc/passwd を見直してみる
・とりあえず chown / chmod してみる
・ACL 周りの設定を変えてみる(mount とか環境変数 CYGWIN とか)
あたりはどうだろ。

266 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 21:48:13 .net]
>>260
>>261
助言ありがとうございます。
レスを頼りにいろいろ試してみましたが、だめでした。
OcamlもCygwinも使ってまだ日が浅いので大事なところを見落としているのかもしれません。
今忙しいのであまり時間が取れないのですが、Cygwinで揃えてまたいろいろと試してみようと思います。
本当にありがとうございました。

267 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 21:54:14 .net]
Moscow ML 使ってみようと思ったら、もうずっと更新されてないんだね…

268 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 00:01:29 .net]
SchemeとMLは、心が洗われるわー

269 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 23:52:14 .net]
あー汚れてるんですね


270 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 10:15:16 .net]
はい



271 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 18:43:33 .net]
        

272 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 02:27:03 .net]
OCamlはCにembedできますか?

273 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 23:27:08 .net]
Milnerが亡くなったそうだね

274 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 23:32:10 .net]
lambda-the-ultimate.org/node/3863

ホントだ。ご冥福をお祈りします。
ML は勉強していて楽しかったです。

275 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 22:50:27 .net]
『プログラミングの基礎』 浅井健一著 を買ってポチポチ楽しく
やってるんですが、著者のサポートサイトに書いてあるように
やっても、未だに日本語の表示が出来ません。

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

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

助けてけろ〜

276 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 23:42:03 .net]
分からんけど、なんでLANG=en_USのISOなんとかなんだろ?ja_JP.eucJPとかじゃないのか

277 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 23:58:56 .net]
OCamlはoreilly本来ないね

278 名前:デフォルトの名無しさん mailto:sage [2010/04/11(日) 20:56:52 .net]
>>270
奥さん亡くなった三日後に心筋梗塞か。

279 名前:デフォルトの名無しさん mailto:sage [2010/04/11(日) 21:10:03 .net]
ご冥福をお祈りします。

280 名前:デフォルトの名無しさん mailto:sage [2010/04/12(月) 22:51:23 .net]
あの世で福??



281 名前:デフォルトの名無しさん [2010/04/21(水) 21:04:50 .net]
signatureのfunctorの使い方がよくわかりません。

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

signature CにAとBを適用したものをA(C), B(C)としたとき、
A(C)にB(C)を適用したstructureはどうしたら使えますか?

282 名前:277 mailto:sage [2010/04/21(水) 21:06:26 .net]
言い忘れました。OCamlの話です。

283 名前:277 mailto:sage [2010/04/21(水) 22:56:41 .net]
すみません、自己解決しました。

284 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 01:34:18 .net]
あれ?OCamlのfunctorってsignatureを受け取ったり返したり出来るの?
受け取るのも返すのstructureだけだと思ってた

285 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 01:38:21 .net]
ドキュメント読んでみたけど、
caml.inria.fr/pub/docs/manual-ocaml/manual019.html#toc67
やっぱりfunctorがsignatureを受け取れるようには見えないなぁ

286 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 12:26:40 .net]
質問していいですか。
'a * 'bの値を受け取り、型'aと'bが等しいか否かを判定する関数はo'camlで書けますか?

287 名前:デフォルトの名無しさん [2010/04/25(日) 22:33:07 .net]
>>283

288 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 22:54:26 .net]
>>284

289 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 00:03:13 .net]
>>282
何がしたいのか分からないけど
OCamlでは型情報は実行時には残っていないので
そういう型を扱うプログラムは一切かけないとおもう

290 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 21:09:56 .net]
OCamlってなんで最上位ビットをゴミ集め様に使っちゃうようにしたのかな。
なんか、これが凄くアダになってるように思えるのだが



291 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 20:51:34 .net]
Lisp系含めてわりと見かける仕様なんじゃ

292 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 20:07:48 .net]
$ sudo aptitude install ocaml
 …
以下の新規パッケージがインストールされます:
camlp4{a} ledit{a} libdrm2{a} libgl1-mesa-glx{a} libpthread-stubs0{a}
libpthread-stubs0-dev{a} libx11-dev{a} libxau-dev{a} libxaw7{a}
libxcb-xlib0-dev{a} libxcb1-dev{a} libxdmcp-dev{a} libxext-dev{a}
libxi-dev{a} libxmu6{a} libxpm4{a} libxtst6{a} libxv1{a} libxxf86dga1{a}
libxxf86vm1{a} ocaml ocaml-base{a} ocaml-base-nox{a} ocaml-interp{a}
ocaml-nox{a} tcl8.4{a} tk8.4{a} x11-utils{a} x11proto-core-dev{a}
x11proto-input-dev{a} x11proto-kb-dev{a} x11proto-xext-dev{a} xbitmaps{a}
xterm{a} xtrans-dev{a}
0 個のパッケージを更新、 35 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
29.4MB のアーカイブを取得する必要があります。 展開後に 97.0MB のディスク領域が新たに消費されます。

(#^ω^)ピキピキ

293 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 20:14:14 .net]
>>288
ocaml-nox

294 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 12:32:47 .net]
こそは自分でMakeだろJK

295 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:43:51 .net]
SML#は生きていた

296 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 01:19:01 .net]
音沙汰なくてちょっと諦めかけてたから新バージョンリリースめでたい

297 名前:デフォルトの名無しさん [2010/05/05(水) 04:16:18 .net]
OCamlの型で 'a. 'a list というのを見たんですけど、この「.」って何ですか?

298 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 07:24:38 .net]
「.」が何かと言われるとむずいな
「'a.」は「任意の型パラメータを'aとし、その'aついて...(for all)」の意味
例えば、
type 'a t = { e : 'a }
は'aを型パラメータに取るけど、
type 'a t = { e : 'a; p : 'b. 'b list }
とすると、任意の型'bをパラメータに持つ型をレコードの要素にできる
もちろん
type 'a t = { a : 'a; p : 'b list }
は'bがunboundだからエラー

299 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 15:33:12 .net]
>>294
ありがとうございます

300 名前:デフォルトの名無しさん [2010/05/15(土) 22:35:32 .net]
SMLにはレコード更新の機能がなく、日常的に苦労しているので、ネイティブコードが
はけるSML#のリリースは待ち遠しかった。
ただ、欲を言うと、レコード拡張も言語としてサポートして欲しかった。




301 名前:デフォルトの名無しさん mailto:sage [2010/05/16(日) 08:50:49 .net]
>SMLにはレコード更新の機能がなく、日常的に苦労している
すげえ、日常的にか。仕事に使ってるの?
>ただ、欲を言うと、レコード拡張も言語としてサポートして欲しかった。
レコード拡張って?

302 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 17:27:31 .net]
MLton って無限ストリーム使ったプログラムも最適化してくれるの?

303 名前:デフォルトの名無しさん [2010/05/18(火) 22:20:33 .net]
>>297
小規模な数値計算をしているだけで、すごいことはしていません。
Fortranで十分ですが、いくつかの部品を定義して、NJの対話環境
で評価することで、試行錯誤できて重宝してます。

レコードの拡張
連結と言うべきだった。
{a=1,b=2}#{c=3}
val it={a=1,b=2,c=3}
ができると嬉しい。

304 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 01:51:26 .net]
Vimのインデントファイルで
ocaml.vimやomlet.vimより
いいものありませんか?

305 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 21:02:03 .net]
MLで書くときはスタイルに悩むね。
inの前で改行すべきか?
連続するletはインデントすべきか?
などなど


306 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 23:36:50 .net]
スタイルは悩みますね。
今のところ連続するletもinの後も
インデントしないようにしています。

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

ユーザーの多そうなEmacsを使った方が
いいのかもしれません。ま、それを
言ったら関数型言語もHaskellということ
になるかもしれませんが…

307 名前:デフォルトの名無しさん [2010/06/04(金) 16:33:24 .net]
Ocamlで
let plus x y = x + y があるとき
xより先にyに代入する方法はあるますか?

308 名前:デフォルトの名無しさん [2010/06/04(金) 20:40:08 .net]
λ式を使えば良いのでは。
すでに、y = aの代入が決まっているときは、
(fun x -> plus x a)
まだのときは、
(fun y -> fun x -> plus x y)
を使う。
※SML使いなので、構文上の間違いはあるかもしれぬ。


309 名前:デフォルトの名無しさん [2010/06/04(金) 20:44:13 .net]
これも、一種のスタイル問題だが、
列挙型を定義するときに、
datatype X = X1 | X2 | X3 | ...
とするか
type X = int
val X1 = 1
val X2 = 2
...
とするかで悩んでしまう。最初は、vector (ランダムアクセス)を使わない
見込みだったのだが、必要になったときのことを心配してしまう。

310 名前:デフォルトの名無しさん [2010/06/04(金) 22:34:46 .net]
そういう心配をしなくていいくらいコンパイラの最適化は賢いから安心して代数データ型を使えという話をどこかで見た気がするのだがどこだか忘れてしまったな。



311 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 22:41:07 .net]
succ X1が欲しいという話だと思ったんだが。

……俺ならObj.magicしちゃうな

312 名前:デフォルトの名無しさん [2010/06/04(金) 22:44:58 .net]
d.hatena.ne.jp/sumii/20060918/1158537612
これだった。あんまり突っ込んだこと書かれてなかったな。でもこういう話じゃないの?

313 名前:デフォルトの名無しさん [2010/06/05(土) 18:55:54 .net]
>>304
ありがとうございます。

314 名前:デフォルトの名無しさん [2010/06/05(土) 23:46:13 .net]
>> 308, 307
ありがとうございます。そうです、O(1)で整数に変換できるかを心配していました。


315 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 00:10:32 .net]
O(1)での変換速度を気にしなきゃいけないくらい沢山定義するなら、
DEFINEマクロ使った方がいいんじゃないかなぁ。あ、OCamlの場合だけど。

(* compile with -pp "camlp4orf" *)
DEFINE A = 1
let _ = print_int A

316 名前:デフォルトの名無しさん [2010/06/14(月) 19:50:39 .net]
>> 311
Ocamlマクロ使えましたね。いいなぁ〜

317 名前:デフォルトの名無しさん [2010/06/14(月) 19:54:03 .net]
破壊的代入(参照型)の利用はひかえめに、とはいろんなガイド/教科書に書いて
あるけど、どの程度が許容範囲なんだろう。

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

fun series xs =
(fn s => map (fn i => i + !s before s := !s + i) xs) (ref 0)

fun series2 xs =
(rev o #2) (foldl (fn (i,(s,ys)) => (i+s,(i+s)::ys)) (0,nil) xs)

fun series3' s (i::is) = (i+s) :: series3' (i+s) is
| series3' s nil = nil;
val series3 = series3' 0

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



318 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 19:58:31 .net]
個人的にはこだわらずに破壊的代入もがんがん使えって思うけど、その前にmapの捜査順は前からって保証されてるのか?

319 名前:デフォルトの名無しさん [2010/06/14(月) 21:34:29 .net]
確かに、一般的には規格違反かもしれない。ちなみに
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を考慮して、そう書いているのか
は不明。

320 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 05:25:03 .net]
>>313
効率気にしないなら下のようにも.
fun series nil = nil
  | series (h::t) = h :: map (fn x => x + h) (series t)
効率を気にするなら,series3がいいと思った.
refを使うと現在の変数の状態を気にする必要があって大変.
series2はやってることはわかったけど,コードがなんとなく見づらい.



321 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 12:11:01 .net]
>現在の変数の状態を気にする必要があって大変
refが大変で、引数変数が大変でないと思う辺り、関数型言語プログラマだなあ。
俺はまだそこまでの境地には達してないや

322 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 18:09:00 .net]
「こんなこともあろうかと」いいながら、用意しておいたscanlを使うのが一番直感的。

323 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 20:47:50 .net]
なるほど scanl か
mapAccumL で満足しそうになっていた

324 名前:デフォルトの名無しさん [2010/06/17(木) 21:08:40 .net]
>> 316
ひさしぶりに何か美しいものを見た気がします。
>> 318,319
HaskellのData.Listにある関数ですね。GHCは入れてあるが、ほとんど使って
いないので、知らなかったのですが、いっぱい関数が用意されてますね。




325 名前:デフォルトの名無しさん [2010/06/18(金) 19:16:35 .net]
NJに付属するCMLって、multicore対応じゃないみたいですね。
(tar ballのToDoに書いてあった)
ノード内並列には使えない。残念。

326 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 19:31:43 .net]
SML なら Poly/ML がネイティブスレッドに対応してるよ

327 名前:デフォルトの名無しさん [2010/06/18(金) 20:52:49 .net]
>>322
ありがとうございます。
ここを www.polyml.org/Doc.html さらっと見てみましたが、
結構しっかりした実装のようですね。
これは、SML/NJからの移行を検討する価値がある。
他に、
- Windowsプログラミング
- FFIが簡単(のように見える)
が気に入った。

328 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 21:45:31 .net]
MLでGUIプログラミング、って時々やろうとするんだけど準備が面倒で挫折する。
lablgtk2とその依存ライブラリを標準で取り込んでくれ〜

329 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 19:42:48 .net]
ファンクターでモジュールを作ったときに実行される関数がほしいんだけど
OOのコンストラクタみたいなの

330 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 12:51:06 .net]
 V V
(´・ω・`) うさちゃんピース



331 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 15:03:08 .net]
長澤うさみ

332 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 01:03:21 .net]
>>325
module F (A : sig val x : int end) = struct
let _ = print_int A.x
end

このファンクターに適当なモジュールを適用してごらん

333 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 22:25:03 .net]
MLが関数型言語とか、最初に言い出したのは誰なのかしら

334 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/11(日) 11:47:27 .net]
 \                    /
   \  丶       i.   |      /     ./       /
    \  ヽ     i.   .|     /    /      /
      \  ヽ    i  |     /   /     /
   \
                                  -‐
  ー
 __          わ た し で す            --
     二          / ̄\           = 二
   ̄            | ^o^ |                 ̄
    -‐           \_/                ‐-

    /
            /               ヽ      \
    /                    丶     \
   /   /    /      |   i,      丶     \
 /    /    /       |    i,      丶     \ 

335 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 23:57:35 .net]
プログラミング言語ML
www.amazon.co.jp/dp/4756116418

J. D. Ullmanのこの本絶版になってたのか。
11年前に図書館で世話になったときは、面白かった。

336 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 17:34:51 .net]
3.12.0来たのか

337 名前:デフォルトの名無しさん mailto:sage [2010/08/14(土) 16:35:21 .net]
OCaml出たばっかりなのに人が少ないってどういうことなの

338 名前:デフォルトの名無しさん mailto:sage [2010/08/16(月) 01:05:07 .net]
平和ってすばらしい

339 名前:デフォルトの名無しさん mailto:sage [2010/08/16(月) 01:22:01 .net]
windows用の最新版は3.11.0ってことですか?公式のリンクが切れてるという。。

340 名前:デフォルトの名無しさん mailto:sage [2010/08/16(月) 12:57:13 .net]
自分でビルドすればいいし、URLの修正ぐらい自分でやればいいし



341 名前:デフォルトの名無しさん mailto:sage [2010/08/21(土) 23:26:49 .net]
windows 3.11.0

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はどこにあるんだ・・・


342 名前:デフォルトの名無しさん mailto:sage [2010/08/22(日) 01:37:10 .net]
いっこうにMacPortsにこねえ>3.12.0
なんか既存アプリ壊してるとかあるのかね

>>337
志村ー、"thread.ml"ー

343 名前:デフォルトの名無しさん mailto:sage [2010/08/22(日) 02:53:00 .net]
>>337
圧倒的感謝
悩んでた自分が馬鹿らしい つーか馬鹿だった

344 名前:デフォルトの名無しさん mailto:sage [2010/08/22(日) 02:54:15 .net]
ミス
>>338

345 名前:デフォルトの名無しさん mailto:sage [2010/08/23(月) 01:39:58 .net]
unitをどうやって代入させるかで数分悩んでしまった。

346 名前:デフォルトの名無しさん mailto:sage [2010/08/30(月) 15:11:49 .net]
可読なCに変換してくれるコンパイラはないのか


347 名前:デフォルトの名無しさん mailto:sage [2010/09/19(日) 08:18:17 .net]
これはOCamlの仕様書と思って良いのでしょうか?
ttp://caml.inria.fr/pub/docs/manual-ocaml/index.html

348 名前:デフォルトの名無しさん mailto:sage [2010/09/19(日) 22:05:30 .net]
仕様なんてない

349 名前:デフォルトの名無しさん [2010/09/21(火) 22:59:45 .net]
最近SML#が活発に更新されているようなので、0.56インストールしてみました。

集合演算を使ったプログラムを書こうとしているのですが、
CM周りの問題のせいか上手く動きません。

例えば、sml#では、

# structure SSet = RedBlackSetFn(struct type ord_key = string; val compare = String.compare end);
stdIn:1.18-1.94 Error: unbound functor: RedBlackSetFn

となります。smlだと、

- structure SSet = RedBlackSetFn(struct type ord_key = string; val compare = String.compare end);
[autoloading]
[library $SMLNJ-BASIS/basis.cm is stable]
[library $SMLNJ-LIB/Util/smlnj-lib.cm is stable]
[autoloading done]
structure SSet : ORD_SET?

と上手く動いています。

どのあたりを調べれば良いかのポインタだけでも構いませんので、
解決方法ご存知の方、教えていただけますでしょうか。

350 名前:デフォルトの名無しさん mailto:sage [2010/09/21(火) 23:10:05 .net]
SML#ってMSの.Net系言語だと思って無視してたんだけど、
全然関係無しなんだね。まぎらわしすぎw

解決方法でないレスでゴメソ >>345



351 名前:デフォルトの名無しさん mailto:sage [2010/09/22(水) 02:13:02 .net]
>>345
SML/NJだと自動でライブラリを読み込むようだが,SML#ではそうでないみたいね.
ソースの smlsharp-0.56/smlnj-lib/Util/redblack-set-fn.sml
にRedBlackSetFnが入ってるから,必要なファイル込みでuseすればいいんじゃないかな.

352 名前:345 mailto:sage [2010/09/22(水) 21:06:32 .net]
>>347
$prefix/lib/smlsharp/smlnj-lib/Util 以下に各set用のfunctorが
あったので、こちらをuseしてみたところ、
上手く動くようになりました。
ありがとうございます。

sml#ではCM上手く動かないのはやっぱり嫌だなぁ。
なんとかならないものか…

353 名前:デフォルトの名無しさん mailto:sage [2010/09/26(日) 18:45:17 .net]
初歩の初歩ですいません、symbolic nameって何?

ML for the working programmerを読み始めて早速引っ掛かってしまいました。

354 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 01:50:38 .net]
alphabeticでない名前

355 名前:デフォルトの名無しさん mailto:sage [2010/10/16(土) 00:36:53 .net]
Jane StreetのCoreってOCaml 3.12に対応してる?
コンパイルに失敗する

356 名前:デフォルトの名無しさん mailto:sage [2010/10/24(日) 18:34:30 .net]
エディタの桁数はいくつに設定していますか?

357 名前:デフォルトの名無しさん mailto:sage [2010/11/10(水) 00:02:31 .net]
遅レスだけど、桁数は80でインデントは4。

:se nu ai sw=4 ts=4

358 名前:デフォルトの名無しさん mailto:sage [2010/11/10(水) 23:06:49 .net]
私も桁は80(インデントは2)。
でも無名関数を多用すると桁が足りなくなるので
増やすべきか悩む。横長モニタ買いたくなる。


359 名前:デフォルトの名無しさん [2010/11/11(木) 21:11:38 .net]
通常は80に設定しているが、MLを編集するときは、120に増す。
とはいえ、100を超えると読みにくくなるので、適当に折り返すことにしている。
ただ、このコーディングルールに従えばOK、というようなのがないので、
毎回困っている。

360 名前:デフォルトの名無しさん [2010/11/11(木) 21:19:26 .net]
>>305 解決策(SML/NJの場合の)が見つかった。
data label = A | B | C
Unsafe.cast A: int;
Unsafe.cast B: int;
Unsafe.cast C: int;
とすると、それぞれ0,1,2になる。




361 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 21:49:53 .net]
>>356
MLは初心者だけど、>>305は(コードの問題ではなく)設計の問題だと思う。

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

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

いくらMLが美しい言語でも、設計が汚ければコードはグチャグチャになるよ。
逆に、設計が適切であれば手続き型言語であっても美しいコードは書ける。

362 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 21:54:05 .net]
そんな大仰な話でもないだろ。
Pascal、Modula系からMLやら(その他EiffelやらOberonやら)への流れで、
なぜか列挙型を配列のインデックスに使う機能が捨てられた悲しいね、ってだけの話だ。

363 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 22:25:29 .net]
だから「なぜ列挙型を配列のインデックスに使う機能が捨てられたのか?」と

364 名前:いう
疑問の答えを考えなさい、と言ってる。

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

こういった考え方(設計技術)無しに、力任せのコーディングテク(技法)で解決しようとするのでは、
(特にMLのような明瞭な型体系を持つ)関数型言語の利点は、全く生きないよ。
型をわずらわしく感じるうちは、いつまでたってもIT土方のままだ。(型定義 = 設計なのに....。)
結果的に「関数型言語を使っても美しい(高品質な)コードは書けなかった。チクショウ騙された。」
という誤解が生まれる。
[]
[ここ壊れてます]

365 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 22:25:48 .net]
>>357
305が既にコーディング工程まで来ているという根拠は?

366 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 22:29:03 .net]
>>359とか自分で読み返して恥ずかしくないのか?
列挙型がインデックスの配列なんて、単にmapの効率的な表現でしかないだろ……。

367 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 22:33:39 .net]
あと「なぜ列挙型を配列のインデックスに使う機能が捨てられたのか?」は
単純に(非常に残念ながら)固定長配列型が採用されなかったからだろうね。
全部可変長配列ならインデックスに演算不可能な型を使えてもしょうがないから。

368 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 22:39:12 .net]
>>357
根拠は、>>305が使った「スタイル」と言う言葉。

>>361
>単にmapの効率的な表現でしかないだろ……。
その通り。より正確には「写像の効率的な実装(コード化)」だね。
>>357で書いたのは、実装(コード化)で解決しようとせずに設計に立ち返りなさい、という話。

369 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 22:44:09 .net]
正直「いちいちmap作るの効率悪い&めんどくさいからちゃっちゃとUnsafe.castしてしまえ」ってだけの話なのに
設計どうこうの話で絡む理由がわからんな。
それこそ言語機能の問題でしか無いんだから、実装の詳細もいいとこだろうに。

370 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 22:52:14 .net]
そうだね。プログラミング言語なんて道具にすぎないんだから、本人がどう使おうが自由だし。
下流工程で延々とモガき続ける、いわゆる土方から抜け出せるよう助言したつもりだったが、
余計なお世話だったかもしれない。これで落ちるよ。



371 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 22:57:51 .net]
だから、その本人が今現在下流工程にいるという根拠はなんなの?

372 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 22:59:31 .net]
大体設計としてはインデックス値集合からのmap確定で、見直す要素なんて全く無いだろ。
余計なお世話どころか、勘違い甚だしすぎる。

SML使う土方現場なんて日本にあったら俺が行きてーよw

373 名前:365 mailto:sage [2010/11/11(木) 23:14:44 .net]
落ちたつもりだったけど、自分のカキコにアンカ間違いがあったから、そこだけ訂正。

>>366
スマン。>>363

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

という部分の>>357というアンカは間違いだった。>>360宛のレスとして読み直してくれ。

374 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 23:22:16 .net]
今ひどい泥縄を見た。

375 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 23:27:02 .net]
こんなに人いたんだな

376 名前:デフォルトの名無しさん [2010/11/12(金) 00:43:43 .net]
305&356です。
私はただの数値計算屋なので、このような助言はありがたい。
型の設定は大切にしています。ただ、研究用のプログラムなの
で、予想外の変更が生じるし、過剰に一般的に作ると使いにくく
なるので、なかなか難しいところです。

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

なおUnsafe.castは前にOcamlにはmagicがあるという話が出たの
で、備忘録的に書いただけです。    

377 名前:デフォルトの名無しさん [2010/11/13(土) 19:02:17 .net]
SML# 0.60 は大堀先生からアナウンス


378 名前:デフォルトの名無しさん mailto:sage [2010/11/13(土) 21:11:23 .net]
いらねー

379 名前:デフォルトの名無しさん mailto:sage [2010/11/16(火) 01:51:58 .net]
ML が研究されているという情報。
それも国内で。
結構なことじゃないの。


380 名前:デフォルトの名無しさん [2010/11/17(水) 03:57:12 .net]
ようやくMPIを使っての並列起動に成功した……。Intel MPIの32bit版
が使えることのに気付くのにも時間が掛かったが、まさか、.cm/への
書きこみで競合が起こるとは想像だにできなかった。



381 名前:デフォルトの名無しさん mailto:sage [2010/12/07(火) 20:39:56 .net]
なにこれ?
From: Julian Assange <proff@i...>
Subject: call for ocaml volunteers

caml.inria.fr/pub/ml-archives/caml-list/2000/08/6b8b195b3a25876e0789fe3db770db9f.en.html


382 名前:デフォルトの名無しさん [2010/12/17(金) 00:13:19 .net]
windowsでグラフィックスを扱うライブラリ
としてsml_tkがあるようだが、Posixストラクチャ
とか使っててコンパイルできない。

383 名前:デフォルトの名無しさん mailto:sage [2011/02/11(金) 13:52:35 .net]
standard MLとかって、もう終わった言語なの?

384 名前:デフォルトの名無しさん [2011/02/16(水) 22:27:36 .net]
NJのバージョンはときどき上がっているようだが、64bit版の開発が着手される
気配はないねぇ。

385 名前:デフォルトの名無しさん mailto:sage [2011/02/17(木) 00:06:39 .net]
Objective SML とかあればなあ・・・

386 名前:デフォルトの名無しさん mailto:sage [2011/02/17(木) 00:16:06 .net]
ええ。
ocamlのobject的な機能って使ってる人いるのかね?

387 名前:デフォルトの名無しさん mailto:sage [2011/02/17(木) 00:31:11 .net]
Ocaml みたいな奴だったらイラン

388 名前:デフォルトの名無しさん mailto:sage [2011/02/27(日) 19:00:35.30 .net]
なんでCoqのスレとかないの?

389 名前:デフォルトの名無しさん mailto:sage [2011/02/28(月) 06:23:51.79 .net]
>>384
あなたやその他の人が誰も立てないから。

390 名前:デフォルトの名無しさん mailto:sage [2011/03/02(水) 23:24:04.60 .net]
>> 383
先日のRuby会議でCoqの話題が多かったようです。
ttp://partake.in/events/47ccda3b-82d2-4f89-aa83-395a26545b62



391 名前:デフォルトの名無しさん mailto:sage [2011/03/03(木) 07:11:19.47 .net]
またITプランニングのやつらか!

392 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 15:27:53.72 .net]
「最近、関数型言語が流行ってんだってね?」
私にそう言ったのは、大法螺吹きの異名で名高い営業マン。
もちろん、彼はプログラミングのことは全然知らない。
たぶん関数型言語のこともどっかのポルノ雑誌ででも読んだのだろう。やれやれだ。
「岡村ってのが新しいらしいね。」
なんだよ、その岡村って…。もしかして日本人の開発した関数型言語か?岡村って誰だよ。
「やねさんなら、当然、岡村、使ったことあるよね?」
使ったことあるどころか、名前すら知らんよ。なんだよ、岡村って…。
「あれー?やねさんともあろう御人が、岡村も知らないとは…」
いや、マジで知らんよ。なんなんだよ、それ。
「そうかー。知らないのかー。やねさんでも知らないのかー。」
そう言われて「なんだかなぁ」と思いながら帰ってきて、「関数型言語 岡村」でググって見たけど、そんなの出てこねーよ。
「なんだよ、また、いつもの大法螺かよ!」と思って、布団に入って寝てたら、深夜の三時に、「もしかして、岡村ってOCamlのことじゃね?」と夢のなかで気づいて、いま悔しくて壁を思いっきりグーパンチで殴ってるところ。

393 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 19:43:34.45 .net]
おいおい、岡村!アラン、見ランダ?
Yacc束してたのに、Matlab。

あだー。アラン、隙間フェチ、すから。
見つけるのは一苦労じゃろーね。Sque無い
嗚呼、くっ。一

394 名前:盾ノエイダみる予定だったのに・・
遅coqしたら理彩のレイジがMaximaになる
メーリングリストで蓮家等に聞いてミルか
Amigaとう。んじゃ,またAgda!
Orc、またAgdaな
[]
[ここ壊れてます]

395 名前:デフォルトの名無しさん mailto:sage [2011/03/11(金) 21:16:39.93 .net]
おつかれ〜

396 名前:デフォルトの名無しさん mailto:sage [2011/03/13(日) 21:05:50.23 .net]
たててやったぞ

Coqスレ
hibari.2ch.net/test/read.cgi/tech/1300017923/


397 名前:デフォルトの名無しさん mailto:sage [2011/04/02(土) 19:12:41.89 .net]
>>388
ワロタwww

398 名前:デフォルトの名無しさん [2011/04/04(月) 00:00:15.57 .net]
NJのUnsafe.castのあまり意味のない使い道
(fn x => x (Unsafe.cast x)) (fn x => (Unsafe.cast x))


399 名前:デフォルトの名無しさん mailto:sage [2011/04/04(月) 00:35:09.27 .net]
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)));;

400 名前:デフォルトの名無しさん [2011/04/05(火) 21:49:01.21 .net]
>>392
OCamlならこんなかんじ?
(fun x -> x (Obj.magic x))(fun x -> x (Obj.magic x));;



401 名前:デフォルトの名無しさん mailto:sage [2011/04/14(木) 09:44:35.08 .net]
OCamlに興味が湧いてとりあえず五十嵐某の書籍買ってみた。
で、技術書買って真っ先にやることと言えば正誤チェック。

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

残念だがゴミ箱へ

402 名前:デフォルトの名無しさん mailto:sage [2011/04/14(木) 21:22:48.50 .net]
>>395
そんなにひどいの?

403 名前:デフォルトの名無しさん mailto:sage [2011/04/15(金) 00:44:37.03 .net]
>>395
うん?
自分にとっては、haskellの学習に大きく寄与したぞ?

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

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

今なら言える

手続き型言語は全体的に(それをするには)「どうする」で作り、関数型言語は、全体的に(それは)「何か(あるいは、どんなものか)」で作る言語だと


404 名前:デフォルトの名無しさん mailto:sage [2011/04/16(土) 12:37:58.03 .net]
>>395
俺も最近買ってしまって読んでるんだが、誤植の場所を教えてくれ。
素人でもわかるものなのか?

405 名前:デフォルトの名無しさん mailto:sage [2011/04/16(土) 12:57:42.57 .net]
あれってネット上で読めなかったか

406 名前:デフォルトの名無しさん mailto:sage [2011/04/16(土) 13:50:43.61 .net]
>>395
> 誤謬の嵐だぜこりゃw
>>398
> 俺も最近買ってしまって読んでるんだが、誤植の場所を教えてくれ。

「誤謬」のある本と「誤植」のある本の違いは大きい。
本当はどっち?


407 名前:398 mailto:sage [2011/04/16(土) 17:02:39.70 .net]
>>400
すまん。ちゃんと見てなかった。誤植じゃなくて誤謬か。
で、どこなんだろう。

408 名前:デフォルトの名無しさん mailto:sage [2011/04/17(日) 20:32:04.80 .net]
>>401
両方。誤植も誤謬もある。

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





409 名前:デフォルトの名無しさん mailto:sage [2011/04/17(日) 21:40:45.30 .net]
>>402
そのページ印刷して本に挟んどけよ

410 名前:デフォルトの名無しさん mailto:sage [2011/04/17(日) 22:50:12.49 .net]
間違いは無いに越したことはないけれど、
これぐらいの量の間違いは大したことないと思う。



411 名前:デフォルトの名無しさん mailto:sage [2011/04/17(日) 22:51:29.38 .net]
十分大した事あるな

412 名前:デフォルトの名無しさん mailto:sage [2011/04/18(月) 00:31:01.42 .net]
技術書読んだことあんのか?

413 名前:デフォルトの名無しさん mailto:sage [2011/04/18(月) 08:22:14.27 .net]
技術書は静的型付けじゃないからな

414 名前:デフォルトの名無しさん mailto:sage [2011/04/18(月) 11:08:36.97 .net]
コーダとベリファイヤの性能が低い

415 名前:デフォルトの名無しさん mailto:sage [2011/04/20(水) 18:55:51.89 .net]
> 自分は、この人にhaskell版を書いて欲しいぞ

アマゾンで下のレビュー書いた人かいw

416 名前:デフォルトの名無しさん [2011/04/20(水) 20:57:40.94 .net]
ちょっと困っていることがあるので、助けてください。

ヨウ素がリストの参照になっているようなベクトルを用意して、各要素に
データを追記していくような処理

417 名前:をさせると(具体的には、複数の時系列を記録
したファイルがあって、これを時間順に読む)、追記回数の自乗のオーダの
処理時間が掛る。リストの先頭に追加しているだけなので、線形時間でやって
ほしい。


[]
[ここ壊れてます]

418 名前:デフォルトの名無しさん [2011/04/20(水) 20:58:06.52 .net]
(* コード例)
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


419 名前:デフォルトの名無しさん mailto:sage [2011/04/20(水) 21:15:18.30 .net]
ヨウ素とかベクレルの話かとオモタ

420 名前:sage [2011/04/20(水) 21:46:08.88 .net]
辞書(と見逃した自分も)がそっち方向に過学習してしまったらしい。すまん。



421 名前:デフォルトの名無しさん mailto:sage [2011/04/21(木) 00:19:44.70 .net]
自分の環境ではサンプルプログラムの実行に二乗オーダは見られなかった。
bigVの大きさを一桁下げると速度がぐっと変わるし、GCとかのせいな気がする。

422 名前:デフォルトの名無しさん mailto:sage [2011/04/26(火) 20:50:17.84 .net]
SMLの勉強していて思ったけど、最初に学ぶ言語として関数型言語はやはり難しいかも知れない。
C言語だとHello Worldから始まって、リスト処理は構造体とポインタの応用問題という位置づけだった。
SMLはいきなりリストと再帰の話から始まるw

BASICは、LISPよりも後から開発されて、しかも同じダートマス大学発祥だけど、
リスト処理が実装されていないのもそれなりの理由があったのかなと思う。

423 名前:デフォルトの名無しさん mailto:sage [2011/04/26(火) 21:56:29.55 .net]
奥さん、そこで Factorですよ。

424 名前:デフォルトの名無しさん mailto:sage [2011/04/26(火) 22:12:07.58 .net]
>>415
> BASICは、LISPよりも後から開発されて、しかも同じダートマス大学発祥だけど、
> リスト処理が実装されていないのもそれなりの理由があったのかなと思う。

LISPとBASICじゃ作られた目的が全然違う
それに当時の計算機の性能ではリスト処理は時間的にもメモリ的にも大変重い処理だった
今の感覚や価値観は60年代の計算機や言語・ソフトの評価や判断には全く通用しない


425 名前:デフォルトの名無しさん mailto:sage [2011/04/27(水) 00:17:49.66 .net]
最初は易しい言語で、ってことが重要に思えるところ、
その信念に基づいた妄想を長々と書きこむところ、
これはその人の性質をよく表していると思う。
こういうひとのためにも緩い言語は必要。
ML系はそういうのとは全然違う。

426 名前:デフォルトの名無しさん [2011/04/27(水) 14:00:52.81 .net]
>> 415
ポインタ+構造体+慎重な操作を免除して、いきなりリストが使えるのが
売りだと思うのだけれど。

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



427 名前:デフォルトの名無しさん mailto:sage [2011/05/18(水) 01:03:29.10 .net]
眉間のτとλ皺が特徴。
                            やつを追う前に言っておくッ!
                    おれは今やつのStateTをほんのちょっぴりだが体験した
                  い…いや…体験したというよりはまったく理解を超えていたのだが……
         ,. -‐'''''""¨¨¨ヽ
         (.___,,,... -ァァフ|          あ…ありのまま 今 起こった事を話すぜ!
          |i i|    }! }} //|
         |l、{   j} /,,ィ//|       『おれは奴の前で階層を lift していたと
        i|:!ヾ、_ノ/ u {:}//ヘ        思ったらいつのまにか lift が消えていた』
        |リ u' τ ,ノ _,!V,ハ |
       /´fト、_{λ{,ィ'eラ , タ人        な… 何を言ってるのか わからねーと思うが
     /'   ヾ|宀| {´,)⌒`/ |<ヽトiゝ        おれも何をされたのかわからなかった…
    ,゙  / )ヽ iLレ  u' | | ヾlトハ〉
     |/_/  ハ !ニ⊇ '/:}  ∀:::ヽ        頭がどうにかなりそうだった…
    // 二二二7'T'' /u' __ /:::::::/`ヽ
   /'´r -―一ァ‐゙T´ '"´ /::::/-‐  \    キャストだとかサブタイピングだとか
   / //   广¨´  /'   /:::::/´ ̄`ヽ ⌒ヽ    そんなチャチなもんじゃあ 断じてねえ
  ノ ' /  ノ:::::`ー-、___/::::://       ヽ  }
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::...       イ  もっと恐ろしいものの片鱗を味わったぜ…

428 名前:デフォルトの名無しさん mailto:sage [2011/06/08(水) 22:38:54.29 .net]
保守

429 名前:デフォルトの名無しさん [2011/06/20(月) 02:35:53.95 .net]
Ocamlとか関数型言語とか難しいことはよくわからないが
ターミナルでTwitterクライアントが動くらしいので
Ocamltterに手を出してみる。
そういえば親父がLISP好きだったのを思い出す。

430 名前:デフォルトの名無しさん mailto:sage [2011/06/20(月) 02:43:18.06 .net]
フランス人と日本人って意外に共通点があるよな



431 名前:デフォルトの名無しさん mailto:sage [2011/06/20(月) 02:48:34.90 .net]
皇女様をギロチンにかけたりな

432 名前:デフォルトの名無しさん [2011/06/20(月) 07:42:00.20 .net]
OcamltterあきらめてOcaml入門やってるんだが再起呼び出しとかちょっと難しいな。
for文と違う。

数学者にやらせると面白いことになりそうな謎のワクワク感を感じる言語ではある。

433 名前:デフォルトの名無しさん mailto:sage [2011/06/30(木) 22:40:46.75 .net]
みんな Haskell に移行してしまったんかいなぁ

434 名前:天使 ◆uL5esZLBSE mailto:sage [2011/07/05(火) 04:45:54.85 .net]
2011年、Ruby,Perl,PHP,Pythonって並べたときにさ
ここで、Ruby以外を選ぶ奴ってマジでなんなんだろうな


ゴミの分際でw

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

>>415
手続き脳から見れば当然難しいけど、数学の漸化式を知ってれば再帰は
馴染みやすいし問題ないよ。難しくしてるのは頭の中で無理やり手続き型
に想定して理解しようとする癖があるからだよ。手続き型に染まった連中が
苦労するのはその悪癖が抜けないから。
リストとか関数の取り扱い(Cでいうと関数ポインタだな。)は手続きにとって
みれば高嶺の花だけど、そこが一番簡単にさせている要因なんだよね。
手続きに染まった人ってただ頭が硬直しただけなんだよ。

436 名前:デフォルトの名無しさん mailto:sage [2011/07/05(火) 11:40:45.99 .net]
ファーストクラスの関数を、関数ポインタのようなもの、とかいうのは、
誤解を招くだけでないかな。

437 名前:デフォルトの名無しさん mailto:sage [2011/07/05(火) 12:09:28.96 .net]
>>429
じゃあどう簡潔に言えばいいか示してくれ。それだけでいいよ。

438 名前:デフォルトの名無しさん mailto:sage [2011/07/05(火) 12:14:26.97 .net]
「ファーストクラスの関数」

439 名前:デフォルトの名無しさん mailto:sage [2011/07/05(火) 12:20:26.45 .net]
>>431
手続き脳の人相手に話をする場合、それで通じれば問題がないけど
彼らの試行の中で比較的近いものを取り上げて説明しようとしないと
たぶん、言葉が通じないと思うよ。CS専攻の連中相手に話をするならば
それで問題はないよ。もし知らなければ不勉強だってことだからさ。

440 名前:デフォルトの名無しさん [2011/07/05(火) 19:57:30.54 .net]
環境をキャプチャした関数ポインタのようなもの?



441 名前:デフォルトの名無しさん mailto:sage [2011/07/05(火) 20:12:36.48 .net]
それはもうポインタでも何でもねぇw

クロージャは、下手にCの概念で説明するよりは、定義をしっかり伝えたほうが、
相手に伝わりやすい代表例じゃないかな。モナドとか継続とかと一緒で。

442 名前:デフォルトの名無しさん mailto:sage [2011/07/05(火) 20:37:31.44 .net]
一応Cでもgcc拡張ならクロージャはある
C++ユーザならC++用語で言うファンクタ(関数オブジェクト)を結構使うはずなので、
ただの関数ポインタとの違いはわかっていると思う
クロージャが近いのは勿論ファンクタのほうだけど、C++のようにいちいち
classやstructでそれを記述する必要がない
もっともC++のそれがあまりに面倒くさかったので、C++でも0xでついにlambdaが
導入されたわけだけど

443 名前:デフォルトの名無しさん mailto:sage [2011/07/07(木) 11:04:09.84 .net]
他のスレでやれ

444 名前:デフォルトの名無しさん mailto:sage [2011/07/07(木) 13:02:54.88 .net]
>>427
誤爆?

445 名前:デフォルトの名無しさん [2011/07/09(土) 19:06:45.30 .net]
>>435
>一応Cでもgcc拡張ならクロージャはある

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

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

C なら Blocks を使う方が良さそう。

446 名前:デフォルトの名無しさん [2011/07/12(火) 19:45:27.51 .net]
>>438
そこを読むとinner functionのアドレスを取れると書いてあるけど、
upward funarg problemを解決しているわけではないの?


447 名前:デフォルトの名無しさん mailto:sage [2011/07/12(火) 20:32:45.49 .net]
>>439
環境を保存しておいてくれる訳じゃないからね

448 名前:デフォルトの名無しさん [2011/07/12(火) 22:06:56.99 .net]
>>440 なるほど。危険ではあるが役に立つかも知れないから機能は提供する
ということか。

449 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 19:06:44.85 .net]
OCamlにしようか、それともHaskellにしようか迷ってます。
こういう用途ならこっちのほうがいいとか、なんかアドバイスお願いします。

450 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 19:45:47.15 .net]
>>442
では、用途を教えてくだしあ



451 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 20:08:56.47 .net]
>>443
こーいうやつはプログラミングの勉強自体が目的だろ。

452 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 20:16:25.35 .net]
>>444
プログラミングの勉強自体が目的ならhaskell一択


453 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 20:42:08.59 .net]
>>444
はい、その通りです。
PHPとJavaとJavaScriptはある程度書けますが、関数型言語をなにかひとつみにつけようと思います。

>>445
よろしければ理由を教えてください。
ぐぐった感じでは、haskellはモナドというのが難しくて多くの人が挫折しているようので、OCamlに傾いてます。

454 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 20:52:58.37 .net]
>>446
勉強ってことだし、関数な考え方を得ようってなら純粋なHaskellの方を推奨

455 名前:デフォルトの名無しさん [2011/07/30(土) 20:54:22.93 .net]
勉強自体が目的ならなんで両方やらないのっていう

456 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 20:56:02.64 .net]
あと入門用に、英語読めるなら、比較的平易な英文で書いてある

learnyouahaskell.com/

を挙げておきます。下の方にあるonlineを選ぶと、売っているものに近い内容が読めますよ。

457 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 21:05:00.48 .net]
OCamlの入門書が1冊、Haskellの入門書が数冊出てるからどれか1つ、
とりあえず借りるか買うかして、それぞれ第1章ぐらいやってみなさい。

458 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 21:05:33.97 .net]
>>446
関数型言語の特徴が余す事なく取り入れられてる
モナドは使う分には難しくない
使う分にはシンプル イズ ベストな書き方がやり易い言語

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

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

速いコード吐けるけど、昨今の関数型言語の特徴取り入れた手続き型言語が多い時代に勉強する意味は薄い


459 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 21:07:10.73 .net]
手続きばっかだっし、古典のschemeでいいんじゃねーの?

460 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 21:10:08.69 .net]
Lisp族はLisp族で悪くないけど、関数型プログラミングを今時勉強するならその選択はない。



461 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 21:16:22.99 .net]
>>452
カリー分と遅延評価がデフォルトで付いてない
自分で同じ事を再現とかは出来るけど、それじゃ関数型言語の学習とは違う


462 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 21:20:58.25 .net]
>>449
haskellスレで翻訳中って聞いたぞ
あと、kindleでサンプル読んだ限りじゃプログラミングhaskellの内容を砕けた言葉とイラストで書いてるだけに見える
内容的にはすでに翻訳されてるプログラミングhaskellで十分


463 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 21:28:52.08 .net]
みなさん、ありがとうございます。
OCamlスレなのにHaskell勧める人ばかりなので、OCamlに未練はあるけど、思い切ってHaskellやってみようと思います。

464 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 21:34:22.91 .net]
>>456
いや。。。
haskellもMLの子孫なんだが。。。


465 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 21:36:14.27 .net]
>>456
俺はHaskell→OCamlと来た。
どっち先でもいいし、両方やればいいんじゃないだろうか。
片方しかやっちゃいけない決まりはないんだし。
面白いことは何でもやるべきだよ。
ミニ四駆だって、マグナムセイバーを買う傍ら、ソニックセイバーも買っただろ。それと同じ。

466 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 22:15:41.84 .net]
そんなことはどうでもいい。OCamlのサイトが404だ。
caml.inria.fr/ocaml

467 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 23:17:43.26 .net]
げ、ほんとだ

468 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 23:23:32.07 .net]
すごいタイミング
>>456にはOCamlと縁が無かったんだな。。。


469 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 23:29:26.27 .net]
ついにオワコンか

470 名前:デフォルトの名無しさん mailto:sage [2011/07/30(土) 23:50:18.39 .net]
OCamlがOCamlとして生まれ変わった際のゴタゴタだそうだよ



471 名前:デフォルトの名無しさん mailto:sage [2011/07/31(日) 21:38:50.21 .net]
twitter.com/#!/camlspotter/status/97519093602717696
>描いたのは俺!
>RT @y_echo
>RT @kinaba: なにがあったのwww
>RT @kikx これは変わりすぎだろ!
>RT @yoshihiro503 ちょ、 OCaml のサイトが激しくイメチェンしてる caml.inria.fr

472 名前:デフォルトの名無しさん mailto:sage [2011/08/01(月) 08:56:35.19 .net]
OCamlってもう手に入らないん?

473 名前:デフォルトの名無しさん mailto:sage [2011/08/01(月) 10:15:28.29 .net]
>>465
twitter.com/#!/camlspotter/status/97683309177475073
>一つだけ皆さんに言っておきます。毎年この時期には OCaml には何かが起きます。
>それはリア充関係者がバカンスに行ってしまって連絡が取れなくなるからです。
> RT @ytomino ocamlがついに滅んだと聞いて(遅い
twitter.com/#!/camlspotter/status/97685810127716353
>てか週末にサーバ不調になったら48時間止まるのあたりまえやろ?人間として。
twitter.com/#!/camlspotter/status/97686190618181632
>と haskell.org が落ちたときには wktk してた人が言っても説得力ありませんな

とりあえずフランスの月曜日昼(日本時間21時ごろ)まで待ちましょう。
それまでに復旧しなければ長期化確定ですね。

474 名前:デフォルトの名無しさん mailto:sage [2011/08/01(月) 10:34:00.78 .net]
proofcafe.co.cc/ocaml/

475 名前:デフォルトの名無しさん [2011/08/01(月) 22:02:08.55 .net]
>>466
直らんね。もうしばらく待つか。

476 名前:デフォルトの名無しさん mailto:sage [2011/08/01(月) 22:10:14.76 .net]
復活したね

477 名前:デフォルトの名無しさん mailto:sage [2011/08/02(火) 18:02:01.87 .net]
Lisp族はいいぞ。でもclojureを触っているとhaskellの影響がかなり大きい。

ocamlも触ってみたいけど、いまHaskell勉強中なんだ。たぶん、来年くらいには
やれればな。HaskellってLispと同じでプログラム作成までの抽象化も含めた
戦略を練るのに時間がかかる言語って感じがしました。Ocamlも同じなんだろうね。


478 名前:デフォルトの名無しさん mailto:sage [2011/08/02(火) 20:08:11.41 .net]
haskellはデータ構造を作るプログラミングになるって、山本和彦さんが言ってた

479 名前:デフォルトの名無しさん mailto:sage [2011/08/02(火) 20:23:02.98 .net]
>>470
Haskell影響は並列周りでしょ。
そもそもSTMはHaskell由来じゃないし。
他はもろLisp直系じゃん。

480 名前:デフォルトの名無しさん mailto:sage [2011/08/02(火) 21:58:52.67 .net]
>>472
見た目だけで話してるでしょ?
実際に触ってみればわかるけど、無限ストリーム近辺の関数はHaskellと
かなり近いよ。takeとかその辺のことね。common lispでも自作する方法は
あってもこの手の物は標準でないしね。
だから、リストの取り扱いってがhaskellに近くなってる。
>>471
なるほど



481 名前:デフォルトの名無しさん mailto:sage [2011/08/02(火) 23:33:03.74 .net]
takeはHaskell以前からある。

482 名前:デフォルトの名無しさん mailto:sage [2011/08/03(水) 02:04:20.65 .net]
>>472
> そもそもSTMはHaskell由来じゃないし。

でも中興の祖はHaskellの人(Tim Harris)じゃないっけ?

483 名前:デフォルトの名無しさん mailto:sage [2011/08/03(水) 02:21:43.19 .net]
それはそう。Monadの経験が役に立った。

484 名前:デフォルトの名無しさん mailto:sage [2011/08/03(水) 09:37:38.27 .net]
>>474
ミランダとかなの?よくしらないけど(wikiでちょっと見たけど、
haskellの親玉っぽかった。)
それはともかく、Clojureが関数型の大きな影響をかんじるのは
イミュータブルなところかも。あれのお陰で、副作用をもたせようと
思ったら基本的にSTMの部分を活用しなきゃならない。(java固有の
ライブラリは例外的なんだけど。)それと遅延評価言語だって
ところがcommon lisp を触ってる時よりhaskellの影響を感じやすいのかも。
あとは内包表記かな。wikiにはlisp,ML, haskell erlangが影響を受けた言語
とかかれている。

485 名前:デフォルトの名無しさん [2011/08/19(金) 10:50:16.31 .net]
R診たいなことが全部できるMLないのかよ。

486 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 21:56:29.91 .net]
卒業研究でOCamlのライブラリ作ってます。
おもしろいことありますでしょうか?

487 名前:デフォルトの名無しさん mailto:sage [2011/09/19(月) 23:59:49.52 .net]
SML#の新verがひっそり出てた


488 名前:デフォルトの名無しさん mailto:sage [2011/09/24(土) 23:23:23.61 .net]
>>479
どんなライブラリでしょうか?

489 名前:デフォルトの名無しさん mailto:sage [2011/09/25(日) 11:44:54.04 .net]
>>479
どんなライブラリをつくったら面白いでしょうか?
なのか
ライブラリを作ることはテーマとして面白味があるでしょうか?
なのか。

490 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 20:28:58.48 .net]
^^;



491 名前:デフォルトの名無しさん mailto:sage [2011/09/27(火) 20:52:03.96 .net]
OpenFlow コントローラのライブラリなどはいかが?
比較的、ホットなトピックだと思うけど。

www.google.co.jp/search?q=functional+reactive+programming+openflow


492 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 14:23:07.44 .net]
MLの型推論の部分だけ「俺言語」の中に取り込みたい
型推論の部分だけ分かりやすくコンパクトにまとめられたコードどこかにないでしょうか

493 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 15:11:00.44 .net]
>>485
en.wikipedia.org/wiki/Hindley%E2%80%93Milner

494 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 15:56:30.36 .net]
>>485
このテキストの17章
www.scala-lang.org/docu/files/ScalaByExample.pdf
タイガー本の16章
www.cs.princeton.edu/~appel/modern/ml/

495 名前:365 mailto:sage [2011/09/29(木) 18:07:57.87 .net]
>>485
Prolog で型チェック:Rainy Day Codings:So-net blog
 rainyday.blog.so-net.ne.jp/2008-06-16

題名は型チェックだけど、コードはまぎれもなく型推論

496 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 19:09:02.35 .net]
ああPrologだから単一化で型推論が起きるのか。

497 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 18:43:07.61 .net]
prologで型推定が一番楽にできそう
しかし返値しか推定してないね


498 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 15:33:53.10 .net]
SMLやろうと思うんだけど、関数書いたファイルはどこ入れときゃいいの?

499 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 19:31:29.68 .net]
WinにもOCaml3.12.1きてるー
ttp://gallium.inria.fr/~protzenk/caml-installer.html

500 名前:sage [2011/10/06(木) 20:07:16.49 .net]
>>492
SML/NJの場合だと、適当なファイル(例えばhoge.sml)に保存して、保存した
フォルダでNJの対話環境を起動して、
use "hoge.sml"
とすればよい。useはカレントディレクトリからソースを読み込む関数で、
カレントディレクトリの取得/変更は、
OS.FileSys.getDirとOS.FileSys.chDirでできる。








501 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 21:24:34.13 .net]
>>493
ありがとう!

502 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 22:10:01.73 .net]
queue.acm.org/detail.cfm?id=2038036

これみるとC#とかやってられんな

503 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 22:44:28.70 .net]
型推論があるから簡潔になるのか
パターンマッチがあるから簡潔になるのか

504 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 22:47:43.98 .net]
両方

505 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 23:19:58.73 .net]
高階関数とカリー化も簡潔に書くのに一役買ってる


506 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 07:40:42.96 .net]
>>495
ひどいよな。C#じゃ複雑なデータ構造を扱おうなんてすると沼じゃないか!
今Haskellの勉強をしててOcamlは読んだことはなかったんだけど
読めるもんだなとも思った。

507 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 07:48:35.09 .net]
The C# code, while functionally equivalent, looks cluttered,
with the real structure obscured by syntactic noise.

事実だけど、辛辣だな。

508 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 11:38:18.36 .net]
>>499
関数型言語群はMLの影響が強いからね。
C言語系という言い方では、ML系と言ってしまってもいい。

509 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 21:38:01.24 .net]
>>501
なるほど、ML系かぁ。そういわれれば納得です。

510 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 22:41:41.95 .net]
C#とかJavaとかはジェネリックが狂ってるな



511 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 05:15:33.48 .net]
js_of_ocaml が面白そうだな

512 名前:デフォルトの名無しさん [2011/10/19(水) 21:52:08.21 .net]
ocamlてmain関数的なエントリポイントって無いの?
Pythonみたいな泥臭い方法でもいいんだけど.

513 名前:デフォルトの名無しさん mailto:sage [2011/10/20(木) 12:56:49.09 .net]
具体的に OCaml で何をしたいのか、Python のどこがダサいのか
書いた方が答をもらいやすいよ

514 名前:デフォルトの名無しさん mailto:sage [2011/10/20(木) 14:05:46.81 .net]
>>505
OCamlにエントリポイントはないです。__main__とかないです。
ocamlc -o a.out a.ml b.ml c.mlとしてコンパイルすると、
a.outの動きとしてはmodule A,B,Cの順番で評価されるイメージになります。


515 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 03:27:50.02 .net]
最近HaskellからOCamlに興味を持って少し触り始めたんですが,OCamlの対話環境にはghciの「:i 」みたいなものは無いんでしょうか?

516 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 06:11:24.22 .net]
「なぜ次に学ぶ言語は関数型であるべきか」
d.hatena.ne.jp/ymotongpoo/20111105/1320506449
原文: queue.acm.org/detail.cfm?id=2038036

517 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 22:31:50.25 .net]
toplevel の pretty printer を普通のプログラム内で使う方法ってありますか。

518 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 22:42:07.36 .net]
>>509
どしょっぱつの,Sometimes, が訳されていないとか,いろいろと
気になるところはあるけれど,大意は伝わった。うむうむ。

519 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 05:42:33.31 .net]
>>510 #install_printer のやつ?

520 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 05:53:40.36 .net]
>>510 言語は?



521 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 10:47:17.91 .net]
scan.netsecurity.ne.jp/article/img/2011/11/13/27625/93.html
tokuhirom、ma.la?っていう人の話だけ聞きたい
色々なスレで見かけるけどWEB業界で有名らしいね
動画ありませんか?

522 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 00:53:05.05 .net]
The little MLerの情報って調べたけど少ないね。大学の図書館
とかなら有りそうに思うけど、今は大学と関係ないから探せんわ。
SML中心で書いてるようだ。Ocamlへの改変の仕方ものってる
というのはgoogle booksでわかった。
使って学習した人っておらんの?

523 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 09:07:06.79 .net]
NACSIS Webcatで検索するか買えば?
面白いよ。

524 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 14:49:34.72 .net]
NACSIS Webcatか
webcat.nii.ac.jp/cgi-bin/shsproc?id=BA3501073X
意外とおいてるところ少ないね。今学習してる本が片付いたら
購入検討するわ。

525 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 15:07:11.14 .net]
www.d12k.org/tso/intro.html

526 名前:デフォルトの名無しさん mailto:age [2011/12/10(土) 10:15:38.86 .net]
age

527 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 01:18:07.20 .net]
MLってCACHEに使われてるんだっけ?
RDBでないDBに興味を持ったので調べ始めたんだけど、 ML、CACHEとも事例が中々見つからない...

528 名前:デフォルトの名無しさん [2012/01/02(月) 00:09:12.82 .net]
OCaml のモジュールについて質問です.
たとえば
A.B
A.C
A.D
みたいにネストしたモジュールをそれぞれ分割されたファイル(a/b.ml, a/c.ml, a/d.ml など階層化されたディレクトリに分けられる?)に書くには OCaml ではどういう方法が一般的でしょうか?


529 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 07:56:03.89 .net]
ocamlc -pack

530 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/29(木) 00:44:48.75 .net]
SML#
partake.in/events/f04706e0-0eac-4751-901f-41707bdfb1ef



531 名前:デフォルトの名無しさん [2012/04/22(日) 14:29:24.78 .net]
MLの無名関数 (fn x => x + 1 みたいなの)って再帰的な定義をする記法はないのですか?
fn n => n * (fn n-1) みたいな感じで。

532 名前:デフォルトの名無しさん mailto:sage [2012/04/22(日) 17:17:03.18 .net]
>>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;;


533 名前:デフォルトの名無しさん mailto:sage [2012/04/23(月) 08:12:58.62 .net]
>>524 そのため(名前を付けて循環定義にするため)に let rec があるので
let rec と組み合わせればいいと思うんだけど、let rec と組み合わせたくない
理由とかある?

534 名前:デフォルトの名無しさん mailto:sage [2012/04/23(月) 20:37:41.35 .net]
SML/NJでdatatype 'a tree = Empty | Node of 'a * 'a tree * 'a treeとかやっといて、適当な深い木を定義してやると
表示が"Node #"と出てきて省略されてしまうんだけど、略記せずに全部出力させる方法があれば教えて。

535 名前:デフォルトの名無しさん mailto:sage [2012/04/23(月) 21:20:09.21 .net]
自分でプリンタ書けよ

536 名前:デフォルトの名無しさん mailto:sage [2012/04/27(金) 00:54:20.88 .net]
camlp4 使った奴でよくみる pa_* な名前の奴の pa って何の略なんだ?

537 名前:デフォルトの名無しさん mailto:sage [2012/04/29(日) 02:59:34.92 .net]
PArsing
mjambon.com/extend-ocaml-syntax.html

538 名前:デフォルトの名無しさん mailto:sage [2012/04/30(月) 15:05:27.19 .net]
>>530
おお、ありがとう!

539 名前:デフォルトの名無しさん [2012/05/08(火) 20:26:45.44 .net]
>>527
以下2つに適当に大きな数字を書き込む。
Control.Print.printLength;
Control.Print.printDepth;
あと、
Control.Print.out
も便利。何もしない関数に置き換えると、エコーバックを消せる。


540 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 13:35:08.25 .net]
ttp://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



541 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 13:40:40.11 .net]
どこからつっこめばいいの…w

542 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 17:40:09.00 .net]
> 掲載画像とお届けする商品の表紙が異なる場合があります。ご了承ください。

とあるけど、どういうことだろう

543 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 21:01:28.02 .net]
オリンピックをもう一回

544 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 15:25:00.19 .net]
300?

545 名前:デフォルトの名無しさん mailto:sage [2012/07/25(水) 19:10:23.62 .net]
>>534
>出版社: Addison-Wesley (2017/11/20)

2017年・・・

546 名前:デフォルトの名無しさん [2012/07/25(水) 20:56:09.52 .net]
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じゃないの?何がダメなの?

547 名前:デフォルトの名無しさん mailto:sage [2012/07/25(水) 21:13:02.20 .net]
中置関数 (-) : int -> int -> int
ががっつり int_of_float を引数に取っているわけで。
int_of_float (-0.7) で使ってください。

548 名前:デフォルトの名無しさん mailto:sage [2012/07/25(水) 22:13:31.14 .net]
>>540
そういうことでしたか!
ありがとうございます

549 名前:デフォルトの名無しさん mailto:sage [2012/07/28(土) 13:56:10.63 .net]
>>541
~-.0.7 と書いても良いね

550 名前:デフォルトの名無しさん mailto:sage [2012/07/29(日) 11:24:50.70 .net]
いつの間にか OCaml4.00.0



551 名前:デフォルトの名無しさん mailto:sage [2012/07/29(日) 12:34:47.25 .net]
岡村4.00.0

552 名前:デフォルトの名無しさん mailto:sage [2012/07/30(月) 17:15:20.50 .net]
OCaml
コンパイルして、nativeなコード吐いて、不思議な実行のさせかたしてるのね

553 名前:デフォルトの名無しさん mailto:sage [2012/07/30(月) 22:50:31.73 .net]
どのへんが不思議なんだ?

554 名前:デフォルトの名無しさん [2012/08/12(日) 14:06:23.13 .net]
わからない?

555 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 23:04:07.50 .net]
わからない。教えて下さい。お願いします。

556 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 00:04:10.53 .net]
#!/usr/bin/ocamlrun

557 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 01:29:14.36 .net]
nativeの意味を取り違えてない?

558 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 03:03:42.64 .net]
スクリプトじゃないのはdumpすればわかるでしょ

559 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 11:53:42.11 .net]
www002.upp.so-net.ne.jp/mamewo/ml.html#compile

560 名前:デフォルトの名無しさん mailto:sage [2012/08/29(水) 23:04:20.96 .net]
ねんがんのLittle MLerをてにいれたぞ

OCamlの場合の読み替え方法も載ってるけど、素直にSMLでやった方が良いのかな
てか読んでる人はいるんだろうか・・・



561 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 03:59:59.39 .net]
以下の関

562 名前:狽ナ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 ← 原因は?
[]
[ここ壊れてます]

563 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 08:57:34.05 .net]
print_int x;

564 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 10:39:53.93 .net]
>>555
Thx!出来ました
セミコロンを使うのはインタプリタだけなのかと思っていました
調べてみたら、配列の区切りでも使われるんですね

565 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 10:47:02.65 .net]
ocamlか。おかのコードはごみごみしくて醜いな

566 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 10:53:23.84 .net]
print_string "あ、OCamlです。言ってませんでしたね。すいません¥n";

567 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 15:19:34.02 .net]
>>556
インタプリタの文の区切りは ;; (セミコロンが2つ)
逐次実行は ; (この場合セミコロンの前の式の型が unit でない場合警告が出る)
配列の区切りも ; (これは配列の括弧 [ ] の中でのみ出現する)

568 名前:デフォルトの名無しさん mailto:sage [2012/09/28(金) 23:37:26.16 .net]
.net におけるOcamlがF#ですが、
JVM上でのOcaml相当のものはないのでしょうか?

569 名前:デフォルトの名無しさん mailto:sage [2012/09/29(土) 11:26:57.28 .net]
OCaml-Javaは? ocamljava.x9c.fr/

570 名前:デフォルトの名無しさん mailto:sage [2012/09/30(日) 17:21:46.18 .net]
>>561
おお、これってチラ見したときは単なるライブラリレベルでのサポートかと
思ってましたが、完全なJVM実装なんですね。



571 名前:デフォルトの名無しさん mailto:sage [2012/10/03(水) 00:49:32.12 .net]
www.lexifi.com/ml2012/
今年のMLワークショップでもocaml-javaの紹介してたみたい。
どのぐらい出来てるんだろう。
パフォーマンスの話も載ってた。
1/3ぐらい?

572 名前:デフォルトの名無しさん mailto:sage [2012/10/12(金) 11:22:15.18 .net]
# 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

だれか解説してくれ。

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

intを扱うベンチが遅い。boxingされちゃうから。
そういうベンチを省くと平均で倍は遅くない。

574 名前:デフォルトの名無しさん mailto:sage [2012/10/12(金) 12:26:46.91 .net]
>>564
最初のやつは値を作れないし、三番目の型パラメータとして渡すようなのもoptionの中身次第では同じ事になるからじゃね?
と思ったが二番目が通るのがよくわからん。

575 名前:デフォルトの名無しさん mailto:sage [2012/10/12(金) 17:55:16.91 .net]
>>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なら不可解な振る舞いは無く、現象を明解に説明できるよ.... ****)

576 名前:デフォルトの名無しさん mailto:sage [2012/10/12(金) 18:44:39.63 .net]
>>564
abbreviationではない新しい型がcyclicかどうかは仕様を決める人が自由に決める

一方、タプルとoptionがcyclicではないという仕様は既に決まっているので
タプルのabbreviationとoptionのabbreviationはcyclicではないはず

577 名前:デフォルトの名無しさん mailto:sage [2012/10/12(金) 19:52:28.31 .net]
>>565
おお、ちゃんと動くもんなんだね!

578 名前:デフォルトの名無しさん mailto:sage [2012/10/13(土) 10:18:23.39 .net]
おお。皆さん回答ありがとう。

>> 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 の内容を辿るように頑張って実装すればイケるのか、
型理論的になにか問題があるのかよく分からない。

579 名前:デフォルトの名無しさん mailto:sage [2012/10/13(土) 10:30:56.43 .net]
ああ書いていて気づいた。 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 な型が出てこない。

たぶん。

580 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 17:26:40.17 .net]
久々にtuareg-mode使ったけど、インデントが変わったのな。
昔のはletをネストするとだんだん右に行って見づらかった



581 名前:デフォルトの名無しさん [2012/11/07(水) 04:55:27.01 .net]
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

582 名前:デフォルトの名無しさん mailto:sage [2012/11/07(水) 19:10:06.18 .net]
そうですね。

583 名前:デフォルトの名無しさん [2012/11/08(木) 20:48:16.69 .net]
例えばこの例は間際らしい
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の綴りが省略されていないため)
で、下のように書き換えて動作を確認した

584 名前:デフォルトの名無しさん [2012/11/11(日) 07:45:41.63 .net]
これ
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じゃないってエラーが出てくる
この場合を検出してエラーを返す書き方が思いつかない
検出する意味も必要もないのかどうかも

585 名前:分からない []
[ここ壊れてます]

586 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 08:04:45.04 .net]
head_headの型を理解してるか?

587 名前:デフォルトの名無しさん [2012/11/11(日) 09:47:55.90 .net]
はい、たぶん
基本[[];[]]な形式、list のlist構造
でも、なんか色々自由がありそうと感じる分、制約とか制限についての認識が欠落してしまう
制約制限がないと意味不明のバクが爆発するから必須なんだけど
なのに、魂が叫ぶ、もっと自由にやらせろ
間違って[1;2;3]な通常のlistを渡したときなんとか出来そうな思い込みをしてしまう。

[]要素のないlist
[[];[1;]] listの最初のlistが[]なlist
[[];[]]   同上
[1;2;3] 必要な要件を全然満たさないlist構造

588 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 14:45:44.54 .net]
型が違えば処理系に弾かれてお終い

589 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 18:10:18.79 .net]
考え方が動的型付けに染まってる印象。

590 名前:デフォルトの名無しさん [2012/11/12(月) 02:30:05.37 .net]
>>579,580
すいません
その通りで御座います。



591 名前:デフォルトの名無しさん [2012/11/17(土) 14:20:04.43 .net]
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"が表示される引数が上手く作れない
システムが先にエラーを吐き出す。

592 名前:デフォルトの名無しさん mailto:sage [2012/11/17(土) 18:42:30.31 .net]
# f [[|(1,2)|];[|(5,6);(7,8)|]];;
Exception: Failure "the first array should be of size two".

いかんのか?

593 名前:デフォルトの名無しさん [2012/11/17(土) 19:34:18.32 .net]
>>583
ありがとうございます。
出来ました。
関数fの受け付ける
('a * 'b) array list -> 'b = <fun>
の形式がどの様な表現なのか直感的に理解できなかったので助かりました。
('a * 'b) array list形式の引数が与えられると
2番目の条件にマッチングできなくて、3つ目の条件で"the first ~~ two"が表示されるんですね。
[[|(1,2)|]] の様に表現するとタイプミスマッチとか処理系がエラーを出すと思っていました。
でも、('a * 'b) array list形式なので引数としては間違っていない。

594 名前:デフォルトの名無しさん [2012/11/19(月) 03:26:09.19 .net]
結局、[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)]と返ってくる
こんな初歩的な部分で躓くとは、これではソースが読めないわけだ。

595 名前:デフォルトの名無しさん mailto:sage [2012/12/02(日) 17:11:41.64 .net]
caml.inria.fr/pub/docs/manual-ocaml-4.00/expr.html
には書いてないけど、+ や +. って - -. と同じく二項演算子かつ単項演算子じゃないのか?
+. (1.0 + 2.0);; とか通るし。

596 名前:デフォルトの名無しさん mailto:sage [2012/12/02(日) 17:46:32.55 .net]
Characters 4-7:
+. (1.0 + 2.0);;
^^^
Error: This expression has type float but an expression was expected of type
int

597 名前:デフォルトの名無しさん mailto:sage [2012/12/02(日) 17:57:04.40 .net]
+. (1.0 +. 2.0);;

598 名前:デフォルトの名無しさん mailto:sage [2012/12/03(月) 01:35:54.04 .net]
Characters 0-2:
+. (1.0 +. 2.0);;
^^
Error: Syntax error

599 名前:デフォルトの名無しさん mailto:sage [2012/12/03(月) 01:37:54.28 .net]
parsing/parser.mliを見ると確かにそうらしい

| subtractive expr %prec prec_unary_minus
{ mkuminus $1 $2 }
| additive expr %prec prec_unary_plus
{ mkuplus $1 $2 }

600 名前:デフォルトの名無しさん [2012/12/03(月) 16:07:32.97 .net]
pervasives.mliにこんなん書かれてた
147 external ( ~- ) : int -> int = "%negint"
148 (** Unary negation. You can also write [- e] instead of [~- e]. *)



601 名前:デフォルトの名無しさん mailto:sage [2012/12/03(月) 17:08:25.93 .net]
むしろ、
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ぽいし

602 名前:デフォルトの名無しさん mailto:sage [2012/12/03(月) 17:48:39.20 .net]
なるほど。+. が単項opとして機能するのは Since 3.12.0 からの拡張なのか。
で間に合ってないというのは 589 の環境のことか。最新の ocaml では通る。

色々ありがとうございました。

603 名前:デフォルトの名無しさん mailto:sage [2013/02/10(日) 19:42:11.39 .net]
最近、OCamlを勉強し始めたんだけど、標準関数で int listを印字する方法ってありますか?
REPLの出力みたいのを求めているんですが。

604 名前:デフォルトの名無しさん [2013/02/28(木) 00:26:28.39 .net]
>>594 コンパイラ内部の関数をごにょごにょすれば別かもしれないけど基本的にない。
対象がint listって決まってるなら、自分で書いたほうが楽だと思う。

605 名前:デフォルトの名無しさん mailto:sage [2013/02/28(木) 01:13:07.87 .net]
REPL環境に限定すれば実はREPLのプリティプリンタを使えたりするんだけど、
使ってしまうと単独の実行ファイルにできなくなる罠。

606 名前:デフォルトの名無しさん mailto:sage [2013/03/24(日) 17:14:56.10 .net]
OCamlで、(=)等を渡す
let check b f = if b then f 1 1 else f 1.0 1.0
みたいな関数を定義したいんですけど、こういったやり方は駄目ですか?
そのままだとfはintを取ると推論されて?エラーになるので、
型を(f: 'a -> 'a -> bool)と指定してみたんですが変わりませんでした。

607 名前:デフォルトの名無しさん mailto:sage [2013/04/20(土) 01:56:05.49 .net]
>>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)

608 名前:デフォルトの名無しさん mailto:sage [2013/06/09(日) 21:47:36.26 .net]
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 に対応したアクション、という感じで。
けど、どうやってもうまくいかない。誰か教えてくださいませ。

609 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 21:34:59.42 .net]
opamを導入して適当なモジュール(今回はextlib)をインストールして
ソースコードにopen Extlibと書いたところExtlibが見つからないと言われてしまいました
何かパス通しのようなものが必要なのでしょうか
OSはmacでhomebrewを使っています

610 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 22:08:09.11 .net]
よくわかりませんがOCamlFindを使えば良いのですね
ocamlfind ocamlc -package extlib -linkpkg test.ml
で通りました



611 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 23:27:52.03 .net]
あとopen ExtLibがタイポしてました

612 名前:デフォルトの名無しさん mailto:sage [2013/07/23(火) NY:AN:NY.AN .net]
Coqもここでいいの?

613 名前:デフォルトの名無しさん mailto:sage [2013/07/23(火) NY:AN:NY.AN .net]
そういえば、Coqスレ昔あったけど今はないのか。
定理証明支援のスレのないのかな?
Coqスレ
toro.2ch.net/test/read.cgi/tech/1300017923/

614 名前:デフォルトの名無しさん mailto:sage [2013/08/13(火) NY:AN:NY.AN .net]
活気が無いように見えるのはきっと皆コーディングに夢中なんだ。きっとそうだ。

615 名前:デフォルトの名無しさん mailto:sage [2013/08/13(火) NY:AN:NY.AN .net]
MLに限った事じゃないけど、関数型言語を学び始めて思ったのは、なんで一次元(線形)リストベースに作られてるのかなって。

一番シンプルな一次元から始めたとして、その先にn次元、までは行かなくても2次元・3次元にして言語体型を考えてみるとかやった人いないのかな。
既にトライして無意味と分かったとか、今まさに挑戦中とか、そう言う話はあるのかい?
メモリ空間が一次元空間だから、やるだけ無駄なんだろうか?

616 名前:デフォルトの名無しさん mailto:sage [2013/08/13(火) NY:AN:NY.AN .net]
>>606
因果が逆。再帰がベースにあるのでリストが使いやすい。

特定のデータ構造をベースにした言語ってSQLくらいしか思いつかない。

617 名前:デフォルトの名無しさん mailto:sage [2013/08/13(火) NY:AN:NY.AN .net]
>>606
Linked List は一次元じゃないと思う。

618 名前:デフォルトの名無しさん mailto:sage [2013/08/13(火) NY:AN:NY.AN .net]
>>607
だったら再帰の考え方も拡張すればいい。別にデータ構造をベースにする意図ではない。
考え方の向きは相互に変わって良いし、そうする事で何が見えてくるか、こないとしたら何故なのかを考えるきっかけにすればよい。

619 名前:デフォルトの名無しさん mailto:sage [2013/08/13(火) NY:AN:NY.AN .net]
>>609
考え方の向きが一方向なのは、関数(写像)が集合間における一方向のn:1関係だから。
もし双方向やn:m関係を扱いたいのなら、述語論理をベースにした言語にすればいい。
論理型言語であれば、リストも順序性がある一方向関係として自然に扱える。

620 名前:デフォルトの名無しさん mailto:sage [2013/08/13(火) NY:AN:NY.AN .net]
そう言う話じゃなく、考えたかの向きってのは再帰→リストと発想する考え方の逆向き、と言う意味です。
これ以上の議論は無意味のようですね。終わり



621 名前:デフォルトの名無しさん mailto:sage [2013/08/13(火) NY:AN:NY.AN .net]
消えてくれてありがとう

622 名前:デフォルトの名無しさん mailto:sage [2013/08/13(火) NY:AN:NY.AN .net]
>>609
関数型言語を学び始めてどれくらいだ。第一印象でリストベースなのかと感じても3日もすればそんなことないって分かるだろうに。
きっと俺と同じように慣れない酒で益体もないことを考えているんだろうけど。
n次元のリストを捉えるのに再帰が不十分なら拡張とか考えるけどさ、n-1次元のリストを再帰的に処理すればいいだけの話であって、拡張なんて必要ない。
再帰という概念の拡張に1次元->n次元の拡張は使えない。何の需要も喚起しない。

623 名前:デフォルトの名無しさん mailto:sage [2013/08/14(水) NY:AN:NY.AN .net]
>>613
なれない酒で頭がいかれてるお馬鹿さんさようなら

624 名前:デフォルトの名無しさん mailto:sage [2013/08/21(水) NY:AN:NY.AN .net]
ひどいなこりゃ。

625 名前:デフォルトの名無しさん mailto:sage [2013/08/21(水) NY:AN:NY.AN .net]
「ひどい」と不平を言うよりも、進んでネタを振りましょう。

626 名前:デフォルトの名無しさん mailto:sage [2013/08/27(火) NY:AN:NY.AN .net]
正直関数型言語がどんなところで優位を持っているのかわからん

627 名前:デフォルトの名無しさん [2013/08/31(土) NY:AN:NY.AN .net]
リスト内包表記ってOCcamlでできるの?

628 名前:デフォルトの名無しさん mailto:sage [2013/08/31(土) NY:AN:NY.AN .net]
Camlp4でできる

629 名前:デフォルトの名無しさん mailto:sage [2013/09/02(月) 01:13:00.20 .net]
OCaml でのゲームプログラミングに興味がわいて
MLGame mlgame.sourceforge.net/
ってライブラリを導入しようと思ったのですが
準備段階であるSDL, OCamlSDL の cygwin への導入で
もうよくわからなくなってしまいました。

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

あきらめてCで初心者向けのDXLibrary でもつかって
適当にやってればいいのでしょうか?

630 名前:デフォルトの名無しさん mailto:sage [2013/09/02(月) 01:55:09.13 .net]
やる前から自分が興味を持ったことを投げ出すなよ
やってみて、思っていたのと違ったらそのときに別の方法を考えればいい

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

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

どんな方法をとるにせよ、まずはある程度のところまで突き詰めたほうがいい



631 名前:デフォルトの名無しさん mailto:sage [2013/09/02(月) 01:59:44.29 .net]
「プログラミングする」という観点においては
Windowsはウンコということを肝に命じた方が良い

632 名前:デフォルトの名無しさん mailto:sage [2013/09/02(月) 02:33:30.43 .net]
なんで?.NETは便利だぞ

633 名前:デフォルトの名無しさん mailto:sage [2013/09/02(月) 02:47:12.09 .net]
>>621-622
素早い返答ありがとうございます。
とりあえず OCaml + cygwin + へんなの は捨てて
F# + DirectX をためしてみます。
windoes はプログラム書くのにうんこなのですね?
Ubuntu いちおう VMware でつかえるけど
とりあえず win に F# インストールしてねます
明日
www.codeproject.com/Articles/121194/Managed-DirectX-via-F
でもよもう

634 名前:デフォルトの名無しさん [2013/09/02(月) 09:36:30.13 .net]
そっか F#だとAPIが叩けるんだな
プログラム自体を関数型言語から入ると
なかなかできない発想だなと思った

635 名前:デフォルトの名無しさん mailto:sage [2013/09/03(火) 01:42:29.15 .net]
let foo () =
let bar = baz () in begin
(* fooを使ってunitを返すような処理がいくつか *)
bar
end

個人的にこれはダサいと思うんですけど他の書き方が思いつきません
何かありませんか?

636 名前:デフォルトの名無しさん mailto:sage [2013/09/03(火) 08:33:35.63 .net]
何がダサいと感じるのかよくわからんので何も言えない

637 名前:デフォルトの名無しさん mailto:sage [2013/09/03(火) 10:22:05.74 .net]
endの直前にbarをもう一度書かないといけないところがダサいと思うのです

638 名前:デフォルトの名無しさん mailto:sage [2013/09/03(火) 13:34:18.83 .net]
tap や finally で書けない?

639 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 19:54:28.33 .net]
#load "dynlink.cma";;
#load "camlp4o.cma";;
#load "Camlp4Parsers/Camlp4ListComprehension.cmo";;


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

できた! すげー感動

640 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 20:04:23.38 .net]
[(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]のリストを一瞬で作る機能は流石にないよな



641 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 20:10:09.50 .net]
>>631
残念ながら出来ない

それにしても楽しそうだねw

642 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 20:16:21.51 .net]
うん 楽しい
関数型言語は最高やでぇぇ

643 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 20:45:29.31 .net]
detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10103970335

こんな問題もサクっと4つの組
(85,71,59,50)が出てくる
凄いよぉぉぉ マヂで小学生からプログラムやるべきだな

644 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 21:02:36.14 .net]
日本語が理解できない
自然数の集合から無作為に選んだ4個の数が存在して、この4つの中から、さらに無作為に3個を選んで和を取り、それを4回試行したところ、
 180, 194, 206, 215
になった、ってことでいいの?

645 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 21:18:35.37 .net]
こいつこの調子でずっと喋り続ける気?

646 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 22:22:27.90 .net]
>>612==>>614==>>636

647 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 22:47:24.97 .net]
>>637
うむ
正しい == の使い方だ

648 名前:デフォルトの名無しさん mailto:sage [2013/09/05(木) 01:56:06.71 .net]
camlp4で今ある文法を制限することって出来ますか?
括弧無しのタプルを排除してリストの区切りをコロンにしたいのですが。

649 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 03:15:14.14 .net]
>>629
batteriesの関数ですよね?まさにそういうのを探していました
batteriesは何となく名前が気に入らなくてスルーしてましたが食わず嫌いは良くないですね

650 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 03:56:00.85 .net]
OCamlのクロージャはそれなりにコストがあって、最適化もしてくれないので
>>626ぐらいならそのままにするなあ



651 名前:デフォルトの名無しさん [2013/09/09(月) 15:49:15.59 .net]
初めての言語に関数型選んでしまったから
Objectで詰んだ!
さっぱりわからん

652 名前:デフォルトの名無しさん mailto:sage [2013/09/09(月) 17:10:04.82 .net]
OCamlのobjectは忘れるんだ、そうすればお前は強くなれる
っていうかfirst class moduleが入って、ただでさえ継子扱いだったobject/classに存在価値は無くなった

653 名前:デフォルトの名無しさん [2013/09/09(月) 17:38:01.62 .net]
おっとwikiみたらCoqの日本語版が登場してた
俺がCoqネタつぶやいたから誰か追加してくれたんだな

654 名前:デフォルトの名無しさん [2013/09/10(火) 10:39:57.58 .net]
CoqIDEでCtrl+Alt+↓ってやると
画面が上下さかさまになってビビったw
どんなバグなんだよwww

655 名前:デフォルトの名無しさん mailto:sage [2013/09/10(火) 13:04:29.50 .net]
coqideってのが何かしらんが俺のWindowsでもそうなる

656 名前:デフォルトの名無しさん [2013/09/10(火) 13:15:41.31 .net]
>> 644
Coqのwikiってどこですか?私も気になります。

657 名前:デフォルトの名無しさん mailto:sage [2013/09/10(火) 23:47:36.91 .net]
ディスプレイドライバの機能をCoqのせいにするなよ

658 名前:デフォルトの名無しさん mailto:sage [2013/09/11(水) 00:25:24.14 .net]
CoqIDEの正当性はCoqで証明されておらんの?

659 名前:デフォルトの名無しさん [2013/09/11(水) 18:00:49.24 .net]
www.cis.upenn.edu/~bcpierce/sf/
proofcafe.org/sf/
Coq自身はしらんが
Coqの元のOCamlの正しさは証明されてるっぽい

660 名前:デフォルトの名無しさん mailto:sage [2013/09/11(水) 19:05:49.78 .net]
型システム入門って読むべき?



661 名前:デフォルトの名無しさん mailto:sage [2013/09/11(水) 19:35:45.08 .net]
よみなさい

662 名前:デフォルトの名無しさん mailto:sage [2013/09/11(水) 19:54:09.22 .net]
>>651
入門書なんて読まなくていいよ

663 名前:デフォルトの名無しさん [2013/09/11(水) 20:41:01.16 .net]
入門って書いてあるけど
パラパラっと見たら全然入門じゃないんだけど・・・
大学受験数学参考書の
やさ理みたいな・・・全然優しく無いじゃんって

664 名前:デフォルトの名無しさん mailto:sage [2013/09/11(水) 21:34:52.86 .net]
そもそも対象読者はどこを想定してるんだw

665 名前:デフォルトの名無しさん mailto:sage [2013/09/11(水) 21:50:49.86 .net]
とりあえず英語できない人でしょ

666 名前:デフォルトの名無しさん mailto:sage [2013/09/12(木) 14:07:31.89 .net]
スレ違いも甚だしいが、お前らの英語力ってどんくらい?今まで技術書は大体は読めるからいいもんと思っていたのだが、
ttp://www.readingsoft.com/
ここで測ったらwords per minuteが115とかいうとんでもない数値だった。
英語ネイティブの人間と同じ量の本を読むのに数倍の差をつけられてて、マジで不安になった。
同じ時間を費やして得られる知識が圧倒的に少ないのは如何なものか。全然読めないじゃないか。

667 名前:デフォルトの名無しさん [2013/09/12(木) 14:36:25.22 .net]
www.zynas.co.jp/genius/sokudoku/sokutei.html
日本語でどのぐらいよ
俺で1400字/分 
英語だと20letter(s)/minぐらいだろなw 1ページ読む頃には熟睡モードだぜ

668 名前:657 mailto:sage [2013/09/12(木) 14:52:35.79 .net]
1025文字/分だった。日本語読むのは速い方だけどトップには及ばない。
自分は視力が矯正入れて0.7くらいだし、これ以上速くしようと思ったら怪しげな速読メソッドに手を出すしか無いのではと思っている。
というか1400って速すぎじゃね?すげーな。

669 名前:デフォルトの名無しさん mailto:sage [2013/09/12(木) 15:10:15.73 .net]
103wpmに1080文字/分だった。
www.readingsoft.com/ は英文が平易すぎて、英語の小説読むより数倍速く読めたが……

670 名前:デフォルトの名無しさん mailto:sage [2013/09/12(木) 15:19:20.14 .net]
>>657
73 wpm
理解優先で後戻りしまくったからな
テストと見せかけて宣伝文句を熟読させる手口とすぐに分かったw



671 名前:デフォルトの名無しさん mailto:sage [2013/09/12(木) 15:29:49.44 .net]
>>660
読み易いように心を砕いて書いた文章と思った

672 名前:デフォルトの名無しさん mailto:sage [2013/09/12(木) 16:23:13.27 .net]
146/wpm 100%だった
もうちょっと早く読めそうだ

673 名前:デフォルトの名無しさん mailto:sage [2013/09/12(木) 18:20:09.98 .net]
思いきり話の腰を折ってすまないが、
日本語英語に関わらず、知識やイディオム仕入れておいて、
理解速度自体を上げる方のが遥かに重要だから、
ページ送りが遅くても気にするなよ。

674 名前:デフォルトの名無しさん mailto:sage [2013/09/12(木) 20:00:36.43 .net]
いやいやその知識やイディオムを仕入れる速度にもかかってくるのよ。読み書きの速度ってさ。
これ以上はスレ違いだし荒らしになるからやめるけど、上で挙げられてたSoftware Foundationsの和訳をして公開したCoqスレの住人達には感謝してもしきれん。

675 名前:デフォルトの名無しさん mailto:sage [2013/09/13(金) 10:05:08.46 .net]
ホントこんなに価値ある情報を無料で提供してくれるって凄いよね

676 名前:デフォルトの名無しさん mailto:sage [2013/09/13(金) 10:13:47.96 .net]
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円になる組み合わせを考えてみました

ネストすればアイテム数をいくらでも増やせそうですが
もっとスッキリ書く方法はありませんか?

677 名前:デフォルトの名無しさん mailto:sage [2013/09/13(金) 12:38:34.63 .net]
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)

678 名前:デフォルトの名無しさん [2013/09/13(金) 14:05:17.63 .net]
batteriesってどうやってつかうの?

679 名前:デフォルトの名無しさん mailto:sage [2013/09/13(金) 15:13:13.02 .net]
>>665
どういう意味?
和訳してた人が速読を推奨してたの?

680 名前:デフォルトの名無しさん mailto:sage [2013/09/13(金) 21:10:35.73 .net]
>>669
opamやocamlfindの使い方分かる?
その辺の設定済んでれば、ソースの最初でopen Batteriesするだけ



681 名前:デフォルトの名無しさん [2013/09/14(土) 01:13:42.13 .net]
>>671
わかんない
ググったらlinuxならできそうだけど
これwindowsで行けるの?cygwinってのが要る?

682 名前:デフォルトの名無しさん [2013/09/14(土) 03:59:21.98 .net]
batteries-2.1.tar.gz をダウソしてきて
cygwinってのから

$ tar zxvf batteries-2.1.tar.gzすればええんやな

683 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 21:13:00.38 .net]
>>622
んなわけねえだろ
コンパイラ作ってる奴がクソなだけだ

684 名前:デフォルトの名無しさん [2013/09/14(土) 21:17:30.82 .net]
やはりwindowsでOCamlならF#行った方がいい?

685 名前:デフォルトの名無しさん mailto:sage [2013/09/14(土) 21:21:47.50 .net]
プラットフォームがWindowsに限定できるのなら、あえて茨の道を選ぶこともあるまい

686 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 03:38:59.44 .net]
F#ってべつにwindowsじゃなくても動くでしょ

687 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 04:18:36.52 .net]
動くけど、monoを入れる羽目になるし、.NET Frameworkが無いから旨さ半減

688 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 06:47:38.91 .net]
F#とOcamlって実行速度ちがってくるものなの?

689 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 08:16:48.29 .net]
OCamlはネイティブ

690 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 09:50:20.17 .net]
.NETはJITコンパイルされるし、OCamlのネイティブコンパイラの最適化は最低限だし



691 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 10:45:01.28 .net]
F#は.NETでも遅い方だろ

692 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 10:52:12.02 .net]
はいはい荒れるからこれで終わり
benchmarksgame.alioth.debian.org/u64q/benchmark.php?test=all&lang=all&data=u64q

693 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 22:25:53.10 .net]
Real World OCaml読もうぜ!OCamlSpotterの人も評価してたがAppendix A: installationでopam + core + utopをいきなりインストールさせるのはびっくりした。
こいつらガチでOCamlを普段使いにしてやがる。

694 名前:デフォルトの名無しさん [2013/09/15(日) 22:30:57.96 .net]
日本語版早く

695 名前:デフォルトの名無しさん mailto:sage [2013/09/15(日) 23:00:17.64 .net]
>>684
実際、実務でOCaml使っている人たちが書いてるからね

696 名前:デフォルトの名無しさん [2013/09/15(日) 23:02:44.61 .net]
って英語版も12月発売な上に
日本語版ってそれから1年後ぐらいになるのか

697 名前:デフォルトの名無しさん [2013/09/15(日) 23:05:28.42 .net]
普段使いってどういうこと?
スクリプト言語みたいに
ちょこちょこっとのコーディングもOCamlって事?

698 名前:デフォルトの名無しさん [2013/09/15(日) 23:15:21.68 .net]
あー やっぱLinuxかぁ

699 名前:デフォルトの名無しさん mailto:sage [2013/09/16(月) 00:03:20.35 .net]
プログラミング演習のようなの実装させるより
Coreの拡張モジュールやp4使わせてるし
標準でやれることでもJane系にもっと便利なのあれば使ってる

700 名前:デフォルトの名無しさん [2013/09/16(月) 16:10:19.60 .net]
opamってlinuxの64bit専用?!



701 名前:デフォルトの名無しさん mailto:sage [2013/09/17(火) 01:27:30.95 .net]
あー opam installで途中で止まるー
もう寝る 

702 名前:デフォルトの名無しさん mailto:sage [2013/09/17(火) 03:26:52.06 .net]
アパーム!!

703 名前:デフォルトの名無しさん mailto:sage [2013/09/17(火) 09:53:15.37 .net]
>>692 エラーメッセージはなんて出てますか? #opam

704 名前:デフォルトの名無しさん [2013/09/17(火) 12:09:35.38 .net]
>>694
寝て起きたら終わってた


エラーメッセージらしきものが出てたら
まだググればなんとなく解決の糸口を探せるんだけど
止まったように見えるのは勘弁してほしい・・・

705 名前:デフォルトの名無しさん mailto:sage [2013/09/17(火) 12:15:30.59 .net]
Ubuntuだと入ってるのかもしらんが
Lubuntu入れたからm4ってのが足りなくて進まないのに難儀したわぁ

706 名前:デフォルトの名無しさん mailto:sage [2013/09/17(火) 12:36:12.34 .net]
とりあえず opamからutopとcore入れたけど
他に入れといた方がいいってのある?

707 名前:デフォルトの名無しさん mailto:sage [2013/09/17(火) 14:31:45.87 .net]
asyncとか?

708 名前:デフォルトの名無しさん [2013/09/17(火) 20:04:07.17 .net]
open Core.Std しても
ウンともスンとも言わないのはどうして?

709 名前:デフォルトの名無しさん mailto:sage [2013/09/17(火) 20:37:23.49 .net]
toplevelなら最後に;;付けないと評価されないぞ。

710 名前:デフォルトの名無しさん mailto:sage [2013/09/17(火) 21:34:31.77 .net]
付けてもダメ



711 名前:デフォルトの名無しさん [2013/09/18(水) 10:24:04.40 .net]
OSの問題か?
UbuntuでbatteriesとかCore使えてる人いますか?

712 名前:デフォルトの名無しさん mailto:sage [2013/09/18(水) 10:42:31.06 .net]
違うと思うけど
標準のモジュールは使える?
open List;;とか

713 名前:デフォルトの名無しさん mailto:sage [2013/09/18(水) 11:54:58.58 .net]
open List;;も
#load "nums.cma";;
も行ける

714 名前:デフォルトの名無しさん [2013/09/18(水) 17:03:13.40 .net]
#use "topfind";;
#require "batteries";;
open Batteries;;

でバッテリーつかえたぁぁぁ
疲れた
でもCoreはスーパーユーザーやないと使えないんだけど
emacsからスーパーユーザーってどうするんだ?

715 名前:デフォルトの名無しさん mailto:sage [2013/09/18(水) 17:09:49.70 .net]
su emacs # ?

716 名前:デフォルトの名無しさん mailto:sage [2013/09/18(水) 17:22:01.73 .net]
ってかここで聞く事じゃないけど
.emacsなんてなんだよ・・意味不明

717 名前:デフォルトの名無しさん mailto:sage [2013/09/19(木) 02:32:35.94 .net]
可能性1. Coreライブラリのパーミション指定がおかしいため、通常ユーザーでは読めない。(あまり現実的じゃない)
可能性2. opamをsudoで実行した。
可能性3. Ubuntuリポジトリにあるcoreパッケージをインストールした一方で、opam+findlibを個人権限で導入し、
      そのため/usr/lib/ocaml/以下をfindlibが探していない。

可能性3なら、~/.opam/system/lib/findlib.confを編集することで解決する。

718 名前:デフォルトの名無しさん [2013/09/19(木) 09:33:14.80 .net]
できた!ありがトン

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

utopだと出来るけどemacsだと
Error: Reference to undefined global Conditionsってでる
うーん emacsの勉強が必要だなぁ
core_kernelだと大丈夫なのはなぜなんだぜ?
coreとcore_kernelって同じもの?だよね

719 名前:デフォルトの名無しさん mailto:sage [2013/09/19(木) 16:09:42.28 .net]
>>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を指定したり何だりすればいいらしい。気が向いたら試してみてください。

720 名前:デフォルトの名無しさん mailto:sage [2013/09/20(金) 02:37:57.07 .net]
>>707
emacsの設定ファイルだよ。弄ってる間に学生生活が終わった。



721 名前:デフォルトの名無しさん mailto:sage [2013/09/21(土) 18:47:36.60 .net]
opamの1.1.0betaが出てるね

722 名前:デフォルトの名無しさん mailto:sage [2013/09/25(水) 00:38:24.09 .net]
https://twitter.com/cliffordbeshers/status/382505685084160001
ICFPの季節か

723 名前:デフォルトの名無しさん [2013/09/28(土) 08:17:20.19 .net]
SML#の話題ってここでいいの?

724 名前:デフォルトの名無しさん mailto:sage [2013/09/28(土) 09:00:06.71 .net]
いいよ

725 名前:デフォルトの名無しさん mailto:sage [2013/09/28(土) 18:49:36.94 .net]
SML#のページにあったスライドより:
SML# は,Cやデータベースとの連携を備えた「ふつうの言語」を目指すML系関数型言語です.

SQLをそのまま使える「ふつうの言語」...こいつ頭がお詳しいぜ!
C、SQL、MLっていうのは欲張りだな。polyglotは楽しめるのかもしれんが。

726 名前:667 [2013/09/30(月) 10:28:11.89 .net]
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の素晴らしさを実感するとともに
もっと良い方法があれば教えてください。

727 名前:667 [2013/09/30(月) 10:36:53.22 .net]
あー 数がちょっと増えるとすぐオーバーフローしちゃう
これはダメだぁ・・・

728 名前:667 mailto:sage [2013/09/30(月) 11:26:09.48 .net]
let rec powerset = function
| [] -> [[]]
| h::t -> List.fold_left (fun xs t -> (h::t)::t::xs) [] (powerset t);;

あ、自己解決
こうすれば20数個行ける

729 名前:デフォルトの名無しさん mailto:sage [2013/10/01(火) 17:56:59.75 .net]
ごっちゃになってたけど
print_string "hello"; print_newline ();;

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

print_string "hello\n" が普通の書き方?

730 名前:デフォルトの名無しさん mailto:sage [2013/10/04(金) 23:18:06.53 .net]
その程度ならどれも意味がすぐ分かるから、特に伝統は無い。

改行コードはOS毎にLF+CRだったりLFだったりするけど、そこら辺はどう考慮されているんだろう。
Linuxだと\nで改行、\rで現在の行を消して先頭からやり直し、みたいだけど。他のOSでも統一



731 名前:されてんのかね? []
[ここ壊れてます]

732 名前:デフォルトの名無しさん [2013/10/05(土) 09:27:34.70 .net]
副作用にも色々表現方法があって迷うなぁ
まぁOCamlはそれがいいんだろうけど

733 名前:デフォルトの名無しさん mailto:sage [2013/10/05(土) 14:18:01.03 .net]
文字列だけなら print_string とか print_endline とかでいいだろうけど、
数値とか含むのを出力するときはどうするのがスマートなんだろう?
俺はだいたい Printf.printf を使ってしまうのだけど。

734 名前:デフォルトの名無しさん mailto:sage [2013/10/05(土) 14:42:49.03 .net]
>>721
間違ってる
Windows は CR+LF すなわち現在行を消して先頭に戻してから改行するのだッ

735 名前:デフォルトの名無しさん mailto:sage [2013/10/05(土) 14:51:34.09 .net]
> Linuxだと\nで改行、\rで現在の行を消して先頭からやり直し、
OSのアプリが, 慣習的に "\n" を論理改行文字として扱ってる(tty ドライバーも
このように扱いやすく作ってある)だけで, 端末制御として使う CR だとか LF とは
分けて考えるべきだと思うよ.

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

端末から見た, 各制御文字の役割は以下であってそれ以外の何者でもない
CR: カーソルを行の先頭に戻す,
LF: カーソルを次の行に移動する(カラムは移動しない)

736 名前:デフォルトの名無しさん [2013/10/05(土) 17:25:39.93 .net]
ocamlのcryptokit使おうとしたら、エラーになるんだがなんでなんだぜ。

Fatal error: cannot load shared library dllcryptokit_stubs
Reason: dllcryptokit_stubs.so: cannot open shared object file: No such file or directory

737 名前:デフォルトの名無しさん [2013/10/06(日) 08:19:42.15 .net]
#ocaml #opam 自己解決したっす dllcryptokit_stubs.so はopamゆーざーなら以下の環境変数の設定が必要っぽい
export CAML_LD_LIBRARY_PATH=~/.opam/system/lib/stublibs/

738 名前:デフォルトの名無しさん [2013/10/09(水) 00:18:05.42 .net]
なんかopamも便利なんだか不便なんだかわからんな

739 名前:デフォルトの名無しさん [2013/10/10(木) 12:26:47.83 .net]
フィボナッチ計算させるときに
メモ化するのもアキュムレータ使うのも
同じ振る舞いな気がするんだが
何か違うのかな?

740 名前:デフォルトの名無しさん mailto:sage [2013/10/10(木) 13:44:52.77 .net]
複数回呼び出したら違うんじゃないの



741 名前:デフォルトの名無しさん [2013/10/10(木) 14:11:03.39 .net]
それぞれの f(n)までの値をそれぞれ1回ずつ計算して
テーブルに入れるかレコードに入れるかの違いだから
計算回数は同じじゃね?

742 名前:デフォルトの名無しさん mailto:sage [2013/10/10(木) 18:11:17.89 .net]
fibを何回か呼ぶことを言ってるんじゃねぇの

743 名前:デフォルトの名無しさん [2013/10/10(木) 18:49:43.04 .net]
呼ぶ回数=計算回数じゃないの?
どっちもO(n)っぽいんだけど

744 名前:デフォルトの名無しさん mailto:sage [2013/10/10(木) 19:24:41.41 .net]
fib(n) = fib(n-1) + fib(n-2)
fib(n-2)は呼ばれるが、計算済みだから新に計算はしないってことでしょ。

745 名前:デフォルトの名無しさん [2013/10/10(木) 21:27:14.82 .net]
そういう二重再帰じゃない方のフィボナッチだよ

746 名前:デフォルトの名無しさん [2013/10/10(木) 21:50:36.16 .net]
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)

こういう感じでアキュムレータ使うようなフィボナッチ

747 名前:デフォルトの名無しさん mailto:sage [2013/10/10(木) 23:36:42.55 .net]
何が言いたいのかわからん
末尾再帰のアキュムレータだろうが、
fib nをm回呼び出す場合メモ化ならO(m+n)だろ

748 名前:デフォルトの名無しさん [2013/10/11(金) 01:37:05.82 .net]
>>734この
二重再帰の計算オーダーはそうじゃないだろ??

749 名前:デフォルトの名無しさん mailto:sage [2013/10/11(金) 02:57:20.14 .net]
>>735
>>738
メモ化のコード書いてくれないとわからない。
あと計算オーダーはそうじゃないのそうって何?

750 名前:デフォルトの名無しさん mailto:sage [2013/10/11(金) 03:24:27.66 .net]
>>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)
わかったか?



751 名前:デフォルトの名無しさん mailto:sage [2013/10/11(金) 04:17:04.97 .net]
HaMLet がまさかのニューバージョン。

www.mpi-sws.org/~rossberg/hamlet/

752 名前:デフォルトの名無しさん [2013/10/11(金) 10:20:41.62 .net]
>>740
あー >>734はメモ化の再帰バージョンの話ね
理解した

とすると
>>729この違いは
使い捨てならアキュムバージョンは
簡潔に書けて早く
使いまわすならメモ化した方が
再呼び出しは早くていいって感じか

753 名前:デフォルトの名無しさん [2013/10/11(金) 19:30:47.32 .net]
SMLも開発すすんでるんだな

754 名前:デフォルトの名無しさん mailto:sage [2013/10/14(月) 18:44:12.10 .net]
www.pllab.riec.tohoku.ac.jp/smlsharp/docs/1.0/ja/Ch1.S1.xhtml
SMLの開発って、もしかしてSML#のこと?

755 名前:デフォルトの名無しさん mailto:sage [2013/10/14(月) 18:45:23.58 .net]
あ、上のhamletのことか。

756 名前:デフォルトの名無しさん [2013/10/14(月) 18:54:06.65 .net]
SML#は64ビット対応せんのかな。結構期待してるんだけど。

757 名前:デフォルトの名無しさん [2013/10/15(火) 01:40:51.77 .net]
SML/NJとかも

758 名前:デフォルトの名無しさん [2013/10/15(火) 01:52:43.43 .net]
Standard SMLってなんだろ?

759 名前:デフォルトの名無しさん [2013/10/15(火) 15:17:19.69 .net]
int型のmaxって1073741823ですよね
これを超えたらBig_intに切り替えたいんですが
int型の計算でmax_intを超えたかどうかの判定って
どうやったらいいですか?

760 名前:デフォルトの名無しさん mailto:sage [2013/10/15(火) 17:14:51.41 .net]
無理じゃね
最初からBig_int使えばいいんじゃね



761 名前:デフォルトの名無しさん mailto:sage [2013/10/15(火) 18:42:26.56 .net]
大学の研究室のプロジェクトだと、パワーのある院生がいる時にどかっと
進んだりするんだよなぁ。

762 名前:デフォルトの名無しさん [2013/10/15(火) 22:18:09.71 .net]
キャリーフラグを無視しない高級言語ってごくわずかしかないよね。

763 名前:デフォルトの名無しさん mailto:sage [2013/10/15(火) 23:25:06.01 .net]
そもそも1bit分フラグに使ってるからキャリーフラグなんて役に立たんでしょ
SML#はどうか知らんけど

764 名前:デフォルトの名無しさん mailto:sage [2013/10/16(水) 22:57:21.15 .net]
C++
blog.regehr.org/archives/593
ocaml batteriesには、SafeIntというのがあるらしい。参考になるかもよ。
dutherenverseauborddelatable.wordpress.com/2008/08/27/whats-up-with-batteries/

765 名前:デフォルトの名無しさん [2013/10/18(金) 10:52:33.25 .net]
オブジェクトがさっぱりわからん
レコードと何が違うんだ・・・

766 名前:デフォルトの名無しさん [2013/10/18(金) 12:04:36.71 .net]
Obj.magic使えば
型なんて関係無くなる?

767 名前:デフォルトの名無しさん [2013/10/18(金) 12:12:18.87 .net]
[Obj.magic 'a'; Obj.magic "abc"; Obj.magic 123];;
すげー リストに型が違っても入るぞ
何に使えるんだろ?

768 名前:デフォルトの名無しさん [2013/10/18(金) 12:52:31.16 .net]
Obj.magic 'a' + 1 ;;
すげー こんなのもできるんだwwww
関数型言語界のgotoやで

769 名前:デフォルトの名無しさん mailto:sage [2013/10/18(金) 14:08:58.82 .net]
奇跡も魔法もあるんだよ。

770 名前:デフォルトの名無しさん mailto:sage [2013/10/18(金) 18:35:29.49 .net]
ただしよくわからんで使うと死ぬ



771 名前:デフォルトの名無しさん [2013/10/18(金) 18:46:15.03 .net]
OCamlって最強の言語じゃね?
なんでみんなやらないんだろ

772 名前:デフォルトの名無しさん mailto:sage [2013/10/18(金) 18:49:32.53 .net]
変なライセンスだから

773 名前:デフォルトの名無しさん mailto:sage [2013/10/18(金) 18:53:24.02 .net]
intが1ビット少ないとか、モジュールの仕様上スマートリンクができないとか
ファーストクラスモジュールでOCamlのOたるオブジェクトがゴミになりましたとか
そのファーストクラスモジュールは後付けで構文がカオスですとか、あと+.(笑)とかGC遅いとか
ケチを付けようと思ったらいくらでも付けられるからなあ

774 名前:デフォルトの名無しさん mailto:sage [2013/10/18(金) 19:13:13.78 .net]
Windows版の更新サボってるのが一番の原因だな

775 名前:デフォルトの名無しさん mailto:sage [2013/10/18(金) 19:31:42.10 .net]
みんなって誰だよ

776 名前:デフォルトの名無しさん mailto:sage [2013/10/18(金) 19:33:25.20 .net]
研究室ではよく使ってる

777 名前:デフォルトの名無しさん [2013/10/18(金) 20:02:22.74 .net]
>>765
健常者の集合

778 名前:デフォルトの名無しさん mailto:sage [2013/10/18(金) 22:46:49.64 .net]
言語の素性はともかくマンパワーは全然足りてないしな

779 名前:デフォルトの名無しさん [2013/10/18(金) 23:43:15.36 .net]
スマートリンクってなんぞ?

780 名前:デフォルトの名無しさん mailto:sage [2013/10/18(金) 23:50:11.98 .net]
sageたら教えてやる



781 名前:sage [2013/10/18(金) 23:56:08.97 .net]
教えてください

782 名前:sega [2013/10/19(土) 19:03:49.62 .net]
俺にも教えて

783 名前:デフォルトの名無しさん mailto:sage [2013/10/19(土) 22:25:27.91 .net]
じゃあおれも

784 名前:デフォルトの名無しさん [2013/10/28(月) 11:48:04.04 .net]
汎関数と高階関数って同じ意味ですか?

785 名前:デフォルトの名無しさん [2013/10/28(月) 13:22:54.90 .net]
ちがいます

786 名前:デフォルトの名無しさん mailto:sage [2013/10/28(月) 13:38:38.58 .net]
おなじです

787 名前:デフォルトの名無しさん [2013/10/28(月) 13:43:33.45 .net]
どっちだよ・・・

788 名前:デフォルトの名無しさん mailto:sage [2013/10/28(月) 13:58:52.58 .net]
>>774
関数を計算の対象とすること、いいかえると、関数を引数として受け付けたり
関数を返す関数のことを「高階の関数」または「高階関数」という
さらに、高階関数の中で計算の対象が関数だけなものを「汎関数」という
つまり高階関数は広い概念で、汎関数は狭い概念

たとえば関数 map や filter は高階関数であるけれど、リストも計算対象だから汎関数ではない
それに対して、合成関数 o は高階関数であるし汎関数でもある

789 名前:デフォルトの名無しさん [2013/10/28(月) 14:26:11.39 .net]
let foo f g x = g (f x) ;;
val foo : ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c = <fun>
って合成関数があったとして
'aの引数は計算対象外になるの?

790 名前:デフォルトの名無しさん mailto:sage [2013/10/28(月) 15:17:35.72 .net]
>>779
記法のせいでわかりにくいけど
('a -> 'b) -> ('b -> 'c) -> ('a -> 'c) って考えればいい



791 名前:デフォルトの名無しさん mailto:sage [2013/10/28(月) 15:25:02.71 .net]
あと汎関数は量を返す物をいうはず。
だから合成関数は汎関数でなく、高階関数。

792 名前:デフォルトの名無しさん mailto:sage [2013/10/28(月) 15:27:39.31 .net]
間違えた
合成関数を"返す" 関数は汎関数でなく、高階関数。

793 名前:デフォルトの名無しさん mailto:sage [2013/10/28(月) 15:32:51.19 .net]
>>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
では、その量を返すという汎関数の具体例を挙げてみてくれないか?

794 名前:デフォルトの名無しさん [2013/10/28(月) 16:06:23.87 .net]
例えばmapをばらしたときに

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

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

たぶんこんな感じで再帰になってるけど
無名関数は再帰で書けないから
無名関数で書けたら汎関数でよい?

795 名前:デフォルトの名無しさん mailto:sage [2013/10/28(月) 16:10:19.68 .net]
>>783
>では、その量を返すという汎関数の具体例を挙げてみてくれないか?
なんで?
とりあえず、定義っぽいのは見つけたよ。
www.encyclopediaofmath.org/index.php/Functional

796 名前:デフォルトの名無しさん [2013/10/28(月) 16:41:42.96 .net]
ん?schemeはYコンビネータを使って
Y = (λf . (λx . f (x x)) (λx . f (x x)))
無名再帰ができると書いてあるな
何が違うんだろ?動的言語だと出来るとか?

797 名前:デフォルトの名無しさん mailto:sage [2013/10/28(月) 17:26:32.96 .net]
>>784
汎関数の定義に無名関数を使うことは多いけど、
だからといって、すべての無名関数を用いた定義が汎関数となる訳ではない
だから「無名関数で書けたら汎関数でよい?」という質問については No だ
ただし「引数としてある関数を渡すとmapと同等な無名関数を返す」汎用的な関数が
定義できるのであれば、その関数は汎関数であるといえるだろう

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


>>785
数学における用語「汎関数」と計算機科学における「汎関数」をごっちゃにしているのでは?
で、ここは(数学板ではなく)プログラム板だ

798 名前:デフォルトの名無しさん mailto:sage [2013/10/28(月) 17:37:07.70 .net]
>>787
>数学における用語「汎関数」と計算機科学における「汎関数」をごっちゃにしているのでは?
えええー!初耳だよそんなの。
計算機科学の汎関数の定義は?

799 名前:デフォルトの名無しさん [2013/10/28(月) 19:17:55.24 .net]
同値再帰型なんてのもあるんだね
OCamlって最強言語じゃね?

800 名前:デフォルトの名無しさん [2013/10/30(水) 09:26:41.50 .net]
高階関数のままと
簡約した形と
評価までの速度に違いがあるのかな?
見やすさで選ばれてるだけ?



801 名前:デフォルトの名無しさん mailto:sage [2013/10/30(水) 13:20:56.16 .net]
cygwin64bitにもOCaml登場

802 名前:デフォルトの名無しさん mailto:sage [2013/10/30(水) 19:40:53.15 .net]
簡約した形とは

803 名前:デフォルトの名無しさん mailto:sage [2013/10/31(木) 18:52:31.73 .net]
ゴルフに出てくる;;の後の
1@0
って何ですか??

804 名前:デフォルトの名無しさん mailto:sage [2013/11/01(金) 12:27:52.67 .net]
kwsk >>793 #ゴルフ

805 名前:デフォルトの名無しさん mailto:sage [2013/11/01(金) 21:39:55.79 .net]
コードゴルフか?
'a list -> 'a list -> 'a list じゃなさそうだし自分で定義してるんじゃね?

806 名前:デフォルトの名無しさん [2013/11/02(土) 18:53:12.88 .net]
S式みたいに
(< 1 2 3 4 5 6 7 8 9)
でtrue みたいに一発で計算ってできますか?

807 名前:デフォルトの名無しさん [2013/11/02(土) 19:14:43.17 .net]
そういうの書けばできるでしょ

808 名前:デフォルトの名無しさん [2013/11/03(日) 00:39:10.77 .net]
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 ;;

なんか一行ですっきり書きたい

809 名前:デフォルトの名無しさん mailto:sage [2013/11/03(日) 09:57:51.24 .net]
f op xs = and $ zipWith op xs (tail xs)

810 名前:デフォルトの名無しさん [2013/11/03(日) 11:18:30.19 .net]
ん?それHaskellじゃね?



811 名前:デフォルトの名無しさん [2013/11/03(日) 11:27:32.82 .net]
こうかな。

fun lessThanForAll l = ListPair.all (op <) (l, tl l);

812 名前:デフォルトの名無しさん mailto:sage [2013/11/03(日) 21:33:04.10 .net]
ocamlだとむずい

813 名前:デフォルトの名無しさん [2013/11/21(木) 06:02:11.85 .net]
盛り上がってるね。

814 名前:デフォルトの名無しさん mailto:sage [2013/11/25(月) 19:28:29.05 .net]
camlp4の入手先を教えて下さい

815 名前:デフォルトの名無しさん mailto:sage [2013/11/25(月) 20:49:45.57 .net]
ttps://github.com/ocaml/camlp4

816 名前:デフォルトの名無しさん [2013/11/25(月) 23:43:19.04 .net]
camlp4ってなんか開発側のよくわからない方針により大幅に変更されてもともと乏しかったドキュメントが一層整備されてない状態になってから使う気なくした。

817 名前:デフォルトの名無しさん mailto:sage [2013/12/13(金) 08:01:15.59 .net]
ああ、ハームが強いとか言ってたキルハイエナさんか

818 名前:デフォルトの名無しさん mailto:sage [2013/12/13(金) 08:02:13.53 .net]
誤爆

819 名前:デフォルトの名無しさん mailto:sage [2013/12/14(土) 16:52:12.01 .net]
fezにお帰りください

820 名前:デフォルトの名無しさん [2013/12/19(木) 13:30:02.87 .net]
ABC予想をOCamlで書いて



821 名前:デフォルトの名無しさん mailto:sage [2014/01/16(木) 19:03:28.13 .net]
row polymorphism(< method_foo : foo -> bar ; .. >の"..")が何か泥臭い感じがしてOCamlのOが好きじゃないのですが、
row polymorphismとexact typeを区別するべき理由ってあるのでしょうか。

822 名前:デフォルトの名無しさん mailto:sage [2014/01/20(月) 01:16:23.89 .net]
こんな本でた

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

なんか面白そう

823 名前:デフォルトの名無しさん [2014/01/25(土) 20:39:37.59 .net]
みんなどこいったんや

824 名前:デフォルトの名無しさん mailto:sage [2014/01/27(月) 00:37:41.63 .net]
VBAを捨てて関数型言語がデフォルトでサポートされるのは、いつだろうか

825 名前:デフォルトの名無しさん mailto:sage [2014/01/27(月) 01:45:51.79 .net]
そんな日は来なくていい

826 名前:デフォルトの名無しさん mailto:sage [2014/01/28(火) 03:59:19.18 .net]
ExcelマクロにVBAとF#の選択肢が標準だったなら、関数型は主流になれる

827 名前:デフォルトの名無しさん mailto:sage [2014/01/28(火) 04:04:55.48 .net]
>>813
クオンツやアクチュアリーもどきの個体数が増えすぎて、
市場価値が下がらないように口を紡ぎだしたとみた

828 名前:デフォルトの名無しさん mailto:sage [2014/01/29(水) 01:01:52.05 .net]
口を・・・つむぐ?

829 名前:デフォルトの名無しさん mailto:sage [2014/01/29(水) 01:04:27.44 .net]
口をつぐんだ人ならいるかもね

830 名前:デフォルトの名無しさん [2014/01/29(水) 21:56:44.82 .net]
あれでしょ、世の中に不満があるなら自分を変えろ、それが嫌なら耳と目を閉じ、口を紡いで…あれ?



831 名前:デフォルトの名無しさん mailto:sage [2014/01/29(水) 21:58:26.24 .net]
お口にチャックノリス

832 名前:デフォルトの名無しさん mailto:sage [2014/02/12(水) 23:38:39.41 .net]
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

833 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 19:52:50.09 .net]
いくつかはjs_of_ocamlを更新すれば定義されてる
nat関係のは提供されてないのでダミーの関数を
funciton create_nat(){}のように自分で追加するか
batteriesのサブセットを切り出して使うか

core_kernel使ってる人もいるらしい

834 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 23:42:09.86 .net]
js_of_ocaml 1.4.0を使っていますがこれではダメなのでしょうか?
nat関係は適当にスクリプトを書いて対応しようと思います
unix_inet_addr_of_stringはbatteries関係なく出てしまうようですね

835 名前:デフォルトの名無しさん mailto:sage [2014/02/13(木) 23:59:27.54 .net]
bigarrayサポートがまだgit版にしかない
unix_inet_addr_of_stringはruntime/unix.jsをリンクすれば大丈夫だけど
opamで入れたなら多分入ってない

836 名前:デフォルトの名無しさん mailto:sage [2014/02/14(金) 00:28:20.76 .net]
bigarrayサポートはnat関係のことですよね?
もしそうだとするとcaml_XXXは一体何が原因なのでしょう
それとunix_inet_addr_of_stringはopamで入れている以上直る?ことはないということなのでしょうか

837 名前:デフォルトの名無しさん mailto:sage [2014/02/14(金) 00:35:30.75 .net]
調べてから書くべきでした
caml_XXXがbitarrayの関数ですね

838 名前:デフォルトの名無しさん mailto:sage [2014/02/14(金) 00:36:59.24 .net]
big・・・

839 名前:デフォルトの名無しさん mailto:sage [2014/02/14(金) 00:45:48.03 .net]
> それとunix_inet_addr_of_stringはopamで入れている以上直る?ことはないということなのでしょうか
公式のも唯の空の関数なんで自分で定義しても一緒だし
開発版では修正済みだから1.99だか2.0が出てopamパッケージになれば大丈夫

840 名前:デフォルトの名無しさん mailto:sage [2014/02/14(金) 01:06:19.10 .net]
なるほど
いずれ修正されることと今でも少し手を入れれば動くことがわかったので良かったです
親切にありがとうございました



841 名前:デフォルトの名無しさん mailto:sage [2014/02/16(日) 20:02:36.51 .net]
www.reddit.com/r/programming/comments/1xtohg/ocaml_replacing_python_what_you_gain/

842 名前:デフォルトの名無しさん mailto:sage [2014/02/24(月) 14:22:45.10 .net]
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`とやって生成しています。

843 名前:832 mailto:sage [2014/02/24(月) 14:28:40.75 .net]
>>832
あ、使用しているOSはLinuxで、OCamlのバージョンは4.01.0です。

844 名前:832 mailto:sage [2014/02/24(月) 21:13:12.02 .net]
findlibのソースを読み、ocamlのソースを読んだ結果、不便な仕様は不便な仕様のようです。
諦めます。

845 名前:デフォルトの名無しさん [2014/04/20(日) 10:33:29.81 ID:Ar2j+hn/.net]
∀x. P(x) とかλx. x のドットと同じなんじゃない。

846 名前:デフォルトの名無しさん mailto:sage [2014/04/20(日) 15:50:34.61 ID:jkTnuZFL.net]
structureのドットじゃないのか

847 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 20:07:50.69 ID:yuYA7aLZ.net]
>>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.っていう表記を使う。

用途は何と問われるとちょっと困る程度にはマイナー。

848 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 20:47:43.26 ID:Rx5WvURy.net]
何言ってるか分からないですね

849 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 22:11:28.21 ID:fVb21MOO.net]
aはずっと自由変数ですよ、特殊化されませんよ、ってのを明示するのに使うのか

850 名前:デフォルトの名無しさん mailto:sage [2014/04/23(水) 22:41:15.05 ID:OJl2bhdr.net]
基本的に、変数は(もし多相性を持っていても)初期化された時点で単相型になる
関数は呼び出されると引数が初期化されるのでその時点で単相型になる
関数自身を変数に入れると、呼び出してなくても変数を初期化しただけで単相型になる

>>835のhoge型の変数は基本とは違って、初期化しただけでは単相型にならないっぽい



851 名前:デフォルトの名無しさん [2014/04/23(水) 23:18:57.87 ID:ddVBuvib.net]
ためになるわー。

852 名前:835 mailto:sage [2014/04/24(木) 21:17:13.51 ID:4Y8KSBKa.net]
回答ありがとうございます。与えられたチャーチ数の定義がこれだったのですが、周りに聞いてもあまり良い回答を得られなかったので、とても助かりました。
確かにチャーチ数であれば、多相性が維持されなければ駄目ですね。

853 名前:デフォルトの名無しさん mailto:sage [2014/05/09(金) 06:41:29.78 ID:gmFOA17u.net]
最近JITが高速と聞くのですが
MLtonよりもJITが高速になる場合も
あったりするのでしょうか

854 名前:デフォルトの名無しさん mailto:sage [2014/05/09(金) 11:29:52.70 ID:88BxxZ+X.net]
早くなるケースもあるけど
大抵のケースは、工夫しないと遅いので作り込みが大変
なので、大体が学生の研究で作って、終わっちゃうんじゃないかな。

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

C言語の例だと、CERNで、HPのGotoさんが作ってたCINTというCインタプリタがインターラクティブ環境が必要ということで採用されてた。
現在は、規格に追従&共通基盤の恩恵を受けられるllvmベースのclingを開発中。

855 名前:デフォルトの名無しさん mailto:sage [2014/05/09(金) 12:50:13.67 ID:viF1oq7i.net]
10年以上前だがJavaのShuJITとかあったけど、その作者のプロジェクトを終えるに
あたってのまとめが、少々の理論的な優位点なんて、カネとヒトがたくさんある奴
(よーするにS

856 名前:un(当時)やIBMやHPの作ってるJVM)のパワーの前には吹き飛ぶ、
だった。
[]
[ここ壊れてます]

857 名前:デフォルトの名無しさん mailto:sage [2014/05/09(金) 23:01:59.86 ID:2uUNFhKi.net]
いまは、LLVM使うと巨人の肩に乗れるね。
JVMはHotSpotVMベースになってOpenJDKがオープンソースになってるからその上でいじれるように
JSのVMは激戦だけど、IEの実装以外はオープンソースという。
LuaJITは、個人でつくってるのでオーパーツ。

858 名前:デフォルトの名無しさん mailto:sage [2014/05/10(土) 22:51:43.07 ID:SJ0/UQRG.net]
言語処理系の最適化はマンパワーが必要なので……今はトレンドがLLVMに色々集まる方向性かな

859 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 21:26:19.65 ID:dnbz3Cdj.net]
C++11という巨人の肩に乗ろう

860 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 22:10:36.00 ID:xvKPpHt2.net]
コンパイラは、MLで作ると楽という話もあるが、、、
そこらへんはジレンマ?



861 名前:デフォルトの名無しさん [2014/05/13(火) 09:28:41.53 ID:34BaoroY.net]
>>847 js_of_ocaml ってJavaScriptで書くより最適化で高速になるからそういう方向もあるかも。
ttp://jsperf.com/js-of-ocaml

862 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 20:13:34.93 ID:5OIUPatf.net]
Excelのセル中で、F#で定義した関数が使えたら面白いかもと思った。

863 名前:デフォルトの名無しさん [2014/05/16(金) 08:18:12.70 ID:72NRi/gE.net]
altJS としては最適化手法が数学的に議論されていて論文も出ている js_of_ocaml が最強なのでは:
ttp://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.224.7457&rep=rep1&type=pdf

864 名前:デフォルトの名無しさん mailto:sage [2014/05/16(金) 16:19:49.33 ID:PtE4FBA8.net]
LuaJITって個人のなの?ブラジル生まれだとは知ってたが。
あとllvmってコンパイラ基盤としては楽だけど、インタプリタとしてはちょっと難ありじゃないかしら。
適当に使うと最初の起動時間がかなり遅い。

865 名前:デフォルトの名無しさん mailto:sage [2014/05/17(土) 03:51:33.29 ID:RMSyflwZ.net]
Luaは、ブラジル、リオデジャネイロの大学の研究グループから
LuaJIT作ってるのはドイツ、ミュンヘンの人

866 名前:デフォルトの名無しさん mailto:sage [2014/06/01(日) 17:00:19.03 ID:3NiYSkpU.net]
TAPLのexercise 3.2.5が分からん。なんで3.2.3の定義で S_i ⊆ S_{i+1} になるんだ?
各S_iは最初のS_1とかを除いて、disjointになるように思える。
本持ってる人教えて

867 名前:デフォルトの名無しさん mailto:sage [2014/06/01(日) 20:16:49.72 ID:dwNATPFa.net]
https://bitbucket.org/camlspotter/ocaml-zippy-tutorial-in-japanese/src/434b26af16405ba8aaae0d89ba12bd2275eac9d3/4.02.md?at=default

868 名前:デフォルトの名無しさん mailto:sage [2014/06/09(月) 23:28:07.14 ID:g6XVfS4Z.net]
ocamlの演算子、**より~-.の方が優先順位が高いのはなぜ?

869 名前:デフォルトの名無しさん mailto:sage [2014/06/22(日) 23:27:34.81 ID:kfNNTRTT.net]
単項だからでは

870 名前:デフォルトの名無しさん [2014/07/05(土) 07:26:50.37 ID:uomUGxMD.net]
OCamlの日本語の文字列扱うのて
上手く行かないものですか?



871 名前:デフォルトの名無しさん mailto:sage [2014/08/01(金) 09:24:52.78 ID:Z/VI2an6.net]
どの程度のレベルで上手くやろうとしているのか分からないけど、単純にstring型に代入、表示は何も無しでも動作するが、Stringモジュールは多言語に対応しているわけではない。String.lengthなどは狙い通りには動かない。
ライブラリ(Batteries, Camomile)等を使えば日本語できる。

と思ってBatUTF8を弄ってみたが、containsとかiterとかでBatUChar.tを取り扱う必要があるくせに、
BatUChar.t型を作る方法が面倒だなあ。of_digitしか無い。BatUTF8.get "あ" 0で誤魔化せるが、迂遠。

872 名前:デフォルトの名無しさん [2014/08/28(木) 00:17:52.33 ID:KKzfTscW.net]
SML/NJ version 110.77 リリース!
バージョン番号を4.0にリセットする前に、数回のリリースがあって、その中に64bitサポート
が含まれるらしいが、今回はbugfixのマイナー・リリースらしい。
外部関数の32bitコンパイルがそろそろサポートされなくなりつつあるので、64bitサポートが
はやくリリースされてほしい。

873 名前:デフォルトの名無しさん mailto:sage [2014/08/28(木) 00:31:14.45 ID:3eVJnuNA.net]
まだやってるんだな NJ

874 名前:デフォルトの名無しさん mailto:sage [2014/08/28(木) 22:23:43.51 ID:fRdOqM0/.net]
camomileの使い方が全然わからないんですがどこを読めばいいんでしょうか
主に文字コード変換と正規表現について知りたいです

875 名前:デフォルトの名無しさん mailto:sage [2014/08/29(金) 22:52:22.51 ID:LjCjaXt3.net]
いつの間にかOCaml4.02.0

876 名前:デフォルトの名無しさん [2014/08/30(土) 19:35:20.64 ID:8G53+yskN]
age

877 名前:デフォルトの名無しさん [2014/08/30(土) 23:41:43.96 ID://K1VbLN.net]
test

878 名前:デフォルトの名無しさん mailto:sage [2014/09/02(火) 08:32:32.40 ID:3nEDqgz+.net]
OCamlのマニュアルにocamlbrowserがまだあるのはバグっすな

ocamldoc/trunk/manual/cmds/Makefile line#2
remove "browser.tex "

879 名前:デフォルトの名無しさん [2014/09/02(火) 22:57:08.51 ID:h4iRRc1G.net]
ocaml標準のlexでは日本語が扱えないのでulexに差し替えたらparserが死んだでござる。
ダメだこりゃ

880 名前:デフォルトの名無しさん mailto:sage [2014/09/16(火) 16:34:15.58 ID:smkPtKEd.net]
>>868
ttps://github.com/darioteixeira/ccss/blob/master/src/ccss.ml#L25
menhirとulexを一緒に使う方法。



881 名前:デフォルトの名無しさん mailto:sage [2014/09/24(水) 22:11:44.77 ID:ChDiOOXp.net]
ocaml 4.01.0で
# Obj.size @@ Obj.repr 1
がバグるんだけど、理由わかる?

882 名前:デフォルトの名無しさん mailto:sage [2014/09/24(水) 23:08:38.11 ID:wtmzOZEz.net]
仕様です。
ソースはおろかドキュメントすら読まずにObjを使うとはアホの極みです。

Chapter "Interfacing C with OCaml", Section 2..3

883 名前:デフォルトの名無しさん mailto:age [2014/09/26(金) 02:16:11.74 ID:63HfXufw.net]
OCamlのすごさはもっと知られるべき #オブジェクト指向 や #関数型 は「敗者の道具」である itpro.nikkeibp.co.jp/atcl/watcher/14/334361/092200062/?ST=develop&amp;P=3

884 名前:デフォルトの名無しさん mailto:sage [2014/09/26(金) 11:58:16.90 ID:p4JSIuT/.net]
>>872
これタイトルで損してる記事だろ

885 名前:デフォルトの名無しさん mailto:sage [2014/09/26(金) 11:59:36.06 ID:LJo7FzMV.net]
みかかデータ、マンセー記事っぽかったけど

886 名前:デフォルトの名無しさん mailto:sage [2014/09/26(金) 12:42:39.46 ID:/S6uCtFc.net]
関数型とかマルチパラ代務とかドカタには無理。オブジェクトだって散々語られてようやく、いや未だ、か

一部の突出した集団以外は、ほかにどうしようもない人が沈殿する職業になってるイメージ

887 名前:デフォルトの名無しさん [2014/09/26(金) 20:12:51.02 ID:+dkMIegW.net]
do構文の使用禁止の規約って全部>>=で書くってことなのだろうか。理由も含めて気になる。

888 名前:デフォルトの名無しさん mailto:sage [2014/09/26(金) 20:54:07.13 ID:mU/FSdzC.net]
>>872
前半で散々オブジェクト指向をこきおろしておきながら、
中盤でOCamlを推すという意味不明な文章の論理の展開がある
ML族を推すのなら Caml か SML にしないと一貫性が無いし、
Caml にオブジェクト指向を後付けした "O"Caml 開発時の判断は
今となっては流行に踊らされた大きな失敗であったと断罪すべき

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

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

>>876
ソースコード解析ツールなら言語処理系と似た構造になるから、
(一般的には副作用を模倣するために使われる)do記法を使う必要性は無いと思われ

889 名前:デフォルトの名無しさん [2014/09/26(金) 21:11:21.88 ID:+dkMIegW.net]
ちょっとぐぐってみたらこういうページがあった。
www.haskell.org/haskellwiki/Do_notation_considered_harmful

890 名前:デフォルトの名無しさん mailto:sage [2014/09/26(金) 21:24:18.32 ID:rzI+KhbO.net]
たしかにタイトルで損したみたいだな



891 名前:デフォルトの名無しさん mailto:sage [2014/09/27(土) 09:02:30.03 ID:aRJ76A2x.net]
ああいう煽り記事読んでドキドキするのは思春期の子供だけ
もっと大人向けの真面目に面白い記事は無いのか?

892 名前:デフォルトの名無しさん mailto:sage [2014/09/27(土) 09:08:36.15 ID:V9AoMXji.net]
 もし完全無欠のプログラマが存在するのであれば、そうした方法論に頼らなくても、
完全に意図通りに動作するプログラムを頭から書き下していけばいいのです。
オブジェクト指向プログラミングや関数型プログラミングは、不完全な人間のために用意されたもの、
いわば「敗者の道具」といえます。

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



完全に朝日脳だな

893 名前:デフォルトの名無しさん mailto:sage [2014/09/27(土) 17:11:59.10 ID:lJpImKEe.net]
産経信者も一緒に死ねカス

894 名前:デフォルトの名無しさん mailto:sage [2014/09/28(日) 11:09:58.25 ID:yTX/1oq/.net]
今回朝日がしでかしたことを誰かまとめてくれ

895 名前:デフォルトの名無しさん mailto:sage [2014/09/28(日) 12:21:46.09 ID:MFWVwvB9.net]
スレ違いカスはお引き取り下さい

896 名前:デフォルトの名無しさん mailto:sage [2014/09/28(日) 12:22:16.97 ID:/z7vQ2zP.net]
>>883
どいたかこ死亡

897 名前:デフォルトの名無しさん mailto:sage [2014/09/28(日) 12:38:21.08 ID:3fm9b2hk.net]
土井たか子がリアルに退いた過去になったのか

898 名前:デフォルトの名無しさん mailto:sage [2014/09/28(日) 12:39:24.70 ID:/z7vQ2zP.net]
土井がどいた過去

899 名前:デフォルトの名無しさん mailto:sage [2014/09/28(日) 12:40:25.54 ID:/z7vQ2zP.net]
おんたけさんが噴火して
おたけさんが逝った

900 名前:デフォルトの名無しさん mailto:sage [2014/10/07(火) 01:19:25.02 ID:RDe60glL.net]
対話環境を再起動せずに、リコンパイルしたライブラリをロードし直す方法ってありますか?
#load でもう一度ロードすると、シグニチャが異なると怒られてしまいます



901 名前:デフォルトの名無しさん mailto:sage [2014/11/07(金) 22:47:28.24 ID:jjvVlXlA.net]
OCamlで型クラスを実現する方法ある?
あとカインドも

902 名前:デフォルトの名無しさん mailto:sage [2014/12/28(日) 01:38:33.30 ID:t9XFY33G.net]
モジュールで型クラス的なものを作ることができる。便利とは言いがたいが

903 名前:デフォルトの名無しさん mailto:sage [2015/02/05(木) 08:14:28.48 ID:0RN82SQI.net]
Haskell より OCaml の方が部分部分で好みなんだけど、
OCaml は最近何か進展とか発展とか無いのかな。

904 名前:デフォルトの名無しさん mailto:sage [2015/02/05(木) 13:15:20.83 ID:tkrhoEGU.net]
4.0出たばっかじゃなかったっけ

905 名前:デフォルトの名無しさん mailto:sage [2015/02/05(木) 14:50:21.24 ID:j+EW35P1.net]
岡村はソース醜いのがなあ

906 名前:デフォルトの名無しさん mailto:sage [2015/02/05(木) 19:17:09.87 ID:Omd6cUWA.net]
>>894
たとえば?

907 名前:デフォルトの名無しさん mailto:sage [2015/02/05(木) 20:40:25.53 ID:SFYHhnYx.net]
上から読んでいけば何しているのか分かるOCamlのソースは読みやすい部類
batteriesとかcoreといった大きいライブラリでも、モジュールと同名のファイル見ればいいだけなので、
どこに何があるのか探しやすい

基本的に手続き脳なので、haskellはどこから読めばいいのか分からない
悪名高いimport文のおかげでもっと読めない

908 名前:デフォルトの名無しさん [2015/02/05(木) 21:27:52.95 ID:uGoWQo5h.net]
OCamlなんとなくソースの見た目のバランスが悪いっていうのはなんかわかるわ。

909 名前:894 mailto:sage [2015/02/06(金) 00:00:17.76 ID:mrZTa4bi.net]
>>897
まさにそんなとこ。ぱっと見よくない

910 名前:デフォルトの名無しさん mailto:sage [2015/02/06(金) 11:46:04.54 ID:qvKWViHE.net]
ソースが読みにくい言語は致命的に生産&保守効率が悪い。



911 名前:デフォルトの名無しさん mailto:sage [2015/02/06(金) 11:56:15.06 ID:uqQOSJHn.net]
>>898

SMLならいいの?

912 名前:デフォルトの名無しさん [2015/02/19(木) 21:32:44.77 ID:VWBqr6Q7.net]
レコード型ある言語、多相レコードある言語、フィールドがファーストクラスにできる言語
おしえて。
ぜんぶもってるのがいい。

913 名前:デフォルトの名無しさん mailto:sage [2015/02/19(木) 22:31:13.58 ID:/rXoqLFu.net]
>>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#解説
 www.pllab.riec.tohoku.ac.jp/smlsharp/docs/2.0/ja/Ch7.xhtml

914 名前:デフォルトの名無しさん [2015/02/19(木) 22:34:08.05 ID:VWBqr6Q7.net]
↑ありがと。
ほんとにぜんぶ!? フィールドファーストクラスなのその言語?

915 名前:デフォルトの名無しさん [2015/02/19(木) 22:35:11.19 ID:VWBqr6Q7.net]
あ、かいてあった、ごめん。

916 名前:デフォルトの名無しさん [2015/02/19(木) 22:37:49.31 ID:VWBqr6Q7.net]
SML/NJってやつは、フィールドがファーストじゃないとして、
SML#ってやつはファーストなの?

ほかにも>>900 全部持ってる言語とかあればおしえて。みんな。

917 名前:デフォルトの名無しさん [2015/02/20(金) 03:39:21.83 ID:V63A/fo0.net]
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みたして相だけどコンパイル時に型ちぇっくしてくれないよねそれ?
  うーんなんかない?

918 名前:デフォルトの名無しさん [2015/02/20(金) 09:34:49.39 ID:vrO8Sxqb.net]
1

919 名前:デフォルトの名無しさん mailto:sage [2015/02/20(金) 10:31:17.89 ID:N6pKHonh.net]
じゃあ俺は2

920 名前:デフォルトの名無しさん mailto:sage [2015/02/20(金) 10:55:47.88 ID:sOgXDRpH.net]
宿題は自力でやれw



921 名前:デフォルトの名無しさん mailto:sage [2015/02/21(土) 00:55:59.35 ID:KgB/c0aN.net]
>>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(とそのすべての処理系)のフィールドはファーストクラスである

922 名前:デフォルトの名無しさん mailto:sage [2015/02/21(土) 01:03:27.14 ID:KaIHMFIz.net]
>   - val get_x = #X : {X: real, Y: 'a} -> real;
でもこの get_x って、>>902 の point_3d には使えないよね。

923 名前:デフォルトの名無しさん mailto:sage [2015/02/21(土) 01:45:43.43 ID:KgB/c0aN.net]
うん、使えない
それが >>910 で書いた(Standard ML言語仕様における)「型システム」の制約だね
その制約を無くした SML# が特異なだけで、SML/NJ 以外の大半の SML 処理系に同じ制約がある

924 名前:デフォルトの名無しさん [2015/02/21(土) 06:39:28.04 ID:QYKbOsyjA]
SML#はstructual subtype関係 もつんじゃないの?↑のリンク先見る限りさ
{l1:a, l2:b} < {l1:a} みたいに扱われないの?
javaの部分型関係は明示的にクラス名に順序関係付けただけのものだけじゃないの?

フィールドをファーストクラスとして扱えるような技があるのはうえの説明で理解した。Thanks. 思ってたより使えるなsml。

一方で、フィールドリテラル自体を、関数経由でなく、ファーストクラスとしてあつかう必要がある/そっちのほうが好ましい かもしれない
上のリンク先にある論文見るかぎり(例えば↓)そういういみでのファーストクラスフィールドは現状は扱ってないと書いてある。
SML# in Industry: A Practical ERP System Developmentn,
# val get_x = #X;
のXに実行時中に得られる文字列の値を使いたい
String str = "myfld";
Rec rec = {str:"yaaa"};
みたいにさ。

うーんsmlでかくか、sml#つかうか、それともJava,Scala,でかくかまような。
型推論は必要ないかもしれないし、sml#ってどこまでメンテされるのか解らないし、SML/NJがいいかな、、しかし>>911がきになるな。
scalaのオブジェクトでレコードをシミュレートするか、、

ファーストクラスのフィールドを持つ、
レコードで構造的な部分型関係をもっているようなのがほしい。

925 名前:デフォルトの名無しさん [2015/02/21(土) 06:49:52.82 ID:QYKbOsyjA]
というかここMLのすれだったのか、関数型言語全般かと思った。

926 名前:デフォルトの名無しさん mailto:sage [2015/02/21(土) 20:03:59.94 ID:KgB/c0aN.net]
>>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} という部分型関係を持つ

927 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/03/06(金) 00:20:10.28 ID:Utx2vhNJ.net]
MLで株取引してるヤツおる?

928 名前:デフォルトの名無しさん mailto:sage [2015/03/06(金) 19:18:02.97 ID:z8rf25M9.net]
>>916
https://www.janestreet.com/

929 名前:デフォルトの名無しさん mailto:sage [2015/04/11(土) 09:23:04.09 ID:4MGH5loU.net]
『関数型プログラミングに目覚めた! IQ145の女子高校生の先輩から受けた特訓5日間』
www.amazon.co.jp/dp/4798043761/

なんか面白そう。
ベストセラー1位だし。

930 名前:デフォルトの名無しさん mailto:sage [2015/04/11(土) 11:09:33.39 ID:6e+Pm3/z.net]
著者名みてどん引き



931 名前:デフォルトの名無しさん mailto:sage [2015/04/11(土) 14:52:19.95 ID:kM0sKeAC.net]
>>918
まーたハゲの人バカやってるのか

932 名前:デフォルトの名無しさん mailto:sage [2015/04/30(木) 22:13:28.21 ID:CyAc4DaC.net]
これあわせで、qiitaで何ヶ月か前に宣伝始めたんだよな。

今回のMSの開発者向けイベントで、マルチプラットフォームアピールしてたから、F#にもチャンスが増えるかも。

933 名前:デフォルトの名無しさん mailto:sage [2015/06/21(日) 14:35:56.40 ID:jZdgW1bu.net]
ML系でマルチスレッドプログラミングってどうやるの?
できれば、プリエンプティブで。
ノンプリなら、バインディングさえ準備できればpthreadとか使うだけで出来る?

あと、マルチコアで動く処理系ってどんなのがありますか?

934 名前:デフォルトの名無しさん [2015/06/21(日) 15:56:19.44 ID:h+2IwqsQ.net]
ノンプリエンプティブな並行のフレームワークとしてはConcurrent ML、
マルチコアでプリエンプティブで動く処理系は…MultiMLton?使ったことないけど

935 名前:デフォルトの名無しさん mailto:sage [2015/06/21(日) 21:09:48.45 ID:jZdgW1bu.net]
>>923
ありがとう!参考にしてみます。

936 名前:デフォルトの名無しさん mailto:sage [2015/06/22(月) 21:17:40.35 ID:NI+fH6po.net]
SML/NJにCMLが入ってるみたいだけど
呼び出しかた自体が良く分かりませんでした,,,

937 名前:デフォルトの名無しさん mailto:sage [2015/06/22(月) 22:19:01.14 ID:OHI7eLtz.net]
まだバイトコードだけなんで処理速度的にはメリット薄いがocaml-multicoreも開発中
https://github.com/ocamllabs/ocaml-multicore

諦めてF#が一番楽そう

938 名前:デフォルトの名無しさん mailto:sage [2015/07/04(土) 11:48:28.89 ID:D//5Uocc.net]
新潮10月号(9/7発売)に最新長編『モナドの領域』330枚一挙掲載

939 名前:デフォルトの名無しさん mailto:sage [2015/07/19(日) 15:49:50.98 ID:1yK25cK1.net]
Haskell ガチムチいい男
F# タマもサオも取ったニューハーフ
OCaml タマは摘出、サオは残したオカマ

Java ノン気の一般人
C 古風な一般人
C++ 団塊の世代の一般人
C# ゆとり世代

940 名前:デフォルトの名無しさん mailto:sage [2015/08/01(土) 08:14:56.43 ID:keSdeN9Q.net]
Ocamlってschemeのvaluesに相当するのないのですか?



941 名前:デフォルトの名無しさん mailto:sage [2015/08/02(日) 05:19:00.73 ID:OeY6iFU6.net]
+ と+. って絶対に区別しないといけないのです?浮動小数と整数でコードわけるのめんどくさい

942 名前:デフォルトの名無しさん [2015/11/01(日) 12:21:17.11 ID:FL14q5P6.net]
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でエラーがでます
どうやってインタプリタに読み込めばいいのでしょうか

943 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 17:23:06.30 ID:LFfI8YF2.net]
C++11とboostでmlと等価なこと出来るようになってない?

944 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 12:29:48.85 ID:IQOnvxBL.net]
楽にはなっても等価にはなってない

945 名前:デフォルトの名無しさん [2016/06/16(木) 23:45:45.68 ID:ogi8+DdB.net]
OCaml覚えてHaxeのターゲット自分で書けるようになったらなあって思ったけど
パット見何が書いてあるのか良くわからない

946 名前:デフォルトの名無しさん mailto:sage [2016/07/09(土) 07:50:35.12 ID:lXAilHyr.net]
>>928
JavaScript 苦労人

947 名前:デフォルトの名無しさん mailto:sage [2016/07/22(金) 00:00:06.57 ID:Zm57F0sF.net]
OCaml インストールしてたら �� が出てきた。
絵文字がこんなところにも進出してるとは……

948 名前:デフォルトの名無しさん mailto:sage [2016/07/23(土) 20:35:22.56 ID:K/hEThar.net]
F#はいまいち盛り上がらんのでOCamlに戻るか

949 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 08:26:29.15 ID:FitcqrL7.net]
OCamlには関数合成がないと訊くんですが、@@は合成ではないのですか

950 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 10:19:54.63 ID:75SbB3DN.net]
OCaml勉強しはじめの初心者の質問なんですが、どなたか教えてください

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

ってあるんですが、これがまず理解できない
()ってunitの定数値というかリテラルみたいなものなのではないですか?
letで束縛する的なコードが書けることが腑に落ちないのですが・・・



951 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 13:34:30.13 ID:xfbClL/y.net]
() って C の void みたいなもんやろ。
hello() の戻り値が void で両辺 void = void で OK みたいな。

952 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 18:21:07.36 ID:anKFyHj7.net]
=が等号ならそんな感じってするのですが、
let 変数名 = 値 って形に当てはまると
unitの()って変数名であり値でもあるってこと?
とか考え出すと混乱して

953 名前:オまいます・・・ []
[ここ壊れてます]

954 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 18:22:47.76 ID:h+44ee0t.net]
>>939
その用途の場合単なるエントリポイントなので()にそんなに意味はない。
let _ =〜でも動作するよ。

955 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 19:39:25.71 ID:MnPjnRyk.net]
>>941
letは代入ではなくパターンマッチ
普段は let パターン = 式 のパターンのところに新規の束縛(変数名)を一個置いてるだけ
let 1 =2 とか書けてMatch_failureになるよ

956 名前:デフォルトの名無しさん mailto:sage [2016/09/02(金) 21:44:32.31 ID:TuW8Vb/N.net]
皆さんありがとう、何となく分かりました
実際に「let x::xs = [1;2;3;4];;」とかやるとx=1、xs=[2;3;4]とかなりますね
letってのはmatchの単独パターンバージョンみたいな感じなんですね、きっと

957 名前:デフォルトの名無しさん mailto:sage [2016/09/03(土) 14:38:27.01 ID:xDozGH3Q.net]
OCamlも捨てがたい
qiita.com/HirofumiYashima/items/98d35b40dde12bbb5d6d

958 名前:デフォルトの名無しさん mailto:sage [2016/09/04(日) 01:00:38.68 ID:m/Nfzz4G.net]
たびたび初心者的質問ですいません
OCamlにはListやArrayに対するgroup by関数って無いんでしょうか?
標準ライブラリ(ideoneやyukicoderで利用可能)の範囲内で存在すれば嬉しいんですが・・・

959 名前:デフォルトの名無しさん mailto:sage [2016/09/04(日) 21:14:26.78 ID:ZFd7dRv3.net]
List.filter : ('a -> bool) -> 'a list -> 'a list ならある。
Arrayにはないから自力で実装するかExtLibでも使おう。

っていうか標準ライブラリだったら自分で検索しようね。
馬鹿なの?

960 名前:デフォルトの名無しさん mailto:sage [2016/09/04(日) 21:40:33.19 ID:m/Nfzz4G.net]
>>947
標準ライブラリは探したけど、無かったから自作したよ
最近だとF#にしろscalaにしろgroupbyがあるのが当たり前だから、確認のため聞いてみた
その程度の事情も察せないお前が馬鹿じゃねw



961 名前:デフォルトの名無しさん mailto:sage [2016/09/05(月) 20:50:26.74 ID:uZnwqH5s.net]
宿題や競プロでもやるんじゃなきゃCoreかBatteries入れないとやってられない

962 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 11:17:54.65 ID:hxR4/XV4.net]
標準ライブラリゴミすぎ

963 名前:デフォルトの名無しさん mailto:sage [2016/09/10(土) 20:27:19.82 ID:vL431mpn.net]
map reduceに相当するもんがあればいけるんじゃね

964 名前:デフォルトの名無しさん mailto:sage [2017/02/27(月) 20:54:32.60 ID:nBcs47LL.net]
「プログラミングの基礎」を買ってきてOcamlを始めようとしたのですがインタプリタが日本語を表示してくれません。ぐぐっても知識が足らず解決法がわからなくて途方に暮れています。誰か助けて…

965 名前:デフォルトの名無しさん mailto:sage [2017/02/27(月) 21:06:38.41 ID:nBcs47LL.net]
使ってる環境はubuntu16.10です。

966 名前:デフォルトの名無しさん mailto:sage [2017/02/28(火) 21:46:08.53 ID:hBxDt9/3.net]
>>952解決しました

967 名前:デフォルトの名無しさん mailto:sage [2017/03/01(水) 12:55:25.91 ID:jLbNtrZK.net]
どのようにして解決したのか書いてもらえると
同じ状況に陥った人の助けになるかも知れないわけだが…

968 名前:デフォルトの名無しさん mailto:sage [2017/03/01(水) 16:07:29.52 ID:ZtKy2rs9.net]
>>955
解決策を2つ試しました

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

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

コンピュータやプログラミングに詳しい方にはかなりくどいと思いますが、多分自分のようなプログラミング初心者が読む本だと思うので念入りに書いておきます。

969 名前:デフォルトの名無しさん mailto:sage [2017/03/01(水) 16:10:35.17 ID:ZtKy2rs9.net]
というか、誰も見てないと思ってた・・・

970 名前:デフォルトの名無しさん mailto:sage [2017/03/01(水) 16:46:02.21 ID:8oSlLlXA.net]




971 名前:デフォルトの名無しさん [2017/05/01(月) 06:16:47.63 ID:Cn5FkhjE.net]
純粋関数型データ構造が発売されたってのに盛り上がってないな

972 名前:デフォルトの名無しさん mailto:sage [2017/05/01(月) 08:26:08.29 ID:X5RvQ3AI.net]
>>959
あれを読むような層は、既に原書で読んでるから気にもしないのでは。

973 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 11:59:51.61 ID:heN7Y+lD.net]
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) にそうなってるのはしょうがないとして、ユーザーは不満だったりしないんですかね?
仕様変えてどこでも順序気にしなくてよくなるようにするのは何か不都合があるんでしょうか?

974 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 12:35:03.09 ID:nyiBm3r5.net]
はい

975 名前:デフォルトの名無しさん mailto:sage [2017/06/02(金) 14:10:54.16 ID:v4wV8DId.net]
>>959
書店で立ち読みしてみたんだけど微妙に扱っているデータ構造少なくね?
サンプルコードがStandard MLというのは驚いたが。

976 名前:デフォルトの名無しさん mailto:sage [2017/06/09(金) 03:43:45.31 ID:Z/PWf/cV.net]
末尾再帰がイメージできないんだけど

977 名前:デフォルトの名無しさん mailto:sage [2017/06/09(金) 10:56:43.72 ID:jgO9PNm3.net]
「なんでも再帰」や「なんでも継続」を読んでみたら?例はSchemeだが

978 名前:デフォルトの名無しさん [2017/06/09(金) 13:37:56.60 ID:3OdcZ+id.net]
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に変えたループで実行できる.
こんな感じでイメージできる?

979 名前:デフォルトの名無しさん mailto:sage [2017/06/09(金) 14:50:46.84 ID:rw1qC18c.net]
f_outer(n){
f_inner(n, accumulator){
if 1 == n
accumulator
else
f_inner(n - 1, n * accumulator)
}
}

accumulator に蓄積すれば?

980 名前:965 mailto:sage [2017/06/09(金) 14:56:24.07 ID:rw1qC18c.net]
f_outer(n){
f_inner(n, accumulator){
if 1 == n
accumulator
else
f_inner(n - 1, n * accumulator)
}
return f_inner(n, 0)
}

修正。
内部関数を、return するのが抜けていた



981 名前:デフォルトの名無しさん mailto:sage [2017/06/09(金) 16:51:44.77 ID:VCuqCK40.net]
おおおわかった気がする
ありがとう!
なんでも再起とやらも読んで見ることにする

982 名前:デフォルトの名無しさん [2017/06/09(金) 17:05:35.04 ID:3Dqy8l+L.net]
>>968
return f_inner(n, 1)
じゃない?

983 名前:デフォルトの名無しさん mailto:sage [2017/06/25(日) 18:30:26.47 ID:v1ZjLLZV.net]
OcamlとかCoqって名古屋以外でも大学での授業とか研究に使われているの?
一時期のブームは去ったみたいだけど。
大学の情報学部とかの現状にはちょっとだけ興味がある。

そして流行に後れて今頃勉強している40代のオレ。

984 名前:デフォルトの名無しさん mailto:sage [2017/07/03(月) 09:21:46.88 ID:ipQv+IYB.net]
東大東北大お茶の水では使ってた

985 名前:デフォルトの名無しさん mailto:sage [2017/07/03(月) 17:44:24.93 ID:/M1wO8+Z.net]
授業で使ったのに広まらなかったということか。
つまり啓蒙に失敗したと。

986 名前:デフォルトの名無しさん mailto:sage [2017/07/04(火) 13:46:26.44 ID:VgVQ93XC.net]
Occamなら知っとるぞよ?

987 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 14:21:04.56 ID:06OhWRFP.net]
>973
広まらなかったというかキラーアプリがなかったというか…
結局Ocamlで作られたアプリで唯一プログラマ間で流行ったのがCoqなんじゃね?

988 名前:デフォルトの名無しさん mailto:sage [2017/07/12(水) 14:33:02.68 ID:bLDjTsNM.net]
OCaml は金融とかで使われてるんじゃ無かったか。

そういや Rust も最初は OCaml でコンパイラー書かれてたんだよな。

989 名前:デフォルトの名無しさん mailto:sage [2017/07/14(金) 23:08:50.92 ID:UJz0OWoz.net]
俺がocaml覚えたきっかけはとあるエロゲーのチートツールなんだが
あれの作者がなぜそれを採用したかにはずごい興味ある

990 名前:デフォルトの名無しさん mailto:sage [2017/07/15(土) 12:06:36.80 ID:03i9G/wL.net]
>>977
どっかの学生だったんじゃないの?兄妹ものエロゲだけに京大とか。



991 名前:デフォルトの名無しさん mailto:sage [2017/08/16(水) 21:00:55.34 ID:H/HIEf+2.net]
(*´・ω・`*)

992 名前:デフォルトの名無しさん mailto:sage [2017/08/17(木) 13:02:39.82 ID:5mQoD0+b.net]
(´・ω・`)

993 名前:デフォルトの名無しさん mailto:sage [2017/09/01(金) 18:43:59.45 ID:RxXe6GrD.net]
8月はちょっと纏まった時間がとれたので、
「ソフトウェアの基礎」日本語訳の練習問題を解きすすめてみた。

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

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

実務でCoqが要求されることは当分ないと思うけど、
逆変換の関数は少なからず実装することがあるので
ときどき「Coq使って証明したい」という気分にはなるんだよなー。

994 名前:デフォルトの名無しさん mailto:sage [2017/09/05(火) 11:03:28.55 ID:a/Cb1ZW9.net]
ocaml.jp/
死んでるな……

> ( ! ) Parse error: syntax error, unexpected 'new' (T_NEW) in /virtual/osiire/public_html/lib/func.php on line 531

995 名前:デフォルトの名無しさん mailto:sage [2017/09/08(金) 14:02:07.35 ID:swD2wqBn.net]
ocaml.jpは息してる?

996 名前:デフォルトの名無しさん mailto:sage [2017/09/24(日) 12:35:45.27 ID:VL5Szw+L.net]
いつまで死んでるんだよ

997 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 00:31:09.35 ID:JZnIdnEQ.net]
復活した

998 名前:デフォルトの名無しさん mailto:sage [2017/10/03(火) 02:20:47.65 ID:upqeSfz9.net]
復活したのは良いけど、一言何か無いのかよ。誰が管理してるんだ。

999 名前:979 mailto:sage [2017/10/05(木) 12:08:08.18 ID:SZzrAZT5.net]
日本語訳の古さに苦戦しつつLogic.vまで進めていたところ……
久しぶりに英語の本家を見たら、
なんかVol.1 〜 Vol.3に増えてるー!?
あまりの道のりの遠さに絶望しつつ内容を見ると、
旧版からホーア理論まわりをVol..2に分離し、
Vol.3は赤黒木等の少し高度なデータ構造について色々とCoqで証明して感じらしい(新規)。

……く、面白そうじゃないか。

1000 名前:デフォルトの名無しさん mailto:sage [2017/10/05(木) 19:45:51.56 ID:72rIdNeW.net]
>>981
リンクpls



1001 名前:デフォルトの名無しさん mailto:sage [2017/10/07(土) 12:06:25.63 ID:689sKi0/.net]
>>988
https://softwarefoundations.cis.upenn.edu/

1002 名前:979 mailto:sage [2017/10/30(月) 19:39:25.32 ID:asGH9s/c.net]
ここ一ヶ月、旧くなった日本語版を捨て英語版に再挑戦してみた。
以前は出来るだけ写経していたが時間がかかり過ぎるので、
付属の.vファイルを直接書き換える方針に変更。

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

どうもSICPみたいな標準教科書を目指してるっぽい?
こーゆうの(coq)を国立研究所で作れる国はやっぱり凄いと思う今日この頃。

1003 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 07:27:01.78 ID:wuKEf1Sh.net]
a

1004 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 07:27:36.60 ID:wuKEf1Sh.net]
sit

1005 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 07:27:56.41 ID:wuKEf1Sh.net]
dot

1006 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 07:28:13.79 ID:wuKEf1Sh.net]
egg

1007 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 07:28:31.25 ID:wuKEf1Sh.net]


1008 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 07:28:48.81 ID:wuKEf1Sh.net]
this

1009 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 07:29:26.33 ID:wuKEf1Sh.net]
combi

1010 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 07:30:08.09 ID:wuKEf1Sh.net]
it



1011 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 07:30:42.85 ID:wuKEf1Sh.net]
2

1012 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 07:31:16.98 ID:wuKEf1Sh.net]
ping

1013 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 07:32:05.81 ID:wuKEf1Sh.net]
pong

1014 名前:デフォルトの名無しさん mailto:sage [2017/11/01(水) 07:32:32.73 ID:wuKEf1Sh.net]
wild

1015 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 3061日 0時間 17分 11秒

1016 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<241KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef