11/04/02 19:12:41.89 .net
>>388
ワロタwww
398:デフォルトの名無しさん
11/04/04 00:00:15.57 .net
NJのUnsafe.castのあまり意味のない使い道
(fn x => x (Unsafe.cast x)) (fn x => (Unsafe.cast x))
399:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/04/05 21:49:01.21 .net
>>392
OCamlならこんなかんじ?
(fun x -> x (Obj.magic x))(fun x -> x (Obj.magic x));;
401:デフォルトの名無しさん
11/04/14 09:44:35.08 .net
OCamlに興味が湧いてとりあえず五十嵐某の書籍買ってみた。
で、技術書買って真っ先にやることと言えば正誤チェック。
つ・・つかえねぇ・・・この本
誤謬の嵐だぜこりゃw
量がハンパネェ
本として機能してない
残念だがゴミ箱へ
402:デフォルトの名無しさん
11/04/14 21:22:48.50 .net
>>395
そんなにひどいの?
403:デフォルトの名無しさん
11/04/15 00:44:37.03 .net
>>395
うん?
自分にとっては、haskellの学習に大きく寄与したぞ?
コラムの再帰に関する格言と、その本質に言及した言葉が無かったら、関数型言語を挫折してた
(関数型言語の魅力が解らなかっただろう)
自分は、この人にhaskell版を書いて欲しいぞ
今なら言える
手続き型言語は全体的に(それをするには)「どうする」で作り、関数型言語は、全体的に(それは)「何か(あるいは、どんなものか)」で作る言語だと
404:デフォルトの名無しさん
11/04/16 12:37:58.03 .net
>>395
俺も最近買ってしまって読んでるんだが、誤植の場所を教えてくれ。
素人でもわかるものなのか?
405:デフォルトの名無しさん
11/04/16 12:57:42.57 .net
あれってネット上で読めなかったか
406:デフォルトの名無しさん
11/04/16 13:50:43.61 .net
>>395
> 誤謬の嵐だぜこりゃw
>>398
> 俺も最近買ってしまって読んでるんだが、誤植の場所を教えてくれ。
「誤謬」のある本と「誤植」のある本の違いは大きい。
本当はどっち?
407:398
11/04/16 17:02:39.70 .net
>>400
すまん。ちゃんと見てなかった。誤植じゃなくて誤謬か。
で、どこなんだろう。
408:デフォルトの名無しさん
11/04/17 20:32:04.80 .net
>>401
両方。誤植も誤謬もある。
URLリンク(www.sato.kuis.kyoto-u.ac.jp)
技術書でこれだけの間違いがあったら、どうやって本として機能するんだろう?
409:デフォルトの名無しさん
11/04/17 21:40:45.30 .net
>>402
そのページ印刷して本に挟んどけよ
410:デフォルトの名無しさん
11/04/17 22:50:12.49 .net
間違いは無いに越したことはないけれど、
これぐらいの量の間違いは大したことないと思う。
411:デフォルトの名無しさん
11/04/17 22:51:29.38 .net
十分大した事あるな
412:デフォルトの名無しさん
11/04/18 00:31:01.42 .net
技術書読んだことあんのか?
413:デフォルトの名無しさん
11/04/18 08:22:14.27 .net
技術書は静的型付けじゃないからな
414:デフォルトの名無しさん
11/04/18 11:08:36.97 .net
コーダとベリファイヤの性能が低い
415:デフォルトの名無しさん
11/04/20 18:55:51.89 .net
> 自分は、この人にhaskell版を書いて欲しいぞ
アマゾンで下のレビュー書いた人かいw
416:デフォルトの名無しさん
11/04/20 20:57:40.94 .net
ちょっと困っていることがあるので、助けてください。
ヨウ素がリストの参照になっているようなベクトルを用意して、各要素に
データを追記していくような処理
417:をさせると(具体的には、複数の時系列を記録 したファイルがあって、これを時間順に読む)、追記回数の自乗のオーダの 処理時間が掛る。リストの先頭に追加しているだけなので、線形時間でやって ほしい。
418:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/04/20 21:15:18.30 .net
ヨウ素とかベクレルの話かとオモタ
420:sage
11/04/20 21:46:08.88 .net
辞書(と見逃した自分も)がそっち方向に過学習してしまったらしい。すまん。
421:デフォルトの名無しさん
11/04/21 00:19:44.70 .net
自分の環境ではサンプルプログラムの実行に二乗オーダは見られなかった。
bigVの大きさを一桁下げると速度がぐっと変わるし、GCとかのせいな気がする。
422:デフォルトの名無しさん
11/04/26 20:50:17.84 .net
SMLの勉強していて思ったけど、最初に学ぶ言語として関数型言語はやはり難しいかも知れない。
C言語だとHello Worldから始まって、リスト処理は構造体とポインタの応用問題という位置づけだった。
SMLはいきなりリストと再帰の話から始まるw
BASICは、LISPよりも後から開発されて、しかも同じダートマス大学発祥だけど、
リスト処理が実装されていないのもそれなりの理由があったのかなと思う。
423:デフォルトの名無しさん
11/04/26 21:56:29.55 .net
奥さん、そこで Factorですよ。
424:デフォルトの名無しさん
11/04/26 22:12:07.58 .net
>>415
> BASICは、LISPよりも後から開発されて、しかも同じダートマス大学発祥だけど、
> リスト処理が実装されていないのもそれなりの理由があったのかなと思う。
LISPとBASICじゃ作られた目的が全然違う
それに当時の計算機の性能ではリスト処理は時間的にもメモリ的にも大変重い処理だった
今の感覚や価値観は60年代の計算機や言語・ソフトの評価や判断には全く通用しない
425:デフォルトの名無しさん
11/04/27 00:17:49.66 .net
最初は易しい言語で、ってことが重要に思えるところ、
その信念に基づいた妄想を長々と書きこむところ、
これはその人の性質をよく表していると思う。
こういうひとのためにも緩い言語は必要。
ML系はそういうのとは全然違う。
426:デフォルトの名無しさん
11/04/27 14:00:52.81 .net
>> 415
ポインタ+構造体+慎重な操作を免除して、いきなりリストが使えるのが
売りだと思うのだけれど。
また、MLは破壊的代入+whileループが特別な儀式をしなくても使えるの
で、再帰を学ばなくてもある程度は使える。
427:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/06/08 22:38:54.29 .net
保守
429:デフォルトの名無しさん
11/06/20 02:35:53.95 .net
Ocamlとか関数型言語とか難しいことはよくわからないが
ターミナルでTwitterクライアントが動くらしいので
Ocamltterに手を出してみる。
そういえば親父がLISP好きだったのを思い出す。
430:デフォルトの名無しさん
11/06/20 02:43:18.06 .net
フランス人と日本人って意外に共通点があるよな
431:デフォルトの名無しさん
11/06/20 02:48:34.90 .net
皇女様をギロチンにかけたりな
432:デフォルトの名無しさん
11/06/20 07:42:00.20 .net
OcamltterあきらめてOcaml入門やってるんだが再起呼び出しとかちょっと難しいな。
for文と違う。
数学者にやらせると面白いことになりそうな謎のワクワク感を感じる言語ではある。
433:デフォルトの名無しさん
11/06/30 22:40:46.75 .net
みんな Haskell に移行してしまったんかいなぁ
434:天使 ◆uL5esZLBSE
11/07/05 04:45:54.85 .net
2011年、Ruby,Perl,PHP,Pythonって並べたときにさ
ここで、Ruby以外を選ぶ奴ってマジでなんなんだろうな
ゴミの分際でw
435:デフォルトの名無しさん
11/07/05 11:37:20.29 .net
>>427
科学計算を主に念頭においてるものだったら、Python一択になってくるよ。
それだけライブラリが充実している。scipy,numpy,matplotlib,mayaviなんて
のがあるからね。
>>415
手続き脳から見れば当然難しいけど、数学の漸化式を知ってれば再帰は
馴染みやすいし問題ないよ。難しくしてるのは頭の中で無理やり手続き型
に想定して理解しようとする癖があるからだよ。手続き型に染まった連中が
苦労するのはその悪癖が抜けないから。
リストとか関数の取り扱い(Cでいうと関数ポインタだな。)は手続きにとって
みれば高嶺の花だけど、そこが一番簡単にさせている要因なんだよね。
手続きに染まった人ってただ頭が硬直しただけなんだよ。
436:デフォルトの名無しさん
11/07/05 11:40:45.99 .net
ファーストクラスの関数を、関数ポインタのようなもの、とかいうのは、
誤解を招くだけでないかな。
437:デフォルトの名無しさん
11/07/05 12:09:28.96 .net
>>429
じゃあどう簡潔に言えばいいか示してくれ。それだけでいいよ。
438:デフォルトの名無しさん
11/07/05 12:14:26.97 .net
「ファーストクラスの関数」
439:デフォルトの名無しさん
11/07/05 12:20:26.45 .net
>>431
手続き脳の人相手に話をする場合、それで通じれば問題がないけど
彼らの試行の中で比較的近いものを取り上げて説明しようとしないと
たぶん、言葉が通じないと思うよ。CS専攻の連中相手に話をするならば
それで問題はないよ。もし知らなければ不勉強だってことだからさ。
440:デフォルトの名無しさん
11/07/05 19:57:30.54 .net
環境をキャプチャした関数ポインタのようなもの?
441:デフォルトの名無しさん
11/07/05 20:12:36.48 .net
それはもうポインタでも何でもねぇw
クロージャは、下手にCの概念で説明するよりは、定義をしっかり伝えたほうが、
相手に伝わりやすい代表例じゃないかな。モナドとか継続とかと一緒で。
442:デフォルトの名無しさん
11/07/05 20:37:31.44 .net
一応Cでもgcc拡張ならクロージャはある
C++ユーザならC++用語で言うファンクタ(関数オブジェクト)を結構使うはずなので、
ただの関数ポインタとの違いはわかっていると思う
クロージャが近いのは勿論ファンクタのほうだけど、C++のようにいちいち
classやstructでそれを記述する必要がない
もっともC++のそれがあまりに面倒くさかったので、C++でも0xでついにlambdaが
導入されたわけだけど
443:デフォルトの名無しさん
11/07/07 11:04:09.84 .net
他のスレでやれ
444:デフォルトの名無しさん
11/07/07 13:02:54.88 .net
>>427
誤爆?
445:デフォルトの名無しさん
11/07/09 19:06:45.30 .net
>>435
>一応Cでもgcc拡張ならクロージャはある
nested function の事なら、内部関数から参照している変数のスコープの
外からは使えないのでクローズしているとは言えないんじゃないかな。
URLリンク(gcc.gnu.org)
C なら Blocks を使う方が良さそう。
446:デフォルトの名無しさん
11/07/12 19:45:27.51 .net
>>438
そこを読むとinner functionのアドレスを取れると書いてあるけど、
upward funarg problemを解決しているわけではないの?
447:デフォルトの名無しさん
11/07/12 20:32:45.49 .net
>>439
環境を保存しておいてくれる訳じゃないからね
448:デフォルトの名無しさん
11/07/12 22:06:56.99 .net
>>440 なるほど。危険ではあるが役に立つかも知れないから機能は提供する
ということか。
449:デフォルトの名無しさん
11/07/30 19:06:44.85 .net
OCamlにしようか、それともHaskellにしようか迷ってます。
こういう用途ならこっちのほうがいいとか、なんかアドバイスお願いします。
450:デフォルトの名無しさん
11/07/30 19:45:47.15 .net
>>442
では、用途を教えてくだしあ
451:デフォルトの名無しさん
11/07/30 20:08:56.47 .net
>>443
こーいうやつはプログラミングの勉強自体が目的だろ。
452:デフォルトの名無しさん
11/07/30 20:16:25.35 .net
>>444
プログラミングの勉強自体が目的ならhaskell一択
453:デフォルトの名無しさん
11/07/30 20:42:08.59 .net
>>444
はい、その通りです。
PHPとJavaとJavaScriptはある程度書けますが、関数型言語をなにかひとつみにつけようと思います。
>>445
よろしければ理由を教えてください。
ぐぐった感じでは、haskellはモナドというのが難しくて多くの人が挫折しているようので、OCamlに傾いてます。
454:デフォルトの名無しさん
11/07/30 20:52:58.37 .net
>>446
勉強ってことだし、関数な考え方を得ようってなら純粋なHaskellの方を推奨
455:デフォルトの名無しさん
11/07/30 20:54:22.93 .net
勉強自体が目的ならなんで両方やらないのっていう
456:デフォルトの名無しさん
11/07/30 20:56:02.64 .net
あと入門用に、英語読めるなら、比較的平易な英文で書いてある
URLリンク(learnyouahaskell.com)
を挙げておきます。下の方にあるonlineを選ぶと、売っているものに近い内容が読めますよ。
457:デフォルトの名無しさん
11/07/30 21:05:00.48 .net
OCamlの入門書が1冊、Haskellの入門書が数冊出てるからどれか1つ、
とりあえず借りるか買うかして、それぞれ第1章ぐらいやってみなさい。
458:デフォルトの名無しさん
11/07/30 21:05:33.97 .net
>>446
関数型言語の特徴が余す事なく取り入れられてる
モナドは使う分には難しくない
使う分にはシンプル イズ ベストな書き方がやり易い言語
モナドを分からないと使えるようにならないと勘違いして脱落する人多いけど、モナドの理論的背景を理解する必要は無い
気になるなら気長に勉強しなされ
OCamlはループも有るし、副作用対策諦めてるし、手続き型言語に限りなく近い関数型言語って感じ
速いコード吐けるけど、昨今の関数型言語の特徴取り入れた手続き型言語が多い時代に勉強する意味は薄い
459:デフォルトの名無しさん
11/07/30 21:07:10.73 .net
手続きばっかだっし、古典のschemeでいいんじゃねーの?
460:デフォルトの名無しさん
11/07/30 21:10:08.69 .net
Lisp族はLisp族で悪くないけど、関数型プログラミングを今時勉強するならその選択はない。
461:デフォルトの名無しさん
11/07/30 21:16:22.99 .net
>>452
カリー分と遅延評価がデフォルトで付いてない
自分で同じ事を再現とかは出来るけど、それじゃ関数型言語の学習とは違う
462:デフォルトの名無しさん
11/07/30 21:20:58.25 .net
>>449
haskellスレで翻訳中って聞いたぞ
あと、kindleでサンプル読んだ限りじゃプログラミングhaskellの内容を砕けた言葉とイラストで書いてるだけに見える
内容的にはすでに翻訳されてるプログラミングhaskellで十分
463:デフォルトの名無しさん
11/07/30 21:28:52.08 .net
みなさん、ありがとうございます。
OCamlスレなのにHaskell勧める人ばかりなので、OCamlに未練はあるけど、思い切ってHaskellやってみようと思います。
464:デフォルトの名無しさん
11/07/30 21:34:22.91 .net
>>456
いや。。。
haskellもMLの子孫なんだが。。。
465:デフォルトの名無しさん
11/07/30 21:36:14.27 .net
>>456
俺はHaskell→OCamlと来た。
どっち先でもいいし、両方やればいいんじゃないだろうか。
片方しかやっちゃいけない決まりはないんだし。
面白いことは何でもやるべきだよ。
ミニ四駆だって、マグナムセイバーを買う傍ら、ソニックセイバーも買っただろ。それと同じ。
466:デフォルトの名無しさん
11/07/30 22:15:41.84 .net
そんなことはどうでもいい。OCamlのサイトが404だ。
URLリンク(caml.inria.fr)
467:デフォルトの名無しさん
11/07/30 23:17:43.26 .net
げ、ほんとだ
468:デフォルトの名無しさん
11/07/30 23:23:32.07 .net
すごいタイミング
>>456にはOCamlと縁が無かったんだな。。。
469:デフォルトの名無しさん
11/07/30 23:29:26.27 .net
ついにオワコンか
470:デフォルトの名無しさん
11/07/30 23:50:18.39 .net
OCamlがOCamlとして生まれ変わった際のゴタゴタだそうだよ
471:デフォルトの名無しさん
11/07/31 21:38:50.21 .net
URLリンク(twitter.com)
>描いたのは俺!
>RT @y_echo
>RT @kinaba: なにがあったのwww
>RT @kikx これは変わりすぎだろ!
>RT @yoshihiro503 ちょ、 OCaml のサイトが激しくイメチェンしてる caml.inria.fr
472:デフォルトの名無しさん
11/08/01 08:56:35.19 .net
OCamlってもう手に入らないん?
473:デフォルトの名無しさん
11/08/01 10:15:28.29 .net
>>465
URLリンク(twitter.com)
>一つだけ皆さんに言っておきます。毎年この時期には OCaml には何かが起きます。
>それはリア充関係者がバカンスに行ってしまって連絡が取れなくなるからです。
> RT @ytomino ocamlがついに滅んだと聞いて(遅い
URLリンク(twitter.com)
>てか週末にサーバ不調になったら48時間止まるのあたりまえやろ?人間として。
URLリンク(twitter.com)
>と haskell.org が落ちたときには wktk してた人が言っても説得力ありませんな
とりあえずフランスの月曜日昼(日本時間21時ごろ)まで待ちましょう。
それまでに復旧しなければ長期化確定ですね。
474:デフォルトの名無しさん
11/08/01 10:34:00.78 .net
つ URLリンク(proofcafe.co.cc)
475:デフォルトの名無しさん
11/08/01 22:02:08.55 .net
>>466
直らんね。もうしばらく待つか。
476:デフォルトの名無しさん
11/08/01 22:10:14.76 .net
復活したね
477:デフォルトの名無しさん
11/08/02 18:02:01.87 .net
Lisp族はいいぞ。でもclojureを触っているとhaskellの影響がかなり大きい。
ocamlも触ってみたいけど、いまHaskell勉強中なんだ。たぶん、来年くらいには
やれればな。HaskellってLispと同じでプログラム作成までの抽象化も含めた
戦略を練るのに時間がかかる言語って感じがしました。Ocamlも同じなんだろうね。
478:デフォルトの名無しさん
11/08/02 20:08:11.41 .net
haskellはデータ構造を作るプログラミングになるって、山本和彦さんが言ってた
479:デフォルトの名無しさん
11/08/02 20:23:02.98 .net
>>470
Haskell影響は並列周りでしょ。
そもそもSTMはHaskell由来じゃないし。
他はもろLisp直系じゃん。
480:デフォルトの名無しさん
11/08/02 21:58:52.67 .net
>>472
見た目だけで話してるでしょ?
実際に触ってみればわかるけど、無限ストリーム近辺の関数はHaskellと
かなり近いよ。takeとかその辺のことね。common lispでも自作する方法は
あってもこの手の物は標準でないしね。
だから、リストの取り扱いってがhaskellに近くなってる。
>>471
なるほど
481:デフォルトの名無しさん
11/08/02 23:33:03.74 .net
takeはHaskell以前からある。
482:デフォルトの名無しさん
11/08/03 02:04:20.65 .net
>>472
> そもそもSTMはHaskell由来じゃないし。
でも中興の祖はHaskellの人(Tim Harris)じゃないっけ?
483:デフォルトの名無しさん
11/08/03 02:21:43.19 .net
それはそう。Monadの経験が役に立った。
484:デフォルトの名無しさん
11/08/03 09:37:38.27 .net
>>474
ミランダとかなの?よくしらないけど(wikiでちょっと見たけど、
haskellの親玉っぽかった。)
それはともかく、Clojureが関数型の大きな影響をかんじるのは
イミュータブルなところかも。あれのお陰で、副作用をもたせようと
思ったら基本的にSTMの部分を活用しなきゃならない。(java固有の
ライブラリは例外的なんだけど。)それと遅延評価言語だって
ところがcommon lisp を触ってる時よりhaskellの影響を感じやすいのかも。
あとは内包表記かな。wikiにはlisp,ML, haskell erlangが影響を受けた言語
とかかれている。
485:デフォルトの名無しさん
11/08/19 10:50:16.31 .net
R診たいなことが全部できるMLないのかよ。
486:デフォルトの名無しさん
11/09/19 21:56:29.91 .net
卒業研究でOCamlのライブラリ作ってます。
おもしろいことありますでしょうか?
487:デフォルトの名無しさん
11/09/19 23:59:49.52 .net
SML#の新verがひっそり出てた
488:デフォルトの名無しさん
11/09/24 23:23:23.61 .net
>>479
どんなライブラリでしょうか?
489:デフォルトの名無しさん
11/09/25 11:44:54.04 .net
>>479
どんなライブラリをつくったら面白いでしょうか?
なのか
ライブラリを作ることはテーマとして面白味があるでしょうか?
なのか。
490:デフォルトの名無しさん
11/09/27 20:28:58.48 .net
^^;
491:デフォルトの名無しさん
11/09/27 20:52:03.96 .net
OpenFlow コントローラのライブラリなどはいかが?
比較的、ホットなトピックだと思うけど。
URLリンク(www.google.co.jp)
492:デフォルトの名無しさん
11/09/29 14:23:07.44 .net
MLの型推論の部分だけ「俺言語」の中に取り込みたい
型推論の部分だけ分かりやすくコンパクトにまとめられたコードどこかにないでしょうか
493:デフォルトの名無しさん
11/09/29 15:11:00.44 .net
>>485
URLリンク(en.wikipedia.org)
494:デフォルトの名無しさん
11/09/29 15:56:30.36 .net
>>485
このテキストの17章
URLリンク(www.scala-lang.org)
タイガー本の16章
URLリンク(www.cs.princeton.edu)
495:365
11/09/29 18:07:57.87 .net
>>485
Prolog で型チェック:Rainy Day Codings:So-net blog
URLリンク(rainyday.blog.so-net.ne.jp)
題名は型チェックだけど、コードはまぎれもなく型推論
496:デフォルトの名無しさん
11/09/29 19:09:02.35 .net
ああPrologだから単一化で型推論が起きるのか。
497:デフォルトの名無しさん
11/10/04 18:43:07.61 .net
prologで型推定が一番楽にできそう
しかし返値しか推定してないね
498:デフォルトの名無しさん
11/10/06 15:33:53.10 .net
SMLやろうと思うんだけど、関数書いたファイルはどこ入れときゃいいの?
499:デフォルトの名無しさん
11/10/06 19:31:29.68 .net
WinにもOCaml3.12.1きてるー
URLリンク(gallium.inria.fr)
500:sage
11/10/06 20:07:16.49 .net
>>492
SML/NJの場合だと、適当なファイル(例えばhoge.sml)に保存して、保存した
フォルダでNJの対話環境を起動して、
use "hoge.sml"
とすればよい。useはカレントディレクトリからソースを読み込む関数で、
カレントディレクトリの取得/変更は、
OS.FileSys.getDirとOS.FileSys.chDirでできる。
501:デフォルトの名無しさん
11/10/06 21:24:34.13 .net
>>493
ありがとう!
502:デフォルトの名無しさん
11/10/11 22:10:01.73 .net
URLリンク(queue.acm.org)
これみるとC#とかやってられんな
503:デフォルトの名無しさん
11/10/13 22:44:28.70 .net
型推論があるから簡潔になるのか
パターンマッチがあるから簡潔になるのか
504:デフォルトの名無しさん
11/10/13 22:47:43.98 .net
両方
505:デフォルトの名無しさん
11/10/13 23:19:58.73 .net
高階関数とカリー化も簡潔に書くのに一役買ってる
506:デフォルトの名無しさん
11/10/14 07:40:42.96 .net
>>495
ひどいよな。C#じゃ複雑なデータ構造を扱おうなんてすると沼じゃないか!
今Haskellの勉強をしててOcamlは読んだことはなかったんだけど
読めるもんだなとも思った。
507:デフォルトの名無しさん
11/10/14 07:48:35.09 .net
The C# code, while functionally equivalent, looks cluttered,
with the real structure obscured by syntactic noise.
事実だけど、辛辣だな。
508:デフォルトの名無しさん
11/10/14 11:38:18.36 .net
>>499
関数型言語群はMLの影響が強いからね。
C言語系という言い方では、ML系と言ってしまってもいい。
509:デフォルトの名無しさん
11/10/14 21:38:01.24 .net
>>501
なるほど、ML系かぁ。そういわれれば納得です。
510:デフォルトの名無しさん
11/10/14 22:41:41.95 .net
C#とかJavaとかはジェネリックが狂ってるな
511:デフォルトの名無しさん
11/10/16 05:15:33.48 .net
js_of_ocaml が面白そうだな
512:デフォルトの名無しさん
11/10/19 21:52:08.21 .net
ocamlてmain関数的なエントリポイントって無いの?
Pythonみたいな泥臭い方法でもいいんだけど.
513:デフォルトの名無しさん
11/10/20 12:56:49.09 .net
具体的に OCaml で何をしたいのか、Python のどこがダサいのか
書いた方が答をもらいやすいよ
514:デフォルトの名無しさん
11/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:デフォルトの名無しさん
11/11/06 03:27:50.02 .net
最近HaskellからOCamlに興味を持って少し触り始めたんですが,OCamlの対話環境にはghciの「:i 」みたいなものは無いんでしょうか?
516:デフォルトの名無しさん
11/11/06 06:11:24.22 .net
「なぜ次に学ぶ言語は関数型であるべきか」
URLリンク(d.hatena.ne.jp)
原文: URLリンク(queue.acm.org)
517:デフォルトの名無しさん
11/11/06 22:31:50.25 .net
toplevel の pretty printer を普通のプログラム内で使う方法ってありますか。
518:デフォルトの名無しさん
11/11/07 22:42:07.36 .net
>>509
どしょっぱつの,Sometimes, が訳されていないとか,いろいろと
気になるところはあるけれど,大意は伝わった。うむうむ。
519:デフォルトの名無しさん
11/11/12 05:42:33.31 .net
>>510 #install_printer のやつ?
520:デフォルトの名無しさん
11/11/12 05:53:40.36 .net
>>510 言語は?
521:デフォルトの名無しさん
11/11/19 10:47:17.91 .net
URLリンク(scan.netsecurity.ne.jp)
tokuhirom、ma.la?っていう人の話だけ聞きたい
色々なスレで見かけるけどWEB業界で有名らしいね
動画ありませんか?
522:デフォルトの名無しさん
11/11/23 00:53:05.05 .net
The little MLerの情報って調べたけど少ないね。大学の図書館
とかなら有りそうに思うけど、今は大学と関係ないから探せんわ。
SML中心で書いてるようだ。Ocamlへの改変の仕方ものってる
というのはgoogle booksでわかった。
使って学習した人っておらんの?
523:デフォルトの名無しさん
11/11/23 09:07:06.79 .net
NACSIS Webcatで検索するか買えば?
面白いよ。
524:デフォルトの名無しさん
11/11/23 14:49:34.72 .net
NACSIS Webcatか
URLリンク(webcat.nii.ac.jp)
意外とおいてるところ少ないね。今学習してる本が片付いたら
購入検討するわ。
525:デフォルトの名無しさん
11/11/23 15:07:11.14 .net
URLリンク(www.d12k.org)
526:デフォルトの名無しさん
11/12/10 10:15:38.86 .net
age
527:デフォルトの名無しさん
11/12/18 01:18:07.20 .net
MLってCACHEに使われてるんだっけ?
RDBでないDBに興味を持ったので調べ始めたんだけど、 ML、CACHEとも事例が中々見つからない...
528:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/01/19 07:56:03.89 .net
ocamlc -pack
530:営利利用に関するLR審議中@詳細は自治スレへ
12/03/29 00:44:48.75 .net
SML#
URLリンク(partake.in)
531:デフォルトの名無しさん
12/04/22 14:29:24.78 .net
MLの無名関数 (fn x => x + 1 みたいなの)って再帰的な定義をする記法はないのですか?
fn n => n * (fn n-1) みたいな感じで。
532:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/04/23 08:12:58.62 .net
>>524 そのため(名前を付けて循環定義にするため)に let rec があるので
let rec と組み合わせればいいと思うんだけど、let rec と組み合わせたくない
理由とかある?
534:デフォルトの名無しさん
12/04/23 20:37:41.35 .net
SML/NJでdatatype 'a tree = Empty | Node of 'a * 'a tree * 'a treeとかやっといて、適当な深い木を定義してやると
表示が"Node #"と出てきて省略されてしまうんだけど、略記せずに全部出力させる方法があれば教えて。
535:デフォルトの名無しさん
12/04/23 21:20:09.21 .net
自分でプリンタ書けよ
536:デフォルトの名無しさん
12/04/27 00:54:20.88 .net
camlp4 使った奴でよくみる pa_* な名前の奴の pa って何の略なんだ?
537:デフォルトの名無しさん
12/04/29 02:59:34.92 .net
PArsing
つ URLリンク(mjambon.com)
538:デフォルトの名無しさん
12/04/30 15:05:27.19 .net
>>530
おお、ありがとう!
539:デフォルトの名無しさん
12/05/08 20:26:45.44 .net
>>527
以下2つに適当に大きな数字を書き込む。
Control.Print.printLength;
Control.Print.printDepth;
あと、
Control.Print.out
も便利。何もしない関数に置き換えると、エコーバックを消せる。
540:デフォルトの名無しさん
12/06/07 13:35:08.25 .net
URLリンク(www.amazon.co.jp)
www
541:デフォルトの名無しさん
12/06/07 13:40:40.11 .net
どこからつっこめばいいの…w
542:デフォルトの名無しさん
12/06/07 17:40:09.00 .net
> 掲載画像とお届けする商品の表紙が異なる場合があります。ご了承ください。
とあるけど、どういうことだろう
543:デフォルトの名無しさん
12/06/07 21:01:28.02 .net
オリンピックをもう一回
544:デフォルトの名無しさん
12/06/11 15:25:00.19 .net
300?
545:デフォルトの名無しさん
12/07/25 19:10:23.62 .net
>>534
>出版社: Addison-Wesley (2017/11/20)
2017年・・・
546:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/07/25 21:13:02.20 .net
中置関数 (-) : int -> int -> int
ががっつり int_of_float を引数に取っているわけで。
int_of_float (-0.7) で使ってください。
548:デフォルトの名無しさん
12/07/25 22:13:31.14 .net
>>540
そういうことでしたか!
ありがとうございます
549:デフォルトの名無しさん
12/07/28 13:56:10.63 .net
>>541
~-.0.7 と書いても良いね
550:デフォルトの名無しさん
12/07/29 11:24:50.70 .net
いつの間にか OCaml4.00.0
551:デフォルトの名無しさん
12/07/29 12:34:47.25 .net
岡村4.00.0
552:デフォルトの名無しさん
12/07/30 17:15:20.50 .net
OCaml
コンパイルして、nativeなコード吐いて、不思議な実行のさせかたしてるのね
553:デフォルトの名無しさん
12/07/30 22:50:31.73 .net
どのへんが不思議なんだ?
554:デフォルトの名無しさん
12/08/12 14:06:23.13 .net
わからない?
555:デフォルトの名無しさん
12/08/12 23:04:07.50 .net
わからない。教えて下さい。お願いします。
556:デフォルトの名無しさん
12/08/13 00:04:10.53 .net
#!/usr/bin/ocamlrun
557:デフォルトの名無しさん
12/08/13 01:29:14.36 .net
nativeの意味を取り違えてない?
558:デフォルトの名無しさん
12/08/13 03:03:42.64 .net
スクリプトじゃないのはdumpすればわかるでしょ
559:デフォルトの名無しさん
12/08/13 11:53:42.11 .net
URLリンク(www002.upp.so-net.ne.jp)
560:デフォルトの名無しさん
12/08/29 23:04:20.96 .net
ねんがんのLittle MLerをてにいれたぞ
OCamlの場合の読み替え方法も載ってるけど、素直にSMLでやった方が良いのかな
てか読んでる人はいるんだろうか・・・
561:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/09/02 08:57:34.05 .net
print_int x;
564:デフォルトの名無しさん
12/09/02 10:39:53.93 .net
>>555
Thx!出来ました
セミコロンを使うのはインタプリタだけなのかと思っていました
調べてみたら、配列の区切りでも使われるんですね
565:デフォルトの名無しさん
12/09/02 10:47:02.65 .net
ocamlか。おかのコードはごみごみしくて醜いな
566:デフォルトの名無しさん
12/09/02 10:53:23.84 .net
print_string "あ、OCamlです。言ってませんでしたね。すいません¥n";
567:デフォルトの名無しさん
12/09/02 15:19:34.02 .net
>>556
インタプリタの文の区切りは ;; (セミコロンが2つ)
逐次実行は ; (この場合セミコロンの前の式の型が unit でない場合警告が出る)
配列の区切りも ; (これは配列の括弧 [ ] の中でのみ出現する)
568:デフォルトの名無しさん
12/09/28 23:37:26.16 .net
.net におけるOcamlがF#ですが、
JVM上でのOcaml相当のものはないのでしょうか?
569:デフォルトの名無しさん
12/09/29 11:26:57.28 .net
OCaml-Javaは? URLリンク(ocamljava.x9c.fr)
570:デフォルトの名無しさん
12/09/30 17:21:46.18 .net
>>561
おお、これってチラ見したときは単なるライブラリレベルでのサポートかと
思ってましたが、完全なJVM実装なんですね。
571:デフォルトの名無しさん
12/10/03 00:49:32.12 .net
URLリンク(www.lexifi.com)
今年のMLワークショップでもocaml-javaの紹介してたみたい。
どのぐらい出来てるんだろう。
パフォーマンスの話も載ってた。
1/3ぐらい?
572:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/10/12 12:17:07.41 .net
>>563
URLリンク(shootout.alioth.debian.org)
の中くらいのサイズのやつを8つベンチマーク。
0.96倍から7.14倍の実行速度。
3倍内に収まったのが6つあるぜ。
intを扱うベンチが遅い。boxingされちゃうから。
そういうベンチを省くと平均で倍は遅くない。
574:デフォルトの名無しさん
12/10/12 12:26:46.91 .net
>>564
最初のやつは値を作れないし、三番目の型パラメータとして渡すようなのもoptionの中身次第では同じ事になるからじゃね?
と思ったが二番目が通るのがよくわからん。
575:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/10/12 18:44:39.63 .net
>>564
abbreviationではない新しい型がcyclicかどうかは仕様を決める人が自由に決める
一方、タプルとoptionがcyclicではないという仕様は既に決まっているので
タプルのabbreviationとoptionのabbreviationはcyclicではないはず
577:デフォルトの名無しさん
12/10/12 19:52:28.31 .net
>>565
おお、ちゃんと動くもんなんだね!
578:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/11/03 17:26:40.17 .net
久々にtuareg-mode使ったけど、インデントが変わったのな。
昔のはletをネストするとだんだん右に行って見づらかった
581:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/11/07 19:10:06.18 .net
そうですね。
583:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/11/11 08:04:45.04 .net
head_headの型を理解してるか?
587:デフォルトの名無しさん
12/11/11 09:47:55.90 .net
はい、たぶん
基本[[];[]]な形式、list のlist構造
でも、なんか色々自由がありそうと感じる分、制約とか制限についての認識が欠落してしまう
制約制限がないと意味不明のバクが爆発するから必須なんだけど
なのに、魂が叫ぶ、もっと自由にやらせろ
間違って[1;2;3]な通常のlistを渡したときなんとか出来そうな思い込みをしてしまう。
[]要素のないlist
[[];[1;]] listの最初のlistが[]なlist
[[];[]] 同上
[1;2;3] 必要な要件を全然満たさないlist構造
588:デフォルトの名無しさん
12/11/11 14:45:44.54 .net
型が違えば処理系に弾かれてお終い
589:デフォルトの名無しさん
12/11/11 18:10:18.79 .net
考え方が動的型付けに染まってる印象。
590:デフォルトの名無しさん
12/11/12 02:30:05.37 .net
>>579,580
すいません
その通りで御座います。
591:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/12/02 17:11:41.64 .net
URLリンク(caml.inria.fr)
には書いてないけど、+ や +. って - -. と同じく二項演算子かつ単項演算子じゃないのか?
+. (1.0 + 2.0);; とか通るし。
596:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/12/02 17:57:04.40 .net
+. (1.0 +. 2.0);;
598:デフォルトの名無しさん
12/12/03 01:35:54.04 .net
Characters 0-2:
+. (1.0 +. 2.0);;
^^
Error: Syntax error
599:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/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:デフォルトの名無しさん
12/12/03 17:08:25.93 .net
むしろ、
URLリンク(caml.inria.fr)
> 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:デフォルトの名無しさん
12/12/03 17:48:39.20 .net
なるほど。+. が単項opとして機能するのは Since 3.12.0 からの拡張なのか。
で間に合ってないというのは 589 の環境のことか。最新の ocaml では通る。
色々ありがとうございました。
603:デフォルトの名無しさん
13/02/10 19:42:11.39 .net
最近、OCamlを勉強し始めたんだけど、標準関数で int listを印字する方法ってありますか?
REPLの出力みたいのを求めているんですが。
604:デフォルトの名無しさん
13/02/28 00:26:28.39 .net
>>594 コンパイラ内部の関数をごにょごにょすれば別かもしれないけど基本的にない。
対象がint listって決まってるなら、自分で書いたほうが楽だと思う。
605:デフォルトの名無しさん
13/02/28 01:13:07.87 .net
REPL環境に限定すれば実はREPLのプリティプリンタを使えたりするんだけど、
使ってしまうと単独の実行ファイルにできなくなる罠。
606:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/06/16 21:34:59.42 .net
opamを導入して適当なモジュール(今回はextlib)をインストールして
ソースコードにopen Extlibと書いたところExtlibが見つからないと言われてしまいました
何かパス通しのようなものが必要なのでしょうか
OSはmacでhomebrewを使っています
610:デフォルトの名無しさん
13/06/16 22:08:09.11 .net
よくわかりませんがOCamlFindを使えば良いのですね
ocamlfind ocamlc -package extlib -linkpkg test.ml
で通りました
611:デフォルトの名無しさん
13/06/16 23:27:52.03 .net
あとopen ExtLibがタイポしてました
612:デフォルトの名無しさん
13/07/23 NY:AN:NY.AN .net
Coqもここでいいの?
613:デフォルトの名無しさん
13/07/23 NY:AN:NY.AN .net
そういえば、Coqスレ昔あったけど今はないのか。
定理証明支援のスレのないのかな?
Coqスレ
スレリンク(tech板)
614:デフォルトの名無しさん
13/08/13 NY:AN:NY.AN .net
活気が無いように見えるのはきっと皆コーディングに夢中なんだ。きっとそうだ。
615:デフォルトの名無しさん
13/08/13 NY:AN:NY.AN .net
MLに限った事じゃないけど、関数型言語を学び始めて思ったのは、なんで一次元(線形)リストベースに作られてるのかなって。
一番シンプルな一次元から始めたとして、その先にn次元、までは行かなくても2次元・3次元にして言語体型を考えてみるとかやった人いないのかな。
既にトライして無意味と分かったとか、今まさに挑戦中とか、そう言う話はあるのかい?
メモリ空間が一次元空間だから、やるだけ無駄なんだろうか?
616:デフォルトの名無しさん
13/08/13 NY:AN:NY.AN .net
>>606
因果が逆。再帰がベースにあるのでリストが使いやすい。
特定のデータ構造をベースにした言語ってSQLくらいしか思いつかない。
617:デフォルトの名無しさん
13/08/13 NY:AN:NY.AN .net
>>606
Linked List は一次元じゃないと思う。
618:デフォルトの名無しさん
13/08/13 NY:AN:NY.AN .net
>>607
だったら再帰の考え方も拡張すればいい。別にデータ構造をベースにする意図ではない。
考え方の向きは相互に変わって良いし、そうする事で何が見えてくるか、こないとしたら何故なのかを考えるきっかけにすればよい。
619:デフォルトの名無しさん
13/08/13 NY:AN:NY.AN .net
>>609
考え方の向きが一方向なのは、関数(写像)が集合間における一方向のn:1関係だから。
もし双方向やn:m関係を扱いたいのなら、述語論理をベースにした言語にすればいい。
論理型言語であれば、リストも順序性がある一方向関係として自然に扱える。
620:デフォルトの名無しさん
13/08/13 NY:AN:NY.AN .net
そう言う話じゃなく、考えたかの向きってのは再帰→リストと発想する考え方の逆向き、と言う意味です。
これ以上の議論は無意味のようですね。終わり
621:デフォルトの名無しさん
13/08/13 NY:AN:NY.AN .net
消えてくれてありがとう
622:デフォルトの名無しさん
13/08/13 NY:AN:NY.AN .net
>>609
関数型言語を学び始めてどれくらいだ。第一印象でリストベースなのかと感じても3日もすればそんなことないって分かるだろうに。
きっと俺と同じように慣れない酒で益体もないことを考えているんだろうけど。
n次元のリストを捉えるのに再帰が不十分なら拡張とか考えるけどさ、n-1次元のリストを再帰的に処理すればいいだけの話であって、拡張なんて必要ない。
再帰という概念の拡張に1次元->n次元の拡張は使えない。何の需要も喚起しない。
623:デフォルトの名無しさん
13/08/14 NY:AN:NY.AN .net
>>613
なれない酒で頭がいかれてるお馬鹿さんさようなら
624:デフォルトの名無しさん
13/08/21 NY:AN:NY.AN .net
ひどいなこりゃ。
625:デフォルトの名無しさん
13/08/21 NY:AN:NY.AN .net
「ひどい」と不平を言うよりも、進んでネタを振りましょう。
626:デフォルトの名無しさん
13/08/27 NY:AN:NY.AN .net
正直関数型言語がどんなところで優位を持っているのかわからん
627:デフォルトの名無しさん
13/08/31 NY:AN:NY.AN .net
リスト内包表記ってOCcamlでできるの?
628:デフォルトの名無しさん
13/08/31 NY:AN:NY.AN .net
Camlp4でできる
629:デフォルトの名無しさん
13/09/02 01:13:00.20 .net
OCaml でのゲームプログラミングに興味がわいて
MLGame URLリンク(mlgame.sourceforge.net)
ってライブラリを導入しようと思ったのですが
準備段階であるSDL, OCamlSDL の cygwin への導入で
もうよくわからなくなってしまいました。
URLリンク(sourceforge.net)
cygwin ごと入ってるらしいパックもためそうとしましたが
cygwin コンソールの起動ができません。
あきらめてCで初心者向けのDXLibrary でもつかって
適当にやってればいいのでしょうか?
630:デフォルトの名無しさん
13/09/02 01:55:09.13 .net
やる前から自分が興味を持ったことを投げ出すなよ
やってみて、思っていたのと違ったらそのときに別の方法を考えればいい
要は関数型言語でゲームプログラミングをしたいんだろ?
ならF# + DirectXを試してみたら?
もしくはCygwinを捨ててLinux環境でMLGameに挑戦してみるとか
MLGameなんて地雷臭がするから、いろいろと苦労しそう。その分、力は付くかもしれないけど。
どんな方法をとるにせよ、まずはある程度のところまで突き詰めたほうがいい
631:デフォルトの名無しさん
13/09/02 01:59:44.29 .net
「プログラミングする」という観点においては
Windowsはウンコということを肝に命じた方が良い
632:デフォルトの名無しさん
13/09/02 02:33:30.43 .net
なんで?.NETは便利だぞ
633:デフォルトの名無しさん
13/09/02 02:47:12.09 .net
>>621-622
素早い返答ありがとうございます。
とりあえず OCaml + cygwin + へんなの は捨てて
F# + DirectX をためしてみます。
windoes はプログラム書くのにうんこなのですね?
Ubuntu いちおう VMware でつかえるけど
とりあえず win に F# インストールしてねます
明日
URLリンク(www.codeproject.com)
でもよもう
634:デフォルトの名無しさん
13/09/02 09:36:30.13 .net
そっか F#だとAPIが叩けるんだな
プログラム自体を関数型言語から入ると
なかなかできない発想だなと思った
635:デフォルトの名無しさん
13/09/03 01:42:29.15 .net
let foo () =
let bar = baz () in begin
(* fooを使ってunitを返すような処理がいくつか *)
bar
end
個人的にこれはダサいと思うんですけど他の書き方が思いつきません
何かありませんか?
636:デフォルトの名無しさん
13/09/03 08:33:35.63 .net
何がダサいと感じるのかよくわからんので何も言えない
637:デフォルトの名無しさん
13/09/03 10:22:05.74 .net
endの直前にbarをもう一度書かないといけないところがダサいと思うのです
638:デフォルトの名無しさん
13/09/03 13:34:18.83 .net
tap や finally で書けない?
639:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/09/04 20:10:09.50 .net
>>631
残念ながら出来ない
それにしても楽しそうだねw
642:デフォルトの名無しさん
13/09/04 20:16:21.51 .net
うん 楽しい
関数型言語は最高やでぇぇ
643:デフォルトの名無しさん
13/09/04 20:45:29.31 .net
URLリンク(detail.chiebukuro.yahoo.co.jp)
こんな問題もサクっと4つの組
(85,71,59,50)が出てくる
凄いよぉぉぉ マヂで小学生からプログラムやるべきだな
644:デフォルトの名無しさん
13/09/04 21:02:36.14 .net
日本語が理解できない
自然数の集合から無作為に選んだ4個の数が存在して、この4つの中から、さらに無作為に3個を選んで和を取り、それを4回試行したところ、
180, 194, 206, 215
になった、ってことでいいの?
645:デフォルトの名無しさん
13/09/04 21:18:35.37 .net
こいつこの調子でずっと喋り続ける気?
646:デフォルトの名無しさん
13/09/04 22:22:27.90 .net
>>612==>>614==>>636
647:デフォルトの名無しさん
13/09/04 22:47:24.97 .net
>>637
うむ
正しい == の使い方だ
648:デフォルトの名無しさん
13/09/05 01:56:06.71 .net
camlp4で今ある文法を制限することって出来ますか?
括弧無しのタプルを排除してリストの区切りをコロンにしたいのですが。
649:デフォルトの名無しさん
13/09/07 03:15:14.14 .net
>>629
batteriesの関数ですよね?まさにそういうのを探していました
batteriesは何となく名前が気に入らなくてスルーしてましたが食わず嫌いは良くないですね
650:デフォルトの名無しさん
13/09/07 03:56:00.85 .net
OCamlのクロージャはそれなりにコストがあって、最適化もしてくれないので
>>626ぐらいならそのままにするなあ
651:デフォルトの名無しさん
13/09/09 15:49:15.59 .net
初めての言語に関数型選んでしまったから
Objectで詰んだ!
さっぱりわからん
652:デフォルトの名無しさん
13/09/09 17:10:04.82 .net
OCamlのobjectは忘れるんだ、そうすればお前は強くなれる
っていうかfirst class moduleが入って、ただでさえ継子扱いだったobject/classに存在価値は無くなった
653:デフォルトの名無しさん
13/09/09 17:38:01.62 .net
おっとwikiみたらCoqの日本語版が登場してた
俺がCoqネタつぶやいたから誰か追加してくれたんだな
654:デフォルトの名無しさん
13/09/10 10:39:57.58 .net
CoqIDEでCtrl+Alt+↓ってやると
画面が上下さかさまになってビビったw
どんなバグなんだよwww
655:デフォルトの名無しさん
13/09/10 13:04:29.50 .net
coqideってのが何かしらんが俺のWindowsでもそうなる
656:デフォルトの名無しさん
13/09/10 13:15:41.31 .net
>> 644
Coqのwikiってどこですか?私も気になります。
657:デフォルトの名無しさん
13/09/10 23:47:36.91 .net
ディスプレイドライバの機能をCoqのせいにするなよ
658:デフォルトの名無しさん
13/09/11 00:25:24.14 .net
CoqIDEの正当性はCoqで証明されておらんの?
659:デフォルトの名無しさん
13/09/11 18:00:49.24 .net
URLリンク(www.cis.upenn.edu)
URLリンク(proofcafe.org)
Coq自身はしらんが
Coqの元のOCamlの正しさは証明されてるっぽい
660:デフォルトの名無しさん
13/09/11 19:05:49.78 .net
型システム入門って読むべき?
661:デフォルトの名無しさん
13/09/11 19:35:45.08 .net
よみなさい
662:デフォルトの名無しさん
13/09/11 19:54:09.22 .net
>>651
入門書なんて読まなくていいよ
663:デフォルトの名無しさん
13/09/11 20:41:01.16 .net
入門って書いてあるけど
パラパラっと見たら全然入門じゃないんだけど・・・
大学受験数学参考書の
やさ理みたいな・・・全然優しく無いじゃんって
664:デフォルトの名無しさん
13/09/11 21:34:52.86 .net
そもそも対象読者はどこを想定してるんだw
665:デフォルトの名無しさん
13/09/11 21:50:49.86 .net
とりあえず英語できない人でしょ
666:デフォルトの名無しさん
13/09/12 14:07:31.89 .net
スレ違いも甚だしいが、お前らの英語力ってどんくらい?今まで技術書は大体は読めるからいいもんと思っていたのだが、
URLリンク(www.readingsoft.com)
ここで測ったらwords per minuteが115とかいうとんでもない数値だった。
英語ネイティブの人間と同じ量の本を読むのに数倍の差をつけられてて、マジで不安になった。
同じ時間を費やして得られる知識が圧倒的に少ないのは如何なものか。全然読めないじゃないか。
667:デフォルトの名無しさん
13/09/12 14:36:25.22 .net
URLリンク(www.zynas.co.jp)
日本語でどのぐらいよ
俺で1400字/分
英語だと20letter(s)/minぐらいだろなw 1ページ読む頃には熟睡モードだぜ
668:657
13/09/12 14:52:35.79 .net
1025文字/分だった。日本語読むのは速い方だけどトップには及ばない。
自分は視力が矯正入れて0.7くらいだし、これ以上速くしようと思ったら怪しげな速読メソッドに手を出すしか無いのではと思っている。
というか1400って速すぎじゃね?すげーな。
669:デフォルトの名無しさん
13/09/12 15:10:15.73 .net
103wpmに1080文字/分だった。
URLリンク(www.readingsoft.com) は英文が平易すぎて、英語の小説読むより数倍速く読めたが……
670:デフォルトの名無しさん
13/09/12 15:19:20.14 .net
>>657
73 wpm
理解優先で後戻りしまくったからな
テストと見せかけて宣伝文句を熟読させる手口とすぐに分かったw
671:デフォルトの名無しさん
13/09/12 15:29:49.44 .net
>>660
読み易いように心を砕いて書いた文章と思った
672:デフォルトの名無しさん
13/09/12 16:23:13.27 .net
146/wpm 100%だった
もうちょっと早く読めそうだ
673:デフォルトの名無しさん
13/09/12 18:20:09.98 .net
思いきり話の腰を折ってすまないが、
日本語英語に関わらず、知識やイディオム仕入れておいて、
理解速度自体を上げる方のが遥かに重要だから、
ページ送りが遅くても気にするなよ。
674:デフォルトの名無しさん
13/09/12 20:00:36.43 .net
いやいやその知識やイディオムを仕入れる速度にもかかってくるのよ。読み書きの速度ってさ。
これ以上はスレ違いだし荒らしになるからやめるけど、上で挙げられてたSoftware Foundationsの和訳をして公開したCoqスレの住人達には感謝してもしきれん。
675:デフォルトの名無しさん
13/09/13 10:05:08.46 .net
ホントこんなに価値ある情報を無料で提供してくれるって凄いよね
676:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/09/13 14:05:17.63 .net
batteriesってどうやってつかうの?
679:デフォルトの名無しさん
13/09/13 15:13:13.02 .net
>>665
どういう意味?
和訳してた人が速読を推奨してたの?
680:デフォルトの名無しさん
13/09/13 21:10:35.73 .net
>>669
opamやocamlfindの使い方分かる?
その辺の設定済んでれば、ソースの最初でopen Batteriesするだけ
681:デフォルトの名無しさん
13/09/14 01:13:42.13 .net
>>671
わかんない
ググったらlinuxならできそうだけど
これwindowsで行けるの?cygwinってのが要る?
682:デフォルトの名無しさん
13/09/14 03:59:21.98 .net
batteries-2.1.tar.gz をダウソしてきて
cygwinってのから
$ tar zxvf batteries-2.1.tar.gzすればええんやな
683:デフォルトの名無しさん
13/09/14 21:13:00.38 .net
>>622
んなわけねえだろ
コンパイラ作ってる奴がクソなだけだ
684:デフォルトの名無しさん
13/09/14 21:17:30.82 .net
やはりwindowsでOCamlならF#行った方がいい?
685:デフォルトの名無しさん
13/09/14 21:21:47.50 .net
プラットフォームがWindowsに限定できるのなら、あえて茨の道を選ぶこともあるまい
686:デフォルトの名無しさん
13/09/15 03:38:59.44 .net
F#ってべつにwindowsじゃなくても動くでしょ
687:デフォルトの名無しさん
13/09/15 04:18:36.52 .net
動くけど、monoを入れる羽目になるし、.NET Frameworkが無いから旨さ半減
688:デフォルトの名無しさん
13/09/15 06:47:38.91 .net
F#とOcamlって実行速度ちがってくるものなの?
689:デフォルトの名無しさん
13/09/15 08:16:48.29 .net
OCamlはネイティブ
690:デフォルトの名無しさん
13/09/15 09:50:20.17 .net
.NETはJITコンパイルされるし、OCamlのネイティブコンパイラの最適化は最低限だし
691:デフォルトの名無しさん
13/09/15 10:45:01.28 .net
F#は.NETでも遅い方だろ
692:デフォルトの名無しさん
13/09/15 10:52:12.02 .net
はいはい荒れるからこれで終わり
URLリンク(benchmarksgame.alioth.debian.org)
693:デフォルトの名無しさん
13/09/15 22:25:53.10 .net
Real World OCaml読もうぜ!OCamlSpotterの人も評価してたがAppendix A: installationでopam + core + utopをいきなりインストールさせるのはびっくりした。
こいつらガチでOCamlを普段使いにしてやがる。
694:デフォルトの名無しさん
13/09/15 22:30:57.96 .net
日本語版早く
695:デフォルトの名無しさん
13/09/15 23:00:17.64 .net
>>684
実際、実務でOCaml使っている人たちが書いてるからね
696:デフォルトの名無しさん
13/09/15 23:02:44.61 .net
って英語版も12月発売な上に
日本語版ってそれから1年後ぐらいになるのか
697:デフォルトの名無しさん
13/09/15 23:05:28.42 .net
普段使いってどういうこと?
スクリプト言語みたいに
ちょこちょこっとのコーディングもOCamlって事?
698:デフォルトの名無しさん
13/09/15 23:15:21.68 .net
あー やっぱLinuxかぁ
699:デフォルトの名無しさん
13/09/16 00:03:20.35 .net
プログラミング演習のようなの実装させるより
Coreの拡張モジュールやp4使わせてるし
標準でやれることでもJane系にもっと便利なのあれば使ってる
700:デフォルトの名無しさん
13/09/16 16:10:19.60 .net
opamってlinuxの64bit専用?!
701:デフォルトの名無しさん
13/09/17 01:27:30.95 .net
あー opam installで途中で止まるー
もう寝る
702:デフォルトの名無しさん
13/09/17 03:26:52.06 .net
アパーム!!
703:デフォルトの名無しさん
13/09/17 09:53:15.37 .net
>>692 エラーメッセージはなんて出てますか? #opam
704:デフォルトの名無しさん
13/09/17 12:09:35.38 .net
>>694
寝て起きたら終わってた
エラーメッセージらしきものが出てたら
まだググればなんとなく解決の糸口を探せるんだけど
止まったように見えるのは勘弁してほしい・・・
705:デフォルトの名無しさん
13/09/17 12:15:30.59 .net
Ubuntuだと入ってるのかもしらんが
Lubuntu入れたからm4ってのが足りなくて進まないのに難儀したわぁ
706:デフォルトの名無しさん
13/09/17 12:36:12.34 .net
とりあえず opamからutopとcore入れたけど
他に入れといた方がいいってのある?
707:デフォルトの名無しさん
13/09/17 14:31:45.87 .net
asyncとか?
708:デフォルトの名無しさん
13/09/17 20:04:07.17 .net
open Core.Std しても
ウンともスンとも言わないのはどうして?
709:デフォルトの名無しさん
13/09/17 20:37:23.49 .net
toplevelなら最後に;;付けないと評価されないぞ。
710:デフォルトの名無しさん
13/09/17 21:34:31.77 .net
付けてもダメ
711:デフォルトの名無しさん
13/09/18 10:24:04.40 .net
OSの問題か?
UbuntuでbatteriesとかCore使えてる人いますか?
712:デフォルトの名無しさん
13/09/18 10:42:31.06 .net
違うと思うけど
標準のモジュールは使える?
open List;;とか
713:デフォルトの名無しさん
13/09/18 11:54:58.58 .net
open List;;も
#load "nums.cma";;
も行ける
714:デフォルトの名無しさん
13/09/18 17:03:13.40 .net
#use "topfind";;
#require "batteries";;
open Batteries;;
でバッテリーつかえたぁぁぁ
疲れた
でもCoreはスーパーユーザーやないと使えないんだけど
emacsからスーパーユーザーってどうするんだ?
715:デフォルトの名無しさん
13/09/18 17:09:49.70 .net
su emacs # ?
716:デフォルトの名無しさん
13/09/18 17:22:01.73 .net
ってかここで聞く事じゃないけど
.emacsなんてなんだよ・・意味不明
717:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/09/19 09:33:14.80 .net
できた!ありがトン
端末たちあげたら先ず初めになんでも
sudo -iしてたのがダメだったのかなぁ
utopだと出来るけどemacsだと
Error: Reference to undefined global Conditionsってでる
うーん emacsの勉強が必要だなぁ
core_kernelだと大丈夫なのはなぜなんだぜ?
coreとcore_kernelって同じもの?だよね
719:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/09/20 02:37:57.07 .net
>>707
emacsの設定ファイルだよ。弄ってる間に学生生活が終わった。
721:デフォルトの名無しさん
13/09/21 18:47:36.60 .net
opamの1.1.0betaが出てるね
722:デフォルトの名無しさん
13/09/25 00:38:24.09 .net
URLリンク(twitter.com)
ICFPの季節か
723:デフォルトの名無しさん
13/09/28 08:17:20.19 .net
SML#の話題ってここでいいの?
724:デフォルトの名無しさん
13/09/28 09:00:06.71 .net
いいよ
725:デフォルトの名無しさん
13/09/28 18:49:36.94 .net
SML#のページにあったスライドより:
SML# は,Cやデータベースとの連携を備えた「ふつうの言語」を目指すML系関数型言語です.
SQLをそのまま使える「ふつうの言語」...こいつ頭がお詳しいぜ!
C、SQL、MLっていうのは欲張りだな。polyglotは楽しめるのかもしれんが。
726:667
13/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
13/09/30 10:36:53.22 .net
あー 数がちょっと増えるとすぐオーバーフローしちゃう
これはダメだぁ・・・
728:667
13/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:デフォルトの名無しさん
13/10/01 17:56:59.75 .net
ごっちゃになってたけど
print_string "hello"; print_newline ();;
と
print_endline "hello"
が同じ意味なんだな
print_string "hello\n" が普通の書き方?
730:デフォルトの名無しさん
13/10/04 23:18:06.53 .net
その程度ならどれも意味がすぐ分かるから、特に伝統は無い。
改行コードはOS毎にLF+CRだったりLFだったりするけど、そこら辺はどう考慮されているんだろう。
Linuxだと\nで改行、\rで現在の行を消して先頭からやり直し、みたいだけど。他のOSでも統一
731:されてんのかね?
732:デフォルトの名無しさん
13/10/05 09:27:34.70 .net
副作用にも色々表現方法があって迷うなぁ
まぁOCamlはそれがいいんだろうけど
733:デフォルトの名無しさん
13/10/05 14:18:01.03 .net
文字列だけなら print_string とか print_endline とかでいいだろうけど、
数値とか含むのを出力するときはどうするのがスマートなんだろう?
俺はだいたい Printf.printf を使ってしまうのだけど。
734:デフォルトの名無しさん
13/10/05 14:42:49.03 .net
>>721
間違ってる
Windows は CR+LF すなわち現在行を消して先頭に戻してから改行するのだッ
735:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/10/06 08:19:42.15 .net
#ocaml #opam 自己解決したっす dllcryptokit_stubs.so はopamゆーざーなら以下の環境変数の設定が必要っぽい
export CAML_LD_LIBRARY_PATH=~/.opam/system/lib/stublibs/
738:デフォルトの名無しさん
13/10/09 00:18:05.42 .net
なんかopamも便利なんだか不便なんだかわからんな
739:デフォルトの名無しさん
13/10/10 12:26:47.83 .net
フィボナッチ計算させるときに
メモ化するのもアキュムレータ使うのも
同じ振る舞いな気がするんだが
何か違うのかな?
740:デフォルトの名無しさん
13/10/10 13:44:52.77 .net
複数回呼び出したら違うんじゃないの
741:デフォルトの名無しさん
13/10/10 14:11:03.39 .net
それぞれの f(n)までの値をそれぞれ1回ずつ計算して
テーブルに入れるかレコードに入れるかの違いだから
計算回数は同じじゃね?
742:デフォルトの名無しさん
13/10/10 18:11:17.89 .net
fibを何回か呼ぶことを言ってるんじゃねぇの
743:デフォルトの名無しさん
13/10/10 18:49:43.04 .net
呼ぶ回数=計算回数じゃないの?
どっちもO(n)っぽいんだけど
744:デフォルトの名無しさん
13/10/10 19:24:41.41 .net
fib(n) = fib(n-1) + fib(n-2)
fib(n-2)は呼ばれるが、計算済みだから新に計算はしないってことでしょ。
745:デフォルトの名無しさん
13/10/10 21:27:14.82 .net
そういう二重再帰じゃない方のフィボナッチだよ
746:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/10/10 23:36:42.55 .net
何が言いたいのかわからん
末尾再帰のアキュムレータだろうが、
fib nをm回呼び出す場合メモ化ならO(m+n)だろ
748:デフォルトの名無しさん
13/10/11 01:37:05.82 .net
>>734この
二重再帰の計算オーダーはそうじゃないだろ??
749:デフォルトの名無しさん
13/10/11 02:57:20.14 .net
>>735
>>738
メモ化のコード書いてくれないとわからない。
あと計算オーダーはそうじゃないのそうって何?
750:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/10/11 04:17:04.97 .net
HaMLet がまさかのニューバージョン。
URLリンク(www.mpi-sws.org)
752:デフォルトの名無しさん
13/10/11 10:20:41.62 .net
>>740
あー >>734はメモ化の再帰バージョンの話ね
理解した
とすると
>>729この違いは
使い捨てならアキュムバージョンは
簡潔に書けて早く
使いまわすならメモ化した方が
再呼び出しは早くていいって感じか
753:デフォルトの名無しさん
13/10/11 19:30:47.32 .net
SMLも開発すすんでるんだな
754:デフォルトの名無しさん
13/10/14 18:44:12.10 .net
URLリンク(www.pllab.riec.tohoku.ac.jp)
SMLの開発って、もしかしてSML#のこと?
755:デフォルトの名無しさん
13/10/14 18:45:23.58 .net
あ、上のhamletのことか。
756:デフォルトの名無しさん
13/10/14 18:54:06.65 .net
SML#は64ビット対応せんのかな。結構期待してるんだけど。
757:デフォルトの名無しさん
13/10/15 01:40:51.77 .net
SML/NJとかも
758:デフォルトの名無しさん
13/10/15 01:52:43.43 .net
Standard SMLってなんだろ?
759:デフォルトの名無しさん
13/10/15 15:17:19.69 .net
int型のmaxって1073741823ですよね
これを超えたらBig_intに切り替えたいんですが
int型の計算でmax_intを超えたかどうかの判定って
どうやったらいいですか?
760:デフォルトの名無しさん
13/10/15 17:14:51.41 .net
無理じゃね
最初からBig_int使えばいいんじゃね
761:デフォルトの名無しさん
13/10/15 18:42:26.56 .net
大学の研究室のプロジェクトだと、パワーのある院生がいる時にどかっと
進んだりするんだよなぁ。
762:デフォルトの名無しさん
13/10/15 22:18:09.71 .net
キャリーフラグを無視しない高級言語ってごくわずかしかないよね。
763:デフォルトの名無しさん
13/10/15 23:25:06.01 .net
そもそも1bit分フラグに使ってるからキャリーフラグなんて役に立たんでしょ
SML#はどうか知らんけど
764:デフォルトの名無しさん
13/10/16 22:57:21.15 .net
C++
URLリンク(blog.regehr.org)
ocaml batteriesには、SafeIntというのがあるらしい。参考になるかもよ。
URLリンク(dutherenverseauborddelatable.wordpress.com)
765:デフォルトの名無しさん
13/10/18 10:52:33.25 .net
オブジェクトがさっぱりわからん
レコードと何が違うんだ・・・
766:デフォルトの名無しさん
13/10/18 12:04:36.71 .net
Obj.magic使えば
型なんて関係無くなる?
767:デフォルトの名無しさん
13/10/18 12:12:18.87 .net
[Obj.magic 'a'; Obj.magic "abc"; Obj.magic 123];;
すげー リストに型が違っても入るぞ
何に使えるんだろ?
768:デフォルトの名無しさん
13/10/18 12:52:31.16 .net
Obj.magic 'a' + 1 ;;
すげー こんなのもできるんだwwww
関数型言語界のgotoやで
769:デフォルトの名無しさん
13/10/18 14:08:58.82 .net
奇跡も魔法もあるんだよ。
770:デフォルトの名無しさん
13/10/18 18:35:29.49 .net
ただしよくわからんで使うと死ぬ
771:デフォルトの名無しさん
13/10/18 18:46:15.03 .net
OCamlって最強の言語じゃね?
なんでみんなやらないんだろ
772:デフォルトの名無しさん
13/10/18 18:49:32.53 .net
変なライセンスだから
773:デフォルトの名無しさん
13/10/18 18:53:24.02 .net
intが1ビット少ないとか、モジュールの仕様上スマートリンクができないとか
ファーストクラスモジュールでOCamlのOたるオブジェクトがゴミになりましたとか
そのファーストクラスモジュールは後付けで構文がカオスですとか、あと+.(笑)とかGC遅いとか
ケチを付けようと思ったらいくらでも付けられるからなあ
774:デフォルトの名無しさん
13/10/18 19:13:13.78 .net
Windows版の更新サボってるのが一番の原因だな
775:デフォルトの名無しさん
13/10/18 19:31:42.10 .net
みんなって誰だよ
776:デフォルトの名無しさん
13/10/18 19:33:25.20 .net
研究室ではよく使ってる
777:デフォルトの名無しさん
13/10/18 20:02:22.74 .net
>>765
健常者の集合
778:デフォルトの名無しさん
13/10/18 22:46:49.64 .net
言語の素性はともかくマンパワーは全然足りてないしな
779:デフォルトの名無しさん
13/10/18 23:43:15.36 .net
スマートリンクってなんぞ?
780:デフォルトの名無しさん
13/10/18 23:50:11.98 .net
sageたら教えてやる
781:sage
13/10/18 23:56:08.97 .net
教えてください
782:sega
13/10/19 19:03:49.62 .net
俺にも教えて
783:デフォルトの名無しさん
13/10/19 22:25:27.91 .net
じゃあおれも
784:デフォルトの名無しさん
13/10/28 11:48:04.04 .net
汎関数と高階関数って同じ意味ですか?
785:デフォルトの名無しさん
13/10/28 13:22:54.90 .net
ちがいます
786:デフォルトの名無しさん
13/10/28 13:38:38.58 .net
おなじです
787:デフォルトの名無しさん
13/10/28 13:43:33.45 .net
どっちだよ・・・
788:デフォルトの名無しさん
13/10/28 13:58:52.58 .net
>>774
関数を計算の対象とすること、いいかえると、関数を引数として受け付けたり
関数を返す関数のことを「高階の関数」または「高階関数」という
さらに、高階関数の中で計算の対象が関数だけなものを「汎関数」という
つまり高階関数は広い概念で、汎関数は狭い概念
たとえば関数 map や filter は高階関数であるけれど、リストも計算対象だから汎関数ではない
それに対して、合成関数 o は高階関数であるし汎関数でもある
789:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/10/28 15:17:35.72 .net
>>779
記法のせいでわかりにくいけど
('a -> 'b) -> ('b -> 'c) -> ('a -> 'c) って考えればいい
791:デフォルトの名無しさん
13/10/28 15:25:02.71 .net
あと汎関数は量を返す物をいうはず。
だから合成関数は汎関数でなく、高階関数。
792:デフォルトの名無しさん
13/10/28 15:27:39.31 .net
間違えた
合成関数を"返す" 関数は汎関数でなく、高階関数。
793:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/10/28 16:10:19.68 .net
>>783
>では、その量を返すという汎関数の具体例を挙げてみてくれないか?
なんで?
とりあえず、定義っぽいのは見つけたよ。
URLリンク(www.encyclopediaofmath.org)
796:デフォルトの名無しさん
13/10/28 16:41:42.96 .net
ん?schemeはYコンビネータを使って
Y = (λf . (λx . f (x x)) (λx . f (x x)))
無名再帰ができると書いてあるな
何が違うんだろ?動的言語だと出来るとか?
797:デフォルトの名無しさん
13/10/28 17:26:32.96 .net
>>784
汎関数の定義に無名関数を使うことは多いけど、
だからといって、すべての無名関数を用いた定義が汎関数となる訳ではない
だから「無名関数で書けたら汎関数でよい?」という質問については No だ
ただし「引数としてある関数を渡すとmapと同等な無名関数を返す」汎用的な関数が
定義できるのであれば、その関数は汎関数であるといえるだろう
なお、再帰と汎関数は直交するから再帰を伴わない汎関数も存在する(たとえば合成関数 o)
したがって「再帰で書けたら汎関数でよい?」という質問についても No となる
>>785
数学における用語「汎関数」と計算機科学における「汎関数」をごっちゃにしているのでは?
で、ここは(数学板ではなく)プログラム板だ
798:デフォルトの名無しさん
13/10/28 17:37:07.70 .net
>>787
>数学における用語「汎関数」と計算機科学における「汎関数」をごっちゃにしているのでは?
えええー!初耳だよそんなの。
計算機科学の汎関数の定義は?
799:デフォルトの名無しさん
13/10/28 19:17:55.24 .net
同値再帰型なんてのもあるんだね
OCamlって最強言語じゃね?
800:デフォルトの名無しさん
13/10/30 09:26:41.50 .net
高階関数のままと
簡約した形と
評価までの速度に違いがあるのかな?
見やすさで選ばれてるだけ?
801:デフォルトの名無しさん
13/10/30 13:20:56.16 .net
cygwin64bitにもOCaml登場
802:デフォルトの名無しさん
13/10/30 19:40:53.15 .net
簡約した形とは
803:デフォルトの名無しさん
13/10/31 18:52:31.73 .net
ゴルフに出てくる;;の後の
1@0
って何ですか??
804:デフォルトの名無しさん
13/11/01 12:27:52.67 .net
kwsk >>793 #ゴルフ
805:デフォルトの名無しさん
13/11/01 21:39:55.79 .net
コードゴルフか?
'a list -> 'a list -> 'a list じゃなさそうだし自分で定義してるんじゃね?
806:デフォルトの名無しさん
13/11/02 18:53:12.88 .net
S式みたいに
(< 1 2 3 4 5 6 7 8 9)
でtrue みたいに一発で計算ってできますか?
807:デフォルトの名無しさん
13/11/02 19:14:43.17 .net
そういうの書けばできるでしょ
808:デフォルトの名無しさん
13/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:デフォルトの名無しさん
13/11/03 09:57:51.24 .net
f op xs = and $ zipWith op xs (tail xs)
810:デフォルトの名無しさん
13/11/03 11:18:30.19 .net
ん?それHaskellじゃね?
811:デフォルトの名無しさん
13/11/03 11:27:32.82 .net
こうかな。
fun lessThanForAll l = ListPair.all (op <) (l, tl l);
812:デフォルトの名無しさん
13/11/03 21:33:04.10 .net
ocamlだとむずい
813:デフォルトの名無しさん
13/11/21 06:02:11.85 .net
盛り上がってるね。
814:デフォルトの名無しさん
13/11/25 19:28:29.05 .net
camlp4の入手先を教えて下さい
815:デフォルトの名無しさん
13/11/25 20:49:45.57 .net
URLリンク(github.com)
816:デフォルトの名無しさん
13/11/25 23:43:19.04 .net
camlp4ってなんか開発側のよくわからない方針により大幅に変更されてもともと乏しかったドキュメントが一層整備されてない状態になってから使う気なくした。
817:デフォルトの名無しさん
13/12/13 08:01:15.59 .net
ああ、ハームが強いとか言ってたキルハイエナさんか
818:デフォルトの名無しさん
13/12/13 08:02:13.53 .net
誤爆
819:デフォルトの名無しさん
13/12/14 16:52:12.01 .net
fezにお帰りください
820:デフォルトの名無しさん
13/12/19 13:30:02.87 .net
ABC予想をOCamlで書いて
821:デフォルトの名無しさん
14/01/16 19:03:28.13 .net
row polymorphism(< method_foo : foo -> bar ; .. >の"..")が何か泥臭い感じがしてOCamlのOが好きじゃないのですが、
row polymorphismとexact typeを区別するべき理由ってあるのでしょうか。
822:デフォルトの名無しさん
14/01/20 01:16:23.89 .net
こんな本でた
JavaScriptで学ぶ関数型プログラミング
URLリンク(www.amazon.co.jp)
なんか面白そう
823:デフォルトの名無しさん
14/01/25 20:39:37.59 .net
みんなどこいったんや
824:デフォルトの名無しさん
14/01/27 00:37:41.63 .net
VBAを捨てて関数型言語がデフォルトでサポートされるのは、いつだろうか
825:デフォルトの名無しさん
14/01/27 01:45:51.79 .net
そんな日は来なくていい
826:デフォルトの名無しさん
14/01/28 03:59:19.18 .net
ExcelマクロにVBAとF#の選択肢が標準だったなら、関数型は主流になれる
827:デフォルトの名無しさん
14/01/28 04:04:55.48 .net
>>813
クオンツやアクチュアリーもどきの個体数が増えすぎて、
市場価値が下がらないように口を紡ぎだしたとみた
828:デフォルトの名無しさん
14/01/29 01:01:52.05 .net
口を・・・つむぐ?
829:デフォルトの名無しさん
14/01/29 01:04:27.44 .net
口をつぐんだ人ならいるかもね
830:デフォルトの名無しさん
14/01/29 21:56:44.82 .net
あれでしょ、世の中に不満があるなら自分を変えろ、それが嫌なら耳と目を閉じ、口を紡いで…あれ?
831:デフォルトの名無しさん
14/01/29 21:58:26.24 .net
お口にチャックノリス
832:デフォルトの名無しさん
14/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:デフォルトの名無しさん
14/02/13 19:52:50.09 .net
いくつかはjs_of_ocamlを更新すれば定義されてる
nat関係のは提供されてないのでダミーの関数を
funciton create_nat(){}のように自分で追加するか
batteriesのサブセットを切り出して使うか
core_kernel使ってる人もいるらしい
834:デフォルトの名無しさん
14/02/13 23:42:09.86 .net
js_of_ocaml 1.4.0を使っていますがこれではダメなのでしょうか?
nat関係は適当にスクリプトを書いて対応しようと思います
unix_inet_addr_of_stringはbatteries関係なく出てしまうようですね
835:デフォルトの名無しさん
14/02/13 23:59:27.54 .net
bigarrayサポートがまだgit版にしかない
unix_inet_addr_of_stringはruntime/unix.jsをリンクすれば大丈夫だけど
opamで入れたなら多分入ってない
836:デフォルトの名無しさん
14/02/14 00:28:20.76 .net
bigarrayサポートはnat関係のことですよね?
もしそうだとするとcaml_XXXは一体何が原因なのでしょう
それとunix_inet_addr_of_stringはopamで入れている以上直る?ことはないということなのでしょうか
837:デフォルトの名無しさん
14/02/14 00:35:30.75 .net
調べてから書くべきでした
caml_XXXがbitarrayの関数ですね
838:デフォルトの名無しさん
14/02/14 00:36:59.24 .net
big・・・
839:デフォルトの名無しさん
14/02/14 00:45:48.03 .net
> それとunix_inet_addr_of_stringはopamで入れている以上直る?ことはないということなのでしょうか
公式のも唯の空の関数なんで自分で定義しても一緒だし
開発版では修正済みだから1.99だか2.0が出てopamパッケージになれば大丈夫
840:デフォルトの名無しさん
14/02/14 01:06:19.10 .net
なるほど
いずれ修正されることと今でも少し手を入れれば動くことがわかったので良かったです
親切にありがとうございました
841:デフォルトの名無しさん
14/02/16 20:02:36.51 .net
URLリンク(www.reddit.com)
842:デフォルトの名無しさん
14/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
14/02/24 14:28:40.75 .net
>>832
あ、使用しているOSはLinuxで、OCamlのバージョンは4.01.0です。