2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

   F#相談室   

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)

4 :デフォルトの名無しさん:03/06/02 13:05
日本語の情報ある?

5 :デフォルトの名無しさん:03/06/02 16:13
ダウンロード先や簡単な参考リンクくらい書こうよ(´д`;)

6 :デフォルトの名無しさん:03/06/02 16:21
C#だのF#だのはぐぐると音楽関係のURLがヒットして、禿げしくうざいんですけど。

7 :デフォルトの名無しさん:03/06/02 17:47
>>6
ここから検索しる
http://www.google.com/microsoft.html

8 :デフォルトの名無しさん:03/06/02 19:10
これって、MLだろ。こっちのスレのほうが良くないか?

関数型プログラミング言語ML
http://pc2.2ch.net/test/read.cgi/tech/1012445015/l50


9 :デフォルトの名無しさん:03/06/02 21:20
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;;

11 :デフォルトの名無しさん:03/06/02 23:22
普通のOCamlスレになってるぞ。

12 :デフォルトの名無しさん:03/06/03 00:02
しかし簡潔に書けてしまうものだな。

13 :デフォルトの名無しさん:03/06/03 00:03
ユーザーの絶対数少ないし、別にいいと思うぜ!

14 :デフォルトの名無しさん:03/06/03 00:10
DX9にF#なんてどうでしょう?

15 :リンク:03/06/03 00:24
http://www.strangelights.com/FSharp/
http://research.microsoft.com/projects/ilx/fsharp.htm
http://research.microsoft.com/research/downloads/

16 :デフォルトの名無しさん:03/06/03 00:27
>>3
関数に括弧をつかわないところがどうも慣れない

17 :デフォルトの名無しさん:03/06/03 00:34
>>14
関数型言語でゲームか!アツイな!!

>>15
thanx!!

18 :デフォルトの名無しさん:03/06/03 00:42
>>14
何かメリットは?

19 :デフォルトの名無しさん:03/06/03 00:49
F#を使うこと自体がメリットなんで、これ以上は望みません

20 :デフォルトの名無しさん:03/06/03 03:23
C#って死滅しちゃうの?

21 :デフォルトの名無しさん:03/06/03 03:31
>>19
単なる趣味か

22 :デフォルトの名無しさん:03/06/03 03:37
F#の対応するプラットフォームは?
Windows依存?

23 :デフォルトの名無しさん:03/06/03 03:47
.NET Framework依存

24 :デフォルトの名無しさん:03/06/03 19:40
つまり、Unixでまともに動く保障がないといわけだ。

25 :デフォルトの名無しさん:03/06/04 00:08
保障も何も動かせるものなら動かしてみろ、ってレベルだが

26 :デフォルトの名無しさん:03/06/04 12:02
Windows専用とは、Unix環境で使えるようにするには
規格が統一されずメンテナンス性が悪化するわけだ。


27 :デフォルトの名無しさん:03/06/04 12:12
次のバージョンでコンパイラのソースが公開されるはず。
少なくともSSCLIの動くプラットフォームはサポートされるんじゃない?

28 :デフォルトの名無しさん:03/06/06 22:43
>>24
UNIXはわからんがLinuxならいけそうだ
http://itpro.nikkeibp.co.jp/free/ITPro/OPINION/20030527/1/


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#によるプログラミング

34 :デフォルトの名無しさん:03/06/07 23:11
>>32
C#とか使うより良いかもしれない。
副作用を極力嫌うスタイルは保守が自然とやりやすくなる。
あと、副作用の依存関係を型と同じ様にコンパイラが把握してるので、
最適化にかなり影響する。

35 :デフォルトの名無しさん:03/06/08 03:28
誰か導入記事かいてよ

36 :デフォルトの名無しさん:03/06/08 13:19
1. zipを解答
2. インストールバッチを実行
3. 環境変数 FSHARPLIB を lib にセットする
4. パスを bin に通しておく

以上

37 :Hello World:03/06/08 15:13
let _ =
 print_endline "Hello World!!"

38 :Hello World .NET:03/06/08 15:13
open System

let _ =
 Console.WriteLine "Hello World!!"

39 :デフォルトの名無しさん:03/06/08 17:05
F#以前にOCamlの入門書/サイトキボン

40 :デフォルトの名無しさん:03/06/08 17:10
とりあえず現状ではAbsILが最良のF#の教材のようだ。

41 :デフォルトの名無しさん:03/06/08 20:04
>>40
そうか?

42 :デフォルトの名無しさん:03/06/08 21:01
入門書より、サンプルが大量にあればなんとかなる

43 :デフォルトの名無しさん:03/06/08 21:09
F#知る前からOCaml知ってた人ってどれだけいる?

44 :デフォルトの名無しさん:03/06/08 21:37
MLは知ってたけどOCamlは知らんかった

45 :デフォルトの名無しさん:03/06/08 22:12
>>39
ここで勉強しる
http://www.sato.kuis.kyoto-u.ac.jp/~igarashi/class/isle4/mltext/ocaml.html

46 :デフォルトの名無しさん:03/06/08 22:28
listもarrayも.NET FCLのものとは互換性がないんだね・・・。
.NETのクラスを使ってると旨みが出ないよ。(´・ω・`)

