関数型言語ML(SML, OCaml, etc.), Part 3
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNGMLは、確固とした理論的背景を持つ言語でありながら、
現実的なソフトの開発にも使用できる実用性を備えた言語です。
また、プログラミングの初心者が最初に学習する言語としても
優れています。
過去スレ
ML!!!!!! http://pc.2ch.net/tech/kako/1002/10021/1002111468.html
関数型プログラミング言語ML http://pc5.2ch.net/tech/kako/1012/10124/1012445015.html
let t = 関数型プログラミング言語ML 2 http://pc5.2ch.net/test/read.cgi/tech/1058630709/
リンク集 http://www.summa.jp/lang/func/ml/
総本山
Standard ML http://www.smlnj.org/
Objective Caml http://caml.inria.fr/ocaml/
チュートリアル
Standard ML
http://www-2.cs.cmu.edu/afs/cs/usr/rwh/public/www/introsml/
http://www.dcs.napier.ac.uk/course-notes/sml/manual.html
http://www.dcs.ed.ac.uk/home/stg/NOTES/
http://yk.i.hosei.ac.jp/smlbook/smlbook.pdf
http://www.summa.jp/tutorial/plain/mlkouza.txt
Objective Caml
http://www.csc.vill.edu/~dmatusze/resources/ocaml/ocaml.html
http://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4/mltext/ocaml.html
http://www.biocaml.org/~bannai/ocaml-intro/
http://www.ocaml.jp/archive/document/
0002デフォルトの名無しさん
NGNG,ラ 、_ 〃,、
イ r-'ー゙ "ー‐、, ミ
i! ,! / \ |ミ
,j i - - |
,,(6 ,,.. ↓..,, | <モ2ワが2げっと!
メ, ー /
,.-'\ ...,, ーー、,/、
//:::;;:::::::::::::::::::::▽:::::::ヽ
|||::::|::::E N E O S::|::::::|
|||::::|:::::::::::::::2:::::::::::|:::::|
0003デフォルトの名無しさん
NGNG0004デフォルトの名無しさん
NGNGML 系言語だと SML/NJ と OCaml が有名だという認識なんですが、他の処理系
を使ってる人っていますか? どう違うとかどう嬉しいとか、そもそもどうい
うのがあるかとか(Moscow ML くらいしか知らないんですが)。
0005デフォルトの名無しさん
NGNG0006デフォルトの名無しさん
NGNGこのスレには消えて貰うわけにはいかないのですよ。
ちょっと立てるの早かったかな。でも乙。
0007デフォルトの名無しさん
NGNGってそんな話じゃない?
0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG0010Aransk
NGNG使用できるじゃなくて、使用して開発「された」ソフトは
あるのでしょうか?
0011デフォルトの名無しさん
NGNGオブジェクト指向、STLとかないと非常に開発効率・保守が悪くて
使い物にならないわけだが。。。
0012デフォルトの名無しさん
NGNGSTL って何? C++ の Standard Template Library くらいしか思いつかない
んですけれど……。
0013デフォルトの名無しさん
NGNGただの用語聞きかじり厨だからほっとけ
STLが何の略なのかもわからなかったんだろ
0014デフォルトの名無しさん
NGNG知ってると思うが
http://www.faqs.org/faqs/meta-lang-faq/
正直、実装としてはSML/NJがもっとも汚いような気がするんだがどうよ?
Shaoのせいだと思うが。
0015デフォルトの名無しさん
NGNGそのせいもあったりして。
001614
NGNG効率を気にし始めると、CPSは妙な最適化が要るようになって汚くなるのかもしれんが。
0017デフォルトの名無しさん
NGNGcygwin/gcc依存しまくってんなorz
単体実行ではOCamlかねえ
0018デフォルトの名無しさん
NGNGというかMLで何すんの?
C++じゃいかんの?
0019デフォルトの名無しさん
NGNGというか聞いてどうすんの?
そもそも1行ずつあける必要あんの?
0020デフォルトの名無しさん
NGNGでもこの話題に行間もくそもありゃしない!
残念!
0021デフォルトの名無しさん
NGNGregionには魅かれる
0022デフォルトの名無しさん
NGNGって自分で確かめろよ
そして報告しろ自作自演しろ!
ひといないんだから!
残念!
0023デフォルトの名無しさん
NGNG0024デフォルトの名無しさん
NGNG>>22
0025デフォルトの名無しさん
NGNGfun f x = x + 1;
fun g x = x * 2;
val h = f o g;
0026デフォルトの名無しさん
NGNG0027Aransk
NGNG>使い物にならないわけだが。。。
CとかCobolなんかそんなものが無くても
結構実用的な開発に利用されています。
MLはどうなんでしょう?
0028デフォルトの名無しさん
NGNGっていうかあ、もうちょっとレベルの高い話しよーぜー
ML KitっていつからVMになったの? 知らなかったorz
0029デフォルトの名無しさん
NGNGどうせ厨しか集まりませんからぁー! 残念!
0030デフォルトの名無しさん
NGNG>>29 orz
0031Aransk
NGNGより引用:
>通常のMLのプログラムに、Cでいうところのmalloc や
> free を自動的に挿入することにより、ガベージコレクション
>なしでもプログラムを走らせることができます。
これって正しくは:
「Cでいうところのmallocやfreeを自動的に挿入することに
よりガベージコレクション機能を実現しております。」
ではないでしょうか?
0032デフォルトの名無しさん
NGNGたとえば、tail call が tail call じゃなくなったりする。
let f x y =
letregion r in
...
f x' y'
end (* f の後で region 開放命令が必要 *)
はっきり言ってそのままでは使えないよ。Linear Type とかを使ってばしばし
destructive update するとかは最低必要。(もちろんコンパイラがやるんですけど。)
あと、GC と言ってよいのかもしれないけど、GC が動的に回収するのに対して、
region inference は静的にメモリを回収するコードを埋め込む違いがある。
(i.e. コンパイル時に malloc/free を埋め込む)
あと、リージョンはスタックで取るので、スタックの下のほうにゴミがあっても、
上の方が使われていたりすると破壊されない。リージョン推論がちゃんと出来てれば
防げるのかもしれんが、もう半分忘れた。
0033デフォルトの名無しさん
NGNG0034Aransk
NGNGついにalice1.0がリリースされましたが
これなんか専門家の皆さんの評価は
どうなんでしょう?
0035デフォルトの名無しさん
NGNG0036デフォルトの名無しさん
NGNGMorrisettとかのCycloneあたりにシフトした…のか?
WalkerもMorrisettも発表はよくきくけど、
L^3とかは複雑すぎてわけわかんなかったなあ。
コンパイラが推論するにしても、プログラマが挙動を理解できなさそう。
ところでML Kitって今はx86ネイティブコードを出すんだよね?
昔はHPだったが。VMって何?と思ってよく見たら、
3.9.0からバイトコードもあったんだ。へーへーへー。
http://www.itu.dk/research/mlkit/dist/NEWS-4.1.4
0037Aransk
NGNG難しい。それほどVM技術が一般化した
ってことじゃないでしょうか。
上記のAliceもしかりです。
その内ハードディスクがVMだらけに
なって、バッティングを起こしたりしてね?W
0038デフォルトの名無しさん
NGNG>>37
・ML Kitは「言語」じゃねえだろ!
・「VM技術」ってなんだよ。VMにすること自体は技術なんてもんじゃねーよ。
・「ついに」とか言われたってAliceなんてしらねえよ(作者の一人は知ってたけど)。ざっと見たが何もオリジナリティないじゃん。
・JVM同士とかならともかく、違うバイトコードのVMがどうバッティングするんだよ!
0039Aransk
NGNG>・ML Kitは「言語」じゃねえだろ!
誰が「言語」と発言されたのでしょうか?
>・「VM技術」ってなんだよ。VMにすること自体は技術なんてもんじゃねーよ。
RubyはVM化したいらしいけど、まだ出来ませんが…。
>・「ついに」とか言われたってAliceなんてしらねえよ
>(作者の一人は知ってたけど)。ざっと見たが何もオリジナリティないじゃん。
少なくともML Kitよりは活発にプロジェクトは動いているようです。
>・JVM同士とかならともかく、違うバイトコードのVMがどうバッティングするんだよ!
「バッティングを起こしたりしてね?W」貴女は最後のWを見落としましたね?
ジョークです。W さすがにdllを組みこんだVMは存在しないでしょう。W
(Wを全角にしましたから…)
0040デフォルトの名無しさん
NGNG0041Aransk
NGNG黒田さん並におっとりしておりますんで…。
0042デフォルトの名無しさん
NGNGAransk = アホ
0043デフォルトの名無しさん
NGNG0044Aransk
NGNG黒田さんは=内親王の夫君となられるお方です。
黒田さん=おっとり=Aranskですからして、
おっとりー>アホは黒田さんにも関数適用
されます。W
0045デフォルトの名無しさん
NGNGAransk = おっとり は偽だな。
0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNGAransk自身も↓から出てくるな
超準関数型言語Aransk
http://pc5.2ch.net/test/read.cgi/tech/1082176723/
0048デフォルトの名無しさん
NGNG0049デフォルトの名無しさん
NGNGocaml だと、
let (^.^) f g = function x -> g (f x);
let h = f ^.^ g;;
みたいに定義しないとダメ? 標準装備じゃないの?
0050デフォルトの名無しさん
NGNG書き方はともかく、その通り。自分で定義しないといけない。
調べてみたが、missinglib で、そのような用途の演算子
% : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b
%%: ('a -> 'b) -> ('b -> 'c) -> 'a -> 'c
$ : ('a -> 'b) -> 'a -> 'b
が定義されていた。
http://gopher.quux.org:70/devel/missinglib/html/Composeoper.html
うーむ、しかし他はともかく $ は左結合だから使いづらい気がするが……。
0051デフォルトの名無しさん
NGNGThanks!
ところで、話題になってる「VM」って抽象機械の事?
ocaml だと ZINC とか聞いたことあるけど、対応表キボン。
Java -> JavaVM
ocaml -> ZINC?
SML -> ???
0052Aransk
NGNG1.中間コードを生成することにより
インタプリターの速度をアップする。
2.OS間の差異を吸収し、コーディングの
統一を図る。
これらを目的としたもの全て、MSのCLRも
含むと個人的には解釈しております。
0053デフォルトの名無しさん
NGNGAranskは現存の言語の実装を全くわかってないという結論が導かれるがよろしいか。
0054デフォルトの名無しさん
05/01/18 00:20:55osiire:/tmp[58]>cat gext.ml
open Pcaml;;
EXTEND
expr: AFTER "apply"
[[ f = expr; "o"; g = expr -> <:expr< fun x -> $f$ ($g$ x) >> ]];
END;;
osiire:/tmp[59]>ocamlc -pp "camlp4o pa_extend.cmo q_MLast.cmo" -I +camlp4 -c gext.ml
osiire:/tmp[60]>cat o.ml
let f = fun x -> x + 1
let g = fun x -> x * 2
let _ =
let h = f o g in
Printf.printf "%d\n" (h 10)
;;
osiire:/tmp[61]>ocamlc -pp "camlp4o ./gext.cmo" -o o o.ml
osiire:/tmp[62]>./o
21
osiire:/tmp[63]>
0055デフォルトの名無しさん
05/01/19 11:31:13http://mlton.org/Survey
0056デフォルトの名無しさん
05/01/29 23:59:01ocaml のファンクターについて質問があります。
ファンクターでクラスを内包してるモジュールを輸入したいとき、与える実際
のクラスの型ってシグネチャーと正確に一致してる必要がありますか?
私が試した限りではそうなのですが、他の書き方で実現できたりしないのか
なー、と淡い期待を抱いています。
Objective Caml version 3.08.2
# module A = functor ( B : sig class c : object method x : int end end ) ->
struct class c' = object inherit B.c end end
module D = A (struct class c = object method x = 10 method y = 20 end end)
;;
Signature mismatch:
Modules do not match:
sig class c : object method x : int method y : int end end
is not included in
sig class c : object method x : int end end
Class declarations do not match:
class c : object method x : int method y : int end
does not match
class c : object method x : int end
The public method y cannot be hidden
#
0057デフォルトの名無しさん
05/02/01 23:14:21Objective Caml version 3.08.2
# module A = functor ( B : sig class c : object method x : int end end ) ->
struct class c' = object inherit B.c end end
module D = A (struct class c = object method x = 10 val y = 20 end end)
;;
module A :
functor (B : sig class c : object method x : int end end) ->
sig class c' : object method x : int end end
module D : sig class c' : object method x : int end end
#
0058デフォルトの名無しさん
05/02/13 00:10:26コンビネータ理論とラムダ計算の同等性がわからず、詰まってます。
λ|- M=N ⇔ CL+ (ζβ)|- M_cl = N_cl
らしいんだが、なんでζβじゃないといけないんだろう・・・
0059デフォルトの名無しさん
05/02/13 08:01:390060デフォルトの名無しさん
05/02/13 16:32:41仰る通り、字面では分かるんですが、それはなぜかと言うところで…
というか、とある問題を解いていて、
(ζβ) : Px → Qx ⇒ P = Q
という規則の代わりに
(ξ):P→Q ⇒ λx.P → λx.Q
をCLに追加するだけでは不十分である事を示せ、とあって、
詰まっていたりします。
…うう、スレ違いスマソ。
006160
05/02/13 16:34:48(ζβ) : Px = Qx ⇒ P = Q
(ξ):P = Q ⇒ λx.P = λx.Q
でした。重ね重ねスマソ
0062デフォルトの名無しさん
05/02/16 11:44:020063デフォルトの名無しさん
05/02/16 15:16:420064\___________/
05/02/16 18:02:05,r''^tヽ 〉、::::::::ヽ 落ち着け!
t'L`、f) ム`''^)ヾj'′
ヽlヲノー、-、 ,.゙'r'''ニヽ、,
r'^ヽt,..,j:::゙i ヽ f,..つ'''ヽ、ヽ!
゙i、 ヾ._゙)_;::-:'"r-ミ= __):l.l
=テ`'i,,゙>、 '"_,,.ィ"`′ ノ´!;;;;;;l !
'"'^´l ゙i`1234、_ィ'"´:::::l;;;;;;l l
0065デフォルトの名無しさん
05/02/23 22:59:47(ξ):P = Q ⇒ λ^*x.P = λ^*x.Q
の間違いじゃない?あとλかληかはっきりさせて。
0066デフォルトの名無しさん
05/02/23 23:29:210067デフォルトの名無しさん
05/02/25 10:41:53ご明察で、横内さんの「プログラム意味論」(共立出版)
p.44 練習問題2.6の2です。
(ξ)の正しい定義は>>65さんの通り、ληではなくλです。
理解が足りてなかったので混乱させてしまいました。
0068デフォルトの名無しさん
05/02/25 20:41:19λη|-M=N iff CL+(ζβ)|-M_cl = N_cl
λ|-M=N iff CL+(ξ)|-M_cl = N_cl
という感じがするのだが(根拠はない)
0069デフォルトの名無しさん
05/02/26 12:40:47そんな話を聞くたびに代数の勉強を先に済ませておけばいいのにと思う。
よくよく話聞いてたら、プログラム意味論固有の部分が分からないというより
代数的考え方の準備が出来ていない事情が多々目に付いてしまう。
http://www.amazon.co.jp/exec/obidos/ASIN/4320026578/250-0355581-1002631
↑この本読んで苦労を感じるようなら、その前に↓この本買って読んどけ。悪いこと言わんから。
http://www.amazon.co.jp/exec/obidos/ASIN/4000056344/ref=lm_lb_15/250-0355581-1002631
0070デフォルトの名無しさん
05/02/26 16:07:30GunterやMitchellを読んで、横内さんの言いたかったことがやっとわかった。
0071デフォルトの名無しさん
05/02/26 23:34:22しかし、上で揉めてる話は純粋なラムダ計算周りで、代数系の知識はあまり
要らないんじゃないかと思うんだが。
0072デフォルトの名無しさん
05/02/27 00:49:33http://www.amazon.co.jp/exec/obidos/ASIN/0262071436/qid=1109432532/sr=1-1/ref=sr_1_0_1/250-0355581-1002631
俺はWinskelの意味論入門書のほうが分かりやすくて絶対お奨め。
http://www.amazon.co.jp/exec/obidos/ASIN/0262731037/qid=1109431978/sr=1-1/ref=sr_1_10_1/250-0355581-1002631
横内さんの本よりよっぽど分かりやすい。
Mitchellは読んでないから知らん。 Schemeインタプリタとかどうでもいいし。。
0073デフォルトの名無しさん
05/02/27 02:56:32カテゴリーに基づく意味論を扱ってなかったように思う。代わりに自分の専門
(の一つの)information systemに1章割いていたが。
まあWinskelは学部レベルの入門書、Gunterは専門書という位置づけだろうな。
0074デフォルトの名無しさん
05/02/28 14:45:50『プログラム意味論』と『プログラミング言語の基礎理論』、どちらもおすすめ!
って書かれてるけど、横内さんの本を読もうという人が、まともに大堀さんの本など
読めないのでは? 日本語限定だと他にどうともしようがない事情も分かるけれど。
0075デフォルトの名無しさん
05/02/28 21:00:090076デフォルトの名無しさん
05/03/01 03:53:040077デフォルトの名無しさん
05/03/01 18:38:510078デフォルトの名無しさん
05/03/01 20:40:080079デフォルトの名無しさん
05/03/01 20:45:190080デフォルトの名無しさん
05/03/02 15:05:290081デフォルトの名無しさん
05/03/02 15:18:070082デフォルトの名無しさん
05/03/02 15:34:29http://www.freeml.com/info/[email protected]
008381
05/03/02 16:24:23グラフィックスライブラリやパーサージェネレータが付属していて、
よく出来てそうな環境という印象だったんだけど、あんまり流行ってないのかな。
0084デフォルトの名無しさん
05/03/02 20:30:08WindowsのOCamlはSEHとか使ってんの?
0085デフォルトの名無しさん
05/03/04 09:32:08http://min-caml.sourceforge.net/
0086デフォルトの名無しさん
05/03/05 21:57:51表には書いていないけれど、私はOCamlで作ったツールとかも公開したりしている。
0087デフォルトの名無しさん
05/03/05 23:34:430088デフォルトの名無しさん
05/03/05 23:35:23使ってない。
つまりエラー処理グダグダ。
0089デフォルトの名無しさん
05/03/07 16:08:210090デフォルトの名無しさん
05/03/07 16:12:490091デフォルトの名無しさん
05/03/09 00:10:21http://science3.2ch.net/test/read.cgi/math/1108516200/124
0092デフォルトの名無しさん
05/03/09 12:49:440093デフォルトの名無しさん
05/03/09 13:21:47いくら貰えたの?
0094デフォルトの名無しさん
05/03/09 19:30:370095デフォルトの名無しさん
05/03/09 20:13:50>>93 ウハァー、400万円ナリ〜
0096デフォルトの名無しさん
05/03/09 21:06:390097デフォルトの名無しさん
05/03/10 02:39:030098デフォルトの名無しさん
05/03/10 03:41:020099デフォルトの名無しさん
05/03/10 14:10:09HDLの記述形式。レジスタの振る舞いに注目し、回路構成を記述。
難しそうね。
0100デフォルトの名無しさん
05/03/10 14:41:350101デフォルトの名無しさん
05/03/13 06:46:150102デフォルトの名無しさん
05/03/15 15:24:55いつのまにか http://www.ocaml.org/ が caml.inria.fr にリダイレクトされるようになってる。
0103デフォルトの名無しさん
05/03/15 15:37:580104デフォルトの名無しさん
05/03/15 18:23:19使いやすいデザインになったね。
0105デフォルトの名無しさん
05/03/15 19:14:44つーか入れないんですが。
0106デフォルトの名無しさん
05/03/16 01:25:120107デフォルトの名無しさん
05/03/16 02:38:51IEからだとファイルのダウンロードになってしまう。
おれの環境がおかしいのか?
0108デフォルトの名無しさん
05/03/16 13:19:51たしかになるね。
http://caml.inria.fr/index.en.html
だと正しく見えるみたい。
0109デフォルトの名無しさん
05/03/17 23:10:36http://caml.inria.fr/ocaml/release.en.html
バグフィックス版らしい。
0110デフォルトの名無しさん
05/03/20 18:04:49動的型付けのLispみたくパワフルでないし、
JAVAみたいにわかりやすくもないし、
Cみたいに高速でもないんでしょ?
0111デフォルトの名無しさん
05/03/20 20:45:31型について、LispとMLでどちらがパワフルかといったらMLだろうなぁ…
解かりやすさについては…う〜ん、解かりやすさってなんだろう…それが解からない。
C++よりも速いがCよりは遅いと巷では言われています。
0112デフォルトの名無しさん
05/03/20 20:48:46しかし日陰者。
0113デフォルトの名無しさん
05/03/20 22:00:21OCaml!!!!!!!!!!!!!!!
0114デフォルトの名無しさん
05/03/20 22:08:280115デフォルトの名無しさん
05/03/20 23:25:34http://www.ocaml.jp/archive/document/ocamlkf.html
0116デフォルトの名無しさん
05/03/21 00:51:060117デフォルトの名無しさん
05/03/21 01:07:56コード生成アルゴリズムがほとんど認知されていないという事があると思う。
どういう記述をすれば良いコードが生成されるとかいった情報。
例えばC言語は高級アセンブラと言われるぐらい単純で、
実際アセンブラからCへの写像も簡単だし、
そういった情報は豊富にあるから、C=速いという結論へすぐに
帰着することができるけど、MLではベンチマークサイトの結果等から漠然と
「速いらしい」という認識しかしてない人が多いと思う。
ほとんどの人がなぜ速いのか?、まで追求しない。
これは型推論からなるMLの基礎理論のハードルが他と比べて高いのが1つの原因だと思う。
言語処理系がコードを処理していく行程というか、仕組み想像できないゆえに敬遠される。
きっとMLにはGCが存在する事さえあやふやな人もいるはず。
CやLISPを自作できるという人はかなりの人数に上ると思うけど、
MLはどうかな?たぶんここには一人もいないよね。
0118デフォルトの名無しさん
05/03/21 01:39:000119デフォルトの名無しさん
05/03/21 01:43:10>CやLISPを自作できるという人はかなりの人数に上ると思うけど、
>MLはどうかな?たぶんここには一人もいないよね。
MLがその力を真に発揮するのは言語処理系を書くときだよ。
MLマニアの大半もそういうことに興味あるやつだと思ってたけど…。
むしろCの処理系を自作できることのほうがすごい。
0120デフォルトの名無しさん
05/03/21 03:02:19処理系書くとかいう話ではないんだけど。
0121デフォルトの名無しさん
05/03/21 03:19:51> 型について、LispとMLでどちらがパワフルかといったらMLだろうなぁ…
???>>110は型自体がパワフルなんて言ってないと思うんだけど???
0122デフォルトの名無しさん
05/03/21 03:23:28言ってることはまさにその通りだと思うんだけど、みんなが知りたい
そういったコアな情報を分かりやすく公開してくれる熱心なグルが
現れん限り状況は改善しそうにないな。
0123デフォルトの名無しさん
2005/03/21(月) 11:09:320124デフォルトの名無しさん
2005/03/21(月) 11:36:330125デフォルトの名無しさん
2005/03/21(月) 18:37:000126デフォルトの名無しさん
2005/03/21(月) 19:57:470127デフォルトの名無しさん
2005/03/21(月) 20:00:190128デフォルトの名無しさん
2005/03/21(月) 20:02:240129デフォルトの名無しさん
2005/03/21(月) 20:05:140130デフォルトの名無しさん
2005/03/21(月) 20:07:300131デフォルトの名無しさん
2005/03/21(月) 20:12:38よいページを教えてください
0132デフォルトの名無しさん
2005/03/21(月) 20:16:13亀だけど�d
家かえって早速インスコ。
軽く触ってみた。。。第一印象は「いい感じ。」
ここのところPython三昧だったけど、ちょっと浮気してみようかな、と思ってみたり。。。
(ググッたらwxCamlもあるし。ちょっと期待)
0133デフォルトの名無しさん
2005/03/21(月) 21:06:18Moscow MLのWindows版を使ってるよ。
開発元のページにあるやつ。
http://www.dina.kvl.dk/~sestoft/mosml.html
0134デフォルトの名無しさん
2005/03/30(水) 08:51:47http://mlton.org/Features
0135デフォルトの名無しさん
2005/03/30(水) 22:59:43http://www.ps.uni-sb.de/alice/
http://www.lfcs.inf.ed.ac.uk/software/polyml/
http://www.itu.dk/research/mlkit/
http://www.dina.dk/~sestoft/mosml.html
http://mlton.org/
http://www.smlnj.org/
http://caml.inria.fr/
http://www.cs.bham.ac.uk/research/poplog/freepoplog.html
http://www.funet.fi/pub/languages/ml/sml2c/
http://www.dcs.ed.ac.uk/home/mlj/
http://www.ps.uni-sb.de/hamlet/
http://www.cl.cam.ac.uk/Research/TSG/SMLNET/
結構いっぱいあるよね。
0136デフォルトの名無しさん
2005/03/31(木) 02:14:01下の方のは実用目的ではないよね。
(その分、処理系の存在自体が楽し感じる)
まぁ、>>126 の用途もよく分らないけど。
0137デフォルトの名無しさん
2005/03/31(木) 03:44:43その中に日本語のサイトが1つも無いのは仕様ですか
0138デフォルトの名無しさん
2005/03/31(木) 08:36:02http://min-caml.sourceforge.net/index2.html
0139デフォルトの名無しさん
皇紀2665/04/01(金) 05:01:30http://www-2.cs.cmu.edu/~fox/tilt.html
http://www.cs.cornell.edu/home/jgm/tilt.html
SML には珍しく Native Thread が使える?
SPARC or ALPHA or SML/NJ で動くらしい。
0140質問2つ
NGNG0 と size と、それ以外の値でパターンマッチングをやりたいです。
let f size i = match i with
0 -> print_endline "zero"
| size -> print_int size; print_newline (); print_int i; print_newline ()
| _ -> print_endline "_";;
とやると、どうやら size に i の値が束縛されてしまい、0 の場合以外は必ず二番目のケースに
マッチしてしまいます。
Warning: this match case is unused. という警告も出ます。関数の型は
val f : 'a -> int -> unit = <fun> で、 size が使われていない感じです。
#f 5 2;;
は
2
2
を表示します。
●(int * int) と int * int の違いが今一つ理解できないんですけど、教えてプリーズ
0141デフォルトの名無しさん
NGNGそれはパターンマッチを使うべきではない気がする。というか、できない。
if i = 0 then "zero"
else if i = size then "size"
else "_"
(int * int) と int * int は同じでしょう?
(int * int) list と int * int list は違うけど。
0142デフォルトの名無しさん
NGNG訂正。when 使えばできるかも。
match i with
0 -> "zero"
| _ when i = size -> "size"
| _ -> "_"
0143デフォルトの名無しさん
NGNGそれ単体では同じだけど
type t1 = A of (int * int) と type t2 = B of int * int は微妙に違う。
match (A (1, 1)) with A p -> (fst p) はできるけど
match (B (1, 1)) with B p -> (fst p) はできない。
大して深い意味がある違いじゃないと思うけどね。
0144140
2005/04/03(日) 00:29:08ひとまず if を使う実装にしたんですが、月曜にでも試してみます。
>>143
# let f () = (1,2);;
val f : unit -> int * int = <fun>
# type t1 = A of int * int | B of (int * int);;
type t1 = A of int * int | B of (int * int)
のとき、
# B (f ());;
- : t1 = B (1, 2)
# A (f ());;
Characters 0-8:
A (f ());;
^^^^^^^^
The constructor A expects 2 argument(s), but is here applied to 1 argument(s)
となって、悩んでます。
0145143
2005/04/03(日) 03:10:21B of (int * int) の B は、(int * int) 型の引数を 1 つとる構築子。
A (f ()) は (f ()) という (int * int) 型の引数を 1 つしか与えてないからだめ。
let (v1, v2) = f () in A (v1, v2) と書けばいい。
こういう仕様になってる理由はよくわからん。
歴史的な理由か実装上の都合かなと思ってるけど、誰か知ってる?
0146デフォルトの名無しさん
2005/04/03(日) 05:03:02そんな現象があるとは知りませんでした。
しかし、ものすごく直観に反するんですけど。理由がないならコンパイラを修
正すべきだ。
typing/typecore.ml のこのあたりかな?
let sargs =
match sarg with
None -> []
| Some {pexp_desc = Pexp_tuple sel} when explicit_arity -> sel
| Some {pexp_desc = Pexp_tuple sel} when constr.cstr_arity > 1 -> sel
| Some se -> [se] in
if List.length sargs <> constr.cstr_arity then
raise(Error(loc, Constructor_arity_mismatch
(lid, constr.cstr_arity, List.length sargs)));
たぶん int * int のときは、constr.cstr_arity が 2 で、sargs が [se] に
なるので mismatch なんでしょう。
どう直すべき?
0147デフォルトの名無しさん
2005/04/03(日) 07:28:53直感的には、すべてのdata constructorのarityは1だと思うのだが…。
A of int * intはintの組を1つ引数とするものだと思うし。
0148デフォルトの名無しさん
2005/04/03(日) 16:53:08A of int * int のほうが tuple を構築、分解しなくてすむ分
メモリ効率や実行効率が若干いいかも。
そういうのは最適化の方でやってほしい気もするけど。
コンパイラ直すなら ad-hoc に parsing/parser.mly の
constructor_arguments:
/*empty*/ { [] }
| OF core_type_list { List.rev $2 }
を
| OF core_type { [$2] }
とする方がいいんじゃないかな。
これすると camlp4 のコンパイルが通らなくなったけど。
気合いと暇があるなら ast 書き換える方向で。
0149デフォルトの名無しさん
2005/04/03(日) 21:48:47parse時にちょっとデータ構造を最適化しているが、
matchの方を修正し忘れている…という可能性もあるね。
0150デフォルトの名無しさん
2005/04/04(月) 01:29:16よくわかんないけどバグってこと?
>>143 の例で言うと、
The constructor B expects 2 argument(s), but is here applied to 1 argument(s)
なんていうエラーメッセージが出るくらいだから、
多分バグではなくて意図した仕様と動作みたいだよ。
0151デフォルトの名無しさん
2005/04/04(月) 02:57:340152& ◆D3ra0B2LiQ
2005/04/06(水) 04:53:13> A of int * int のほうが tuple を構築、分解しなくてすむ分
> メモリ効率や実行効率が若干いいかも。
> そういうのは最適化の方でやってほしい気もするけど。
Unboxingっていう最適化を実装すればよいんだが、多相性との関係で意外と大変なので、OCamlではやってない。
MLtonあたりならやってそうだけど。
0153デフォルトの名無しさん
2005/04/06(水) 06:47:000154152
2005/04/06(水) 12:10:47…ってのは冗談で
http://caml.inria.fr//cgi-bin/search.en.cgi?words=the+constructor+expects+argument%28s%29+but+is+here+applied+to+argument%28s%29&corpus=all&mode=default&page=1&number=10
とか。ちょっと関係ないのもヒットしてるけど。
0155デフォルトの名無しさん
2005/04/06(水) 19:24:32> The type expression ( typexpr ) denotes the same type as typexpr.
と書いてある以上、int * intと(int * int)で動作が異なるのを仕様と言い張るのは
無理があると思う。そもそも()はtype levelのconstructorではないだろう。
それと揚げ足を取るようだが、最適化の実装の有無で言語仕様が変わるのはおかしい。
0156デフォルトの名無しさん
2005/04/06(水) 20:16:570157デフォルトの名無しさん
2005/04/06(水) 20:21:060158デフォルトの名無しさん
2005/04/06(水) 20:37:580159デフォルトの名無しさん
2005/04/06(水) 20:57:02結局、開発するならOCamlに軍配があがるんだよね。
0160デフォルトの名無しさん
2005/04/06(水) 21:08:07ttp://codezine.jp/a/default.aspx?cid=137
0161152
2005/04/06(水) 23:34:38> 詳しいことは知らんが、マニュアルに
> > The type expression ( typexpr ) denotes the same type as typexpr.
> と書いてある以上、
それは鋭いね。実装のバグとも、マニュアルのバグともいえるかも。バグレポート出そうか?
ちなみに言語仕様が「効率よく実装できるかどうか」に影響されることは、
どんな言語でも大なり小なりあるだろう。
>>156
それも俺の中ではFAQだが、Haskellのtype classみたいな大掛かりな仕組みを入れるか、
SMLみたく妙にad hocなルールを決めるか、どっちかになってしまう。
0162デフォルトの名無しさん
2005/04/08(金) 00:23:58演算子のoverloadingは、genericで解決できないのかな?
0163デフォルトの名無しさん
2005/04/08(金) 01:10:39http://caml.inria.fr/pub/ml-archives/caml-list/2005/04/b9b438a6eff9dfe5b37baa3d01222d48.en.html
0164163
2005/04/08(金) 03:28:400165デフォルトの名無しさん
2005/04/09(土) 02:12:31単純に消すだけなら、camlp4使えばできる。
http://martin.jambon.free.fr/extend-ocaml-syntax.html
let x = FLOAT 3/2 - sqrt (1/3)
みたいな感じ。
0166デフォルトの名無しさん
2005/04/09(土) 02:22:590167デフォルトの名無しさん
2005/04/09(土) 02:26:05http://caml.inria.fr/pub/docs/manual-camlp4/manual001.html
0168デフォルトの名無しさん
2005/04/09(土) 15:26:34Pentium4
0169デフォルトの名無しさん
2005/04/09(土) 18:13:14ばーか
0170デフォルトの名無しさん
2005/04/20(水) 21:20:32どーも campl4 と手が動いて困る。campl4 だけバイナリ名が ocaml から
始まってないのも好かん。改造するときに統一的に名前が変えられない、、、
0171デフォルトの名無しさん
2005/04/20(水) 21:21:370172デフォルトの名無しさん
2005/04/20(水) 21:22:34汚いです。すいません。
0173デフォルトの名無しさん
2005/04/20(水) 21:26:20ocaml を改造して acaml を作るとすると、
ocaml => acaml
ocamlc => acamlc
ocamlopt => acamlopt
ocamldep => acamldep
なんだけど、
camlp4 camlp4o camlp4r ocpp
は統一的な名前変更が出来ん。作者が違うからしょうがないけど、
ocamlなんとか って名前にしてほしい。
0174デフォルトの名無しさん
2005/04/20(水) 21:34:28名前ごときで使えないなんてもったいない
0175デフォルトの名無しさん
2005/04/21(木) 10:58:30ttp://www.yl.is.s.u-tokyo.ac.jp/~furuse/gcaml/index.html
0176デフォルトの名無しさん
2005/04/23(土) 04:28:44すごい! すばらしい!
で、早速コンパイルしたいのですが、
./configure; gmake world すると、.depend がないとか言われてしまいます...
どなたかご助言下さい
0177デフォルトの名無しさん
2005/04/23(土) 13:01:100178デフォルトの名無しさん
2005/04/23(土) 18:39:15それはそうとGJ!
0179デフォルトの名無しさん
2005/04/23(土) 20:45:280180デフォルトの名無しさん
2005/04/23(土) 20:46:060181デフォルトの名無しさん
2005/04/24(日) 02:08:54無事コンパイルできました。ありがとうございました。
README.gcaml には Native code compiler が未実装だと書いてあるのですが、
手元で少し試してみると、gcamlopt も動くじゃないですか。すばらしい。
まずは generic とか run time type とかどうやって使う物なのか、お勉強し
なきゃ。
0182デフォルトの名無しさん
2005/04/26(火) 01:59:05をリンクする方法が判らない…orz
0183デフォルトの名無しさん
2005/04/26(火) 15:40:250184デフォルトの名無しさん
2005/04/26(火) 18:30:470185デフォルトの名無しさん
2005/04/26(火) 23:25:53失礼しました。で調べましたら
>ttp://sourceforge.net/forum/forum.php?thread_id=1143008&forum_id=371922
>Sorry, but this is not possible with the current version of the plugin. The next version will address this and other features.
つーことでしたので、所望のライブラリを勝手にリンクするスクリプトを介してコンパイルするように指定して
取り敢えずどうにか致しました
0186デフォルトの名無しさん
2005/04/27(水) 22:23:17てことで、これ↓
ttp://www.pps.jussieu.fr/~emmanuel/Public/Dev/eclipse/
を使ってみた…結構高機能・便利そうでいい感じだけど
フランス語のドキュメント読めないので、山勘でしか使えてない…orz
0187デフォルトの名無しさん
2005/04/27(水) 23:36:540188デフォルトの名無しさん
2005/04/28(木) 11:49:00ドキュメント書いているのはどうやら学生さんみたいね、、、
だから、英訳はすぐには期待できないかな?
Chailloux は O'Reilly O'Caml 本の著者。
気さくなオッサンだから彼に英語で質問するのが吉。
0189デフォルトの名無しさん
2005/04/28(木) 22:33:40どなたか詳しい方いますか?
現在開発されてますか?
0190デフォルトの名無しさん
2005/04/28(木) 23:14:14ご助言ありがとうございます
解んない事が明確なら質問しようとかも思いまするが
フランス語の入門書と辞書でも買ってもう少し足掻いてみようかと。
その前に社内にいるフランスの学生さんに掻い摘んで読んで貰おうとか
それ以前に、山勘で使えてると思っているのも思い過ごしかもしれないし… orz
0191デフォルトの名無しさん
2005/04/29(金) 05:21:30http://www.freetranslation.com/
自分はフランス語を1文字も読めません…
0192デフォルトの名無しさん
2005/04/29(金) 12:15:110193デフォルトの名無しさん
2005/04/29(金) 14:00:220194デフォルトの名無しさん
2005/04/29(金) 17:48:570195デフォルトの名無しさん
2005/04/29(金) 22:15:51Javaスレで同じようなことが起きても誰かが答えて終わりじゃん。
0196デフォルトの名無しさん
2005/04/30(土) 04:45:22http://www.kmonos.net/alang/etc/merd.php
これだっけ。
変った型システムの言語というイメージが。おもしろそうなので調べようとずっと思ってたけど結局ちゃんと調べてないなぁ。
開発はあまり進んでいない様子。
0197189
2005/05/01(日) 09:43:26関数型言語全般のスレと間違えました。
0198デフォルトの名無しさん
2005/05/01(日) 10:17:49漏れもちゃんと調べてはいないなぁ。
0199デフォルトの名無しさん
2005/05/01(日) 10:26:27>変った型システムの言語というイメージ
おぃおぃw
Haskelやった事ないだろw
0200デフォルトの名無しさん
2005/05/01(日) 10:35:20http://pc8.2ch.net/test/read.cgi/tech/1076418993/
0201デフォルトの名無しさん
2005/05/01(日) 11:08:10haskell知らなかったらコーダなの?
0202デフォルトの名無しさん
2005/05/01(日) 12:50:52Haskellのlはふたつ。
ところで Haskell には SoftTyping はないと思うんだけど。
0203デフォルトの名無しさん
2005/05/01(日) 13:06:24察してやれ
0204デフォルトの名無しさん
2005/05/05(木) 12:57:02この言語は基幹系システムを組むのに向いていますか?
0205デフォルトの名無しさん
2005/05/05(木) 12:58:12OCamlは向いてる
0206デフォルトの名無しさん
2005/05/05(木) 13:01:422ちゃんに常駐してるようなのには。
0207デフォルトの名無しさん
2005/05/05(木) 13:02:58脳タリン
0208デフォルトの名無しさん
2005/05/05(木) 13:05:22なんだと!
だったらお前の意見を言ってみやがれ
0209デフォルトの名無しさん
2005/05/05(木) 13:09:20ボラクルに繋いだり、バッチ処理をやったり・・・
0210デフォルトの名無しさん
2005/05/05(木) 13:10:410211デフォルトの名無しさん
2005/05/05(木) 13:12:49汎用的プログラミングには向いていませんでした。
その後、HOPEの型推論等を取り入れた、汎用の関数型言語として、
Caml、SML等が開発されました。
特にCamlは、Category Abstract Machineと呼ぶ抽象機械の上に実装されており、
実用プログラミング言語としての地位を目指しています。
0212デフォルトの名無しさん
2005/05/05(木) 13:13:200213デフォルトの名無しさん
2005/05/05(木) 13:14:11最近の中学生って暑いな
0215デフォルトの名無しさん
2005/05/05(木) 13:20:300216デフォルトの名無しさん
2005/05/05(木) 13:21:390217デフォルトの名無しさん
2005/05/05(木) 13:32:30本当にお願いだからそういうレスでスレを腐らせるのはやめてくれ
0218デフォルトの名無しさん
2005/05/05(木) 13:46:55十数年前にmirandaかなんかでOSとか実用分野のプログラムを記述する試みがあったな。
SMLやgoferがでる前。
0220デフォルトの名無しさん
2005/05/05(木) 14:09:07ライバルはPrologという大変トンがった言語だそうな(笑。
歴史的経緯を度外視すると、COBOLのお仲間に見えちまうんだが
0221デフォルトの名無しさん
2005/05/05(木) 14:18:46パッとしないねぇ
0222218
2005/05/05(木) 14:43:531987〜1990年頃の話だから、SMLより後、SML NJの前あたりか。
[Tur90] D.A. Turner. An approach to functional operating systems. In D.A. Turner, editor, Research Topics in Functional Programming, pages 199--218. Addison-Welsey, 1990.
0223デフォルトの名無しさん
2005/05/05(木) 14:47:45[Bun90]
P. Buneman. Functional Programming and Databases. In D. Turner, editor, Research Topics in Functional Programming, pages 155--169. Addison-Wesley, 1990.
0224デフォルトの名無しさん
2005/05/05(木) 15:01:18実際そうだよねえ。SQLじゃ手続きは一切記述しないし。
> 歴史的経緯を度外視すると、COBOLのお仲間に見えちまうんだが
計算機科学の基本的な勉強してないと、そう見える場合もあるってことですね。
0225デフォルトの名無しさん
2005/05/05(木) 15:07:01> > 歴史的経緯を度外視すると、COBOLのお仲間に見えちまうんだが
> 計算機科学の基本的な勉強してないと、そう見える場合もあるってことですね。
おバカ?
0226デフォルトの名無しさん
2005/05/05(木) 15:09:51monadic I/O 以前の話のような気がする。
そして、OCamlもSML NJも monadic I/Oなど使っちゃいないのさ(w
つまりML系関数型言語 特にOCalmlで 実用プログラミングをするのに、
大きな障害はないんじゃないか、と。(やる人が居るかどうかは別として)
0227デフォルトの名無しさん
2005/05/05(木) 15:28:020228デフォルトの名無しさん
2005/05/05(木) 15:37:09> DDLは手続きそのものだけどね。
まさか。宣言型の意味がまるでわかってないの?
0229デフォルトの名無しさん
2005/05/05(木) 15:38:31DDLってなんの略?
0230デフォルトの名無しさん
2005/05/05(木) 15:40:260231デフォルトの名無しさん
2005/05/05(木) 15:42:490232デフォルトの名無しさん
2005/05/05(木) 15:47:400233デフォルトの名無しさん
2005/05/05(木) 15:59:00DDLの実行は、関数定義の変更と同様、手続き的になされる
ということ
0234デフォルトの名無しさん
2005/05/05(木) 16:05:00> 実際そうだよねえ。SQLじゃ手続きは一切記述しないし。
まさか。実際のRDBでSQL使った事ないだろ。
0235デフォルトの名無しさん
2005/05/05(木) 16:09:150236デフォルトの名無しさん
2005/05/05(木) 16:45:40Haskelじゃなくて、Clean流のmonadic I/Oね。
0238デフォルトの名無しさん
2005/05/05(木) 17:18:08ご存知でしたら教えて頂きたいのですが、ocamlって今でもcamに基づいて実装されてるんですか?
pushとかcarとかswapとか。
今の高レベルの言語機能をcamで実現するのは結構大変かもと思うのですが…
0239デフォルトの名無しさん
2005/05/05(木) 17:58:40歴史的経緯を考えれば SQL は宣言型言語と言って間違いは無いと思うけど。
0240デフォルトの名無しさん
2005/05/05(木) 18:18:55私はOcamlはほとんど触ってないので存じません。(Linuxでmmm使った位かな)
先ほど調べたら、OCamlはネイティブコード版とバイトコード版があって、
バイトコード版は XleroyさんのZINC仮想機械で動く、ということらしいですね。
ZINC report, http://pauillac.inria.fr/~xleroy/publi/ZINC.ps.gz
>>239
当初の理念はどうであれ、現状は違うって話でしょ。
宣言型とか関数型という概念自体、当時とは随分変わってきている。
最近の定義だと
純関数型: 変数への(破壊)代入を許さない
参照透過性: 処理の順番によらず、同じ結果が得られる
等々、SQLの INSERT, UPDATE, DELETE操作自体、
宣言型と言い難いような気がする。
他方、SQLの仕様自体もどんどん変化して、
おっしゃる通りの手続き要素がSQLの内側に入り込んできている。
0241デフォルトの名無しさん
2005/05/05(木) 19:51:370242デフォルトの名無しさん
2005/05/05(木) 21:47:10> 宣言型とか関数型という概念自体、当時とは随分変わってきている。
ついには宣言型とか関数型とをごっちゃにするヤツまで登場か。
0243デフォルトの名無しさん
2005/05/05(木) 21:50:12部外者だが、おかしいぞ
0244デフォルトの名無しさん
2005/05/05(木) 22:14:28定義してみて。
0245デフォルトの名無しさん
2005/05/05(木) 22:20:11「関数型」 ttp://en.wikipedia.org/wiki/Functional_programming
「手続型」
ttp://en.wikipedia.org/wiki/Procedural_programming
ttp://en.wikipedia.org/wiki/Imperative_programming
0246デフォルトの名無しさん
2005/05/05(木) 22:25:12SQLは述語論理型
0247デフォルトの名無しさん
2005/05/05(木) 22:29:35最初の話題に戻って、
関数型言語でデータベースやOS作るという話はどうなんだ。
DBに関して、例えばこの本が非常に気になるんだが
Purely Functional Data Structures by Chris Okasaki
0248デフォルトの名無しさん
2005/05/05(木) 22:34:21いや、ここに居るのは「DBは宣言的言語の適用分野」って丸暗記しているだけで、
実際のDB (dbmじゃないヨ)はあまり知らないだけだろう
0249デフォルトの名無しさん
2005/05/05(木) 22:44:25SQL言語は述語論理だが、SQL言語が提供する
INSERTやUPDATE、DELETEはDBに対する手続き的操作
なんだよ
0250デフォルトの名無しさん
2005/05/05(木) 22:47:15>228
DDLの、DROP、ALTERってナニするか知ってる?(激藁
0251デフォルトの名無しさん
2005/05/05(木) 22:48:26> INSERTやUPDATE、DELETEはDBに対する手続き的操作
> なんだよ
違うでしょ。「手続き型言語」なら、INSERTやUPDATEの中身を手続き的に記述する必要がある。
それをせずにINSERTと書くだけですむから宣言型。
0252デフォルトの名無しさん
2005/05/05(木) 22:51:540253デフォルトの名無しさん
2005/05/05(木) 22:55:03いわゆる代入や参照不透明性を持たない、
純関数的にDBをどうやって作るのか?
という点が気になった。
だけどここは CleanでもHaskellでもない、
「なんとなく関数型」言語(ML)のスレだから、
そんな拘りを持ってもしょうがない、
という事か。
じゃあ、思い切ってDBは有り物使う事にして、
例えば OCamlでPostgreSQL呼び出せば済む。
終了。
0254デフォルトの名無しさん
2005/05/05(木) 22:56:260255デフォルトの名無しさん
2005/05/05(木) 23:09:54関数型言語スレに粘着してるからな。
どうしようもないさ
0256デフォルトの名無しさん
2005/05/05(木) 23:20:560257デフォルトの名無しさん
2005/05/05(木) 23:37:49Chris Okasakiの本は、ほとんどすべてがキューの話。ちょびっとだけ木構造
の話もあるけれど。
遅延評価なんかを使ってO(1)なキューの話をしたりとか、内容それ自体は面白
いのだけど、DBとは全然関係ない。
たぶんもとはこの人のD論で、D 論の方はPDFが公開されている。
http://www-2.cs.cmu.edu/~rwh/theses/okasaki.pdf
内容は、たぶんあまり変わらないと思う。本の方にあった演習問題とかが(さ
すがに)ないっぽいくらい。
0258デフォルトの名無しさん
2005/05/05(木) 23:46:00Amazon のreviewには、red-black trieとかwide-range of datastructure
と書いてあるから、関数言語によるDBの内部データ構造を議論するのに役立つと
思ったんだけど。
おっしゃる通り (cue中心)なら、よく使い道がわかんないですね。
0259デフォルトの名無しさん
2005/05/05(木) 23:47:01Amazon のreviewには、red-black trieとかwide range of data structure
と書いてあるから、関数言語によるDBの内部データ構造を議論するのに役立つと
思ったんだけど。
おっしゃる通り (queue中心)なら、よく使い道がわかんないですね。
0260デフォルトの名無しさん
2005/05/05(木) 23:48:48しかも良く見たら red-black treeだし・・・。
0261デフォルトの名無しさん
2005/05/05(木) 23:56:09D論へのポインタありがとうございます。
目を通してみます。
以下は【ご参考】ということで
Purely Functional Data Structures by Chris Okasaki
http://www.amazon.com/exec/obidos/tg/detail/-/0521663504/
Inside This Book (learn more)
A distinctive property of functional data structures is that they are
always persistent-updating a functional data structure does not destroy
the existing version, but rather creates a new version that coexists
with the old one. Read the first page
Statistically Improbable Phrases (SIPs): (learn more)
enclosing suspension, binomial heaps, fun lookup, leftist heaps, fun cons,
unevaluated suspensions, catenable deques, sortable collections, five debits,
pairing heaps, amortized bounds, fun exec, polymorphic recursion, amortized time,
fun tail, leftist property, nested suspensions, global rebuilding, four debits, false fun,
one actual step, struct datatype, fun merge, credit invariant, let val
0262デフォルトの名無しさん
2005/05/06(金) 00:23:45(純関数型言語をそれ自体で実装するのに必要な、純関数型言語向けデータ構造だから)
で〜たべ〜すぷろぐらまのような下賎の民には無関係だよ、
って逝ってるだけじゃねぇか、と
0263デフォルトの名無しさん
2005/05/06(金) 00:59:14>>257
>Chris Okasakiの本は、ほとんどすべてがキューの話。
>演習問題
ほら、ここが笑うとこですよ
0264デフォルトの名無しさん
2005/05/06(金) 01:07:52>>203-263の削除依頼出すぞ。いいな。
0265デフォルトの名無しさん
2005/05/06(金) 01:12:540266デフォルトの名無しさん
2005/05/06(金) 01:18:36もちつけ。GWが終われば夏までは平和なんだから、辛抱しる。
0267デフォルトの名無しさん
2005/05/09(月) 21:48:01{Windows,UNIX}で日本語でGUI使えますか?
日本語の処理の事情(単にバイト列のままなのかunicodeなのか)とか
GUIの事情とか書いてあるページがあれば知りたいのですが、
ぐぐってみても探し当たりませんでした。
0268デフォルトの名無しさん
2005/05/09(月) 21:51:35Cで使えるライブラリは使えると思う。
0269デフォルトの名無しさん
2005/05/09(月) 22:01:290270デフォルトの名無しさん
2005/05/09(月) 23:15:53stringの実体はバイト列。unicodeにするなら camomile あたりを噛ませて変
換すればよい。
0271デフォルトの名無しさん
2005/05/10(火) 02:34:38label とか poly-variant とかあるからねえ。
焦らずゆっくりどうぞ。
0272デフォルトの名無しさん
2005/05/10(火) 02:37:11超入門だけで足りるか?
それだけで、あとはリファレンスを読んだら分かるっていうのなら問題ないが。
0273デフォルトの名無しさん
2005/05/10(火) 02:49:03窓を出すだけなら一行。
let window = GWindow.window () in let _ = window#show () in GMain.Main.main ()
0274デフォルトの名無しさん
2005/05/10(火) 12:35:29267 は失速しない程度にがんばれ。
0275デフォルトの名無しさん
2005/05/10(火) 18:43:300276デフォルトの名無しさん
2005/05/10(火) 19:06:240277デフォルトの名無しさん
2005/05/10(火) 19:51:520278デフォルトの名無しさん
2005/05/10(火) 19:53:29メジャーでポップな関数型言語が現れないと、流行はブレークしないだろうな。
・・・MSR発Visualなんちゃらではない事を祈るw
0279デフォルトの名無しさん
2005/05/10(火) 19:58:220280デフォルトの名無しさん
2005/05/10(火) 20:07:140281デフォルトの名無しさん
2005/05/10(火) 20:11:110282デフォルトの名無しさん
2005/05/10(火) 20:21:25別に特定の言語が普及してほしいなんて思ってないよ。
肝心なのはスタイルだね。
0283デフォルトの名無しさん
2005/05/10(火) 20:51:290284デフォルトの名無しさん
2005/05/10(火) 21:46:58教えていただいてありがとうございます。
先は長そうなので次はもうちょっと詳しそうな解説を探して読んでみます。
文字列はバイト列なんですね。私もString.lengthやString.getで試してみて
納得しました。
lablgtk2を入れて、>>273の1行だけやってみました。
エラーばっかり出て???でしたがチュートリアルを見て
gtkInit.cmoというのが必要なのがわかって、ウィンドウをおがむことができました。
文字列がただのバイト列ということは、gtkで日本語を表示させようと思うと
自分でエンコーディングを変換してやらないといけないんでしょうか。
0285デフォルトの名無しさん
2005/05/10(火) 22:09:20276じゃないけど、あのブロックの独特のスタイルが普及して欲しいでつ。
0286デフォルトの名無しさん
2005/05/10(火) 22:25:030287デフォルトの名無しさん
2005/05/10(火) 22:51:25270でも書いたけど、camomile
http://camomile.sourceforge.net/
で変換できるよ。
GetTextのようなものはない。……と思ったら、 ocaml-gettext なるものがあった。
http://webperso.easyconnect.fr/gildor/ocaml-gettext.html
ぜんぜん触ったことないから、どんなものなのかは不明。
0288デフォルトの名無しさん
2005/05/10(火) 22:53:190289デフォルトの名無しさん
2005/05/11(水) 03:29:57しかも、何か変。
ocamlfind installに一回め失敗しちゃったし、removeしようと思ってもできないし、
手動でインストール失敗したファイル消さないと、続けられなったし。
素人の俺様にも使い易いようにならないかなー。
0290デフォルトの名無しさん
2005/05/11(水) 03:32:460291デフォルトの名無しさん
2005/05/11(水) 03:47:130292デフォルトの名無しさん
2005/05/11(水) 16:17:060293デフォルトの名無しさん
2005/05/11(水) 17:23:29lablgtk2 の lablgladecc を使ったほうが楽だったよ
0294デフォルトの名無しさん
2005/05/12(木) 17:36:10glade-2で作成し、
lablgladecc2 test.glade > test.ml
としてソースを吐き出した後、
ocamlc -I +lablgtk2 lablgtk.cma gtkInit.cmo test.ml
としたのですが、
Error while linking test.cmo: Reference to undefined global `Glade'
とエラーが出てしまいます。
どうすれば解決できますか?
愚考するに、gladeモジュールをリンクしないといけないのではないかと思うのですが、コンパイラオプションに何をどう指定すれば良いのかわかりません。
0295デフォルトの名無しさん
2005/05/12(木) 18:03:45のメーリングリストを読んでいたら何だか解決しそうな気がしたので、もう少し良く考えてから発言すれば良かったと思いました。
でも、先に答えを教えてくださった方が楽なので教えてください。
0296デフォルトの名無しさん
2005/05/12(木) 18:42:100297デフォルトの名無しさん
2005/05/12(木) 18:51:49GTK+ではXMLから動的にウィジェッツを作るのが流行りなのですか?
0298デフォルトの名無しさん
2005/05/12(木) 19:42:26ほんとですねー。READMEにちゃんと書いてありました^^;
The executable must be linked with lablglade.cma.
0299デフォルトの名無しさん
2005/05/13(金) 00:25:58と疑問に思ってる大学生なんですが・・・どうなんでしょ?
0300デフォルトの名無しさん
2005/05/13(金) 00:32:07どんな将来像を思い描いているの?超エリート中学生の俺様が聞いてやるよ。
0301デフォルトの名無しさん
2005/05/13(金) 00:34:420302デフォルトの名無しさん
2005/05/13(金) 00:36:270303デフォルトの名無しさん
2005/05/13(金) 00:39:09MLやってたことが役立ってんの?
0304デフォルトの名無しさん
2005/05/13(金) 00:44:13プログラミングには便利だから使っている。処理系作るのにもOCamlは便利だし、リストが楽に使えるから便利だし。
0305デフォルトの名無しさん
2005/05/13(金) 00:46:28だからどんな仕事かによるだろ。
0306デフォルトの名無しさん
2005/05/13(金) 00:46:47数値計算するんなら R や Scilab があるし。
0307デフォルトの名無しさん
2005/05/13(金) 05:25:43自動定理証明器を作るのに使ってます。
0308デフォルトの名無しさん
2005/05/13(金) 11:16:36そんなもんに興味持つ小学生がいるわけねーだよ
0309デフォルトの名無しさん
2005/05/13(金) 11:43:26もしMLが個人的に便利、マンセー、だと思うのなら、
将来はMLを使ってうれしい環境を自ら作る!
ぐらいの気概が欲しいと思われ。
欧米ではそういう奴らが大学外でも既に少数ながら出てきている。
(大学からスピンアウトした人々とか、じゃなくてね)
「強い型付けによる安全性」というフレーズはマーケティングにも
使えないことはない。
じゃあ、俺は?すいません。大学内の人です。
0310デフォルトの名無しさん
2005/05/13(金) 14:58:18現実派にとっては嬉しいことないかもね。
俺も以前はCやJavaとかしか使ったことなかったけど、MLを学んで世界が変わった。
とは言い過ぎか、少なくともプログラム設計の考え方は変わった。
でもMLを学んだせいでCやJavaのプログラム書くのがひどく億劫になった…。
こうなると大学出るのが辛くなるわけです。
0311デフォルトの名無しさん
2005/05/13(金) 17:52:400312デフォルトの名無しさん
2005/05/13(金) 18:34:49let aa=[IntV 1, IntV 2, IntV 3];;
let get_int = function IntV n -> n;;
List.fold_left (fun a-> fun b->IntV(get_int(a) + get_int(b))) IntV(0) aa;;
This expression has type t but is here used with type 'a -> 'b
aaの要素を全て足して、IntV 6って答えを出したいのですが、どうもうまくいきません。
何がまずいのでしょうか?
0313デフォルトの名無しさん
2005/05/13(金) 18:50:54リストの区切りは;ですよ
type t = IntV of int;;
let aa = [IntV 1; IntV 2; IntV 3];;
let get_int = function IntV n -> n;;
List.fold_left (fun a -> fun b -> IntV (get_int a + get_int b)) (IntV 0) aa;;
0314デフォルトの名無しさん
2005/05/13(金) 18:56:010315デフォルトの名無しさん
2005/05/13(金) 19:07:11存在しないことが保証される」という性質って「強く型付けされている」よりも
もっと強い性質だよね。
Cだって強く型付けされている(コンパイル時に型が一意に決まる)
けど、この性質は持っていない。
こういう性質(型システムがsound)のことを一般にどう呼称してるのでしょう?
0316デフォルトの名無しさん
2005/05/13(金) 19:09:30解決しました。ありがとうございます。
http://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4/text/eopl006.html
を見て、Exerciseやってる途中でした。
0317デフォルトの名無しさん
2005/05/13(金) 19:16:13type safe
type soundness
0318デフォルトの名無しさん
2005/05/13(金) 19:26:200319デフォルトの名無しさん
2005/05/13(金) 19:39:35Cだと領域のサイズが同じなら、全然関係ない型の値でも型変換して代入できたりするけど、これは問題だよね。
0320デフォルトの名無しさん
2005/05/13(金) 19:44:49run()
with _ -> print_string 例外の名前
という処理を行うために、例外の名前を取得したいのですが、何か関数はあるのでしょうか?
0321デフォルトの名無しさん
2005/05/13(金) 19:50:36>309 「型システムによって実行時型エラーが存在しないことが保証される」という性質って
> 「強く型付けされている(Strong typed)」よりももっと強い性質だよね。
0322320
2005/05/13(金) 21:10:04Printexc.to_string
0323デフォルトの名無しさん
2005/05/13(金) 21:53:240324デフォルトの名無しさん
2005/05/13(金) 21:56:562行目でエラーがでるようですが、何が原因なのでしょうか?
let s = ref ""
let f = open_in "test.txt" in
while true do
s <- ref (!s ^ (input_line f))
done
print_string !s
0325デフォルトの名無しさん
2005/05/13(金) 21:58:330326324
2005/05/13(金) 22:03:07ocaml test-openin.ml
File "test-openin.ml", line 2, characters 27-29:
Syntax error
0327デフォルトの名無しさん
2005/05/13(金) 22:04:540328デフォルトの名無しさん
2005/05/13(金) 22:22:37let _ =
let f = open_in "test.txt" in
while true do
s := !s ^ (input_line f)
done;
print_string !s
がんばれ。
0329デフォルトの名無しさん
2005/05/13(金) 22:24:33Syntax error
これで何をわかれというのか
コンパイラ不親切すぎ
いかにもフリーソフトって感じ
0330デフォルトの名無しさん
2005/05/13(金) 22:28:08Emacs+tuareg-modeを導入するとエラーの箇所までジャンプしてくれて便利。
0331デフォルトの名無しさん
2005/05/13(金) 22:34:12ならば是非エラーメッセージの所を書き直してくれ。
改定案を出すだけでもきっと喜ばれると思うぞ。
0333デフォルトの名無しさん
2005/05/14(土) 01:52:59下ので、loop_recはループしてくれないのは何故でしょう?
あと、例外を取った時はprint_string "end"を実行してくれるけど、
例外が生じなかったときは、それを実行してくれないのはなぜなんでしょうか?
なんとなく、print_string "end"がwithのブロック内にあると認識されてるのがいけないのだと思うのですが、
ブロックを閉じるにはどうしたらよいのかも教えてもらえないでしょうか?
exception Zero
let randomfunc () =
match (Random.int 2) with
0 -> raise Zero
| _ -> print_string "ok"
let rec loop_rec () =
try
randomfunc ();
with e -> print_string "<EXCEPT>";
print_string "end";
loop_rec()
let loop_while () =
while true do
try
randomfunc ();
with e -> print_string "<EXCEPT>";
print_string "end";
done
let _ =
loop_while()
(* loop_rec () *)
0334デフォルトの名無しさん
2005/05/14(土) 02:10:08(try
randomfunc ();
with e -> print_string "<EXCEPT>");
print_string "end";
loop_rec()
または、
let rec loop_rec () =
begin
try
randomfunc ();
with e -> print_string "<EXCEPT>"
end;
:
インデントを適切にしてくれるエディタを使った方がいいよ。わかりやすいから。
0335333
2005/05/14(土) 02:26:23なるほど、()で囲むか、begin-endで囲む方法があるのですね。
まだまだ知らないキーワードがありそうですね。
どうもありがとうございます。
0336デフォルトの名無しさん
2005/05/14(土) 07:23:10letで下がったりする?
まあいいや。
0337デフォルトの名無しさん
2005/05/14(土) 07:56:57and as assert asr begin class
constraint do done downto else end
exception external false for fun function
functor if in include inherit initializer
land lazy let lor lsl lsr
lxor match method mod module mutable
new object of open or private
rec sig struct then to true
try type val virtual when while
with
0338デフォルトの名無しさん
2005/05/14(土) 08:17:150339デフォルトの名無しさん
2005/05/14(土) 22:46:46とりあえずemacsでcaml-modeを設定しる
0340デフォルトの名無しさん
2005/05/15(日) 17:24:43letのinの前後での改行にいつも悩んでて、どれもすわりが悪い。
あと、引数がいっぱいある関数の適用で、一行にすると長すぎる場合も。
0341デフォルトの名無しさん
2005/05/15(日) 18:01:420342デフォルトの名無しさん
2005/05/15(日) 20:08:230343デフォルトの名無しさん
2005/05/15(日) 20:23:020344デフォルトの名無しさん
2005/05/15(日) 21:13:01>let i = ... in
>...
長ければ
>let i =
> ...
>in
>...
って書くかな。
自分でもいまいち納得してないんだけど。
0345デフォルトの名無しさん
2005/05/15(日) 22:27:18O'Caml のソースを見てもらえばわかりますが、
担当者が変われば細かい部分が変わります。
無理せず、状況に合わせて自分の見易いように
するのがいいかと。
0346デフォルトの名無しさん
2005/05/15(日) 22:48:27頼むからインデントの方針を統一してくれ。
お前のソースは場所によってインデントの仕方がばらばらだから、読みにくくてかなわん。
0347デフォルトの名無しさん
2005/05/16(月) 00:46:22人に頼む前に自分でインデント整形フィルターを作った方が楽なのでは?
ocamlプログラマー全員にインデントの方針を統一させるよりよっぽど簡単。
0348デフォルトの名無しさん
2005/05/16(月) 01:07:32肝心のインデントルールをどう設定したものか。
0349デフォルトの名無しさん
2005/05/16(月) 04:12:300350デフォルトの名無しさん
2005/05/16(月) 15:43:550351デフォルトの名無しさん
2005/05/16(月) 16:20:490352デフォルトの名無しさん
2005/05/16(月) 17:20:02「オライリーが本出してる言語」という紹介がしたい。
0353デフォルトの名無しさん
2005/05/22(日) 15:33:440354デフォルトの名無しさん
2005/05/22(日) 15:34:070355デフォルトの名無しさん
2005/05/22(日) 16:51:040356デフォルトの名無しさん
2005/05/22(日) 17:56:38http://caml.inria.fr/pub/old_caml_site/tutorials-eng.html
のいくつかは結構良いと思う。
0357デフォルトの名無しさん
2005/05/24(火) 18:47:170358デフォルトの名無しさん
2005/05/24(火) 23:18:09与えられた要素だけを含む集合を新しく作るという理解であっているでしょうか?
標準ライブラリについて詳しい解説のページがあったら教えてください。
http://caml.inria.fr/pub/docs/manual-ocaml/manual034.html では
シグネチャしかわからない……。
0359デフォルトの名無しさん
2005/05/24(火) 23:25:34その通り。lib/ocaml/set.mli を見ると、
val singleton: elt -> t
(** [singleton x] returns the one-element set containing only [x]. *)
と書いてある。そのまま。
http://caml.inria.fr/pub/docs/manual-ocaml/manual034.html はちょっと
ひどいね。
module type S = sig .. end
Output signature of the functor Set.Make.
sig end の中が消えているので、これでは全くわからん。
いずれにせよ、 http://caml.inria.fr/pub/docs/manual-ocaml/
のライブラリ関係の記述はすべて、 lib/ocaml/*.mli から生成されているので、
そっちを見た方がいいです。それ以上の内容は載っていない。
0360デフォルトの名無しさん
2005/05/24(火) 23:39:34教えていただいて非常に助かりました。ありがとうございます。
0361デフォルトの名無しさん
2005/05/24(火) 23:56:04モジュールは別のファイルとして生成されるんだよ。モジュール名のところがリンクになってるじゃん。そのリンクを辿って
http://caml.inria.fr/pub/docs/manual-ocaml/libref/Set.S.html
を見れば、
> val singleton : elt -> t
> singleton x returns the one-element set containing only x.
と同じことが書いてあるよ(当たり前だけど)。
ただ、いちいちwebページ見るのは面倒だというのは同意。
ocamlbrowser は?
0362デフォルトの名無しさん
2005/05/25(水) 00:25:54module type S = の S がクリックできるんですね。
全然気がつきませんでした。
ページの見出しの「Set」がクリックできるのには気付いたのですが、
そこにあるシグネチャが情報の全てだと思っておりました。
ocamlbrowserというのも初めて知りました。
Intfというボタンで*.mliの中身を表示させられるんですね。
欲を言うとここからドキュメンテーションを抽出してウィンドウ内に表示して
くれるともっといいですね。
0363デフォルトの名無しさん
2005/05/29(日) 19:01:020364デフォルトの名無しさん
2005/05/29(日) 22:38:09超燃える。
って言うか、OCaml で書かれた OS だって説明が無いと、誰もクリックしないワナ。
0365デフォルトの名無しさん
2005/05/29(日) 23:04:160366デフォルトの名無しさん
2005/06/02(木) 14:01:510367デフォルトの名無しさん
2005/06/02(木) 15:06:43ねーよ。 昔、正規表現を使おうとしたとき、ライブラリがオートマトンの教科書レベルで
唖然とした記憶がある。 今は知らないが大して事情は変わらないだろう。
0368デフォルトの名無しさん
2005/06/02(木) 15:57:39使ったこと無いんで、役に立つかどうかは知らんけど、こんなんはあるみたいよ
ttp://sourceforge.net/projects/ocamlsdl
0369デフォルトの名無しさん
2005/06/03(金) 06:28:25↑ナンダソリャー、というのはおいといて、
確かにocamlって正規表現、というか文字列操作(とくに分解)全般に弱いよね。
ocamllex/yaccや簡易パーサは仰々しすぎる。Scanfは表現力に欠ける。
Strは教科書的な正規表現しかなくて、マッチ結果の参照もめんどい。
ocaml-regexpは見た目はいいんだけどpcre必須というのがめんどい。
やっぱりocamlをスクリプトっぽく使おうという発想が間違ってるのかな。
0370デフォルトの名無しさん
2005/06/03(金) 06:41:080371デフォルトの名無しさん
2005/06/03(金) 07:51:23http://www.tom.sfc.keio.ac.jp/~sakai/d/?date=20050209
0372デフォルトの名無しさん
2005/06/06(月) 00:50:15> ocaml-regexpは見た目はいいんだけどpcre必須というのがめんどい。
pcre 再実装の手間を考えれば、一個の下位ライブラリのインストールくらい
つきあってあげてもバチは当たらないと思われ。
> やっぱりocamlをスクリプトっぽく使おうという発想が間違ってるのかな。
http://martin.jambon.free.fr/micmatch.html
0373デフォルトの名無しさん
2005/06/06(月) 01:01:27micmatchってocaml-regexpとどう違うの?
0374デフォルトの名無しさん
2005/06/07(火) 23:02:15いまさらだけど、ocaml-regexpって Yutaka Oiwa の Regexp/OCaml の事だよね?
# 違ってたらすまん
ocaml-regexp は正規表現で match するための構文シュガー。
micmatch はスクリプトっぽいものを目指したコマンド。
The goal of Micmatch is to make text-oriented programs even easier to write, read and run
without losing the unique and powerful features of Objective Caml (OCaml).
正規表現の部分がクローズアップされがちだけど、↓みたいなこともできる。
#! /usr/bin/env micmatch
let _ =
let n = ref 0 in
Micmatch.Text.iter_lines_of_channel
(fun line ->
let code, comment =
match line with
RE (_* Lazy as code) "#" (_* as comment) -> code, comment
| code -> code, "" in
incr n;
Printf.printf "%s# %i %s\n" code !n comment)
stdin
正に ocaml をスクリプトっぽく使おうという発想だから紹介してみたんだけ
ど、お気に召さないのであれば仕方がない。
0375デフォルトの名無しさん
2005/06/08(水) 09:58:39そうです。
気に入らなかったというより、新規性がわからなかっただけです。つまり、
(micmatch - Regexp/OCaml) = iter_lines_of_channelのような便利関数群
という認識でOK?
正規表現の部分は既存のものがあるのに、使い勝手も変わらなくて、
便利関数群と密接に絡んでるわけでもないのなら何で再発明したのか。
せめて構文くらいあわせりゃよかったのに。
0376デフォルトの名無しさん
2005/06/11(土) 08:41:08お気楽 Standard ML of New Jersey 入門
ttp://www.geocities.jp/m_hiroi/func/index.html
参考まで
0377デフォルトの名無しさん
2005/06/13(月) 21:02:390378デフォルトの名無しさん
2005/06/17(金) 03:52:15(WindowsXP)
例えば
# Graphics.open_graph;;
Reference to undefined global `Graphics'
ってなる。りゆうおしえて。
0379デフォルトの名無しさん
2005/06/17(金) 05:21:010380デフォルトの名無しさん
2005/06/17(金) 05:44:160381デフォルトの名無しさん
2005/06/17(金) 05:51:34#load "graphics.cma" でなんか動いたような気分になった。
0382デフォルトの名無しさん
2005/06/17(金) 07:00:27let y = e2 in
...
のような場合、e1とe2の評価される順序は不定ですよね?
(もちろんe2がxに依存したら話は別ですが)
0383デフォルトの名無しさん
2005/06/17(金) 07:55:040384デフォルトの名無しさん
2005/06/17(金) 08:39:470385デフォルトの名無しさん
2005/06/17(金) 09:49:28The let and let rec constructs bind value names locally. The construct
let pattern_1 = expr_1 and ... and pattern_n = expr_n in expr
evaluates expr_1 ... expr_n in some unspecified order, then matches their values against
the patterns pattern_1 ... pattern_n. If the matchings succeed, expr is evaluated in the environment ...
(Section 6.7 of Objective Caml manual)
0386デフォルトの名無しさん
2005/06/17(金) 18:16:56痛み入ります。理解できました。
これはe1,e2に副作用がある場合にその順序を保証するためと考えてよろしいでしょうか?
e1,e2が純粋に計算で副作用がない場合、最適化により順序を入れ替えたり
特定の計算を遅らせるのは問題ないですよね?
0387デフォルトの名無しさん
2005/06/17(金) 18:38:02無限ループにも注意。
0388デフォルトの名無しさん
2005/06/17(金) 20:01:32でもさ、リファレンスポイントって言うやつ2つ出せないの?
アニメーションで一点しか動かないよ。これじゃあさ。
0389デフォルトの名無しさん
2005/06/17(金) 21:36:060390デフォルトの名無しさん
2005/06/18(土) 00:41:57素直に、Javaにすればいいだけ。
なんだかんだいったって、結局こういうところがいい加減なんだよw
0391デフォルトの名無しさん
2005/06/18(土) 00:47:160392デフォルトの名無しさん
2005/06/18(土) 01:17:450393デフォルトの名無しさん
2005/06/18(土) 02:01:05そんでもってこの辺↓逝って好きなだけ叫んでこい。
http://pc8.2ch.net/test/read.cgi/prog/1092882933
0394デフォルトの名無しさん
2005/06/18(土) 02:50:35Java最強、Ocamlへたれ
Java最強、Ocamlへたれ
Java最強、Ocamlへたれ
Java最強、Ocamlへたれ
Java最強、Ocamlへたれ
Java最強、Ocamlへたれ
Java最強、Ocamlへたれ
Java最強、Ocamlへたれ
Java最強、Ocamlへたれ
ava最強、Ocamlへたれ
0395デフォルトの名無しさん
2005/06/18(土) 02:57:30岡村なんてめじゃない
0396デフォルトの名無しさん
2005/06/18(土) 04:39:300397デフォルトの名無しさん
2005/06/18(土) 05:45:18無知が露呈して、総スカン喰らってたけど
0398デフォルトの名無しさん
2005/06/18(土) 07:13:000399デフォルトの名無しさん
2005/06/18(土) 10:48:02ignore: 'a -> unit = <fun>
0400デフォルトの名無しさん
2005/06/18(土) 11:01:13それだ!
0401デフォルトの名無しさん
2005/06/18(土) 16:57:210402デフォルトの名無しさん
2005/06/18(土) 17:07:32まったく違うよ。
0403デフォルトの名無しさん
2005/06/18(土) 17:47:22あんた英語も読めずに引用してんの?
> > let x = e1 in
> > let y = e2 in
> > ...
> > のような場合、e1とe2の評価される順序は不定ですよね?
> e1が評価されてから、e2が評価される
>
> The construct
> let pattern_1 = expr_1
> and ... and
> pattern_n = expr_n
> in expr
> evaluates expr_1 ... expr_n in some unspecified order,
> then matches their values against the patterns pattern_1 ... pattern_n
0404デフォルトの名無しさん
2005/06/18(土) 17:47:590405デフォルトの名無しさん
2005/06/18(土) 18:08:000406デフォルトの名無しさん
2005/06/18(土) 18:08:560407デフォルトの名無しさん
2005/06/18(土) 18:15:58Javaにうつれっていうのが精一杯なのに高レベルなのかよw
0408デフォルトの名無しさん
2005/06/18(土) 18:18:000409デフォルトの名無しさん
2005/06/18(土) 18:20:140410デフォルトの名無しさん
2005/06/18(土) 18:22:43で時間をつぶさないよう、警告してるだけw
0411デフォルトの名無しさん
2005/06/18(土) 18:31:35Ocamlでグラフィックやってるフリって、、、クオリティ超タカスギ
0412デフォルトの名無しさん
2005/06/18(土) 18:33:55だってMLって関数型のフリしたイカサマ言語だもん。
0413デフォルトの名無しさん
2005/06/18(土) 18:34:29そこではなく
If the matchings succeed, expr is evaluated in the environment ...
を言いたいんだと思われ。
1. expr_1からexpr_nが不定の順番で評価
2. マッチング
3. 成功したらexprの評価
なので
let x = e1 in
let y = e2 in
...
ではe1はx2より前に評価される。
0414デフォルトの名無しさん
2005/06/18(土) 18:41:160415デフォルトの名無しさん
2005/06/18(土) 18:47:200416デフォルトの名無しさん
2005/06/18(土) 18:47:440417デフォルトの名無しさん
2005/06/18(土) 18:50:000418デフォルトの名無しさん
2005/06/18(土) 18:58:50MLこそ高速で美しい至高の言語。
0419デフォルトの名無しさん
2005/06/18(土) 19:02:020420デフォルトの名無しさん
2005/06/18(土) 19:07:19これはそうかもしれんがね、
>現実的なソフトの開発にも使用できる実用性を備えた言語です。
うえの議論でわかるように
グラフィックにしろ正規表現にしろイイカゲン杉
口が滑っても実用的だなんていえないねw
>また、プログラミングの初心者が最初に学習する言語としても
>優れています。
ファw、MLのどこが初心者が最初に学習するのに優れてるんだよw
関数型プログラム -→初心者には意味不明、マズは手続きがただろw
型推論? -→初心者にはわけわからん、っていうか大半のプログラマにとって不要
多相型? -→初心者どころか大半のプログラマにとってわけわからんw
以上。
0421デフォルトの名無しさん
2005/06/18(土) 19:12:340422デフォルトの名無しさん
2005/06/18(土) 19:12:440423デフォルトの名無しさん
2005/06/18(土) 19:12:510424デフォルトの名無しさん
2005/06/18(土) 19:15:020425デフォルトの名無しさん
2005/06/18(土) 19:21:35>だってMLって関数型のフリしたイカサマ言語だもん。
>関数型プログラム -→初心者には意味不明、マズは手続きがただろw
どうせ荒らすなら最低限意見を統一してから荒らせよって思った。
0426デフォルトの名無しさん
2005/06/18(土) 19:23:22理屈ではHaskellに負け
速度ではCに負け
実用性ではJavaに負け
いいとこなしの中途半端言語ジャンw
0427デフォルトの名無しさん
2005/06/18(土) 19:39:100428デフォルトの名無しさん
2005/06/18(土) 20:10:060429デフォルトの名無しさん
2005/06/18(土) 20:54:09MLが誇れるものってパターンマッチングだけだからねw
0430デフォルトの名無しさん
2005/06/18(土) 21:35:14パターンマッチングだけをとってみてもSugeeeeeeeeeeeeeeeYO と思いました。
haskellもjavaも良いのかもしれないけど、俺はこの先ocamlと共に生きようと思いました。
だから、お願い。このスレ荒らさないでね。
0431デフォルトの名無しさん
2005/06/18(土) 21:39:000432デフォルトの名無しさん
2005/06/18(土) 21:49:020433デフォルトの名無しさん
2005/06/18(土) 22:06:36ttp://aa.2ch.net/aastory/kako/1033/10334/1033401566.html
一応俺の環境ではすごく動いた。
0434デフォルトの名無しさん
2005/06/18(土) 22:54:030435デフォルトの名無しさん
2005/06/19(日) 01:56:00今さらだが…
おれは>>399ではなくて>>400だが、
>>399は>>398のヒントだと思うぞ。
つまりは、餌を与えずに ignore でスルーしる。
そういう事だな。
0436デフォルトの名無しさん
2005/06/19(日) 02:04:45英語版ならいっぱいあったし、たとえば
http://caml.inria.fr/pub/ml-archives/caml-list/2005/03/e86bc87bc8fbc81715dedfedd1687cdb.en.html
この辺の議論から辿れたんだけど。
日本語版の資料を知っている、という人がいたら検索用のポインタでも示してくれないだろうか。
お願いします。
どーでもいーけどperl使いの人に「パターンマッチが素晴らしいんだよ!」と言ったら
「文字列処理ならperlでもできるよ」って言われた。文字列じゃないよ……。
0437デフォルトの名無しさん
2005/06/19(日) 02:52:340438デフォルトの名無しさん
2005/06/19(日) 02:54:210439デフォルトの名無しさん
2005/06/19(日) 04:35:48速度ではCの次、
実用性ではJavaの次だったら
間違いなく現時点で最強クラスの言語だよ。
OCamlのGraphicsははっきり言ってできの悪いライブラリなので、
OCamlSDLを見てみるといいんじゃないかな。
何がやりたいのか全然わからないけど。
0440デフォルトの名無しさん
2005/06/19(日) 05:45:30で
Graphics.current_point();;
で現在のreference pointの位置が返ってくるんです。
このreference pointってのを使って絵とか描くんですけど、
これ2つ以上だせないのかってことなんです。
1つしか出せないとアニメーションで1点しか動かないことになるじゃないですか
それはめんどうなので4ッツくらい動かしたいわけなんですが。
どうしたらよいかというところなんです。
できるって書着込みもあったんで調べてみたんですけど。わからないので。
0441デフォルトの名無しさん
2005/06/19(日) 06:32:52>それはめんどう
できないと思ってるのか、面倒だと思ってるだけなのか。
前者なら可能だ。順番に描いていけ。後者なら諦めろ。
OCamlのGraphicsを本気で使うやつなんかいない。
0442デフォルトの名無しさん
2005/06/19(日) 06:36:33OCamlを本気で使うやつなんかいない。
0443デフォルトの名無しさん
2005/06/19(日) 06:55:02公開実用アプリで有名なのって何があるかな。
unisonは知ってる。
0444デフォルトの名無しさん
2005/06/19(日) 09:50:03coq
0445デフォルトの名無しさん
2005/06/20(月) 19:11:27--
open Graphics;;
type point = { mutable p : int * int; mutable v : int * int};;
let create_point width height =
{ p = (Random.int width, Random.int height);
v = (Random.int 5 - 2, Random.int 5 - 2)};;
let rec create_points width height = function
| 0 -> []
| n -> create_point width height :: create_points width height (n-1);;
let plot_point p = plot (fst p.p) (snd p.p);;
let add_vec (x1,y1) (x2,y2) = (x1+x2, y1+y2);;
let update_point width height p =
let (nx,ny) = add_vec p.p p.v in
if nx < 0 then p.v <- (Random.int 5 + 2, snd p.v)
else if nx > width then p.v <- (- (Random.int 5 + 2), snd p.v)
else if ny < 0 then p.v <- (fst p.v, Random.int 5 + 2)
else if ny > height then p.v <- (fst p.v, - (Random.int 5 + 2))
else p.p <- (nx,ny);;
open_graph "";
auto_synchronize false;
let width, height = size_x (), size_y () in
let points = create_points width height 10000 in
while true do
clear_graph ();
List.iter (fun p -> plot_point p; update_point width height p) points;
synchronize ();
done;;
0446sage
2005/06/20(月) 19:23:20他は、The Hump (http://caml.inria.fr//cgi-bin/hump.en.cgi) に行って
調べてください。
0447デフォルトの名無しさん
2005/06/21(火) 00:30:05了解。なさげなのであきらめてちゃんと読みます。
0448デフォルトの名無しさん
2005/06/21(火) 11:19:06纓坂 智, 『型に基づくパターンマッチングコンパイル方式の構築と実装』
北陸先端科学技術大学院大学 修士論文, 2004
PDF直リンするのは気が引けるのでググって頂戴。
0449デフォルトの名無しさん
2005/06/21(火) 21:10:37http://pc8.2ch.net/test/read.cgi/tech/1098179243/544
>俺ならMLでスマートに書くけどねw
さすが、ML・・・
0450デフォルトの名無しさん
2005/06/21(火) 21:36:380451デフォルトの名無しさん
2005/06/21(火) 21:59:430452デフォルトの名無しさん
2005/06/21(火) 22:08:570453デフォルトの名無しさん
2005/06/21(火) 22:14:22関数型言語でいうパターンマッチングって、正規表現とは異なるコンセプトなんですか。
正規表現によるパターンマッチングの対象はテキストですが、
こちらで話題になるパターンマッチングとは、どういったものなのでしょうか。
他言語の仕様では実現されていない機能なのでしょうか?
説明を聞いてみたいのですが・・
0454デフォルトの名無しさん
2005/06/21(火) 22:26:29だから何?
ocamlってコンパイル言語界のRubyだと思う。
言語仕様の信者はいるが、普及も中途半端。ライブラリも中途半端。
0455デフォルトの名無しさん
2005/06/21(火) 22:30:490456デフォルトの名無しさん
2005/06/21(火) 22:38:24Prologの単一化(ユニフィケーション)を一方通行にしたイメージ。
特にリスト操作はPrologとソックリ、だった気がする
0457デフォルトの名無しさん
2005/06/21(火) 22:39:070458デフォルトの名無しさん
2005/06/21(火) 22:45:50そして、「このプログラムはMLで書かれてます」
と再生紙の様な宣伝もする。
0459デフォルトの名無しさん
2005/06/21(火) 22:55:00そもそも専門教育で関数言語やって奥の奥まで理解しちゃった奴を
業務命令で集めてソフトウェア開発しても
いったいどれだけ人件費が^H^H^H^H^H^H^H^H船頭多くして舟、陸に(略
0460デフォルトの名無しさん
2005/06/21(火) 22:56:330461デフォルトの名無しさん
2005/06/21(火) 23:10:16そんだけ打つなら ^W か ^U で良いだろw
0462デフォルトの名無しさん
2005/06/21(火) 23:24:39こいつの意見に賛成なんだけど↓
http://www.shiro.dreamhost.com/scheme/trans/gh-j.html
0463デフォルトの名無しさん
2005/06/21(火) 23:28:34>とびぬけてセクシー
は読んだ。
0464デフォルトの名無しさん
2005/06/21(火) 23:48:22指導教官と審査委員がその筋の人だね
0465デフォルトの名無しさん
2005/06/21(火) 23:53:58自分で説明するのがめんどいので適当にURL貼り
バリアント型に対するパターンマッチが強力な例として適当かな
ttp://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4/mltext/ocaml.html#htoc58
簡潔に説明するのは難しいな……式の形というか、変数の値と種類にマッチするという感じか
0466デフォルトの名無しさん
2005/06/21(火) 23:56:34補足。
OCamlだけでなく、SMLやHaskellにもある。
ついでに、C++にboostで同様の機構をつけようという試み
ttp://lists.boost.org/MailArchives/boost/msg54133.php
まーパターンマッチのありがたみは使ってみないとわからんかもなぁ。
0467デフォルトの名無しさん
2005/06/22(水) 00:05:44>他言語の仕様では実現されていない機能なのでしょうか?
Lisp だとこんな感じ
ttp://www.geocities.co.jp/SiliconValley-SanJose/7474/cmuclMemo.html#0019
0468デフォルトの名無しさん
2005/06/22(水) 00:14:55文章の咀嚼を試みてみます。
どうやら、正規表現よりも広い概念なんですね。
その機能を有効に用いる場面とは、どのような事例が考えられるのでしょうか。
0469デフォルトの名無しさん
2005/06/22(水) 00:24:050470デフォルトの名無しさん
2005/06/22(水) 00:26:17というか、正規表現による文字列のマッチングとは基本的に無関係。
よく使うのは……というかOCamlでプログラム書いたらほとんどパターンマッチだからな。
一番良く使うのはリストの空リスト/空でないの場合分けと先頭の取り出しや、
バリアント型の種類による場合分けとかかね。
と説明しても多分理解できないだろうから、理解したければ書いてみてください、としか言いようがないが…
0471デフォルトの名無しさん
2005/06/22(水) 00:42:56関数型言語からオブジェクト指向言語にアプローチしたのがOcaml
オブジェクト指向言語から関数型言語の考え方を取り込んだRuby
どちらも共通しているのは道具としては優れてるが何に使うのか目的がない。
個人的には高速性を生かしてWindowsAPIラップしまくって
軽量級アプリケーションを作ることに特化すればまだ生き残れるのではないかと思う。
C++とC#の間のニッチを狙うことになるけどね
0472デフォルトの名無しさん
2005/06/22(水) 00:46:300473デフォルトの名無しさん
2005/06/22(水) 16:05:18そのためには、ユーザーが多くいなきゃならんが
マイナーだから拍車をかけるかな
0474デフォルトの名無しさん
2005/06/22(水) 16:28:570475デフォルトの名無しさん
2005/06/22(水) 16:43:02OCamlのオブジェクト指向の機能はオマケだよ。
0476デフォルトの名無しさん
2005/06/22(水) 18:37:11全く必要ない
結局あれだろ?
名前空間がツリー構造にでもなってて、
object.methodみたいな呼び出しができれば、
それがオブジェクト指向かどうかは問わないんだよ
0477デフォルトの名無しさん
2005/06/22(水) 21:48:40その理由は透明参照性ですか。
それとも、構造に汎用性もないし駄目ポってことですか。
0478デフォルトの名無しさん
2005/06/22(水) 22:08:03> 関数型だとObject思考はオマケになりがちですが、
この発言は関数型言語を広く知ってないと出来ないが、
> その理由は透明参照性ですか。
これを見るとその知識(not 知恵)に疑問符がつく。
0479デフォルトの名無しさん
2005/06/22(水) 22:12:060480デフォルトの名無しさん
2005/06/22(水) 22:13:41"透明参照性" の検索結果 15 件中 日本語 のページ 1 - 15 件目 (0.55 秒)
ぷぷ。日本に三人しか居ないや
0481デフォルトの名無しさん
2005/06/22(水) 22:20:08メジャーなオブジェクト指向表現ではフィールド変数をメソッド関数で操作するよね。
その操作自体が副作用だからだよ。
0482デフォルトの名無しさん
2005/06/22(水) 22:31:20逆の事言ってんだからわかるだろ。
0483デフォルトの名無しさん
2005/06/22(水) 22:43:152つは別ものじゃない気もするが、なんとなく、考え方が違うような。
0484デフォルトの名無しさん
2005/06/22(水) 22:59:56レコード型で解釈するんじゃなかったっけ、
オブジェクト指向計算の理論では
0485デフォルトの名無しさん
2005/06/23(木) 02:27:19関数型ベースでなくてもimmutableなオブジェクトを扱えるOOPLなんて
掃いて捨てるほどありますが、何か?
0486デフォルトの名無しさん
2005/06/23(木) 02:54:56immutableなオブジェクトを扱えるかどうかではなくて、immutableなオブジェクトだけかどうかが問題なのでは。
0487デフォルトの名無しさん
2005/06/23(木) 04:20:54わざわざimmutableなオブジェクトを作れるようになっているぐらいだから、
副作用の有無はオブジェクト指向の本質ではないということ。
0488デフォルトの名無しさん
2005/06/23(木) 04:42:41実際、SingletonやStrategy,Functorばかりの設計は、
眩暈がするほどCOBOLソックリだ
0489デフォルトの名無しさん
2005/06/23(木) 06:27:17詳しく(藁
0490デフォルトの名無しさん
2005/06/23(木) 07:04:37になりそうではあるな。両者を項代数とみなせばfunctorと言える。
0491デフォルトの名無しさん
2005/06/23(木) 10:21:47> 典型的なcobolプログラムは、構造化された入力データ圏から出力データ圏への準同型写像
> になりそうではあるな。
・・・ならないと思われ・・・
0492デフォルトの名無しさん
2005/06/23(木) 10:47:45Functors and the Command Pattern
http://www.research.umbc.edu/~tarr/dp/lectures/Command-6pp.pdf
0493デフォルトの名無しさん
2005/06/23(木) 13:21:30作れるがそれは補助的なものであって、あるから本質的ではないというものではないかと。
例えばCamlは副作用のある式がそのまま書けるが副作用が無いことは関数型言語の本質ではないかというと違うわけで。本当は書きたくないが、書かざるを得ないか、書いたほうが便利だったり楽だから使っているわけで。
オブジェクト指向だって本当はオブジェクト同士のメッセージパッシングだけでやりたいけど利便性とか速度とかのためにメソッドやら静的メソッドやら実装の継承やらがあるし。
0494デフォルトの名無しさん
2005/06/23(木) 15:43:38> 作れるがそれは補助的なものであって、あるから本質的ではないというものではないかと。
例えばアランケイによるオブジェクト指向の根底にある発想である、
" ... the entire thrust of its design has been to supercede the
concept of data and procedures entirely; to replace these with the
more generally useful notions of activity, communication, and
inheritance.''を素直に受け止めれば、activityに相当する部分が
手続き的であろうが関数的であろうが関係なく、計算能力と
コミュニケーション能力を持つ「実体」であればそれでよいのです。
> オブジェクト指向だって本当はオブジェクト同士のメッセージパッシングだけでやりたいけど利便性とか速度とかのためにメソッドやら静的メソッドやら実装の継承やらがあるし。
あのー、メッセージとメソッドの関係、ちゃんと整理できてます?
0495デフォルトの名無しさん
2005/06/23(木) 16:17:42関数型が素直に「実体」を扱えるか、って話じゃないの。
「実体」なんてものが「activity」を持つには、変化できることが必要でしょ。
関数型の世界ってのは、実体のない関数と、永遠に変化しない値の世界。
「実体」なんて Monad の中くらいにしか存在できないんじゃない。
immutable なオブジェクトだけで何もかもを組み上げるような OO があるなら、
それは関数型でも実装できるかもしれないけど。
0496デフォルトの名無しさん
2005/06/23(木) 20:47:28> 関数型の世界ってのは、実体のない関数と、永遠に変化しない値の世界。
違うだろ。状況計算。
0497デフォルトの名無しさん
2005/06/23(木) 20:49:10煽るのも良いが、実装例を示す等の具体的な話が無いと議論にならないと思われ
仮想的な、関数型オブジェクト指向言語 hoge についてでも良いけど
0498デフォルトの名無しさん
2005/06/23(木) 21:16:45副作用がなければactivityにならないということ?
煽り抜きで、関数型スレでそんな意見が出てくるのって、
すごく新鮮だと思った。
0499デフォルトの名無しさん
2005/06/23(木) 21:18:06実体のない関数ねえ・・・
関数型言語の関数が実体でないのなら、一体何が実体なんだろう??
0500デフォルトの名無しさん
2005/06/23(木) 21:27:270501デフォルトの名無しさん
2005/06/23(木) 22:43:530502デフォルトの名無しさん
2005/06/23(木) 22:47:450503かわいそうな人だねえ
2005/06/23(木) 23:15:56>> http://pc8.2ch.net/test/read.cgi/tech/1119158274/312-315
0504デフォルトの名無しさん
2005/06/23(木) 23:17:23若しくは全部すけすけに見えちゃう Python に乗り換えて、
Pythonで関数プログラミングをかじったら、MLへ。
んで、たくましくなった >>502 が上の議論のばっさり切る。
0505デフォルトの名無しさん
2005/06/23(木) 23:24:270506デフォルトの名無しさん
2005/06/24(金) 14:56:02日本時間今晩23時から始まりますよ。
http://icfpc.plt-scheme.org/
0507デフォルトの名無しさん
2005/06/29(水) 04:22:361048576 * 1048576を計算したら0になってしまいました (i386)。
0508デフォルトの名無しさん
2005/06/29(水) 12:28:52open Nums
num_of_int 1048576 */ num_of_int 1048576
結果を可視化するなら string_of_num。
巨大数だけなら Bit_int もあるけど、Nums は 1.演算子が定義されている、2.有理数が扱える、という点で楽。
0509デフォルトの名無しさん
2005/07/02(土) 11:25:05これはWin32のAPIが使えます。
をCygwin環境でmakeするんですがエラーが出ます。
もし使ったことある方いましたらビルドの仕方教えてください。
0510デフォルトの名無しさん
2005/07/03(日) 08:15:47- OCaml version 3.04 or higher (3.06 or higher recommended), native Win32 port
- Microsoft Visual C++ version 6
0511デフォルトの名無しさん
2005/07/03(日) 10:18:59ビルドのやり方もわかんねぇガキは、
cygwin ming gcc版バイナリでも使ってろ
0512509
2005/07/03(日) 13:23:04でocaml-win32の中にMakefileがあるのでmake打ったのですが、
Makefile:75: *** missing separator. Stop
と出てしまいます。
環境が悪いのか、ビルド方法自体間違ってるのかわかりません。
よければ教えてください。
0513509
2005/07/03(日) 13:24:01Binary distributions for Microsoft Windows
* Self installer for the port based on the MinGW toolchain
Some features require the Cygwin environment.
パッケージはこれを使ってます。
0514デフォルトの名無しさん
2005/07/03(日) 13:45:04コンパイルにVC++6が必須なんだよ。
そのMakefileはnmake用だ。
0515509
2005/07/03(日) 14:54:02具体的なビルド方法がわからない・・・orz
0516デフォルトの名無しさん
2005/07/03(日) 15:06:38INCLUDE や LIB 環境変数も適当に設定する必要があるかも。
こういうのもなんだけど、ビルドできたその先も茨の道だから
それなりの問題解決能力や VC++ についての知識がないなら
やめた方がいいんじゃないかな。
0517509
2005/07/03(日) 16:41:13Cygwin上でnmakeしたところ
$ nmake
Microsoft (R) Program Maintenance Utility Version 6.00.8168.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.
ocamlc -ccopt /W3 -ccopt /YX -ccopt /Fpwin32.pch -ccopt /Fowin32_c
obj win32_core.c
gcc: /W3: No such file or directory
gcc: /YX: No such file or directory
gcc: /Fpwin32.pch: No such file or directory
gcc: /Fowin32_core.sobj: No such file or directory
In file included from win32_core.c:20:
win32.h:20: warning: ignoring #pragma warning
win32_core.c:661: error: `LR_VGACOLOR' undeclared here (not in a function)
win32_core.c:661: error: initializer element is not constant
win32_core.c:661: error: (near initialization for `load_image_options[6]')
・・・
となりました。
gcc: /W3: No such file or directory
gcc: /YX: No such file or directory
gcc: /Fpwin32.pch: No such file or directory
gcc: /Fowin32_core.sobj: No such file or directory
がエラーの原因だと思うのですが、よくわかりません。
テストプログラム動作確認までどうしてもやりたいのでよろしくお願いします。
0518デフォルトの名無しさん
2005/07/03(日) 18:41:27cmd.exe上でnmakeしろ。
こういうのもなんだけど、ビルドできたその先も茨の道だから
それなりの問題解決能力や VC++ についての知識がないなら
やめた方がいいんじゃないかな。
0519デフォルトの名無しさん
2005/07/03(日) 19:47:59-ccopt 〜
ってのはCコンパイラに渡すオプションを指定する。
だから /W3 /YX /Fpwin32.pch /Fowin32_c ってのはCコンパイラのオプション。
でも、gccにはそんなオプションは存在しなくて、
Cygwinのgccでは / はパス区切りと認識するからそのようなエラーが出る。
結局、516, 518が言っているように、
Cygwin上ではなくて、cmd.exe上でVC++のコマンドラインコンパイラが使えるように
環境変数を適切に設定した上でnmakeしなければビルドできない。
0520& ◆SQ2C4WavXQ
2005/07/03(日) 20:22:05cmd.exeでVC++のbinとOcamlのbinのパスを環境変数に設定しました。
そしてnmakeすると、
CL.EXE - コンポーネントが見つかりません
mspdb60.dllが見つからなかったため、このアプリケーションを開始できませんでした。
アプリケーションをインストールし直すとこの問題は解決される場合があります。
となりました。
これは、VC側の問題・・・?
今、手元にVC++6のCDがないため、明日再インストして試してみます。
0521509
2005/07/03(日) 20:22:390522デフォルトの名無しさん
2005/07/03(日) 20:39:280523デフォルトの名無しさん
2005/07/03(日) 21:40:38ライセンスが曖昧なMSDNとか使ってて、
マニュアルに目を通した事ねぇんだろうな。
なんでこんなの相手すんの?
もしMSDNのサイトライセンスがあるのなら、
ライセンス管理者か、詳しい人に聞きゃええやん(大笑
0524519
2005/07/03(日) 21:51:32と言ったのに
> cmd.exeでVC++のbinとOcamlのbinのパスを環境変数に設定しました。
PATHだけ設定してもな。
516が
> INCLUDE や LIB 環境変数も適当に設定する必要があるかも。
って言ってるんだから、VC++ 環境変数 でぐぐるぐらいしなさいな。
とりあえず 522 が挙げてくれたキーワードでぐぐってみ。
0525509
2005/07/03(日) 22:28:50Microsoft (R) Program Maintenance Utility Version 6.00.8168.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.
ocamlopt -c win32_core.ml
'ml' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
Assembler error, input left in file C:\DOCUME~1\xxxxx\LOCALS~1\Temp\
9.asm
NMAKE : fatal error U1077: 'ocamlopt' : リターン コード '0x2'
Stop.
test_optのmakeはなぜか上記の通り失敗しましたが、
static,dynamicのテストプログラムは動作しました。
指摘された通り、
環境変数のPath, Lib, Includeに必要と思われるパスを設定して
vcvars32.batを実行したらnmakeできるようになりました。
0526デフォルトの名無しさん
2005/07/03(日) 22:35:55知らない人は答えなくていいです。
0527デフォルトの名無しさん
2005/07/03(日) 23:03:170528デフォルトの名無しさん
2005/07/04(月) 02:37:47val id : 'a -> 'a = <fun>
とおいて、
# id id ;;
- : '_a -> '_a = <fun>
としたとき、値ポリモフィズム?になってしまう理由はなんででしょうか?
本当であれば 'a -> 'a ですよね。
0529デフォルトの名無しさん
2005/07/04(月) 02:46:200530デフォルトの名無しさん
2005/07/04(月) 03:19:58とかかな。
簡単にいうと、副作用が含まれる場合には型安全でなくなるからかな。
0531デフォルトの名無しさん
2005/07/04(月) 07:00:49哀れな奴
0532デフォルトの名無しさん
2005/07/04(月) 07:02:280533デフォルトの名無しさん
2005/07/04(月) 07:54:020534デフォルトの名無しさん
2005/07/04(月) 07:59:250535warorz
2005/07/04(月) 11:42:540536デフォルトの名無しさん
2005/07/04(月) 11:55:24value polymorphismという言葉を知っているのに、
何故その理由が解らない?
0537デフォルトの名無しさん
2005/07/04(月) 11:59:210538デフォルトの名無しさん
2005/07/04(月) 14:37:07T大のML演習の課題だった
0539デフォルトの名無しさん
2005/07/04(月) 16:17:13>>536
www.cl.cam.ac.uk/Teaching/Lectures/funprog-jrh-1996/chapter8.ps.gz
のpp.107-108のあたりを勉強しています。
アンダースコアがついた型変数がvalue polymorphismを表すということは、わかったんですが、
中身が理解できませんでした。
>>530
副作用がないということは、代入がなければ素直に'a->'aという型付けが
可能ということですか。
0540デフォルトの名無しさん
2005/07/04(月) 16:42:05日本語は書けても読めないのか?
どうしてもわからんのなら明日の夜教えてやるw
0541sage
2005/07/04(月) 20:01:470542デフォルトの名無しさん
2005/07/04(月) 20:22:160543デフォルトの名無しさん
2005/07/04(月) 21:35:12大学名晒す厨房っぷりに萎え萎え
0544デフォルトの名無しさん
2005/07/05(火) 03:21:00また東大コンプレックスかい?w
0545デフォルトの名無しさん
2005/07/05(火) 04:45:040546デフォルトの名無しさん
2005/07/05(火) 06:06:280547デフォルトの名無しさん
2005/07/05(火) 06:13:30神田にあるやつだよね!
0548デフォルトの名無しさん
2005/07/05(火) 06:27:45項を多相型として扱えるかどうかを判断することは一般的に不可能(決定不能)。
なので確実に多相型として扱える値だけを多相型として扱う、
というのがOCamlが採用しているvalue polymorphism。
もちろんこれは十分条件で、多相型として扱えるはずのものが
多相型として扱えなくなる場合がある。例えばid id。
この項は多相型として扱えるはずだが、
関数適用であり値ではないため多相型にならない。
0549デフォルトの名無しさん
2005/07/06(水) 23:37:25CygwinでOcamlをソースからコンパイルし、
ocaml, ocamlcは使えるのですが、
ocamlc -custom f.mlとすると、
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot find
-lcamlrun
collect2: ld returned 1 exit status
Error while building custom runtime system
となります。
(f.mlは let func a b = a+b;;)
解決法ありませんか?
0550デフォルトの名無しさん
2005/07/07(木) 01:10:080551デフォルトの名無しさん
2005/07/07(木) 07:07:31環境変数OCAMLLIBがおかしくない?
Windows版のOCamlをいれると勝手に設定されるよ。
それで解決しなければocamlc -verbose -custom f.mlした結果を貼ろう。
0552デフォルトの名無しさん
2005/07/07(木) 08:56:53・gccのインストール状況が不完全で、gccが内部使用するツール(binutils)を呼び出せない
といったレベルの問題だと思う。
まずはC コンパイラーが動作する事を確認汁
0553デフォルトの名無しさん
2005/07/07(木) 13:44:03mltonは普通にコンパイルできるよ。
0554デフォルトの名無しさん
2005/07/08(金) 15:38:06ldはちゃんと起動してるからbinutilsが入ってないことはないだろう。
というか、libcamlrun.aを見つけられないだけじゃないのか。
>>549
もしまだ悩んでるようならocamlc -whereの結果をみせてみ。
0555デフォルトの名無しさん
2005/07/08(金) 18:53:37かよ!!!(変な所で改行するから ldがめっかんないつってると思った)
CAMLのライブラリ(libcamlrun.aとか、libcamlrun.so)が見つけらんなかったって言ってるだけやん。
ldの -Lオプションが正しくないか、インストールが間違ってるんだろうな。
とりあえず環境変数 LD_LIBRARY_PATHに 上記ライブラリの絶対フルパスをコロン区切りで設定
bash% export LD_LIBRARY_PATH=(絶対フルパス):${LD_LIBRARY_PATH}
csh% setenv LD_LIBRARY_PATH=(絶対フルパス):${LD_LIBRARY_PATH}
C:\> set LD_LIBRARY_PATH=(絶対フルパス):${LD_LIBRARY_PATH}
してやればいーんじゃねぇの?
0556デフォルトの名無しさん
2005/07/11(月) 05:05:32グラフィック画面にすごい数のポイントが行ったりきたりしてますよ。
これつかえるかもしれないんで、試してみます。どうも。
0557デフォルトの名無しさん
2005/07/12(火) 20:12:060558デフォルトの名無しさん
2005/07/13(水) 13:38:52とでも定義しておけ。
0559デフォルトの名無しさん
2005/07/14(木) 23:28:400560デフォルトの名無しさん
2005/07/14(木) 23:45:27#load "graphics.cma";;
0561デフォルトの名無しさん
2005/07/15(金) 10:44:58>> 557, 559
いくらなんでも自助努力が足りないんでないかい?
0562デフォルトの名無しさん
2005/07/15(金) 18:20:340563デフォルトの名無しさん
2005/07/15(金) 21:27:55久々にCのプログラム書くことになった。
配列処理が必要だったので、
for (int i; i <
ここまでかいて、
「うわっ、やってらんね。」とMLの偉大さを知った。
マンセー房ぽいが、まじめな話、
1年くらいやったら、ループがかけなくなりそう・・・orz
0564デフォルトの名無しさん
2005/07/15(金) 21:37:250565デフォルトの名無しさん
2005/07/15(金) 22:20:35MLだと不便なコードもあれば、Cで書かないと非効率的なコードもある。
言語は使い分けることで全体の効率がよくなる。
0566デフォルトの名無しさん
2005/07/16(土) 02:55:130567デフォルトの名無しさん
2005/07/16(土) 05:04:22まあ、MLで書いた方が簡単なコード100に対して、1ぐらいはそういうコードがある
かもね。
0568デフォルトの名無しさん
2005/07/16(土) 14:34:06では、MLでデバイスドライバ書いてください。
0569デフォルトの名無しさん
2005/07/16(土) 15:11:530570デフォルトの名無しさん
2005/07/16(土) 15:24:17ML で OS が書けるんだから、デバドラも当然書けるんじゃね
Windows のドライバを書けとかなら厳しいかもしれんが
0571デフォルトの名無しさん
2005/07/16(土) 15:54:07ドライバを書いたこともないやつがほざくなよ。
0572デフォルトの名無しさん
2005/07/16(土) 16:18:31> ML で OS が書けるんだから、デバドラも当然書けるんじゃね
ポカーン
0573デフォルトの名無しさん
2005/07/16(土) 17:17:490574デフォルトの名無しさん
2005/07/16(土) 20:15:17世間に存在する全ソースコードは、世間に存在するドライバの
全ソースコードの100倍以上あるだろうけどね。
0575デフォルトの名無しさん
2005/07/16(土) 20:22:480576デフォルトの名無しさん
2005/07/16(土) 20:26:090577デフォルトの名無しさん
2005/07/16(土) 20:40:16論破されて必死ですねw
0578デフォルトの名無しさん
2005/07/16(土) 20:41:22スレの質落としたいのか?
0579デフォルトの名無しさん
2005/07/16(土) 20:42:11575と576のことかい?
0580デフォルトの名無しさん
2005/07/16(土) 20:49:54談話解析と文章生成プログラムのテスト中です。
ときどき暴走しますが、所詮プログラムのする事で
悪意も善意も一切ありませんので。よろしく。
=====================
0581デフォルトの名無しさん
2005/07/16(土) 20:59:27なぜかOCaml使いが増えて、スレが賑わってきたと思ったらバカな連中ばかりで、議論の質もずいぶん下がった。
2ちゃんねるはもはや何の情報源にもなりそうにない。
0582デフォルトの名無しさん
2005/07/16(土) 21:06:55MLの方が優れているという現実を見つめよう。
他人が馬鹿なせいにするのは簡単だけどねw
0583デフォルトの名無しさん
2005/07/16(土) 21:12:00まぁ今荒らしてるバカは、
かつてはRubyスレやOOスレに居座って荒らしを続け、
最近はデザパタスレや推薦図書スレを猛烈な勢いで荒らしてるばかちんなわけだが。
つかもともと学生と教官の対話しかねぇじゃんこのスレ。
0584デフォルトの名無しさん
2005/07/16(土) 21:19:240585デフォルトの名無しさん
2005/07/16(土) 21:44:11大暴れするような奴よりは、このスレはレベル高いんじゃない?w
0586デフォルトの名無しさん
2005/07/16(土) 21:49:03その粘着力を実生活に活かせよ
0587デフォルトの名無しさん
2005/07/16(土) 22:30:58誰も彼もひとまとめにするなよ。
誰に言っているのか自分でも分かっているのか?
0588デフォルトの名無しさん
2005/07/16(土) 23:07:44ML で OS を書いたら、当然その OS のドライバも ML で書くようにするんじゃないの?
少なくとも、TCP 等の仮想デバイスのドライバは ML で書くんじゃないかね
良く知らんけど、LispM 用のドライバは Lisp で書かれてないの?
0589デフォルトの名無しさん
2005/07/16(土) 23:09:04type 'a set = 'a list;
fun f ((r,a) : (''a * ''b) set * ''a) =
case r of
[] => [] : ''b set
| ((a1,b1)::tail) => if a1=a then b1::f (tail,a) else f (tail,a);
で、
f: (''a * ''b) set * ''a -> ''b set にしたいのですが、
なぜか
f: (''a * ''b) set * ''a -> ''b list
[] => [] : ''b set
で型指定してるのになぜ・・・?
0590デフォルトの名無しさん
2005/07/16(土) 23:55:15type 'a set = 'a list;
fun f (([],a) : (''a * ''b) set * ''a) = [] : ''b set
| f ((a1,b1)::tail, a) = if a1=a then b1::f (tail,a) else f (tail,a);
なぜ589だと''b listってなるんだろう
0591デフォルトの名無しさん
2005/07/17(日) 04:14:39> ML で OS を書いたら、当然その OS のドライバも ML で書くようにするんじゃないの?
それが正しければ、ML以外で書かれたOSは当然ML以外で書くんだろうな。
ほんとアフォ丸出し。さっさと消えれば?
0592デフォルトの名無しさん
2005/07/17(日) 04:15:17> それが正しければ、ML以外で書かれたOSは当然ML以外で書くんだろうな。
OSのデバイスドライバは、な。
0593デフォルトの名無しさん
2005/07/17(日) 04:48:470594デフォルトの名無しさん
2005/07/17(日) 04:51:030595デフォルトの名無しさん
2005/07/17(日) 05:07:38ほんとそうだよね。>>570にもわかるように教えてやってよ。
0596デフォルトの名無しさん
2005/07/17(日) 05:11:10・Cで書かれたUNIXなどのデバイスドライバ
以上
0597デフォルトの名無しさん
2005/07/17(日) 05:21:190598デフォルトの名無しさん
2005/07/17(日) 05:56:44591のどこかに問題あるのか?
0599デフォルトの名無しさん
2005/07/17(日) 05:57:36さっぱりわからないということぐらいかな。
0600デフォルトの名無しさん
2005/07/17(日) 06:00:54588が572への反論として成立するためには
(1) ほとんどのOSがMLで記述されている、または
(2) ML以外で実装されているOSのデバイスドライバを記述するのにMLが向いている
のいずれかが成立していなければならないが、
(1)は呆らかに成立しないし、(2)は591にある通り588自身の主張に矛盾する。
以上により588はマヌケな粘着バカであることが証明された。
0601デフォルトの名無しさん
2005/07/17(日) 06:06:520602デフォルトの名無しさん
2005/07/17(日) 06:18:08>(1) ほとんどのOSがMLで記述されている、または
>(2) ML以外で実装されているOSのデバイスドライバを記述するのにMLが向いている
>のいずれかが成立していなければならないが、
この前提が間違い。
もともと588は
>では、MLでデバイスドライバ書いてください。
に対する反論であったはず。
MLで書いたOSのデバイスドライバなら書けることを示すだけで十分。
0603デフォルトの名無しさん
2005/07/17(日) 06:24:35>では、MLでデバイスドライバ書いてください
が
>まあ、MLで書いた方が簡単なコード100に対して、
>1ぐらいはそういうコードがある
>かもね。
の反論として成立するためには、
(1)デバイスドライバなるものが全てのソースコードのうちの1/101より
大きな割合を占めていること
が成立していなければならないが、
(1)は呆らかに成立しない。
以上により568はマヌケな粘着バカであることが証明された。
0604デフォルトの名無しさん
2005/07/17(日) 08:20:38> >では、MLでデバイスドライバ書いてください。
>
> に対する反論であったはず。
> MLで書いたOSのデバイスドライバなら書けることを示すだけで十分。
・・・あんた、本物の認知症患者だね。working memoryが少なすぎ。
0605デフォルトの名無しさん
2005/07/17(日) 08:22:38MLに向かない色々な領域の例としてデバドラが出てきたのに
どうしてデバドラだけで1%以上にならなければ反論として成立しないのか、
ほんと精神病患者の考えることは理解できんよ。
頭悪杉
0606デフォルトの名無しさん
2005/07/17(日) 08:52:210607デフォルトの名無しさん
2005/07/17(日) 09:09:340608デフォルトの名無しさん
2005/07/17(日) 09:13:000609デフォルトの名無しさん
2005/07/17(日) 09:15:510610デフォルトの名無しさん
2005/07/17(日) 09:37:550611デフォルトの名無しさん
2005/07/17(日) 10:00:09「世界の人口のうち日本人以外は95%以下」という主張をして、
「違うというのなら具体的な証拠を挙げろ」と言う香具師がいたとする。
そいつに対する反論として「まず中国人がいるだろ、、、」と列挙しはじめたら
「中国人が日本人の20倍いるってのかよ?
20倍いなければ反論になってないだろ」とか言い出して暴れてるようなもんだ。
ほんとお目出たい人間のゴミだな。
0612デフォルトの名無しさん
2005/07/17(日) 10:14:17中国人が20倍いなきゃ、中国人だけでは確かに反論になってないだろ。
まあその例だと、あとはインド人とアメリカ人あたりを挙げれば
十分だがな。
0613デフォルトの名無しさん
2005/07/17(日) 11:47:46頭悪いのが粘着して自作自演中。全部スルーでよろし。
========================
0614デフォルトの名無しさん
2005/07/17(日) 12:13:560615デフォルトの名無しさん
2005/07/17(日) 14:05:070616デフォルトの名無しさん
2005/07/17(日) 14:07:05OSを作ろうpart9
http://pc8.2ch.net/test/read.cgi/tech/1076217479/
スレの現状の成果物と同じものを目指すとして。
0617デフォルトの名無しさん
2005/07/17(日) 16:40:29>MLコア自身をMLで書けないのにOS作れるんですか?
不可能って訳じゃないよ。面倒くさいから誰もやらないだけで。
0618デフォルトの名無しさん
2005/07/17(日) 17:12:17MLでOS書いて楽しいならとっても結構なことだと思う。俺はやらんけど。
え、仕事?C/C++/Java/C#.....いろいろあるから好きなの使って書いとけ!
0619デフォルトの名無しさん
2005/07/17(日) 17:20:41MLって何の略か知ってる?このスレにいるんだから知ってて当然だよね?
0620デフォルトの名無しさん
2005/07/17(日) 17:34:44それとも一人なのか?
0621デフォルトの名無しさん
2005/07/17(日) 19:06:02例えば、シグナルハンドリングとか GC とかネイティブスレッド対応とか FFI とかを
ML のみで書くのは面倒くさくないのかね?
FFI がコアかどうかは異論もあるだろうから、GC だけでも良いけど。メモリ管理が
コアじゃないって事は無いよね?
0622デフォルトの名無しさん
2005/07/17(日) 19:30:30Cで書いてもそんなに簡単だとは思わないが。
今Cを使うと楽なのは、機械語、アセンブリ、他低レベルな言語いろいろを経て
蓄積された過去の資産が生かせる状況だろう。
Cがそういう地位にあるのはCの人気や魅力によるものなのかもしれないが、
資産自体がCの潜在的な能力というわけではない。
って、何の議論をしてるのかよくわかってないんだけどね。
的はずれだったら無視して。
0623デフォルトの名無しさん
2005/07/17(日) 20:00:36>Cで書いてもそんなに簡単だとは思わないが。
ML で書いた方が「より」簡単かって話。
0624デフォルトの名無しさん
2005/07/17(日) 21:12:16>資産自体がCの潜在的な能力というわけではない。
そこだよな。言語仕様だけを比べるなら
ほぼ100% ML>>>>>>>>C
0625デフォルトの名無しさん
2005/07/17(日) 21:38:22何が上とか下とか、どうやって決めるの?
基準は?それは客観的なのか?
「農業と工業どっちが偉い?」というのとレベルが変わらないような議論なんじゃないの?
0626デフォルトの名無しさん
2005/07/17(日) 22:08:25書くのにバグが少なく、短時間でわかりやすい
コードを書けるということかな。
そして、この場に書いた意見ははほぼ主観的。
やれやれ、ここまで詳しく言ってやらないとわからないのかな。
これもゆとり教育の弊害か。
0627デフォルトの名無しさん
2005/07/17(日) 22:14:07頭悪いのが粘着して自作自演中。全部スルーでよろし。
========================
0628デフォルトの名無しさん
2005/07/17(日) 22:19:30つまり、主観的である以上、他人にとっては意味のない意見だということだね。
意味の内ことを書くなよ。
0629デフォルトの名無しさん
2005/07/17(日) 22:21:37>>363
中身を観たわけじゃないんで、自分で判断してくれ
0630デフォルトの名無しさん
2005/07/17(日) 22:23:05読むのダルいから、トリップ付けてくれよ。
0631デフォルトの名無しさん
2005/07/17(日) 22:25:36別に俺のアイデンティティなんて問題にならないような意見を並べているだけだから、名無しで十分。
0632デフォルトの名無しさん
2005/07/17(日) 22:31:57分かりにくくて、ごめんな。お前のレスを読みたくないんだ。
0633デフォルトの名無しさん
2005/07/17(日) 22:39:11自己中心的な要求には応えかねる。
0634デフォルトの名無しさん
2005/07/17(日) 22:46:03もう20年近く前の話。最近はOCaml同様Game用SDK作ってるみたい(藁
CleanはHaskelのMonadic I/O以前にClean I/Oつうのを作ってるから、
なんか作りやすいんかもしれないね。
あと、OS作るなら最低限でも、port I/O、絶対アドレスアクセス、アセンブラでしか弄れないようなレジスタ操作とのI/F、あとデバイス制御のためのリアルタイム性
くらいは必要なんじゃないかなぁ〜。まあCでも書きにくいところはさっくりアセンブラだから問題ナッシングな気がする
0635デフォルトの名無しさん
2005/07/17(日) 22:53:14ARPAネットワークのためのTCP/IPスタックが全部Lispで書かれてたとか(LMI〜Symbolicsあたり)、
一つのインタプリターでマルチプロセス対応するためにいろいろ工夫があったとか(NTT ELIS WS/TAOに関するbit記事)、
etc, etc。
つかLispの場合、MacLisp実行環境としてMultics作ったり、初期のBSD UNIXもやっぱLucid Lispの実行環境だったり、
挙句の果ては専用CPU作ったりする世界だから、ねぇ。
Lisp用に計算機アーキテクチャをカスタマイズしちゃうんだから、LispでOS作れて当たり前な気が
0636デフォルトの名無しさん
2005/07/17(日) 23:50:40他人の主観的意見から何かを感じとれない人にとっては
意味ないかもしれないね。
しかし、そうじゃない人もいるから意味がないとはいえないな。
0637とおりすがり
2005/07/17(日) 23:53:15判ったか?満足したら、さっさと壺に糞を詰める作業に戻れって
0638デフォルトの名無しさん
2005/07/17(日) 23:55:38エサを与えんなよ
0639デフォルトの名無しさん
2005/07/18(月) 01:23:280640デフォルトの名無しさん
2005/07/18(月) 01:25:310641デフォルトの名無しさん
2005/07/18(月) 01:34:40主観的意見とは、信用がない人間の意見だとまったく無意味。
一名無しだったら、信用は半々だろうけど、その分必要なのは統計的なデータ。
何の根拠もなく感想を述べているだけでは、釣りとも本気とも判断が付かない。
そして、判断するのは他人の自由だ、と責任を他人に押しつけることが、すでに釣りである可能性も示唆している。
0642デフォルトの名無しさん
2005/07/18(月) 01:39:51こういう議論は匿名でやってもすぐうやむやになるから
会員制の掲示板でやろうぜ
0643デフォルトの名無しさん
2005/07/18(月) 01:41:57ワラタ
やばいこいつw
0644デフォルトの名無しさん
2005/07/18(月) 01:43:18OS のソースツリーを見ると、C と ASM と ML のミックスチュアみたいだね。
デバイスドライバは ML で書いてあるね。
話題になっていないという事は、誰も試してないのかな。
0645デフォルトの名無しさん
2005/07/18(月) 02:00:04MLでプログラムを作ることは魅力的でも
MLで作ったプログラムはそうではないからな
それがMLが普及しない理由だろうし
0646デフォルトの名無しさん
2005/07/18(月) 02:08:12これが SML か Lisp だったら、qemu の中で飼うくらいはするんだけど。
0647デフォルトの名無しさん
2005/07/18(月) 02:19:27情報が正確でないから判断を押しつける、委ねる、どっちでもいいが、のだろう。
0648デフォルトの名無しさん
2005/07/18(月) 02:19:31qemuて実質x86とppcしかサポトしてますが
0649デフォルトの名無しさん
2005/07/18(月) 02:22:28日本語壊れてるが、大丈夫か??
0650デフォルトの名無しさん
2005/07/18(月) 02:25:530651デフォルトの名無しさん
2005/07/18(月) 02:36:16統計データがない場合は、名無しさんの信用は半々で、
判断は読者にゆだねられる。
その場合、釣りである可能性を示唆している←(ワラ
・・・で?
0652デフォルトの名無しさん
2005/07/18(月) 02:38:06そろそろ終わりにしてくれないか。
0653デフォルトの名無しさん
2005/07/18(月) 02:45:38自作自演もそろそろ飽きた
0654デフォルトの名無しさん
2005/07/18(月) 02:58:31Ocamlはある面、Cの代替と成り得る実用MLを目指してたから、
そーゆー展開もありだろう
0655デフォルトの名無しさん
2005/07/18(月) 04:21:10デバドラなんか動かしたら不安定なんじゃ
LISPマシンはどうだったんだろーね
0656デフォルトの名無しさん
2005/07/18(月) 05:06:33デバドラとかなら GC はしないで、メモリ管理はプログラマに任せる実装もありかと。
Lego で動く Lisp
http://www.xslisp.com/index-j.html
Free の Lisp OS
http://common-lisp.net/project/movitz/
0657デフォルトの名無しさん
2005/07/18(月) 06:56:36あとハードなリアルタイムもC等のほうがやりやすいだろうな。
結局、ほとんどどんなプログラムでもMLのほうがつくりやすいと言ってる人は
自分の回りしか見ていない、つまり、元々ML関係に持ち込まれる話の中でしか
考えていない大馬鹿者ということだ。
0658デフォルトの名無しさん
2005/07/18(月) 07:38:20というよりハードワイヤかすればいいだけ。
本質的にソフトウエアな部分はMLで書けば良い。
0659デフォルトの名無しさん
2005/07/18(月) 07:39:35そういう魅力はある。
かなづちを持った人間にはすべてが釘に見える。
0660デフォルトの名無しさん
2005/07/18(月) 08:52:51>本質的にソフトウエアな部分
>本質的にソフトウエアな部分
0661デフォルトの名無しさん
2005/07/18(月) 08:57:34> 本質的にソフトウエアな部分はMLで書けば良い。
結局、>>657の言う通り、自分の周りだけを見て「本質的にソフトウェア」とか言ってる
のが丸わかりなのが痛すぎるわけだが、君は自覚しているか?
0662デフォルトの名無しさん
2005/07/18(月) 09:02:46ホント議論展開が稚拙だね。
0663デフォルトの名無しさん
2005/07/18(月) 09:47:330664デフォルトの名無しさん
2005/07/18(月) 11:00:35しかも何番目とか言ってるし
0665デフォルトの名無しさん
2005/07/18(月) 11:12:29ROMが少ないならROMを増やせばよい。
RAMが少ないならRAMを増やせば良い。
処理速度が遅いなら処理速度をあげればよい。
コーディングの便利さと実行効率とは無関係。
別の議論だよ。
0666デフォルトの名無しさん
2005/07/18(月) 12:25:35> ROMが少ないならROMを増やせばよい。
> RAMが少ないならRAMを増やせば良い。
> 処理速度が遅いなら処理速度をあげればよい。
爆笑!!おもしろい白痴だな、おまえ。
0667デフォルトの名無しさん
2005/07/18(月) 12:58:56>>363 OCaml OSへのリンク初出
>>564-567、>>569
プログラミングのし易さに関する、MLと他の言語(C, Fortran90)の比較(変数型宣言、配列処理、文字列処理)。
>>568 最初のDQN発言「ではMLでデバイスドライバ書いてください。」
>>570-574 MLでのOS/ドライバ記述可否の議論
>>575-587 メタ議論開始
>>588-653 一部例外を除き、実りのない議論に終始
0668デフォルトの名無しさん
2005/07/18(月) 12:59:49>>634-635 他の関数型言語(Clean, Lisp)によるOS実装の話題
>>639、>>644-646、>>654-655
>>363リンク先にOCaml OS実装がある事の指摘と、関連する話題
>>656 LispOSと、LegoによるLisp実装に関する貴重な話題の提供
>>657 二番目のDQN発言「16KのROMに入らなければならないような組み込み制御には全く向かないね。」
話題ずらしまくって、人に迷惑かけんなよ。
16KのROMに入るOSなんて、リアルタイムOSカーネルの事だろ?
そんな話、このスレの流れでは誰も興味持ってねぇんだよバーカ
関連無いこと言い出して議論を荒らすというのは、詭弁のガイドラインに載っている有名な荒らしパターンなんだよ、
このスットコドッコイ
0669デフォルトの名無しさん
2005/07/18(月) 13:08:38あいかわらずの粘着だな
0670デフォルトの名無しさん
2005/07/18(月) 13:14:03> 16KのROMに入るOSなんて、リアルタイムOSカーネルの事だろ?
> そんな話、このスレの流れでは誰も興味持ってねぇんだよバーカ
なるほど、>>657の言う通りなわけだ。かなりトホホな奴だな。
0671デフォルトの名無しさん
2005/07/18(月) 13:16:00おまえのゴタクなんて誰も聞きたかねぇんだよゴミクズ。
関数言語自体の話題か、関数言語を使った実装(OS, アプリ)の話題以外
書き込むなよ
0672デフォルトの名無しさん
2005/07/18(月) 13:17:56そうだな。
MLでできないことがあったなら、具体的に言ってもらわないと対処法も何も出るわけがないのにね。
0673デフォルトの名無しさん
2005/07/18(月) 13:22:37もし何か決定的な欠落とか、欲しい情報があるのなら、IRCAMの開発者とコミュニケーションするよろし。
0674デフォルトの名無しさん
2005/07/18(月) 13:24:28自演の上に捏造かい。ほんと馬鹿の考えることは馬鹿だな。
で、おまえは>>565に反論あるのか?
From: [565] デフォルトの名無しさん <sage>
Date: 2005/07/15(金) 22:20:35
>>563
MLだと不便なコードもあれば、Cで書かないと非効率的なコードもある。
言語は使い分けることで全体の効率がよくなる。
________________________________________
From: [567] デフォルトの名無しさん <sage>
Date: 2005/07/16(土) 05:04:22
>>565
まあ、MLで書いた方が簡単なコード100に対して、1ぐらいはそういうコードがある
かもね。
0675デフォルトの名無しさん
2005/07/18(月) 13:25:44DQN>>674粘着中。スルーするがよろし。
===============
0676デフォルトの名無しさん
2005/07/18(月) 13:29:480677デフォルトの名無しさん
2005/07/18(月) 13:32:20さあ・・・よくわからんが、例のアホにはそういう話が見えているみたい。
0678デフォルトの名無しさん
2005/07/18(月) 13:33:58本数ベースなら確実に1%以上なことは間違いないな。
0679デフォルトの名無しさん
2005/07/18(月) 13:34:570680デフォルトの名無しさん
2005/07/18(月) 13:38:15結局誰も使ってないし
0681デフォルトの名無しさん
2005/07/18(月) 13:39:280682デフォルトの名無しさん
2005/07/18(月) 13:51:070683デフォルトの名無しさん
2005/07/18(月) 13:54:130684デフォルトの名無しさん
2005/07/18(月) 14:25:210685デフォルトの名無しさん
2005/07/18(月) 15:17:44環境さえ存在するという条件なら。
0686デフォルトの名無しさん
2005/07/18(月) 16:01:35なんで IRCAM (フランス国立音響研究所) が出てくるかな?
0687デフォルトの名無しさん
2005/07/18(月) 16:03:340688デフォルトの名無しさん
2005/07/18(月) 19:17:31Scheme は C で 1000 行程度の実装があったりしますが、ML
は見かけた事がないので。
0689デフォルトの名無しさん
2005/07/18(月) 19:55:44min-camlとか。
http://min-caml.sf.net/
OCamlで2000行くらい。
0690デフォルトの名無しさん
2005/07/18(月) 20:23:070691デフォルトの名無しさん
2005/07/18(月) 21:32:08thanx.
MLer はやっぱり ML で書くのか。
0692デフォルトの名無しさん
2005/07/18(月) 22:59:29この前のフランスの行政改革で、INRIAはIRCAMに統合されたってゆってた(嘘800
0693デフォルトの名無しさん
2005/07/19(火) 01:39:02オープンソースで。
2chMLOS
0694デフォルトの名無しさん
2005/07/19(火) 01:40:42どうすればいいんだろう。
ブートローダはアセンブラでかくとして
あとはMLコードを適切なバイナリで出力できるコンパイラ、リンカが
必要になるのか。
0695デフォルトの名無しさん
2005/07/19(火) 02:02:290696デフォルトの名無しさん
2005/07/19(火) 02:10:01特権レベル変更とか、preemptiveなコンテキストスイッチとか、面倒なのが色々あるね。
0697デフォルトの名無しさん
2005/07/19(火) 02:48:330698デフォルトの名無しさん
2005/07/19(火) 08:11:57・ブートローダ(アセンブラ)←ここでプロテクトモードに以降。カーネル先頭にJUMP。
・カーネル
割り込み処理 (キーボード入力)
メモリ管理(ページングなしのフラットモデル)
ビデオメモリ直描画ルーティーン
スレッド2つ生成してタスクディスパッチ実験
とりあえずここまでできないかな。
0699デフォルトの名無しさん
2005/07/19(火) 08:24:20その前にMLで書く意義を見つけたいとこだけど。
0700デフォルトの名無しさん
2005/07/19(火) 08:31:54MLでは副作用をおこす処理が必要でどうなんかなと思うことも。
あと、MLではbit単位のデータ構造扱うことできたっけ・・・?
0701デフォルトの名無しさん
2005/07/19(火) 08:36:06みたいなのが必要?
0702デフォルトの名無しさん
2005/07/19(火) 08:46:200703デフォルトの名無しさん
2005/07/19(火) 11:37:01例えばプロセッサがx86の場合には、カーネルモードからユーザモードに
移行する命令がない。だからLinuxなんかでは、スタックフレームを直接
イジって、特権割り込みからのIRETを偽装してユーザモードに「復帰」することで
initをユーザモードで実行する。これをMLでどう実装するか。
あとシステムコールもユーザモードからカーネルモードに移行するのを
割り込みとして処理するのが一般的だけど、その辺のプロセッサレベルの
割り込みをMLでどう実装するのか、結構面倒だと思うぞ。
0704デフォルトの名無しさん
2005/07/19(火) 13:48:26ワインバーグの本、面白いですよね。
0705デフォルトの名無しさん
2005/07/19(火) 20:07:02よし、それじゃML.NETみたく、
gccフロントエンド版Ocaml作ってgccと相互呼び出しできるようにする所から・・・
つかさぁ、ML系言語でOS書く事にどんな目的を持ってるの?
例えば今までやりにくかった事が、MLで書く事でこんなに綺麗にスマートにすっきり書ける、とか、
MLの機能を使う事で、OS上にどういった概念を持ち込めるとか、
そーゆー餅ベーションが見えん・・・
餅のないテーマは長続きしないよ・・・。
0706デフォルトの名無しさん
2005/07/19(火) 20:27:53同意。
0708デフォルトの名無しさん
2005/07/19(火) 20:36:430709デフォルトの名無しさん
2005/07/19(火) 21:17:46・バグが少ない
・開発効率が良い
・標準開発環境にSML,OCAMLを採用し、アプリの開発環境も充実
(APIは勿論MLインタフェイス)
・これまで数多くのOSプロジェクトが出てきたがそれらとの差別化を図ることができる。
・MLでOSかくという行為自体が楽しい
0710デフォルトの名無しさん
2005/07/19(火) 21:21:34C の ABI とか考えなくて良いし。
0711デフォルトの名無しさん
2005/07/19(火) 22:48:480712デフォルトの名無しさん
2005/07/19(火) 23:01:07> つかさぁ、ML系言語でOS書く事にどんな目的を持ってるの?
ML万能厨のオナニー。
0713デフォルトの名無しさん
2005/07/19(火) 23:03:31センス悪!いちぬけ
0714デフォルトの名無しさん
2005/07/19(火) 23:04:52あなた専用のスレを用意しましたので、続きはあちらでどうぞ。
ム板王者決定戦
http://pc8.2ch.net/test/read.cgi/tech/1121781119/
0715デフォルトの名無しさん
2005/07/19(火) 23:11:510716デフォルトの名無しさん
2005/07/19(火) 23:13:56自分の好きな言語で閉じた環境を作るのは
プログラマーのロマンだと思ってたけど
0717デフォルトの名無しさん
2005/07/19(火) 23:19:080718デフォルトの名無しさん
2005/07/19(火) 23:29:26インタプリタでOS書くのかYO
それともMirandaの処理系をOS無しで直接IPLからロードして立ち上げる話?
だったらそんなのはロマンでも何でもなくて、一昔前は皆やってたことだ。
0719デフォルトの名無しさん
2005/07/20(水) 00:31:08あなた専用のスレを用意しましたので、続きはあちらでどうぞ。
ム板王者決定戦
http://pc8.2ch.net/test/read.cgi/tech/1121781119/
0720デフォルトの名無しさん
2005/07/20(水) 01:06:320721デフォルトの名無しさん
2005/07/20(水) 01:08:03MLOSできたのはいいものの、アプリが少ないからといってC-Lib使えるように、
C-Interface作る・・・とか本末転倒なことはしない。
0722デフォルトの名無しさん
2005/07/20(水) 01:09:37・MLでのOS基本設計
・実行形式の定義
・etc...
まずは、2chブラウザ作りたい・・・。
0723デフォルトの名無しさん
2005/07/20(水) 01:12:43命名:MLOS = PureMLOS
MLのコード、それをコンパイルしたオブジェクト、実行形式
それ以外のものはPureMLOSには存在しない。
0724デフォルトの名無しさん
2005/07/20(水) 01:14:330725デフォルトの名無しさん
2005/07/20(水) 01:15:440726デフォルトの名無しさん
2005/07/20(水) 20:38:46MLを勉強したいのですがそのためによい本とかありますか?
教えてください。お願いいたします。
0727デフォルトの名無しさん
2005/07/20(水) 20:43:30細かい違いがあるし
それと>>1のリンクにあった
http://www.summa.jp/tutorial/plain/mlkouza.txt
これが↓に移転してる
http://tutorial.jp/
0728デフォルトの名無しさん
2005/07/20(水) 20:57:02これを読んでおけば間違いない。
Milner, Tofte, Harper and Macqueen. The Definition of Standard ML, MITPress
0729デフォルトの名無しさん
2005/07/20(水) 21:01:11関数型言語そのものを勉強するとともに、数理論理学などを勉強すると良い。
言語の文法自体はすぐに理解できるだろうから、なんでも良い。
0730デフォルトの名無しさん
2005/07/21(木) 11:31:54解かんなくなっちゃった」だって。周りからは「別れる様に言われてるらしい」けど、
俺も、そいつの事聞いて、「別れなさい」って言ってやった。それなのに・・・。
俺は、お客さんだぞ。話聞いてやって、ポイント使って、散々だよな。
まあ、こんなチャトレも居るってことが、よ〜〜〜く解かったけどね。
これからは、個人的な相談には、乗らないで、俺のペースで話しよ。
*あほな俺に、ご意見待ってます。
0731デフォルトの名無しさん
2005/07/21(木) 20:48:31ML for the working programmer
0732デフォルトの名無しさん
2005/07/21(木) 22:09:17とりあえず>>728を読んどけ。CにおけるK&Rみたいなもんだから。
0733デフォルトの名無しさん
2005/07/21(木) 22:52:260734デフォルトの名無しさん
2005/07/21(木) 22:53:400735デフォルトの名無しさん
2005/07/21(木) 22:55:060736デフォルトの名無しさん
2005/07/22(金) 00:37:280737デフォルトの名無しさん
2005/07/22(金) 01:58:180738デフォルトの名無しさん
2005/07/23(土) 11:28:51/へ_,. -──‐'´ `ー─ヽ、
ゝ=='´ `ヽ、`ヽ、
// / l| | \ `ヽ、`ヽ、
フ / / / / /| |l | ト、_ヽヽ \\ヽ `ヽ、__
/// / 〃 /!/`ト|ヽ |ヽl´>ミ、ヽ、 ヽヽ` `ヽ、
/ l/| | / | / r'⌒` ! ヽ | ´ ヾ7/\ ト!
,ィ/ |/| /|∧ト! ! () () / l/ / \| !
/ ! .| | ! ヽ ヘ `´´ , ` ̄ レ' ヽ
./ ヽ! `ヘ , --一 ''ヽ /ト 、、
,. -‐ァ', -''7/ヽ、 | _ノ,.イ|L-‐''´ //>-、
/ //rTT´ ̄ ̄ヽ`二 -''´ / /// \ヽ、 カズちゃんの童貞奪っちゃ、ダメーーッ!!
/ /// | | | |l / // | `ー、ヽ
0739デフォルトの名無しさん
2005/07/23(土) 13:46:430740デフォルトの名無しさん
2005/07/24(日) 02:47:29ワロス
0741デフォルトの名無しさん
2005/07/24(日) 10:51:290742デフォルトの名無しさん
2005/07/24(日) 18:16:18ってやると、 aaa.obj をどうしていいかわからないって返されるんだけど
c++とは連携できないの?
0743デフォルトの名無しさん
2005/07/24(日) 19:35:46もういーから、誰かもっとタメになる話してくれよ。
MLの情報得られる場所なんて、少ないんだからさ。
0744デフォルトの名無しさん
2005/07/24(日) 19:55:580745デフォルトの名無しさん
2005/07/25(月) 00:37:54それと同数の take & giveがあるはずだ。
そこでオレは考えた。
take & escape すればいいことを。
0746デフォルトの名無しさん
2005/07/25(月) 00:39:24give & killになりかねんな。
0747デフォルトの名無しさん
2005/07/25(月) 00:40:25Cでプログラミングするときより、
MLでプログラミングするときのほうがストレスが少ないことに。
0748デフォルトの名無しさん
2005/07/25(月) 01:17:00キチガイが狂った独り言を書き込み中
==============================
0749デフォルトの名無しさん
2005/07/25(月) 11:46:35プログラミングはもうしまいと思っていたが、
MLと出会い、プログラマ魂が復活した。
0750デフォルトの名無しさん
2005/07/25(月) 12:53:11キチガイが狂った独り言を書き込み中
==============================
0751デフォルトの名無しさん
2005/07/25(月) 20:50:49教えて下さい。
(当方環境:windowsXP,Ocaml V3.08.3 MinGW版)
ocamlc hello.ml -o hello.exe
このコマンドでは問題無くexeファイルが作成され
実行も出来ましたが、native codeを
作成しようと下記コマンドを入力したら:
ocamlopt hello.ml -o hello
'as' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして
認識されていません。
このようなエラーコメントが表示され
コンパイル出来ません。
なお、hello.mlの中味は下記の通りです:
let _ = print_string "Hello, World!\n"
let _ = read_line()
どのようにすればnative codeにコンパイル可能で
しょうか?ご教示願います。
以上
0752デフォルトの名無しさん
2005/07/25(月) 20:53:16いじょ
0753デフォルトの名無しさん
2005/07/25(月) 20:53:59ocamlopt hello.ml -o hello は
ocamlopt hello.ml -o hello.exeです。
0754デフォルトの名無しさん
2005/07/25(月) 21:16:060755デフォルトの名無しさん
2005/07/25(月) 21:18:13回答をご提供いただけると有難いです。
0756デフォルトの名無しさん
2005/07/25(月) 22:26:360757デフォルトの名無しさん
2005/07/25(月) 22:43:04煽りは結構です。
ちゃんとした回答を提供できる方はいませんか?
0758デフォルトの名無しさん
2005/07/25(月) 23:05:26asにパス通ってないんだからその手の問題だろうな。
0759デフォルトの名無しさん
2005/07/25(月) 23:14:40処理系を入れてみたというだけで、貴重なチャレンジ精神だと思います. 頑張っ
てください.
> 'as' は、内部コマンドまたは外部コマンド、
> 操作可能なプログラムまたはバッチ ファイルとして
> 認識されていません。
これは、as という GNU のアセンブラが見つからないというメッセージです.
cygwin はインストールしましたか? MinGW版 の ocaml でネイティブコードを
出力するためには cygwin が必要です.
http://www.jaist.ac.jp/~fujieda/cygwin/
cygwin をインストールしたら、コマンドプロンプトではなく、cygwin のター
ミナルでコンパイルコマンドを叩いて、再チャレンジしてみてください.
> なお、hello.mlの中味は下記の通りです:
> let _ = print_string "Hello, World!\n"
> let _ = read_line()
ちなみに余計なお世話ですが、
let _ =
print_string "Hello, World!\n";
read_line ()
;;
の方が一般的な書き方だと思います.
0760デフォルトの名無しさん
2005/07/25(月) 23:27:34ついにOCamlがメジャーになる日がキタワァ*・゜・*:.。..。.:*・゜(n‘∀‘)η゚・*:.。. .。.:*・゜・* !!!!!
0761デフォルトの名無しさん
2005/07/26(火) 00:13:190762デフォルトの名無しさん
2005/07/26(火) 00:48:59OcamlでHaskellとCとLISPとMaximaとRの
いい所合わせしたプログラミング言語作ってくれよ。
0763デフォルトの名無しさん
2005/07/26(火) 01:13:05そう言うからには、何か構想でもあるのかい?
0765デフォルトの名無しさん
2005/07/26(火) 11:15:27ストレスたまらんわ〜〜〜
0766デフォルトの名無しさん
2005/07/26(火) 12:59:520767751です。
2005/07/26(火) 15:16:33ご回答、有難う御座います。
cygwin の最新版をデフォルトで入れました。
1)cygwin上で下記実行。
ocamlopt hello.ml -o hello.exe
が、状況は変化なし。
2)そこでcygwinのocamlをダウンロードして
cygwin上で実行してみました。
$ ocamlopt hello.ml -o hello.exe
C:\Program Files\Objective Caml\lib/libasmrun.a(io.o):
io.c:(.text+0x209): undefined reference to `__errno'
C:\Program Files\Objective Caml\lib/libasmrun.a(io.o):
io.c:(.text+0x213): undefined reference to `__errno'
ずらずらと、このようなエラーメッセージが続き
最後は
Error during linking
で終わっております。
3)ならば、とDOSプロンプトでやってみました。
'as'が見当たらないそうです…状況は1)と同じ。
どうも上記2)が最も正解に近そうですが
MinGW版Ocaml+cygwin版Ocamlでダブっているような
気もします。ただcygwin版Ocamlだけではnative codeの
コンパイルは出来ないと、マニュアルには書いて
ある???
win用native codeのコンパイルに成功した経験の
ある方、ご教示下さい。
以上
0768751です。
2005/07/26(火) 15:23:22>755
>757
は751ではありませんので念の為。
>753 は間違いなく751です。
って、まあ証明のしようもないのですが…
0769デフォルトの名無しさん
2005/07/26(火) 16:37:02それをチェックしてから書き込んでますか?
もし、caml 初心者なら、始めのうちは、バイトコードコンパイラで十分です。
なんで、みんなネイティブに突っ走って教えて君モードになるのか…
0770デフォルトの名無しさん
2005/07/26(火) 18:21:53それともやっぱり
で き な い の か w
0771770
2005/07/26(火) 18:34:34cannot find file libassmrun.a
って出て動きません。
0772デフォルトの名無しさん
2005/07/26(火) 18:36:13・as --versionでasが入ってるか確認。
・ocamlopt -whereで意図したocamloptが起動してるか確認。
・cygwin版ocamlを使うときは環境変数OCAMLLIBを消す。(当然nativeにはならない)
確かにここははまりやすいね。
>>770
MSVC版使ってるか?
あれだけの情報じゃ特にどうしろとは言ってやれないが、答えは「可能」だ。
0774デフォルトの名無しさん
2005/07/26(火) 20:46:47一週間くらい勉強汁!
asの所在:
$ which as
/usr/bin/as
$ (cd /usr/bin; cmd /c cd)
C:\cygwin\bin
〜〜〜〜〜〜 これを環境変数PATHに追加しとけ(ワラ
_errnoの所在:
ふつーlibc
libasmrun.aの指定方法へのポインタ:
http://www.google.com/search?num=100&hl=ja&c2coff=1&q=libasmrun.a&lr=lang_ja
libasmrun.a の検索結果のうち 日本語のページ 約 4 件中 1 - 3 件目 (0.34 秒)
今週のOCaml - PukiWiki
ocamlopt -ccopt -static collect_events.ml /usr/local/lib/ocaml/libasmrun.a(unix.
o)(.text+0x241): In function `caml_dlopen': warning: Using 'dlopen' in statically
linked applications requires at runtime the shared libraries from the ...
wiki.ocaml.jp/index.php?%BA%A3%BD%B5%A4%CEOCaml - 21k - キャッシュ - 関連ページ
0775デフォルトの名無しさん
2005/07/26(火) 20:54:18おまえいいやつだな。
0776デフォルトの名無しさん
2005/07/26(火) 21:04:50こんな親切な人初めてみた
0777デフォルトの名無しさん
2005/07/27(水) 04:06:09100万秒ワロタ。
0778デフォルトの名無しさん
2005/07/28(木) 22:32:212次元配列の一部だけ変えたいときってどうしたらいいですか?
例えば、2x2配列の(1、1)だけ変えたくて以下のようにすると、
--
let a = Array.make 2 (Array.make 2 1);;
print_endline ((string_of_int a.(0).(0)) ^ " " ^ (string_of_int a.(0).(1)));;
print_endline ((string_of_int a.(1).(0)) ^ " " ^ (string_of_int a.(1).(1)));;
Array.set a.(1) 1 2;;
print_endline ((string_of_int a.(0).(0)) ^ " " ^ (string_of_int a.(0).(1)));;
print_endline ((string_of_int a.(1).(0)) ^ " " ^ (string_of_int a.(1).(1)));;
--
出力が以下のようになって、(0,1)まで変わってしまいます。
--
1 1
1 1
1 2
1 2
--
Array.setの使い方が違うのでしょうか。。。
0779778
2005/07/28(木) 22:34:22初心者なので他の言語との違いが分かんないですけど。
お願いします。
0780デフォルトの名無しさん
2005/07/28(木) 22:46:20(Array.make 2 1)の結果はpointerなので、a.(0)とa.(1)は同じarrayを共有することになる。
0781778
2005/07/28(木) 22:52:06なるほど。ありがとうございます!
let a = Array.make_matrix 2 2 1;;
に変えたらうまくいきました。
0782デフォルトの名無しさん
2005/07/29(金) 01:11:12OCamlでメッセージ処理とかコールバックってどうやってるか教えて。
0783デフォルトの名無しさん
2005/07/29(金) 23:05:160784デフォルトの名無しさん
2005/08/10(水) 15:46:47ニモニックのバイトコードを見るにはどうしたらいいの?
0785デフォルトの名無しさん
2005/08/10(水) 17:42:27-dinstr オプションつけてコンパイルしてみ。
外してたら失礼。
0786デフォルトの名無しさん
2005/08/15(月) 13:30:36関数型言語って始めてだったらかちょっと不安だったけど
これならなんとかなりそう。
0787デフォルトの名無しさん
2005/08/15(月) 21:36:36私も初めはOCamlがML系だということで、面白いと思って、いろいろ試しに作ってみたんだけど、
ライブラリが揃っているように見えて、内実は全く不十分だということに気づいた。
簡単な物ならOCamlでも大差は無いけれど、俗なアプリケーション製作に関していえば、
結局C++の方が楽だということに気づいた。
0788デフォルトの名無しさん
2005/08/15(月) 21:39:39例えばどんなライブラリが無かったの?
0789デフォルトの名無しさん
2005/08/16(火) 11:48:110790デフォルトの名無しさん
2005/08/16(火) 18:29:00たとえば、
class a =
let b = 0 in
object (self)
method f =
b
end
;;
print_endline (string_of_int (new a)#f);;
みたいに一回newすれば見れますけど、
もっといい方法ってないですか?
0791デフォルトの名無しさん
2005/08/16(火) 18:47:52http://caml.inria.fr/ocaml/release.en.html
0792デフォルトの名無しさん
2005/08/16(火) 20:20:49インスタンスが一つも無い状態で、クラス変数の中身を見たいって状況が理解できない。
それはもしかしたら、クラスじゃなくモジュールでやるべきことなんじゃないかと、自問してみるのをお薦めする。
あと、一つでもインスタンスがあるのなら、
let obj = new a
let get_b () = obj#f
とでもしておけば、以後いつでも get_b で中身が見れるでしょう。
0793790
2005/08/16(火) 21:06:02他のところでインスタンスを使ってるんですけど、
意味的にクラスに変数をまとめておきたかったんです。
C++書いてるときにはよくやってたんですけど、
あんまりやらないのかな。
0794デフォルトの名無しさん
2005/08/16(火) 21:28:33つ[F# + WindowsForms]
0795デフォルトの名無しさん
2005/08/16(火) 23:32:45>他のところでインスタンスを使ってるんですけど、
>意味的にクラスに変数をまとめておきたかったんです。
って事は、たぶん、あるクラスの(static)変数を参照したいんだけど、それを
参照したい場所ではインスタンスへのスコープが届かないんでしょ。
module A = struct
let b = 0
class a = object
method foo = 1 + 1
end
end
とかにしとけば、
let _ =
Printf.printf "%d\n" A.b
;;
とかできますよ。
0796790
2005/08/17(水) 00:20:02なるほどー。
勉強になります。ありがとうございます。
0797デフォルトの名無しさん
2005/08/17(水) 00:53:24;;
が理解できない。
コード中にあったりなかったり。
どこに置くべきなのか。
C言語との対応表みたいなの誰か作らない?
0798デフォルトの名無しさん
2005/08/17(水) 09:05:52;;はreplに与える式の区切りと思えば。
0799デフォルトの名無しさん
2005/08/17(水) 09:34:10;;は昔は必要だったけど今は不要な記号。なくてもいいので使わない人もいる
し、宣言が終わりだということを明示的に指示したい時に書く人もいる。
あとトップレベル(対話環境)では必須。
マニュアル 6.11.2 より。
For compatibility with toplevel phrases (chapter 9) and with Caml
Light, an optional ;; is allowed after each definition in a
structure. The ;; has no semantic meaning.
0800デフォルトの名無しさん
2005/08/17(水) 15:01:36対話モード以外では意味ないのか。
BNFで解説してくれる本が手元にあるとありがたいんだけど。
0801デフォルトの名無しさん
2005/08/18(木) 00:22:110802デフォルトの名無しさん
2005/08/18(木) 13:56:30parsing/parser.mly でも見てよ。
Syntax error がある場合、
;; があるとエラー場所をほんの少し探し易いという利点があります。
0803デフォルトの名無しさん
2005/08/18(木) 14:02:41and は相互再起な値やデータ型、クラスを定義する時に、
どれが相互再帰的に定義されているかを指定するのに使います:
type t = Foo of s | Bar
and s = Boo of t
ただ、相互再帰でない(例えば、non recursive let)の時でも and は
使えちゃうので、and 自体の意味がわかり憎いかもしれません:
type t = Foo | Bar
and s = Boo of t
これは
type t = Foo | Bar
type s = Boo of t
でもよい。上は切り離せない。
0804デフォルトの名無しさん
2005/08/18(木) 14:13:381.入力履歴を使えますか?WindowsのF3みたいな。
間違った入力で失敗した後、履歴を取り出して修正できれば便利。
2.環境変数(シェル変数)をどうすれば見られますか?
シェルでx=3とした後、MLに入ってxの値を取得したいのですが。
3.出力のリダイレクトはできますか?
val x = 1 + 2; > ファイル名、のような感じにして
"val x = 3 : int"と画面出力を取り出したい。
よろしくおねがいします。
0805デフォルトの名無しさん
2005/08/18(木) 14:21:03ML 扱ったこと無いんで申し訳ないが……明らかに処理系依存かと思われ
0806デフォルトの名無しさん
2005/08/18(木) 14:47:560807デフォルトの名無しさん
2005/08/18(木) 14:59:00Common Lisp用のSLIME並に高機能だとなお嬉すぃ。
0808デフォルトの名無しさん
2005/08/18(木) 16:18:36なる程、分かりました。有難う御座いました。
0809デフォルトの名無しさん
2005/08/18(木) 16:25:28run-ocaml なら M-p とか M-n とかで履歴を上下できる筈だけど。
あと、環境変数はともかくシェル変数はそもそもアプリに渡らないだろ。環境変数は、実用的な処理系なら普通は取れるだろうけど。 OCaml なら Sys.getenv とか。
ちょっと調べた感じでは SML では標準ライブラリの Posix.ProcEnv ができそうなので、SMLの実装(SML/NJとかmltonとかmoscow mlとか)も行けるだろうけど、使ってないから詳しくは知らん。
0810デフォルトの名無しさん
2005/08/18(木) 17:54:50A2. open Unix;; してenvironmentとかgetenv使う。詳しくは[1]。
[1] Xavier Leroy and Didier Re'my, "Programmation du système Unix en Objective Caml"
http://cristal.inria.fr/~remy/poly/system/camlunix/index.html
0811デフォルトの名無しさん
2005/08/20(土) 18:03:18in_channelとかout_channelとかを使ってやるらしいことは
マニュアルに書いてあるがサンプルがない。
誠に勝手なお願いで申し訳ありませんが、
例えば3教科のテスト結果が5名分test.csvに入っているのを
配列に取り出し、プログラム内で各教科の5名平均を計算し、
それをaverage.csvにOPするという、極めて簡単なサンプルを
どなたか、ObjectiveCalmで書いて頂けると有り難いの
ですが…。
0812デフォルトの名無しさん
2005/08/20(土) 18:42:20宿題スレへ行け。
0813デフォルトの名無しさん
2005/08/20(土) 19:40:02禿同。
入出力は
let ic = open_in "filename" in
...
let line = input_line ic in
...
close_in ic
つうか、こいつは、入出力のこと聞いているけど、
フィールド切り分けはできるのか?はなはだ不安。
Scanf じゃできんかもね。
0814デフォルトの名無しさん
NGNG0815デフォルトの名無しさん
2005/08/20(土) 20:18:310816デフォルトの名無しさん
2005/08/20(土) 20:37:34前に宿題スレに湧いてたOCaml厨
0817デフォルトの名無しさん
2005/08/21(日) 03:16:50>>814
クォーテーションを考えると Str.split は使えない希ガス。 ocamllex か
camlp4 だな。
0818811です。
2005/08/21(日) 13:08:23C言語のサンプルを下記の通り添付します。
(ObjectiveCamlの構文が良く分からないので
ご参考になるかどうか…)
但し、下記のプログラムが出来ればかなり
応用が効きます。つまりObjectiveCamlに
データ入力するのにExcelを利用したり、
CSV経由で他のアプリとの連携をとったりとか。
前回native code生成の質問をしたのも、この意味です。
言って見ればnative code exeとcsvファイルの操作さえ
できれば、DOSのバッチファイルを経由してどんな
アプリに対してもやり取りが可能になると考えた
次第です。
0819デフォルトの名無しさん
2005/08/21(日) 13:10:29#include <string.h>
#include <stdlib.h>
#define INFILE "test.csv"// 入力ファイル
#define OUTFILE "average.csv"// 出力ファイル
#define ERR_VALUE -1// エラー値
#define ROW 10// 縦の要素数
#define COL 4// 横の要素数
int read_file(int dat[][COL]);
void get_data(int dat[][COL], char *str, int i);
float calc_avg(int dat[][COL], int n);
int write_file(float avg[]);
int main(void)
{
intdat[ROW][COL];// テストの点数
intret;// 戻り値
float avg[COL];// 平均点
inti;// カウンタ
ret = read_file(dat);
if (ret < 0) {
return ERR_VALUE;
}
for (i = 0; i < COL; i++) {
avg[i] = calc_avg(dat, i);
}
ret = write_file(avg);
if (ret < 0) {
return ERR_VALUE;
}
printf("処理を終了しました\n");
return 0;
}
0820デフォルトの名無しさん
2005/08/21(日) 13:15:35{
FILE*fp;// ファイルポインタ
charbuf[256];// 1行分のデータ
inti;// インデックス
fp = fopen(INFILE, "r");
if ( fp == NULL ) {
printf("入力ファイルをオープンできませんでした\n");
return ERR_VALUE;
}
i = 0;
while ( fgets(buf, 256, fp) != NULL ) {
get_data(dat, buf, i);
i = i + 1;
}
fclose(fp);
return 0;
}
void get_data(int dat[][COL], char *str, int i)
{
char*token;// 次のトークンへのポインタ
token = strtok(str, ",");
token = strtok(NULL, ",");
dat[i][0] = atoi(token);
token = strtok(NULL, ",");
dat[i][1] = atoi(token);
token = strtok(NULL, ",");
dat[i][2] = atoi(token);
token = strtok(NULL, ",");
dat[i][3] = atoi(token);
return;
}
0821デフォルトの名無しさん
2005/08/21(日) 13:16:35{
inti;// カウンタ
floatsum;// 合計
floatanswer;// 平均点
sum = 0.0;
for (i = 0; i < ROW; i++) {
sum = sum + (float)dat[i][n];
}
answer = sum / ROW;
return answer;
}
int write_file(float avg[])
{
FILE*fp;// ファイルポインタ
fp = fopen(OUTFILE, "w");
if ( fp == NULL ){
printf("出力ファイルを開くことができませんでした\n");
return ERR_VALUE;
}
fprintf(fp, "英語,%.2f\n", avg[0]);
fprintf(fp, "数学,%.2f\n", avg[1]);
fprintf(fp, "物理,%.2f\n", avg[2]);
fprintf(fp, "地理,%.2f\n", avg[3]);
fclose(fp);
return 0;
}
0822デフォルトの名無しさん
2005/08/21(日) 14:05:20とか caml で出来ない人が、caml と他のアプリとの何の連携が出来るって
言うんですか?
あなたは C の file i/o は出来るようだから、 caml の i/o も pervasives.mli
を見ればどんな関数があって、どういう型か判るはずだし、コメントから C の
入出力関数との対比も大体判ると思います。フィールド切り出しも string.mli
の関数を使えば、あなたの get_data 関数位の物なら自分で書けると思います。
とにかく、どこどこが判りませんっていうならともかく、コードよこせって
言うんじゃ夏休みの宿題厨と思われてもしょうがないし、細かく助けようがない。
取り敢えず自分で書いてみ。動かなくてもいいから。それを張り付けたら
みんな喜んで添削すると思うよ。
0823デフォルトの名無しさん
2005/08/21(日) 14:21:28なんで、わざわざフランス語のリファレンス…
そもそも環境変数だけだったら Unix なんぞ使わんでも Sys.getenv の方が簡単よ。
F
0824デフォルトの名無しさん
2005/08/21(日) 18:01:58もっと敷居を低くしてくれ、俺は敷居がどこなんだかわかんねー
cのポインタ、c++のテンプレ、javaのインターフェイス
俺の歴史の中で大物だったハードル達だ
こいつは何だ!見当つかね、
俺の構築したOCamlはこれであってるのか!
皆はこれすぐ使えるようになったの??
だめだlispから出直してくる
0825デフォルトの名無しさん
2005/08/21(日) 18:51:57そんなに「もったい」つけないで、チョコチョコと書いてくれたって・・・。
Cでさえこの程度の行数だから、Camlであれば半分か3分の1で
済むんでしょう?
どっかにあると思われるサンプルをチョコっと直して頂ければそれで
良いんですが。
素人が一からマニュアル見ながらウンウン書くのと、ベテランがチョコと
書くのとではコードROIが段違いです。
0826デフォルトの名無しさん
2005/08/21(日) 20:49:330827デフォルトの名無しさん
2005/08/21(日) 22:15:42「OCamlでCSVを読むコードクレクレ」
だよなあ。
宿題スレとか作ってくださいスレとかが相当じゃないの。
0828デフォルトの名無しさん
2005/08/21(日) 22:26:10ROIなんて投資するのが同じ人でなきゃ比較しても意味ないだろ。
同じ会社に勤めてる人が仕事で書くとかならともかく、
なんで赤の他人がお前の為にコードを書かにゃならんのか。
お前は人に書かせりゃ投資ゼロでROI無限大。書いた人はなんら得しない。
ついでにいうと自分の時間と玄人の時間の価値を同じ価値だと思うなぞ
おこがましいにも程がある。
0829822
2005/08/21(日) 22:42:51ズバリ教えてあげるから、もう秋まで戻ってこないで。
google で ocaml csv。これだけ。じゃ、バイバイ。
(811 はこれさえしていないのか、、、)
0830デフォルトの名無しさん
2005/08/22(月) 02:26:260831デフォルトの名無しさん
2005/08/22(月) 02:43:060832デフォルトの名無しさん
2005/08/22(月) 09:44:270833デフォルトの名無しさん
2005/08/23(火) 13:41:020834デフォルトの名無しさん
2005/08/24(水) 18:18:41>どっかにあると思われるサンプルをチョコっと直して頂ければそれで
>良いんですが。
大笑い!
誰か!いい加減チョコっと直してやれよってぇ…
と言ってみる。
0835デフォルトの名無しさん
2005/08/25(木) 17:38:30moduleを取り込むやつね。openと何がちがうんだか・・・
0836デフォルトの名無しさん
2005/08/25(木) 18:05:14open との違いもちゃんと書いてあるが、
module M1 = struct include String end;;
module M2 = struct open String end;;
などとしてM1とM2の違いを見れば一目瞭然。
0837デフォルトの名無しさん
2005/08/26(金) 12:55:55mystring.ml:
include String
let my_special_function_for_string = fun ...
0838デフォルトの名無しさん
2005/09/02(金) 01:12:48トラックバック読む限りでは、結構好評だったみたいじゃん。
直接聞いた人いる?
0839デフォルトの名無しさん
2005/09/02(金) 01:37:31ネタっぽくウケも取りつつ、割とポイントを抑えた説明になっていた気がする。
あ、ちなみに LLDN のサイトにある発表資料は、ウケ狙いの部分をぜんぶ削除
されてるね。
こんなややっこしい話を本当にしたわけじゃなくて、知らない人が聞いてもわ
からないであろうところはバンバンすっ飛ばして説明してたので、逆に知らな
い人でもイメージは掴みやすかったと思う。
しかしSMLでぐぐるとエロゲメーカーのサイトが出てくるとは思わなかった(笑)
0840デフォルトの名無しさん
2005/09/02(金) 02:30:00あー、ウケ狙いが聞きたかった...
よさげなプレゼンでML人口が10人は増えたな。そのうち一人はエロゲーと勘違
いしている悪寒。
0841デフォルトの名無しさん
2005/09/03(土) 21:16:47camlp4 の話ですが、パターンマッチングの拡張って個別にやらないとだめな
んでしょうか?
例えば、
match list, queue with
[], empty -> ()
| hd_list :: tl_list, hd_queue @:: tl_queue ->
みたいな事がしたいんです。
Queue.match .. with という構文を作ってしまえば出来そうなのは分かってい
ます。ところが、通常の match .. with を拡張する方法が分かりません。
もしかして FAQ?
0842デフォルトの名無しさん
2005/09/04(日) 00:46:28camlp4に詳しいわけじゃないのでよくわからないけど、パターンマッチの時に
自動的にガード式を追加して、そこで条件をゴチャゴチャやればできるんじゃ
ないか。
Micmatch は参考にならないかな。
http://martin.jambon.free.fr/micmatch.html
0843デフォルトの名無しさん
2005/09/13(火) 19:50:24自分で定義したクラスのインスタンス(の状態)をファイルに保存して、
次にプログラムを起動したときに元の状態に戻す方法ってありますか?
シリアライズについて調べたところ、
普通に値を保存するには
let f = open_out "save.dat";;
output_value f "hogehoge";;
close_out f;;
let f = open_in "save.dat";;
(input_value f : string);;
でできたのですが、
文字列"hogehoge"の代わりにインスタンスをまるごと、ファイルに出力したいのです。
はじめたばかりで混乱しているところもあるかと思いますが、よろしくお願いします。
0844デフォルトの名無しさん
2005/09/13(火) 20:30:10Marshal が使えないかねえ。
0845843
2005/09/14(水) 09:40:32ご助言、ありがとうございます。
いろいろ試した結果、Marshal 使ったらできました。
↓こんな感じです。
class person (name : string) = object
val _name = name
method get_name = _name
end;;
let p = new person "tarou";;
let f = open_out_bin "save.dat";;
Marshal.to_channel f p [Marshal.Closures];;
close_out f;;
let f = open_out_bin "save.dat";;
let p2 : person = Marshal.from_channel f;;
p2#get_name;;
- : string = "tarou"
>>843 の例でも
Pervasives.output_value は Marshal を使っているのですね。
output_value は flags リストが空だけど、
関数値を含む値を直列化するには Marshal.Closures フラグが必要ということでした。
0846843
2005/09/14(水) 21:36:33メソッドを増やしたら、失敗するようになった。
method get_name1 = _name
method get_name4 = _name
Exception: Invalid_argument "output_value: abstract value (outside heap)".
method get_name0 = _name
method get_name1 = _name
...
method get_name7 = _name
とかさらに無駄に追加したら成功するし。
0847843
2005/09/14(水) 21:42:12class person (name : string) = object
val _name = name
method get_name0 = name
method get_name1 = name
method get_name2 = name
end;;
だと、次のようなメッセージで失敗します。
Exception: Invalid_argument "output_value: abstract value (outside heap)".
ところが、さらにメソッドを増やすと(method get_name7 まで計8個)うまくいきます。
いったい何がおきているやら・・・失敗するときと成功するときの違いがわからないです。
そもそも根本的にやり方が間違っているのでしょうか?
0848デフォルトの名無しさん
2005/09/14(水) 23:15:27払って使用してください。特に関数の output はアドレス書きこみのみ
ですので、output したのと、全く同じプログラムへの input 以外しか
安全性は保証されません。
いまいち何をやって問題が発生しているのか、正確にはわからないけど、
object のインスタンスもメソッドの関数アドレスを含みますから、御用心。
偶然うまくいっても、それはただの偶然です。
0849848
2005/09/14(水) 23:17:59もしそうだったらそりゃ caml のバグっぽいね。
0850デフォルトの名無しさん
2005/09/14(水) 23:51:50オブジェクトの marshalling はできないと思います。
http://pauillac.inria.fr/bin/caml-bugs/not%20a%20bug?id=381
0851デフォルトの名無しさん
2005/09/15(木) 02:43:23みんな OCaml とか言いながら、実は Caml の部分しか使ってない罠。
O の部分って、使わないんだよねえ。
0852843
2005/09/15(木) 10:40:46ありがとうございます。
なるほどオブジェクトの永続化はできないようですね。
偶然成功してただけか・・・・(メソッドの総数が1,2,4,8,16(2のべき乗?)の時に書き込みが成功した)
別の方法を考えてみようと思います。
>>851
いままでOOなプログラミングに浸ってたからなぁ。もう少し勉強してみます。
0853デフォルトの名無しさん
2005/09/15(木) 11:05:58そのうち map やら iter やら fold やらを使いまくって、
関数合成しまくるようになってくるさ、きっと。
OO って基本的にオブジェクトの状態を変更していくから、
あまり ML では好まれない。基本的に、状態は変更されないっていうスタンスだからなあ。
0854デフォルトの名無しさん
2005/09/23(金) 01:08:060855デフォルトの名無しさん
2005/09/23(金) 01:11:29意味ワカラナス
0856デフォルトの名無しさん
2005/09/24(土) 23:27:460857デフォルトの名無しさん
2005/09/27(火) 00:45:58SML Markup Language
Visual SML
0858デフォルトの名無しさん
2005/09/27(火) 06:12:410859デフォルトの名無しさん
2005/09/27(火) 09:49:43Xavier Leroy ってなんて発音すればよいのでしょう?
ザビアー レロイ?
0860デフォルトの名無しさん
2005/09/27(火) 10:02:330861デフォルトの名無しさん
2005/09/27(火) 11:35:010862デフォルトの名無しさん
2005/09/27(火) 13:51:20より正確にはザの前にほんのちょっとグが入っていますが、
ほとんど聞き取れません。ワの発音はアとワの中間みたいな物です。
後は l と r さえ注意すれば問題なく彼を振り向かせることが出来ます。
0863デフォルトの名無しさん
2005/09/28(水) 14:20:25けっこうハンサムというか、可愛いというか、かっこいいですよね。
http://pauillac.inria.fr/~xleroy/index.html
10年前の写真みたいなんで、今はどうだか謎ですけどw
0864デフォルトの名無しさん
2005/09/28(水) 21:24:450865デフォルトの名無しさん
2005/10/02(日) 09:01:42関数を書くことはできますか?
またそのデータ型のインスタンスを外部で構成することはできますか?
つまりあるsignature〜structureの中で、datatype aa = AA of int と定義されています。
このときに、内部では fun f (AA n) = n とすればデータ構成子をはずす関数が書け、
val x = AA 2; のようにすれば、そのデータ型のインスタンスを作れるわけですが、
同じようなことを外でやりたい。
signatureが適切に書かれており、structureの名をsとします。
fun f (s.AA n) = n;
fun f (AA n) : s.aa -> int = n;
val x = s.AA 2;
val x = AA 2 : s.aa;
こういう物を定義して、データ構成子の向こうのものを見たいのです。
私が質問していることからわかるように、これらの構文はいずれもうまく行きません
データ構成子がついていない直積やレコードの場合は内部も見れるんですよね。
たとえば、signature〜structureの中で、type ax = int * int と定義されているとき、
fun f (a, b) : s.ax -> int = a;
val x = (2, 3) : s.ax
などは有効です。
問題意識は伝わったでしょうか?signature〜structure内部で定義されているdatatype型の
データ構成子をはずした中身を見る方法、よろしくお願いします
0866デフォルトの名無しさん
2005/10/02(日) 12:16:450867デフォルトの名無しさん
2005/10/02(日) 15:52:09全くだ……。
0868デフォルトの名無しさん
2005/10/02(日) 17:07:25SMLはコンストラクタを公開できないの?
できるならAAを公開すればいいだけだと思うけど。
0869デフォルトの名無しさん
2005/10/02(日) 18:54:56structure s : sig datatype aa = AA of int end = struct datatype aa = AA of int end;
fun f (s.AA n) = n;
val x = s.AA 2;
0870デフォルトの名無しさん
2005/10/03(月) 06:14:26SML/NJで、h::t の h がリストの最初の一つを取得できるように、
リストの最後の一つを取得することは可能ですか?
0871デフォルトの名無しさん
2005/10/03(月) 10:42:59取得そのものはできるけど、定数時間ではできないよ。
0872デフォルトの名無しさん
2005/10/03(月) 15:39:46fun get_last [] = raise NIL_LIST
| get_last (h::nil) = h
| get_last (h::t) = get_last t;
0873デフォルトの名無しさん
2005/10/04(火) 16:02:13val f1: int -> int
val f2: int -> int
end;
structure Sample : sigSample =
struct
fun f1 x = 3 + f2 x; (*<------------*)
(*fun f1 x = if x = 0 then ~1 else f2 x;*)
fun f2 x = x * 2;
end;
このプログラムを読み込むと、f2という名前が無いとの
エラーメッセージが出てきます。f1とf2の順序を保ったまま、
動くようにしたいのですがどうすればいいですか?
特にf1で一般的処理、f2でエラー処理、f3でさらに・・・
というように一般から特殊へと並べたいようなときに、
いちいち全て必要な関数をそろえてからというのでは
やり切れません。
signatureの中でちゃんと型は定義してあるのに、
だめなのでしょうか?
0874デフォルトの名無しさん
2005/10/04(火) 16:24:08"aaa" => 〜
| "bbb" => 〜
(*| _ => f2 s*)
);
fun f2 s = (case s of
"ccc" => 〜
| "ddd" => 〜
(*| _ => f3 s*)
);
こういう部分分岐の条件を集めて、
まずf1を適用し、マッチしなければf2、次いでf3、・・・
というような管理関数を作ることはできますか?
(もしコメントアウトした部分を外して有効ならば、
デフォルトマッチの場合に次に行くことで実現できますが、
それは前発言に述べた別の質問になるかと思います)
0875デフォルトの名無しさん
2005/10/04(火) 18:54:58http://d.hatena.ne.jp/sumii/20051004/1128414064
目次しか見てないが、けっこう訳されている。
0876デフォルトの名無しさん
2005/10/04(火) 23:49:17signature sigSample = sig
val f1: int -> int
val f2: int -> int
end;
structure Sample : sigSample =
struct
fun f1 x = 3 + f2 x
and f2 x = x * 2;
end;
0877デフォルトの名無しさん
2005/10/04(火) 23:55:11fun match [f] x = f x
| match (f::fs) x = f x handle Match => match fs x;
fun f1 s = case s of
"aaa" => 1
| "bbb" => 2;
fun f2 s = case s of
"ccc" => 3
| "ddd" => 4;
val f = match [f1, f2];
- f "ddd";
val it = 4 : int
- f "eee";
uncaught exception nonexhaustive match failure
raised at: stdIn:69.14
0878デフォルトの名無しさん
2005/10/14(金) 16:29:11fun f x y = x+y
↓
val f = fn x => fn y => x+y
fun x y -> x+y
↓
function x -> function y -> x+y
って変換されてるの?
0879デフォルトの名無しさん
2005/10/14(金) 17:22:49内部ノードだとか、最終的に生成されるバイトコードだとかは同じになるから、同じようなもの。
0880デフォルトの名無しさん
2005/10/14(金) 19:32:29いい加減なことは言わないように。
0881デフォルトの名無しさん
2005/10/14(金) 20:24:16興味あるんで、『いい加減』じゃない説明キボン
0882デフォルトの名無しさん
2005/10/15(土) 15:26:34バイトコードもネイティブコードもそんな変換しませんよ。
今のアーキテクチャだと実行が遅くなりますからね。
ocamlc -dinstrやocamlopt -Sで各コードのアセンブリが読めるので、
applyやcallの回数を見てみるといいんじゃないでしょうか。
>いちいちコードを変換しているわけはないだろうが
「(面倒なのにわざわざ)いちいち変換しない」という意味だったら逆ですよ。
コンパイラ作る側としたら変換してしまった方が楽です。
0883デフォルトの名無しさん
2005/10/15(土) 17:18:230884デフォルトの名無しさん
2005/10/15(土) 17:29:44let f a b = a+b
let f (a,b) = a+bとするか
let f = function a -> function b -> a+bとするか
???
0885デフォルトの名無しさん
2005/10/15(土) 18:00:31fの型はそれぞれ int->int->int, int*int->int でそもそも型が違う。
MLでは多引数関数はカリー化されているから
let f a b = a+b と let f = function a -> function b -> a+b は
全く同じであるといってもよい。
しかしそれでは、引数を一個適用する度にクロージャを生成するようになって
効率的ではないので、(Ocamlなどでは)複数引数が一度に適用される場合は
クロージャを生成しないようにコンパイルする。
0886デフォルトの名無しさん
2005/10/15(土) 23:08:120887克也
2005/10/15(土) 23:28:45ヒント: match構文は二重の入れ子にして使ってもよい。
自分で書いてみたんですが、サッパリ上手くいきません。ご教授願います。
let rec union a b = match a with
[] -> b
| h::t -> match b with
[] -> []
| g::r -> if h==g then union t b
else h::union t b;;
0888デフォルトの名無しさん
2005/10/16(日) 00:34:08生成される関数のコードは一つ。
Ocamlのバイトコードには「今実行中の関数に対する引数がスタックに積んであるか」を
判定する命令があり、それでもってクロージャを生成するか否かを実行時に判断している。
>>887
あってるのはmatch b 〜の前までですな。
nilのときはtrivial、aとbそれぞれのheadが =, <, > のときはどうするか…がんがって。
0889デフォルトの名無しさん
2005/10/17(月) 00:01:22課題みたいだからあまり言わないけど、そのまま突っ走っても頭がこんがらがって
良い答えは出ない希ガス。
少し引いてみて、まずは一般の union から考えてみては?
0890デフォルトの名無しさん
2005/10/22(土) 00:21:120891デフォルトの名無しさん
2005/10/24(月) 07:41:14ちょっと計算させて作ったデータ構造などを気軽に保存したいんですけど。
0892デフォルトの名無しさん
2005/10/24(月) 08:46:23serialize : 'a -> bytearray
deserialize : bytearray -> 'a
こんな関数書けるかな??
0893デフォルトの名無しさん
2005/10/24(月) 09:51:090894デフォルトの名無しさん
2005/10/24(月) 11:09:02ファイル(チャネル)をバイナリで開いてoutput_value, input_valueで
読み書きすればよりお手軽に。
但しtype-safeでないことをゆめ忘れるな。
0895デフォルトの名無しさん
2005/10/24(月) 12:15:360896デフォルトの名無しさん
2005/10/25(火) 01:01:35ttp://pauillac.inria.fr/bin/caml-bugs/not%20a%20bug?id=381
ザビエ ルロワ先生のメールによると、状態と手続きを合わせて保存しなくて
はいけないので、難しいのだそうです。
最近、Thread間で割り込みが出来ないことを知り、ショックを隠せない ID より。
0897デフォルトの名無しさん
2005/10/25(火) 01:18:07活気をみれば仕方ないけど
0898デフォルトの名無しさん
2005/10/25(火) 01:36:10>Thread間で割り込みが出来ないことを知り
詳細キボン
0899デフォルトの名無しさん
2005/10/25(火) 09:46:06例えば、
let a = Thread.create (fun () -> データベースへの問い合わせ) () in
したとします。ここで、もしこのスレッド a の実行をキャンセルしたいとすると、
a の実行に対して何らか「割り込」んで、その制御をスレッド a の持っているリソースの
後始末やらキャンセルしましたというメッセージを出力するルーティンへジャンプさせたく
なります。
これをうまくやる方法としては、スレッドに任意の例外を発生させる
val raise_to : exn -> Thread.t -> unit
という仕組みがあれば便利です。例外によるジャンプを利用している訳です。
しかし、このような仕組みは現在の ocaml にはありません。
詳しくは、過去のメーリングリストでの議論を参照してください。
ttp://caml.inria.fr/pub/ml-archives/caml-list/2002/09/2b35126a3ea29c9fa1253e9800874edc.fr.html
0900デフォルトの名無しさん
2005/10/26(水) 07:20:070901デフォルトの名無しさん
2005/10/26(水) 21:55:46# Haskell はあるらしい。
0902デフォルトの名無しさん
2005/10/26(水) 22:48:29Haskellは基本的にRubyと同じuser level threadだから
*Haskellの範囲内では* raise_toとかできるが、
データベースの通信のようにCレベルで実行してる間は
コンテキストスイッチしないからraise_toできないはずだぞ。
0903デフォルトの名無しさん
2005/10/27(木) 00:34:17昔はできたけどその後deprecatedになったような。
ちゃんと同期とってやんなさいと。
0904デフォルトの名無しさん
2005/10/27(木) 06:23:16やはり非同期例外というのは、諸刃の剣なのだろうか
0905デフォルトの名無しさん
2005/10/27(木) 12:55:36データベースへの問い合わせみたいなブロックされてる処理は無理だろうけど、
それ以外ならat_exitとThread.killでキャンセルはできるじゃん。
…と思ってやってみたけど、Thread.killが"not implemented"だよ。
let loop_thread () =
at_exit (fun () -> printf "exit thrread...\n"; flush stdout);
let rec loop () =
Thread.delay 0.1;
loop ()
in
loop ()
let _ =
let a = Thread.create loop_thread () in
Thread.delay 3.0;
Thread.kill a;
Thread.delay 3.0
頑張れ、ocaml。
0906デフォルトの名無しさん
2005/10/27(木) 22:37:41とっちゃいば?
0907デフォルトの名無しさん
2005/10/27(木) 23:19:150908デフォルトの名無しさん
2005/10/28(金) 00:36:25お飾りCaml 3.09.0 リリース、乙。
0909デフォルトの名無しさん
2005/10/28(金) 12:34:280910デフォルトの名無しさん
2005/10/28(金) 13:19:01使えないということは決してない。
Java とかから流れてきた人みたいに何でもクラスで書こうとすると、はまる。
0911デフォルトの名無しさん
2005/10/30(日) 22:59:48殆ど使ったことないOcamlで書いてみました。
仕様は
http://xbb.jp/uchichi/siyou.txt
です。
作ったのは
http://xbb.jp/uchichi/test.ml
です。
テストデータを作成するプログラムは
http://xbb.jp/uchichi/make_test.cpp
です。
たしかOCamlってかなり早いってどこかのサイトで書いてあったと
思うのですが、僕が作ったやつだと非常に遅いです。。。。。
どうやったら、早くなのでしょうか?
ついでに、書き方が変な所とかあったら教えて欲しいです。
沢山あり過ぎると思いますが。。。
0912デフォルトの名無しさん
2005/10/31(月) 03:10:50あんまりちゃんと見てないけど。
毎回input_lineし、それをsplitして連想配列で持っておくアルゴリズムなの
で、メモリ消費が激しいように思う。GCしまくりなのかも。
それから、たぶんこれが主原因だと思うが、比較のたびにdateとtimeをアクセ
スしに行っているのは非常に効率が悪い。
なので、行を読み出したときに、 date とか time の値を取り出して date 型
を作っておき、alistを(date型, 元の行)というタプルのリストとしておく、
とかでだいぶ速くなると思う。
あと、 while と破壊的代入を使いまくりなのはあんまり関数的でないですね。
# その方が速かったりするのだが
0913デフォルトの名無しさん
2005/10/31(月) 13:58:37同意。
加えて、正規表現をループの度に作ってるのはイタい。これはループの外に外すべし。
let re_eq = Str.regexp "="
let re_amp = Str.regexp "&"
その他にも細かくは色々あるんだろうが、クリティカルじゃなさそうだし。
0914911
2005/10/31(月) 22:24:09ご指摘有難う御座います。
タプルのリストにしたら、ちょっと早くなりました。
最初の奴が49秒で、タプルのリストにしたら、45秒になりました。
>913
ご指摘有難う御座います。
正規表現の部分をループの外に出したら、結構早くなりました。
最初の奴が49秒で、912さんに指摘していただいた修正と正規表現の部分を
外に出した奴は29秒でした。
ちなみにC#(こっちもほぼ初心者)で書いた奴だと24秒なので(Cでは10秒)、
まだ早くなると思うのですが、他にお気付きの点がありましたら
教えていただけると嬉しいです。
0915デフォルトの名無しさん
2005/10/31(月) 22:46:170916デフォルトの名無しさん
2005/10/31(月) 23:00:43残るボトルネックはここだろうか。
改善案より前に一般的なOCamlのコーディングとして、
1. let _ はプログラムの main 部分以外では使われない傾向が強い。begin 〜 end を使う方がいいだろう
2. urldecodestring は、通常は urldecode 内で宣言して外からは参照できないようにする方が一般的だし安全
3. 破壊的代入が無駄に多いので、コンパイラの最適化が効いていないのでは。たとえばこの関数だと c とか
というところかな。
それから、いくら速いといってもCコンパイラよりは遅いよ。C#との差は知らない。
細かく知りたければ ocamlprof というプロファイラもあるから使ってみると良いかも。私は使ったことがないので細かいことはよく知りませんが。
あーとそれからもしやと思うけどバイトコードじゃないよね?
0917デフォルトの名無しさん
2005/10/31(月) 23:20:54(元版) ./a.out 6.51s user 0.26s system 97% cpu 6.915 total
(改善版) ./a.out 0.48s user 0.00s system 96% cpu 0.493 total
で10倍以上速くなった。何が効いているかはわからないが sprintf/sscanfか、Bufferの効率が良いかどちらか。
私ならこう書く、ということで書き方も含めて参考になれば幸い(でもこの書き方がベストかどうかはわからない)。
let hex = function
| '0' .. '9' as c -> Char.code c - (Char.code '0')
| 'a' .. 'f' as c -> Char.code c - (Char.code 'a') + 9
| 'A' .. 'F' as c -> Char.code c - (Char.code 'A') + 9
| _ -> failwith "hex"
let urldecode' str =
let buf = Buffer.create (String.length str) in
let rec loop n = match str.[n] with
| '+' ->
Buffer.add_char buf ' ';
loop (n+1)
| '%' ->
let c1, c2 = str.[n+1], str.[n+2] in
Buffer.add_char buf (Char.chr (hex c1 * 16 + hex c2));
loop (n+3)
| c ->
Buffer.add_char buf c;
loop (n+1)
in
try loop 0 with _ -> Buffer.contents buf
0918デフォルトの名無しさん
2005/11/01(火) 12:35:07え?タプルのリストにすれば、もっと早くなる気が。
私の環境だと元44秒が35秒まで落ちたよ。
let make_attribute ((date, time), l) attr =
let hd :: tl :: [] = Str.split (Str.regexp "=") attr in
match hd with
"date" -> ((tl, time), l)
| "time" -> ((date, tl), l)
| _ -> ((date, time), (hd, tl) :: l)
let rec get_value list name =
match list with
[] -> ""
| (key, value) :: xs ->
if (compare key name) = 0 then
value
else
get_value xs name;;
let sort_time ((_, time1), _) ((_, time2), _) =
let temp = compare time1 time2 in
if (temp = 0) then
1
else
temp;;
0919デフォルトの名無しさん
2005/11/01(火) 12:35:41let _ = output_string csv (date ^ "," ^ time) in
let _ = for i = 1 to 28 do
output_string csv ",";
output_string csv (get_value list (Printf.sprintf "flag%03d" i))
done in
output_string csv "\n"
let flush_today_data today_list csv =
let sorted_list = List.sort sort_time today_list in
List.iter (print_csv csv) sorted_list
let read_day_file today csv =
let today_list = ref [] in
try
let buf = ref "" in
let decode = ref "" in
while true do
let _ = buf := input_line today in
let _ = decode := urldecode !buf in
let slist = Str.split (Str.regexp "&") !decode in
let alist = List.fold_left make_attribute (("", ""), []) slist in
today_list := alist::(!today_list);
done;
flush csv;
with End_of_file -> (flush_today_data !today_list csv);;
0920デフォルトの名無しさん
2005/11/01(火) 14:40:080921911
2005/11/01(火) 19:36:00一応、
ocamlopt -verbose -o t01.exe unix.cmxa str.cmxa test1.ml
のようにしてから、t01.exeを実行しています。
> 916
ご指摘有難う御座います。
おっしゃる通り、urldecodeはCからそのまま移植しました。
やはり、酷いコードですか。。。実を言うと、Ocamlっぽく?
したかったのですが、記述方法が分からなかったのです。
また、ご指摘頂いたOcamlコーディングについても有難う御座います。
実際、上記のスクリプトを記述したときも、コンパイルを通すのがやっと
でしたので、指摘頂いた事項を参考にして書き直してみようと思います。
> 917
大変参考になりました!
有難う御座います。
上述しましたが、urldecodeは上手く書けなかったのでとても参考になりました。
> 918
サンプルソース有難う御座います。
昨日の44秒ってのは、教えて頂いたタプルのリストを自分なりに実装して
実行したものだったのですが、記述して頂いたコードに置き換えて実行した
ところ、オリジナルが49秒に対して39秒になりました。
昨日書いたコードは、ソート時にキーとなる値とalistのタプルのリスト
にしたので、本質的には記述して頂いたコードと同じだと思うのですが、
書き方が悪くて遅かったみたいです。。。。
0922911
2005/11/01(火) 19:41:29csvファイルに出力する部分だけを、ソートや出力しやすいように
リストで管理するように書き換えたところ、かなり早くなりました。
read_day_fileを以下のようにしたら、16秒になりました。
(* 日付ファイルを読み込む *)
let read_day_file today_file csv =
let today_list = ref [] in
let rec get_today_list today_file =
let buf = input_line today_file in
let decode = urldecode buf in
let slist = Str.split re_amp decode in (* データを属性毎に別ける. string list *)
let alist = List.map make_attribute slist in (* 各属性のname=valueを[name;value]に. string list list *)
let klist = List.filter fliter_key alist in (* 必要なもののみ抜き出す. string list list *)
let sortlist = List.sort sort_key klist in (* アクセスしやすいようにソートする. string list list *)
let vlist = List.map get_only_value sortlist in (* 値だけのリストにする。string list *)
today_list := vlist::(!today_list);
(get_today_list today_file) in
try
get_today_list today_file
with End_of_file -> (flush_today_data !today_list csv);;
一応、C#(24秒)よりも早くする事が出来たので、満足してます。
後は、Ocamlというか関数型言語に慣れる事が必要ですね。。。。
いろいろ有難う御座いました!
0923デフォルトの名無しさん
2005/11/02(水) 15:40:060924デフォルトの名無しさん
2005/11/03(木) 01:33:21除いてまえという話もあるが、便利といえば便利だしなぁ。
0925デフォルトの名無しさん
2005/11/03(木) 22:37:53Gerd Stolpmann 氏が示したコードを実行したら、確かに kill っぽい事はできた。
ただし、複数のスレッドを落とそうとすると苦しい。
やっぱり"soft-kill"というのが現実的な解じゃなかろうか。
0926デフォルトの名無しさん
2005/11/03(木) 22:38:38924の間違い。
0927デフォルトの名無しさん
2005/11/06(日) 17:14:09Ocamlは昔IBMのプログラミングコンテストで優勝して
その生産性の高さを証明したと聞いています。
Ocamlの生産性の高さを説明するときに欠かせないエピソードなのですが
肝心のソースがインターネット上でも探しても見つかりません。
どなたかご存知の方は教えてもらえませんか?
0928デフォルトの名無しさん
2005/11/07(月) 09:42:21IBM? ICFP じゃなくて?
ttp://slashdot.jp/developers/02/10/12/2121209.shtml
0929デフォルトの名無しさん
2005/11/07(月) 16:01:22ありがとうございます。
多分それであってます。
Ocamlはあんま詳しくないのですが
http://web.yl.is.s.u-tokyo.ac.jp/~oyama/publications/OyamaSPA98.html
>Schematicでは、逐次実行時間は最大でCの3倍強長いが、
>50プロセッサ上の実験環境で容易に24倍および14倍の台数効果が得られた。
これを見てもしかして関数型言語が本格的にやばいな
と思いはじめたもんなんで
0930デフォルトの名無しさん
2005/11/07(月) 19:41:25日本語おかしいんちゃう?と思ってしまうオレはもうオヤジだろうか。
0931デフォルトの名無しさん
2005/11/07(月) 19:45:43「もしかして」の結びがないってこと?
それとも「やばいな」のこと?
前者なら俺もそう思う。
後者ならオヤジかも知れない。
0932デフォルトの名無しさん
2005/11/07(月) 20:03:180933sage
2005/11/07(月) 20:32:05OCamlのソースで
let a = 10 let b = 20
というように、let を and,やinや ;; で
区切らずに並べて書いてあるものを見ましたが、マニュアルを見たり検索を
してもそのような文法を解説してあるところが見付からなくて、気になって
夜も眠れません。
どなたか解説or解説の紹介お願いします。
0934930
2005/11/07(月) 21:06:06そうそう、それそれ。
>>931 の言う前者も思ったけど、特に気になったのはこっちだった。
……オヤジなんだな orz
いや、意味がつかめないわけじゃないんだけど、
どうしても一瞬考えちゃうんだよな。
0935デフォルトの名無しさん
2005/11/07(月) 21:13:08>933
OCamlでは文(?)を開始するためのキーワードはあるけど、終わりは明示的に指定しなくてもよいことになっている。;;は入れても入れなくてもいい。
だからその例だと、2つめの let が出現した時点でコンパイラは let a = 10 が一塊であることがわかるわけ。するとのこりの let b = 20 も取り出すことができて、めでたく a に 10、bに20を束縛できる。
確かにそういう文法の解説ってあまりないかも。
0936デフォルトの名無しさん
2005/11/07(月) 21:35:21ありがとうございます。謎が解けました。
勉強に励みます。
0937デフォルトの名無しさん
2005/11/07(月) 23:09:330938デフォルトの名無しさん
2005/11/08(火) 00:57:00と言われた。クレームかと思って身構えて対応してたら、実は誉められていた。
という経験がある。
0939デフォルトの名無しさん
2005/11/08(火) 01:14:300940デフォルトの名無しさん
2005/11/08(火) 07:09:00宇宙ヤバイ。
まず広い。もう広いなんてもんじゃない。超広い。
広いとかっても
「東京ドーム20個ぶんくらい?」
とか、もう、そういうレベルじゃない。
何しろ無限。スゲェ!なんか単位とか無いの。何坪とか何ヘクタールとかを超越してる。無限だし超広い。
しかも膨張してるらしい。ヤバイよ、膨張だよ。
だって普通は地球とか膨張しないじゃん。だって自分の部屋の廊下がだんだん伸びてったら困るじゃん。トイレとか超遠いとか困るっしょ。
通学路が伸びて、一年のときは徒歩10分だったのに、三年のときは自転車で二時間とか泣くっしょ。
だから地球とか膨張しない。話のわかるヤツだ。
けど宇宙はヤバイ。そんなの気にしない。膨張しまくり。最も遠くから到達する光とか観測してもよくわかんないくらい遠い。ヤバすぎ。
無限っていたけど、もしかしたら有限かもしんない。でも有限って事にすると
「じゃあ、宇宙の端の外側ってナニよ?」
って事になるし、それは誰もわからない。ヤバイ。誰にも分からないなんて凄すぎる。
あと超寒い。約1ケルビン。摂氏で言うと−272℃。ヤバイ。寒すぎ。バナナで釘打つ暇もなく死ぬ。怖い。
それに超何も無い。超ガラガラ。それに超のんびり。億年とか平気で出てくる。億年て。小学生でも言わねぇよ、最近。
なんつっても宇宙は馬力が凄い。無限とか平気だし。
うちらなんて無限とかたかだか積分計算で出てきただけで上手く扱えないから有限にしたり、fと置いてみたり、演算子使ったりするのに、
宇宙は全然平気。無限を無限のまま扱ってる。凄い。ヤバイ。
とにかく貴様ら、宇宙のヤバさをもっと知るべきだと思います。
そんなヤバイ宇宙に出て行ったハッブルとか超偉い。もっとがんばれ。超がんばれ。
0941デフォルトの名無しさん
2005/11/08(火) 16:33:05感情の動きの量と言葉の強さを一致させることのみ重視されていて、
動きのベクトルと意味との一致については割と大胆に軽んじるからな。
0942すれ違いだが
2005/11/08(火) 16:48:32国語学的には別に珍しいことではない。
0943デフォルトの名無しさん
2005/11/08(火) 19:10:54# type hoge = A of int | B of string;;
type hoge = A of int | B of string
# let a = A 10 and b = B "foo";;
val a : hoge = A 10
val b : hoge = B "foo"
# a < b;;
- : bool = true
# a > b;;
- : bool = false
# a = b;;
- : bool = false
というように、比較演算で trueやfalseが返ってきます。
同じ型だから比較演算の適用ができるのでしょうが、
その結果は定義されているのでしょうか?
0944943
2005/11/08(火) 19:14:13誤:その結果は定義されているのでしょうか?
正: その結果はどのように定義されているのでしょうか?
0945デフォルトの名無しさん
2005/11/08(火) 21:40:00安心しろ。リアル工房の俺も>>929の「やばい」という表現はおかしいと思ってる。
0946デフォルトの名無しさん
2005/11/08(火) 21:49:480947デフォルトの名無しさん
2005/11/08(火) 22:09:33こういうくだらないネタ(失礼)は好きなので、ソース見てみた。
たぶん、byterun/compare.c の compare_val 関数辺りだと思うが、
実質 int 同士、string 同士、float 同士、同じコンストラクタの値同士
くらいしか意味のある結果は返ってこないように見えるね。
0948デフォルトの名無しさん
2005/11/08(火) 22:12:050949デフォルトの名無しさん
2005/11/08(火) 22:38:40を比較する。
構成子の比較は型宣言の時の順序による。
ゆえに、
# type hoge = B of string | A of int;;
なら、
# let a = A 10 and b = B "foo";;
val a : hoge = A 10
val b : hoge = B "foo"
# a < b;;
- : bool = false
# a > b;;
- : bool = true
# a = b;;
- : bool = false
となる。
こういうのってマニュアルのどこに書いてあるのかなあ。
0950デフォルトの名無しさん
2005/11/08(火) 23:13:18と思ってマニュアル探してみたけど見付からないな。
少なくとも Object に関しては
> The relation < defines an unspecified but strict ordering on objets.
と書いてあったんだけど。
0951デフォルトの名無しさん
2005/11/09(水) 16:58:34多分アーキテクチャ依存の部分はありますけど。variant に関する大小は
決まってます。
コンストラクタは 949 がポイントを押さえていますが、厳密には
引数の無いコンストラクタに関しては当てはまりません。
type t = A of int | B
ここでは、A 1 は block、B は integer になります。この時、
# A 1 < B;;
- : bool = false
# A 1 > B;;
- : bool = true
です。
0952デフォルトの名無しさん
2005/11/09(水) 17:00:54引数のある(ない)コンストラクタ間の大小関係は、引数のある(ない)
コンストラクタ間の定義順序で決まります。
O'Caml の大小は型に依存せず、値の内部表現のみを使って計算します。
上の例のように、int < block で、block 間の比較はまず tag を比較。
tag が同じ場合は内部を比較します。(ちなみにレコードは tag 0 の block です。)
より詳しくは byterun/compare.c を見てください。極端な話、型は関係ないので、
# (Obj.repr (A 1)) = (Obj.repr (Some true));;
- : bool = true
ってことも出来ます。
まあ、集合をリストとして表して、ソートすることで正規化するとか言う以外、
あんまりコンストラクタ間の大小を仮定するようなプログラムは書かない方が
いいけどね。
大昔の Caml はたしか、コンストラクタの大小、つまり付加される tag の値は
コンストラクタ名の alphabetical order で決まっていた記憶しています。
0953デフォルトの名無しさん
2005/11/10(木) 21:11:17最近はそうでもないと思いまつ。
OCamIL
http://www.pps.jussieu.fr/~montela/ocamil/
F#
http://research.microsoft.com/projects/ilx/fsharp.aspx
0954デフォルトの名無しさん
2005/11/13(日) 18:35:23分解を用いた命題論理の範囲(論理結合子の推論規則のみ)での
定理証明のソースってどこかにありませんか?
作り方がさっぱりわからないので、参考にさせてもらえるといいのですが・・・。
0955デフォルトの名無しさん
2005/11/15(火) 15:36:13詳しくないけど, ML for the working Programmerの10章に
述語論理の定理証明のソースがあるから,それ参考にしたら?
0956デフォルトの名無しさん
2005/11/15(火) 22:55:55わかりました。
難しそうですが、参考にしてみます。
ありがとうございます。
0957デフォルトの名無しさん
2005/11/15(火) 23:40:290958
2005/11/18(金) 09:25:20enum { MONDAY = 1, TUESDAY = 5, ... }
みたいに列挙に値をもたせられるよね
Ocamlでも
type day = MONDAY | TUESDAY ...
でやれば MONDAY < TUESDAY は真だけど値は直接指定できないし・・
次のような値の列挙を実現する方法はないですか?
1〜9はA1〜A9という名前で定義し、
11〜19はB1〜B9という名前で定義(以下同様)
0959デフォルトの名無しさん
2005/11/18(金) 09:54:34(少なくとも C の enum みたいな単なる通し番号ならいらんと思う)
あえてやるなら
type hoge = A1 | A2 ...
を作って、それをキーにした Hashtbl とか?
0960デフォルトの名無しさん
2005/11/18(金) 09:54:41let A1 = 1 and A2 = 2 ...
let B1 = 11 and B2 = 12 ...
0961デフォルトの名無しさん
2005/11/18(金) 13:00:22type t1 = A1 | A2 | A3
type t2 = B1 | B2 | B3
type t = A of t1 | B of t2
これらに順序を定義したいなら、compare を実装すればいいのでは?
let rec make_big_assoc l =
match l with
[] -> []
| hd :: tl -> (hd, tl) :: make_big_assoc tl
let bigs = make_big_assoc [A A1; A A2; A A3; B B1; B B2; B B3]
let compare a b =
if a = b then 0
else if List.mem b (List.assoc a bigs) then -1
else 1
let _ =
print_int (compare (B B1) (A A2))
;;
全順序じゃなく、もっと手が込んだ順序を定義したいなら、
compare を工夫すればいい。
そもそもバリアント型とC言語で言う列挙を結びつけない方が幸せかもー。
バリアント型はバリアント型なので。
0962デフォルトの名無しさん
2005/11/18(金) 13:11:31説明するときには楽ですけどね。オレは「今どのメンバの値を持ってるかがタグで識別できる共用体」と説明してるけど。
それでもたとえば、曜日や月名なんかを数値にしたい場合もあると思うが、それには 959 のように Hashtbl を作るか、
let int_of_wday = function
| MON -> 1
| TUE -> 2
:
という関数を作るか、というのが一般的だと思う。
ってか Calendar モジュールがまさにこれをやってる。
0963958
2005/11/19(土) 10:16:11えらく勉強になりました。有難うございます
caml 使って間もないんですが物を考えるときに
Cの頭使い?みたいなものが未だに抜けない
もっと抽象的に大枠を掴めるようになりたいっすわ
つーわけで、素直に let A1 = 1 and A2 = 2 and ...
ということにしますた
バリアント型はバリアント型か・・・
0964デフォルトの名無しさん
2005/11/19(土) 14:26:17> リンク集 http://www.summa.jp/lang/func/ml/
は移転したそうです。
http://lang.x0.com/func/ml/
そろそろ新スレも近いので報告。
0965デフォルトの名無しさん
2005/11/20(日) 11:33:42Scheme:
(define hoge (map (lambda (x y) (+ x y)) '(1 2 3) '(2 3 4)))
=>
'(3 5 7)
OCamlのイメージ:
let hoge = List.map (fun x y -> x + y) [1; 2; 3] [2; 3; 4];;
=> エラー
0966デフォルトの名無しさん
2005/11/20(日) 11:41:340967デフォルトの名無しさん
2005/11/24(木) 07:45:18科学技術系のプログラム、FORTRANとかCとかみたいなやつで、
MLみたいな型推論してくれる言語ないですか?
0968デフォルトの名無しさん
2005/11/24(木) 08:36:55これって書くの激しくめんどくない?
これで外部アクセスを防ぐぐらいなら Private Method
使った方がいいように思ったんだけど
0969デフォルトの名無しさん
2005/11/24(木) 14:47:16まぁ、単純にモジュール内部へのアクセス制限なら private でもいい気がす
るのには同意。
ただ、signature には型の抽象化という機能もあるし。signature と functor
の合わせ技で抽象的なモジュールの輸入という技法も使えるし。
なきゃないで困る訳よ。
0970デフォルトの名無しさん
2005/11/24(木) 18:16:36for i = 0 to 3 do
let s = "bbbb" in
s.[i] <- 'a';
Printf.printf "string s is now %s\n" s;
done
さて結果は?
0971デフォルトの名無しさん
2005/11/24(木) 21:09:13FORTRANとかCみたいなのって何だよ。
HASKELLに比べれば十分Cみたいだよ。
アセンブラみたいなCは使わないだろwwwww
0972デフォルトの名無しさん
2005/11/24(木) 22:32:48最初は、let s で毎回 "bbbb" が束縛されなおすのかなぁと
思いきや引き継ぐんですね・・・
なんで?
0973デフォルトの名無しさん
2005/11/24(木) 22:35:400974デフォルトの名無しさん
2005/11/24(木) 23:10:260975デフォルトの名無しさん
2005/11/24(木) 23:15:050976デフォルトの名無しさん
2005/11/25(金) 15:31:42val tmp = "result = " : string
とします。
これらをつないで
result = ["A", "B", "C"]
と表示したいのです。
tmp ^ res は型違いのため連結できません。
> print res; というコマンドは、有効なのに。
1。 ["A", "B", "C"] の「文字列表現」を取得する方法はどうするのですか?
また、文字列を表示すると、"result = ..."と引用符がついてしまいます。
2。文字列を表示するときに引用符を書かないようにする方法はありますか?
よろしくおねがいします。
0977デフォルトの名無しさん
2005/11/25(金) 16:30:330978デフォルトの名無しさん
2005/11/25(金) 18:11:04によって正しく表示できる処理系って何?
0979デフォルトの名無しさん
2005/11/25(金) 22:22:53G'Caml.
0980デフォルトの名無しさん
2005/11/25(金) 22:26:18for はここでは関係ないよん。
string constant の問題。
0981デフォルトの名無しさん
2005/11/25(金) 23:24:12976 のコードはどう見ても SML だと思うんだが。
0982デフォルトの名無しさん
2005/11/25(金) 23:29:38つまり、let束縛は4回起こるが、文字列"bbbb"の初期化(生成)は
1回しか起こらない、ってことかな。
0983デフォルトの名無しさん
2005/11/25(金) 23:35:22もしかしてOcamlってヤパイ?
0984デフォルトの名無しさん
2005/11/25(金) 23:41:00な処理系ハッケソ。
http://wwwcgi.reading.ac.uk:8081/cgi-bin/cgiwrap/wsi14/poplog_form?system=ml&Type=help&name=print
poplog ってのに含まれてる pml とか言うの。
0985デフォルトの名無しさん
2005/11/25(金) 23:43:17最初っから破壊的操作なんかしなきゃ良いのさ。
って言うか、なんで OCaml の string は mutable なのかと小一時間(ry
0986デフォルトの名無しさん
2005/11/26(土) 00:40:240987デフォルトの名無しさん
2005/11/26(土) 01:38:190988デフォルトの名無しさん
2005/11/26(土) 01:41:12でもimmutableかどうか、なんて型推論に組み込めると思うけど。^^;
0989デフォルトの名無しさん
2005/11/26(土) 01:43:060990↑
2005/11/26(土) 01:46:310991デフォルトの名無しさん
2005/11/26(土) 03:27:01SML, O'Caml の違いでガタガタいわんといて。まあ、おおらかに。
なんか本題の質問からどんどん離れていくけど、
$ gcaml
G'Caml version 3.09.0
# Gprint.eprint ["A"; "B"; "C"];;
[ "A"; "B"; "C" ]
- : unit = ()
まー、G'Caml は型定義情報を持ってるからプリントできて当り前なんだけど。
0992デフォルトの名無しさん
2005/11/26(土) 17:01:12再帰をうまく使うんでしょうけど、
最大の高さを再帰の中でどうやって保存しておくかと、すべてのノードを調べるというのがうまくできなくて・・・。
誰かよろしくお願いします。
0993デフォルトの名無しさん
2005/11/26(土) 19:25:41自分でやろう
タンジェント
0994デフォルトの名無しさん
2005/11/26(土) 19:38:29俺が直感でわかった程度の問題だぞ
自分でやれ
0995デフォルトの名無しさん
2005/11/26(土) 20:10:01関数型言語ML(SML, OCaml, etc.), Part 4
http://pc8.2ch.net/test/read.cgi/tech/1133003340/
0996デフォルトの名無しさん
2005/11/26(土) 21:06:010997デフォルトの名無しさん
2005/11/26(土) 21:06:210998デフォルトの名無しさん
2005/11/26(土) 21:06:420999デフォルトの名無しさん
2005/11/26(土) 21:24:051000デフォルトの名無しさん
2005/11/26(土) 21:26:44俺は違いの解かる漢
_、_
( ,_ノ` )y━・~~~
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。