1 :
デフォルトの名無しさん :
03/06/02 12:10 とりあえずスレ立てとくよ。
2 :
デフォルトの名無しさん :03/06/02 12:24
COBOL?
3 :
デフォルトの名無しさん :03/06/02 12:30
let rec loop n = if n <= 0 then () else begin print_endline (string_of_int n); loop (n-1) end type mydata = A | B of int * mydata let rec mydataPrint d = match d with A -> print_endline "the end!" | B (n,d) -> print_endline (string_of_int n); mydataPrint d let rec mydataMap f d = match d with A -> A | B (n,d) -> B (f n,mydataMap f d)
日本語の情報ある?
ダウンロード先や簡単な参考リンクくらい書こうよ(´д`;)
C#だのF#だのはぐぐると音楽関係のURLがヒットして、禿げしくうざいんですけど。
8 :
デフォルトの名無しさん :03/06/02 19:10
A#, C#(XC#), F#, J#, P#, S#, X#
10 :
デフォルトの名無しさん :03/06/02 23:15
>>3 mydataMapのうまい使い方がよく分からん。
# let data = B(1, B(2, B(3, B(4, B(5, A)))));;
# mydataPrint data;;
# let f x =
let ret = x * x in
print_endline(string_of_int ret);
ret;;
# mydataMap f data;;
普通のOCamlスレになってるぞ。
しかし簡潔に書けてしまうものだな。
ユーザーの絶対数少ないし、別にいいと思うぜ!
DX9にF#なんてどうでしょう?
16 :
デフォルトの名無しさん :03/06/03 00:27
>>3 関数に括弧をつかわないところがどうも慣れない
F#を使うこと自体がメリットなんで、これ以上は望みません
20 :
デフォルトの名無しさん :03/06/03 03:23
C#って死滅しちゃうの?
22 :
デフォルトの名無しさん :03/06/03 03:37
F#の対応するプラットフォームは? Windows依存?
.NET Framework依存
つまり、Unixでまともに動く保障がないといわけだ。
保障も何も動かせるものなら動かしてみろ、ってレベルだが
Windows専用とは、Unix環境で使えるようにするには 規格が統一されずメンテナンス性が悪化するわけだ。
27 :
デフォルトの名無しさん :03/06/04 12:12
次のバージョンでコンパイラのソースが公開されるはず。 少なくともSSCLIの動くプラットフォームはサポートされるんじゃない?
28 :
デフォルトの名無しさん :03/06/06 22:43
29 :
デフォルトの名無しさん :03/06/07 00:12
Linux入れようと思います
30 :
デフォルトの名無しさん :03/06/07 16:12
とりあえず lib の 〜.ml と 〜.mli を読むべし。
31 :
デフォルトの名無しさん :03/06/07 21:58
AbsILはどうよ?
32 :
デフォルトの名無しさん :03/06/07 22:16
F#がないとできないことってあるの?
33 :
デフォルトの名無しさん :03/06/07 22:21
F#によるプログラミング
>>32 C#とか使うより良いかもしれない。
副作用を極力嫌うスタイルは保守が自然とやりやすくなる。
あと、副作用の依存関係を型と同じ様にコンパイラが把握してるので、
最適化にかなり影響する。
誰か導入記事かいてよ
1. zipを解答 2. インストールバッチを実行 3. 環境変数 FSHARPLIB を lib にセットする 4. パスを bin に通しておく 以上
let _ = print_endline "Hello World!!"
open System let _ = Console.WriteLine "Hello World!!"
39 :
デフォルトの名無しさん :03/06/08 17:05
F#以前にOCamlの入門書/サイトキボン
とりあえず現状ではAbsILが最良のF#の教材のようだ。
入門書より、サンプルが大量にあればなんとかなる
43 :
デフォルトの名無しさん :03/06/08 21:09
F#知る前からOCaml知ってた人ってどれだけいる?
MLは知ってたけどOCamlは知らんかった
listもarrayも.NET FCLのものとは互換性がないんだね・・・。 .NETのクラスを使ってると旨みが出ないよ。(´・ω・`)
AbsILを使った、アセンブリ内の型を列挙するサンプル open Il let rec print_types tdefl = match tdefl with [] -> () | tdef::rest -> print_endline (tdef.tdName); print_types rest let _ = let modul = Ilread.read_binary "Hoge.exe" None in let tdefs = modul.modulTypeDefs in print_types (dest_tdefs tdefs)
>>34 >>47 見ると、全然副作用嫌ってるスタイルに見えないんだけど。
いやそれが悪いということじゃないけどね。
>>47 のC#ベタ移植
class EnumTypes {
static void print_types(FS.list tdefl) {
if (tdefl == FS.list.Nil()) {
return;
}
else {
Il.type_def tdef = (Il.type_def) tdefl.get_Cons0();
Pervasives.print_endline(tdef.tdName);
print_types(tdefl.get_Cons1());
}
}
static void Main() {
Il.modul modul = Ilread.read_binary("Hoge.exe", FS.option.None());
Il.types tdefs = modul.modulTypeDefs;
print_types(Il.dest_tdefs(tdefs));
}
}
>>48 一度 let で割り当てた値は変更不可能というのがポイント。
C#で例えると、ローカル変数もすべて readonly になるといった感じ。
C#版は変数書き換え放題だもんなあ。
53 :
デフォルトの名無しさん :03/06/10 20:27
0.6.4が出たよ
AbsILも0.64になってる。
55 :
デフォルトの名無しさん :03/06/10 23:30
X#とかC#とか、vb.netとかVC++とか、 MSの言語って覚えることが多すぎて面倒だなあ。
> MSの言語 へー(´・ω・`)
57 :
デフォルトの名無しさん :03/06/12 20:44
.NET APIを使った、F#らしいサンプルきぼん
F#ってさ、MSのプロジェクトとはいっても、ベースがフランスのOCamlだから、 普及はきついかもね。 少なくともアメリカでは。
59 :
デフォルトの名無しさん :03/06/14 00:03
61 :
デフォルトの名無しさん :03/06/14 00:36
OCaml使わずにF#わざわざ使うメリットある?
63 :
デフォルトの名無しさん :03/06/14 09:45
気がつけば 0.6.4.1
>>47 をもっとOCamlらしく簡潔に。
open Il
let print_type tdef =
print_endline tdef.tdName
let _ =
let modul = Ilread.read_binary "Hoge.exe" None in
List.iter print_type (dest_tdefs modul.modulTypeDefs)
open Il let _ = List.iter (fun tdef -> print_endline tdef.tdName) (dest_tdefs (Ilread.read_binary "Test.exe" None).modulTypeDefs)
67 :
デフォルトの名無しさん :03/06/14 22:54
F#なんてあんの?
MSでも関数型言語のエキスパートが大活躍だな。
70 :
デフォルトの名無しさん :03/06/15 01:28
Windowsを関数型言語で書き直せば、 実行時エラーとか一般保護エラーも無くなりますか?
>>70 ドライバを開発できる人間ががくっと減ります。
OCamlがここまで話題になるなんて。 やっぱりMSの影響力は大きいんだな。
MSの研究所にはHaskellの有名人も居たような気がするが
MSのプロジェクトでオープンソースというのも珍しいような。
76 :
デフォルトの名無しさん :03/06/15 20:55
--generic でコンパイルして gyro と一緒に遊ぶのが通。
ちなみに 〜g.dll (ex. fslibg.dll) はすべてgenerics対応版。
System.FuncをC#系の言語で多用されたら困ったことになるな。 public delegate T1 Func<T0, T1>(T0 arg0); で、しかもsealedじゃないから何でもありだし。 型推論に柔軟に対応するためというのはよく分かるんだけど・・・。
>>79 ILX2ILの苦肉の策。
ILXがネイティブ対応されるまでの我慢か。
>>76 --genericありとなしでは全然出力されるコードが違いますね。
ってか、--genericなしだとF#の価値が半減のような。
いまさらながらF#よりOCAML.NETの方が通りが良かったのでは?
C#やF# この名前は失敗だと思う。
OCamlにはマクロってありますか? 今、common lispを勉強してますが、 MicrosoftのせいでOCamlにも興味がでてきました。
86 :
デフォルトの名無しさん :03/06/22 16:41
クラス定義できないの?(´・ω・`)
じゃ、OCAMLのOは何のOなの? おちんちんおいしいのOですか。
AssholeのOだよ、おぼえとけ
>>86 camlp4 (which stands for pre-processeor and pretty-printer)
F# では使えないけどなー
F#メーリングリスト(って書かないとMLと紛らわしい)が突然活発になったな。
96 :
デフォルトの名無しさん :03/06/25 21:32
.NETクラスを使う時に限って type.method(arg) ってのが激しく違和感なんだが。 普通に type#method arg って書けないもんかねえ。
97 :
デフォルトの名無しさん :03/06/27 19:51
落ちない言語MLがついにメジャーデビューか。
.NET版インタラクティブコンソールがホスィ
つーか普通にOCaml使えよ
100 :
デフォルトの名無しさん :03/06/29 21:40
>>97 MSが目をつけてる理由は関数型だからというよりは型推論なんでしょうな。
スクリプトのように書けて、実は型に厳しい。(パフォーマンスも有利。)
で、型推論の根拠をソース以外に外部のXSDに求めるのが
X#の正体ではないかと勝手に想像してみたり。
type tag_value = Empty | Value of string type tag = { name : string; value : tag_value } type node = Tag of tag | Node of node * node list let print_start_tag tag = print_string ("<" ^ tag.name ^ ">") let print_end_tag tag = print_string ("</" ^ tag.name ^ ">") let print_tag tag = match tag.value with Value v -> print_start_tag tag; print_string v; print_end_tag tag; print_newline () | _ -> print_endline ("<" ^ tag.name ^ "/>")
let rec print_node node = let rec get_tag nd = match nd with Tag t -> t | Node (n, l) -> get_tag n in match node with Node (n, l) -> let tag = get_tag n in print_start_tag tag; print_newline (); List.iter print_node l; print_end_tag tag; print_newline () | Tag t -> print_tag t let html = { name = "html"; value = Empty } let head = { name = "head"; value = Empty } let title = { name = "title"; value = Value "test HTML" } let body = { name = "body"; value = Empty } let p1 = { name = "p"; value = Value "Hello World!!" } let p2 = { name = "p"; value = Value "This is a pen." } let document = Node (Tag html, [Node (Tag head, [Tag title]); Node (Tag body, [Tag p1; Tag p2])]) let _ = print_node document
103 :
デフォルトの名無しさん :03/07/01 22:18
しかし、ソースに型名を出さないのは本当に生産性が高いのだろうか?
104 :
デフォルトの名無しさん :03/07/02 04:56
105 :
デフォルトの名無しさん :03/07/02 05:22
OCamlの場合,対話的な環境で変数名や関数名だけ入力すれば型が表示されし, ocamldocで出力したドキュメントにも型は表示されるから 型を知るためにソースを見直す必要はあまりないんじゃないかと.
>>105 おー、これは便利だね。> ocamldoc
107 :
デフォルトの名無しさん :03/07/03 08:26
OCamlよりもSMLの方がごちゃごちゃしてる。 自分で書いてみれば分かる。
108 :
デフォルトの名無しさん :03/07/03 09:44
>>107 >>104 はSMLとOcamlを比較しているのでわなく、
OcamlとHaskellを比較しているのだと思われ。
109 :
デフォルトの名無しさん :03/07/03 09:45
F#をいろいろ勉強してるうちにふと思った。 マネージド環境として、.NETよりOCamlの方がはるかに優れてないか?
ILXいいねえ。これ早くネイティブサポートしてくれないかな。 .assembly Test { } .assembly extern mscorlib { } .closure test() { .apply (int32) (int32) --> int32 { ldarg 2 ldarg 1 add ret } } .method public static void main() { .locals( int32 result, (func (int32) --> (func (int32) --> int32)) 'add', (func (int32) --> int32) increment ) .entrypoint // let add = fun x -> fun y -> x + y newclo class test stloc 'add'
// add 3 5 ldloc 'add' ldc.i4 3 ldc.i4 5 callfunc (int32) (int32) --> int32 stloc result ldstr "3 + 5 = " call void [mscorlib]System.Console::Write(string) ldloc result call void [mscorlib]System.Console::WriteLine(int32) // let increment = add 1 ldloc 'add' ldc.i4 1 callfunc (int32) --> (func (int32) --> int32) stloc increment // increment 5 ldloc increment ldc.i4 5 callfunc (int32) --> int32 stloc result ldstr "5++ = " call void [mscorlib]System.Console::Write(string) ldloc result call void [mscorlib]System.Console::WriteLine(int32) ret }
114 :
デフォルトの名無しさん :03/07/03 23:37
>>110-111 それは単に速度が速いというだけじゃん。
しかも、F#じゃなくて、素のOCamlだし。
まあ行数とか見ても少ない方だけどね。
一行にごちゃごちゃ詰め込んでるから行数が少ないのさ(w
moduleが使えないのは致命的すぎないか?> F#
カレー化をC#で表現するとすごいことになるな・・・。(;´Д`) using System; delegate RetType Function<RetType, ArgType>(ArgType arg); class AddFunction { private AddFunction() { } public static Function<Function<int, int>, int> Create() { return new Function<Function<int, int>, int>(n1) { return Create(n1); }; } private static Function<int, int> Create(int n1) { return new Function<int, int>(n2) { return Add(n1, n2); }; } private static int Add(int n1, int n2) { return n1 + n2; } }
class Test { static void Main() { Function<Function<int, int>, int> add = AddFunction.Create(); Console.WriteLine("3 + 5 = " + add(3)(5)); Function<int, int> increment = add(1); Console.WriteLine("5++ = " + increment(5)); } }
引数3つにするとこんな感じ? public static Function<Function<Function<int, int>, int>, int> Create() { return new Function<Function<Function<int, int>, int>, int>(n1) { return Create(n1); }; } private static Function<Function<int, int>, int> Create(int n1) { return new Function<Function<int, int>, int>(n2) { return Create(n1, n2); }; } private static Function<int, int> Create(int n1, int n2) { return new Function<int, int>(n3) { return Add(n1, n2, n3); }; } private static int Add(int n1, int n2, int n3) { return n1 + n2 + n3; }
匿名メソッドがないとめんどくさいな、こりゃ。
121 :
デフォルトの名無しさん :03/07/06 23:21
F#とC#2.0は相性良さそうですな。
122 :
デフォルトの名無しさん :03/07/12 09:35
let form = new Form() let _ = form.Controls.Add(new Button()) ってやろうとすると、型が合わないと怒られます。 どーすればいいんですか?
>>122 これは致命的だな。
let button : Control = new Button()
let _ = form.Controls.Add(button)
でも駄目だったのでお手上げ。
125 :
デフォルトの名無しさん :03/07/13 16:53
最近情報系の風俗ネットを見てないので友人から聞いた事だが、 何処の誰が風俗店に出入り禁止をくらったとか、そんな話題で盛り上がってる 人が居るらしい…。 プロでやっている風俗嬢でさえ政治家やタレント等と違い簡単に会えるゆえ個人 情報投稿は重大な人道マナー違反なのに、一個人であるお客の行動を詮索すると は愚か過ぎる行為ですよね。 なんだか友人が言うにはボクも某有名店で出入り禁止になってるという噂が飛 んでるらしいですが笑止な事です。今現在ボクは何処の店にもそういう事実は 無いからです。(かつて店に誤解を受け、予約禁止になりそうと知ったボクの友 人所属嬢が店への不信で退店を表明し、誤解が解けて店に平謝りして貰ったことは ある) 店と所属嬢とお客の間で解決する事にネットで関わるなんて馬鹿らしいです 。
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
--generic でコンパイルして gyro と一緒に遊ぶのが通。
(^^)
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
AssholeのOだよ、おぼえとけ
131 :
デフォルトの名無しさん :03/10/07 23:34
すんません AとBってフォーム作ったんですが AからBのフォームをモーダルで表示するにはどういうコードかけばいいですか? Windowsアプリお勉強中です。
132 :
デフォルトの名無しさん :03/10/07 23:49
133 :
デフォルトの名無しさん :03/11/01 04:50
C#の本はたくさん見かけるのに、F#の本は見たことがありません。 何かイイ参考書ないでつか?
134 :
デフォルトの名無しさん :03/11/01 10:38
F#ってなに??
すいません、よかったらどなたか、F#の位置付けみたいなんを 教えていただけませんか?
>>135 研究用。ILの関数型言語向け拡張を実装するための実験台。
ほむほむ、ありがとうございました。
関数型言語ML→(OOPL化)→OCaml→(M$が.NET用に改造)→F# でいいですよね?
139 :
デフォルトの名無しさん :03/11/24 04:31
進化図みたいなのを書くと「F# の完成度は O'Caml なみ」とか、 「これからは F# がメジャーになる」と勘違いしちゃう人が 出て来そうでまずい。俺的には .NET でも funcitonal できまっせえ という実証用言語だと受け取っているのだが。 そもそも Caml Special Light => O'Caml を OOPL化 と呼ぶのも 抵抗がある。
140 :
デフォルトの名無しさん :03/11/24 05:50
.net版 O'Caml ももうできてて bootstrap もしたとの事。
>>135 MSがSimon Peyton Jonesとかえらい人いっぱい雇っちゃったので、
彼等に仕事を与えるためにつくった。
×あらふ ○あらう
>>143 コマカイデツネ,チミハ...
しかし、スレ伸びんなぁ。
145 :
デフォルトの名無しさん :04/01/18 19:14
0.6.4.1からまだバージョンアップされてないの?
Whidbey C#にPolymorphic Typeも匿名delegateの型推論も実装されたし、 もう用済みなんでねーの?
X#プロジェクトもあぼーんされたし、MS内で何かが起きたな。
148 :
デフォルトの名無しさん :04/01/22 07:29
Erik Meijer氏が関与してるのか・・・。すげえ。
Whidbey CLRでF#使うと起動遅すぎ。駄目だこりゃ。
MSRはMS製造部隊とはなんの関係もないだろ
153 :
デフォルトの名無しさん :04/02/01 12:00
フォームを使ったGUIアプリでDOS窓が出ないようにするにはどうしたらいいの?
>>153 ILの .subsystem を0x0002に直接変更。
155 :
デフォルトの名無しさん :04/02/08 20:20
>>122 今頃になって分かった。これで動く。
open System.Windows.Forms
let form = new Form()
let _ = form.Controls.Add(cast (new Button()) : Control);
Application.Run(form)
>>155 うおぉ。そうだったのか。まじサンキュー
157 :
デフォルトの名無しさん :04/02/09 09:00
0.6.6.0リリースあげ
158 :
デフォルトの名無しさん :04/02/20 21:02
OCamlもどきの言語が流行なのか?
まあ、CLIを前提にした過去のしがらみのない関数型言語というのもいいかもね。
よ〜し、パパF#で一旗あげちゃうぞ〜 >Compile-time Requirements: You will need to have one of the following installed > on your system in order to use the F# compiler: >・The Microsoft .NET Framework SDK ・・・ >・VisualStudio.NET ・・・
162 :
デフォルトの名無しさん :04/04/26 11:43
おー。用語がマイナーチェンジしてたり、仕様がだいぶ煮詰まってきたのかな?
165 :
デフォルトの名無しさん :04/05/26 00:36
そろそろ来るかな? comp.lang.functional見た感じでは海外のOCamlユーザ 多そうだから日本もこれから盛り上がるかも。 今から勉強して時代を先取りしてみるか。
それならF#よりも本家OCamlやった方がいいと思うよ・・・
167 :
デフォルトの名無しさん :04/05/29 21:32
168 :
デフォルトの名無しさん :04/09/08 11:58
age
169 :
デフォルトの名無しさん :04/11/11 03:13:57
保守
170 :
デフォルトの名無しさん :04/12/20 22:32:25
F#できゃむるとするか
171 :
デフォルトの名無しさん :2005/04/14(木) 21:05:55
F#どっから落とせるんだよママン
これって、O'Camlと比べてどうなの? ライブラリは.NETのが使えるから問題ないと思うが、言語仕様としてはO'Camlを超えてるのか?
誰も使ってないからわかりません
175 :
名無しさん♯ :2005/08/25(木) 14:43:16 BE:33857142-###
176 :
名無しさん♯ :2005/08/25(木) 15:42:31 BE:152356649-###
fsi激しく(・∀・)イイ!(・∀・)イイ!(・∀・)イイ! ・・・けど、どうやって終了するんだろう。
177 :
名無しさん♯ :2005/08/25(木) 16:06:44 BE:342800699-###
IronPython、MSHに続いて第3の.NETの動的言語ということで。 この方面はかなり化けそうね。
178 :
デフォルトの名無しさん :2005/09/23(金) 21:35:05
F#が本格的にVisualStudioに装備されるのは いつだろう。 そしたらかなり普及しそうだ。
F# 1.1.3出ますた。( ゚д゚)ノ .NET 2.0 RC対応、fsiでようやくgenericsが使えるようになりますた。
>>178 VS IDE統合はいちおうされてますよ。IntelliSenseもおk。
だれかExpress EditionでF#試した? うちではインストールに失敗する。 英語版Win2000でも落ちる。
182 :
デフォルトの名無しさん :2006/01/08(日) 00:22:03
183 :
デフォルトの名無しさん :2006/01/08(日) 00:52:52
>>181 自分もインストールしようと思ったけどうまくいかないね。
でもどちらにしてもF#のIDE環境がかなりタコなので、自分
でmakefile書いたほうがいいと思うよ。
F#はExpressはサポートしてないよ。
F#のCodeDomProviderドコー?
186 :
デフォルトの名無しさん :
2006/05/03(水) 13:33:21 ほすほす