47 :デフォルトの名無しさん:03/06/08 23:01
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)

48 :デフォルトの名無しさん:03/06/08 23:50
>>34
>>47見ると、全然副作用嫌ってるスタイルに見えないんだけど。
いやそれが悪いということじゃないけどね。

49 :デフォルトの名無しさん:03/06/08 23:54
>>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));
  }
}

50 :デフォルトの名無しさん:03/06/09 00:02
>>48
一度 let で割り当てた値は変更不可能というのがポイント。
C#で例えると、ローカル変数もすべて readonly になるといった感じ。

51 :デフォルトの名無しさん:03/06/09 06:19
>>50
(・∀・)イイ!
なるほどどねえ

52 :デフォルトの名無しさん:03/06/09 07:25
C#版は変数書き換え放題だもんなあ。

53 :デフォルトの名無しさん:03/06/10 20:27
0.6.4が出たよ

54 :デフォルトの名無しさん:03/06/10 22:58
AbsILも0.64になってる。

55 :デフォルトの名無しさん:03/06/10 23:30
X#とかC#とか、vb.netとかVC++とか、

MSの言語って覚えることが多すぎて面倒だなあ。

56 :デフォルトの名無しさん:03/06/11 03:53
> MSの言語
へー(´・ω・`)

57 :デフォルトの名無しさん:03/06/12 20:44
.NET APIを使った、F#らしいサンプルきぼん

58 :デフォルトの名無しさん:03/06/13 16:45
F#ってさ、MSのプロジェクトとはいっても、ベースがフランスのOCamlだから、
普及はきついかもね。
少なくともアメリカでは。

59 :デフォルトの名無しさん:03/06/14 00:03
非常に分かりやすいです。

Learning OCaml, for C, C++, Perl and Java programmers
http://merjis.com/richj/computers/ocaml/tutorial/

60 :デフォルトの名無しさん:03/06/14 00:15
これなんか見ると、従来のやり方をOCamlに当てはめる方法が少し見えてくるかも。
http://www.speakeasy.org/~hchomsky/ocaml-win32.html

61 :デフォルトの名無しさん:03/06/14 00:36
OCaml使わずにF#わざわざ使うメリットある?

62 :デフォルトの名無しさん:03/06/14 09:04
>>61
膨大な.NETライブラリを利用できる。

63 :デフォルトの名無しさん:03/06/14 09:45
気がつけば 0.6.4.1

64 :デフォルトの名無しさん:03/06/14 09:47
ページもリニューアル。
http://research.microsoft.com/projects/ilx/fsharp.aspx

65 :デフォルトの名無しさん:03/06/14 11:03
>>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)

66 :デフォルトの名無しさん:03/06/14 11:11
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
こっちも負けてませんぜ
http://www.cl.cam.ac.uk/Research/TSG/SMLNET/

68 :デフォルトの名無しさん:03/06/15 00:10
F#なんてあんの?

69 :デフォルトの名無しさん:03/06/15 00:59
MSでも関数型言語のエキスパートが大活躍だな。

70 :デフォルトの名無しさん:03/06/15 01:28
Windowsを関数型言語で書き直せば、
実行時エラーとか一般保護エラーも無くなりますか?

71 :デフォルトの名無しさん:03/06/15 01:42
>>70
ドライバを開発できる人間ががくっと減ります。


72 :デフォルトの名無しさん:03/06/15 02:19
OCamlがここまで話題になるなんて。
やっぱりMSの影響力は大きいんだな。

73 :デフォルトの名無しさん:03/06/15 09:04
MSの研究所にはHaskellの有名人も居たような気がするが

74 :デフォルトの名無しさん:03/06/15 17:36
MSのプロジェクトでオープンソースというのも珍しいような。

75 :デフォルトの名無しさん:03/06/15 18:14
>>74
どこがオープンソース?

76 :デフォルトの名無しさん:03/06/15 20:55
--generic でコンパイルして gyro と一緒に遊ぶのが通。

77 :デフォルトの名無しさん:03/06/15 20:57
ちなみに 〜g.dll (ex. fslibg.dll) はすべてgenerics対応版。

78 :デフォルトの名無しさん:03/06/15 21:32
>>76
.NET1.2と一緒に(ry

79 :デフォルトの名無しさん:03/06/15 22:07
System.FuncをC#系の言語で多用されたら困ったことになるな。

 public delegate T1 Func<T0, T1>(T0 arg0);

で、しかもsealedじゃないから何でもありだし。

型推論に柔軟に対応するためというのはよく分かるんだけど・・・。

80 :デフォルトの名無しさん:03/06/15 22:27
>>79
ILX2ILの苦肉の策。
ILXがネイティブ対応されるまでの我慢か。

81 :デフォルトの名無しさん:03/06/16 14:55
>>75
今月中に公表するとか書いてあるけど

82 :デフォルトの名無しさん:03/06/16 17:06
>>76
--genericありとなしでは全然出力されるコードが違いますね。
ってか、--genericなしだとF#の価値が半減のような。

83 :デフォルトの名無しさん:03/06/20 00:32
いまさらながらF#よりOCAML.NETの方が通りが良かったのでは?

84 :デフォルトの名無しさん:03/06/22 05:01
C#やF#
この名前は失敗だと思う。

85 :デフォルトの名無しさん:03/06/22 13:30
OCamlにはマクロってありますか?
今、common lispを勉強してますが、
MicrosoftのせいでOCamlにも興味がでてきました。


86 :デフォルトの名無しさん:03/06/22 16:41
>>85
マクロはないと思う

87 :デフォルトの名無しさん:03/06/22 21:22
クラス定義できないの?(´・ω・`)

88 :デフォルトの名無しさん:03/06/22 21:46
>>87
できないっす。

http://research.microsoft.com/projects/ilx/fsharp-release.aspx

> 11 Cannot generate subclasses or implement interfaces except
> through helpers. Workaround: Declare a C# class accepting delegates
> as parameters to its constructor and then these delegates in your
> virtual methods.

89 :デフォルトの名無しさん:03/06/22 21:53
じゃ、OCAMLのOは何のOなの?
おちんちんおいしいのOですか。

90 :デフォルトの名無しさん:03/06/22 23:22
AssholeのOだよ、おぼえとけ

91 :デフォルトの名無しさん:03/06/23 05:16
>>8
つまんね。やる気そがれたじゃんか

92 :デフォルトの名無しさん:03/06/23 10:40
>>91
意味が分かるような分からないような

93 :デフォルトの名無しさん:03/06/23 22:22
すまんかった
x >>8
o >>88

94 :デフォルトの名無しさん:03/06/24 17:29
>>86
camlp4 (which stands for pre-processeor and pretty-printer)
F# では使えないけどなー

95 :デフォルトの名無しさん:03/06/25 06:55
F#メーリングリスト(って書かないとMLと紛らわしい)が突然活発になったな。

96 :デフォルトの名無しさん:03/06/25 21:32
.NETクラスを使う時に限って type.method(arg) ってのが激しく違和感なんだが。
普通に type#method arg って書けないもんかねえ。

97 :デフォルトの名無しさん:03/06/27 19:51
落ちない言語MLがついにメジャーデビューか。

98 :デフォルトの名無しさん:03/06/27 22:47
.NET版インタラクティブコンソールがホスィ

99 :デフォルトの名無しさん:03/06/28 09:41
つーか普通にOCaml使えよ

100 :デフォルトの名無しさん:03/06/29 21:40
>>97
MSが目をつけてる理由は関数型だからというよりは型推論なんでしょうな。
スクリプトのように書けて、実は型に厳しい。(パフォーマンスも有利。)
で、型推論の根拠をソース以外に外部のXSDに求めるのが
X#の正体ではないかと勝手に想像してみたり。

101 :適当にコード書いてみた:03/06/30 17:49
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 ^ "/>")

102 :適当にコード書いてみた:03/06/30 17:49

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
OCamlやHaskellは、なんかのプログラミングの大会で、
生産性が高いことで有名だったぞ。

俺的にはOCamlはソースがごちゃごちゃしてるように感じるが。
ここのInput/Outputとか。
http://www.ps.uni-sb.de/~rossberg/SMLvsOcaml.html

105 :デフォルトの名無しさん:03/07/02 05:22
OCamlの場合,対話的な環境で変数名や関数名だけ入力すれば型が表示されし,
ocamldocで出力したドキュメントにも型は表示されるから
型を知るためにソースを見直す必要はあまりないんじゃないかと.


106 :デフォルトの名無しさん:03/07/02 08:51
>>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の方がはるかに優れてないか?

110 :デフォルトの名無しさん:03/07/03 09:51
少なくともJavaなんぞとは比較にならないくらい優れてる。
http://www.bagley.org/~doug/shootout/craps.shtml

111 :デフォルトの名無しさん:03/07/03 09:55
>>110
恐るべし。
http://www.bagley.org/~doug/shootout/lang/ocaml/

112 :デフォルトの名無しさん:03/07/03 21:57
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'

113 :デフォルトの名無しさん:03/07/03 21:57

// 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だし。
まあ行数とか見ても少ない方だけどね。

115 :デフォルトの名無しさん:03/07/04 00:01
一行にごちゃごちゃ詰め込んでるから行数が少ないのさ(w

116 :デフォルトの名無しさん:03/07/05 00:30
moduleが使えないのは致命的すぎないか?> F#

117 :デフォルトの名無しさん:03/07/06 20:09
カレー化を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;
  }
}

118 :デフォルトの名無しさん:03/07/06 20:09

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));
  }
}

119 :デフォルトの名無しさん:03/07/06 23:11
引数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;
  }

120 :デフォルトの名無しさん:03/07/06 23:15
匿名メソッドがないとめんどくさいな、こりゃ。

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())
ってやろうとすると、型が合わないと怒られます。
どーすればいいんですか?

123 :直リン:03/07/12 09:38
http://homepage.mac.com/maki170001/

124 :デフォルトの名無しさん:03/07/12 18:36
>>122
これは致命的だな。

let button : Control = new Button()
let _ = form.Controls.Add(button)

でも駄目だったのでお手上げ。

125 :デフォルトの名無しさん:03/07/13 16:53
最近情報系の風俗ネットを見てないので友人から聞いた事だが、
何処の誰が風俗店に出入り禁止をくらったとか、そんな話題で盛り上がってる
人が居るらしい…。
プロでやっている風俗嬢でさえ政治家やタレント等と違い簡単に会えるゆえ個人
情報投稿は重大な人道マナー違反なのに、一個人であるお客の行動を詮索すると
は愚か過ぎる行為ですよね。
なんだか友人が言うにはボクも某有名店で出入り禁止になってるという噂が飛
んでるらしいですが笑止な事です。今現在ボクは何処の店にもそういう事実は
無いからです。(かつて店に誤解を受け、予約禁止になりそうと知ったボクの友
人所属嬢が店への不信で退店を表明し、誤解が解けて店に平謝りして貰ったことは
ある)
店と所属嬢とお客の間で解決する事にネットで関わるなんて馬鹿らしいです



126 :山崎 渉:03/07/15 09:49

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄

127 :デフォルトの名無しさん:03/07/22 13:12
--generic でコンパイルして gyro と一緒に遊ぶのが通。

128 :山崎 渉:03/08/02 02:27
(^^)

129 :山崎 渉:03/08/15 16:48
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン

25 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)