1 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 07:15:21 .net] 関数型言語MLについて語るスレッドです。 MLは、確固とした理論的背景を持つ言語でありながら、 現実的なソフトの開発にも使用できる実用性を備えた言語です。 また、プログラミングの初心者が最初に学習する言語としても優れています。 総本山 Standard ML www.smlnj.org/ Objective Caml caml.inria.fr/ocaml/ 前スレ 関数型言語ML(SML, OCaml, etc.), Part 5 pc12.2ch.net/test/read.cgi/tech/1186292994/
553 名前:デフォルトの名無しさん mailto:sage [2012/07/30(月) 22:50:31.73 .net] どのへんが不思議なんだ?
554 名前:デフォルトの名無しさん [2012/08/12(日) 14:06:23.13 .net] わからない?
555 名前:デフォルトの名無しさん mailto:sage [2012/08/12(日) 23:04:07.50 .net] わからない。教えて下さい。お願いします。
556 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 00:04:10.53 .net] #!/usr/bin/ocamlrun
557 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 01:29:14.36 .net] nativeの意味を取り違えてない?
558 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 03:03:42.64 .net] スクリプトじゃないのはdumpすればわかるでしょ
559 名前:デフォルトの名無しさん mailto:sage [2012/08/13(月) 11:53:42.11 .net] www002.upp.so-net.ne.jp/mamewo/ml.html#compile
560 名前:デフォルトの名無しさん mailto:sage [2012/08/29(水) 23:04:20.96 .net] ねんがんのLittle MLerをてにいれたぞ OCamlの場合の読み替え方法も載ってるけど、素直にSMLでやった方が良いのかな てか読んでる人はいるんだろうか・・・
561 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 03:59:59.39 .net] 以下の関
562 名前:狽ナprint_int x という文を入れると構文エラーになってしまうのですが、何がいけないのでしょうか? let hoge x = print_int x ← これ if x=0 then 0 else x + 10 let test1 = hoge 0 = 0 let test2 = hoge 10 = 20 # #use "printtest.ml";; File "printtest.ml", line 3, characters 4-6: Error: Syntax error ← 原因は? [] [ここ壊れてます]
563 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 08:57:34.05 .net] print_int x;
564 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 10:39:53.93 .net] >>555 Thx!出来ました セミコロンを使うのはインタプリタだけなのかと思っていました 調べてみたら、配列の区切りでも使われるんですね
565 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 10:47:02.65 .net] ocamlか。おかのコードはごみごみしくて醜いな
566 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 10:53:23.84 .net] print_string "あ、OCamlです。言ってませんでしたね。すいません¥n";
567 名前:デフォルトの名無しさん mailto:sage [2012/09/02(日) 15:19:34.02 .net] >>556 インタプリタの文の区切りは ;; (セミコロンが2つ) 逐次実行は ; (この場合セミコロンの前の式の型が unit でない場合警告が出る) 配列の区切りも ; (これは配列の括弧 [ ] の中でのみ出現する)
568 名前:デフォルトの名無しさん mailto:sage [2012/09/28(金) 23:37:26.16 .net] .net におけるOcamlがF#ですが、 JVM上でのOcaml相当のものはないのでしょうか?
569 名前:デフォルトの名無しさん mailto:sage [2012/09/29(土) 11:26:57.28 .net] OCaml-Javaは? ocamljava.x9c.fr/
570 名前:デフォルトの名無しさん mailto:sage [2012/09/30(日) 17:21:46.18 .net] >>561 おお、これってチラ見したときは単なるライブラリレベルでのサポートかと 思ってましたが、完全なJVM実装なんですね。
571 名前:デフォルトの名無しさん mailto:sage [2012/10/03(水) 00:49:32.12 .net] www.lexifi.com/ml2012/ 今年のMLワークショップでもocaml-javaの紹介してたみたい。 どのぐらい出来てるんだろう。 パフォーマンスの話も載ってた。 1/3ぐらい?
572 名前:デフォルトの名無しさん mailto:sage [2012/10/12(金) 11:22:15.18 .net] # type t = int * t;; Error: The type abbreviation u is cyclic # type t = { x: int; y: t };; type t = { x : int; y : t; } # type u = u option;; Error: The type abbreviation u is cyclic # type u = Some of u | None;; type u = Some of u | None だれか解説してくれ。
573 名前:デフォルトの名無しさん mailto:sage [2012/10/12(金) 12:17:07.41 .net] >>563 shootout.alioth.debian.org/ の中くらいのサイズのやつを8つベンチマーク。 0.96倍から7.14倍の実行速度。 3倍内に収まったのが6つあるぜ。 intを扱うベンチが遅い。boxingされちゃうから。 そういうベンチを省くと平均で倍は遅くない。
574 名前:デフォルトの名無しさん mailto:sage [2012/10/12(金) 12:26:46.91 .net] >>564 最初のやつは値を作れないし、三番目の型パラメータとして渡すようなのもoptionの中身次第では同じ事になるからじゃね? と思ったが二番目が通るのがよくわからん。
575 名前:デフォルトの名無しさん mailto:sage [2012/10/12(金) 17:55:16.91 .net] >>564 (**** スマンがOCamlは久しく触っていないので、SMLで解説してみる -- 処理系は SML/NJ ****) - type t = int * t; Error: unbound type constructor: t (* まだ束縛されていない型構成子 t を右辺の型式内で参照しているからエラー *) - type t = { x: int, y: t}; Error: unbound type constructor: t (* 最初の例と同様に、型構成子 t はまだ束縛されていないのでエラー *) - type u = u option; Error: unbound type constructor: u (* これも同じ理由でエラー *) - datatype u = Some of u | None; datatype u = None | Some of u (* 上記のtype宣言文とは異なり、datatype宣言文であれば再帰的なデータ型定義が許されている *) (**** 以上だけど、SMLなら不可解な振る舞いは無く、現象を明解に説明できるよ.... ****)
576 名前:デフォルトの名無しさん mailto:sage [2012/10/12(金) 18:44:39.63 .net] >>564 abbreviationではない新しい型がcyclicかどうかは仕様を決める人が自由に決める 一方、タプルとoptionがcyclicではないという仕様は既に決まっているので タプルのabbreviationとoptionのabbreviationはcyclicではないはず
577 名前:デフォルトの名無しさん mailto:sage [2012/10/12(金) 19:52:28.31 .net] >>565 おお、ちゃんと動くもんなんだね!
578 名前:デフォルトの名無しさん mailto:sage [2012/10/13(土) 10:18:23.39 .net] おお。皆さん回答ありがとう。 >> 566 値を作れないわけではなかったりする。 # type t = { x: int; y: t };; type t = { x : int; y : t; } # let rec loop () = loop ();; val loop : unit -> 'a = <fun> # { x = 0; y = { x = 1; y = loop () } };; いや、作れてはいないんだけど、型は付く。 CPS っぽい感じのプログラムで最後に exit するような場合、こういう型が出現することもある…気がする。 tuple で許されず、 record で許されるのに何か理由があるのかと思ったけど、 >>567 さんの通り、 SML ではどちらも許されないそうだし、あんまり深い意味はないのかな。 >>568 人(言語仕様)が自由に決めるとして、なんでこんなチグハグに(素人目には)見える仕様に なってるのかなーという。 record が通るってことは、どっちの仕様でも型安全性は保証されるのだよね? それぞれの仕様の pros/cons が知りたい。 あと、 option の方は、処理系が option の内容を辿るように頑張って実装すればイケるのか、 型理論的になにか問題があるのかよく分からない。
579 名前:デフォルトの名無しさん mailto:sage [2012/10/13(土) 10:30:56.43 .net] ああ書いていて気づいた。 record は mutable なフィールドを許すから、 # type t = { x: int; mutable y: t };; type t = { x : int; mutable y : t; } # let rec v = { x = 0; y = v };; こういう循環している値を使うことが普通にあるわけで、 cyclic な型を認めておいた方が便利なのだ。 一方で tuple は常に immutable だから、無限ループになるような通常は起こりにくい状況でしか cyclic な型が出てこない。 たぶん。
580 名前:デフォルトの名無しさん mailto:sage [2012/11/03(土) 17:26:40.17 .net] 久々にtuareg-mode使ったけど、インデントが変わったのな。 昔のはletをネストするとだんだん右に行って見づらかった
581 名前:デフォルトの名無しさん [2012/11/07(水) 04:55:27.01 .net] Ocaml関数引数の省略説明って簡単に嵌ってしまた let plus x y = x + y let incr = plus 1 incr 1 2 let minus x y = x - y let decr = minus 1 decr 2 -1 ???? let decr = plus -1 error let decr = plus (-1) decr 2 1 let decr x = minus x 1 decr 2 1 こんな感じww 途中で val incr : int -> int = <fun> こんな説明出てくるけど、何それ?ってw
582 名前:デフォルトの名無しさん mailto:sage [2012/11/07(水) 19:10:06.18 .net] そうですね。
583 名前:デフォルトの名無しさん [2012/11/08(木) 20:48:16.69 .net] 例えばこの例は間際らしい let capitalize = function | 'a' .. 'z' as letter -> Char.uppercase letter | 'A' .. 'Z' as letter -> letter | _ -> failwith "Not a valid letter" これを、こう書き換えても問題ない let capitalize = function | 'a' .. 'z' as lett -> Char.uppercase lett | 'A' .. 'Z' as lette -> lette | _ -> failwith "Not a valid letter" 何が言いたいかと言うと、初見の場合as letter が何か特別な予約語に思えて混乱する(letterの綴りが省略されていないため) で、下のように書き換えて動作を確認した
584 名前:デフォルトの名無しさん [2012/11/11(日) 07:45:41.63 .net] これ let head_head = function | [] -> failwith "the list is empty" | []::_ -> failwith "the head is the empty list" | (h::_)::_ -> h head_head [[1;2;3];[4;5;6]] 1 とか、listのlistから、頭のlistの頭を取り出す関数なんだけど head_head [] head_head [[];[1]] とかはエラーを返すけど head_head [1;2;3] とかするとlistの要素がlistじゃないってエラーが出てくる この場合を検出してエラーを返す書き方が思いつかない 検出する意味も必要もないのかどうかも
585 名前:分からない [] [ここ壊れてます]
586 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 08:04:45.04 .net] head_headの型を理解してるか?
587 名前:デフォルトの名無しさん [2012/11/11(日) 09:47:55.90 .net] はい、たぶん 基本[[];[]]な形式、list のlist構造 でも、なんか色々自由がありそうと感じる分、制約とか制限についての認識が欠落してしまう 制約制限がないと意味不明のバクが爆発するから必須なんだけど なのに、魂が叫ぶ、もっと自由にやらせろ 間違って[1;2;3]な通常のlistを渡したときなんとか出来そうな思い込みをしてしまう。 []要素のないlist [[];[1;]] listの最初のlistが[]なlist [[];[]] 同上 [1;2;3] 必要な要件を全然満たさないlist構造
588 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 14:45:44.54 .net] 型が違えば処理系に弾かれてお終い
589 名前:デフォルトの名無しさん mailto:sage [2012/11/11(日) 18:10:18.79 .net] 考え方が動的型付けに染まってる印象。
590 名前:デフォルトの名無しさん [2012/11/12(月) 02:30:05.37 .net] >>579 ,580 すいません その通りで御座います。
591 名前:デフォルトの名無しさん [2012/11/17(土) 14:20:04.43 .net] let f = function | [] -> failwith "empty list" | [| _; (_, x) |]::_ -> x | _ -> failwith "the first array should be of size two" に f [[|(1,2);(3,4)|];[|(5,6);(7,8)|]];; でint = 4の結果が得られる でも、 エラー"the first array should be of size two"が表示される引数が上手く作れない システムが先にエラーを吐き出す。
592 名前:デフォルトの名無しさん mailto:sage [2012/11/17(土) 18:42:30.31 .net] # f [[|(1,2)|];[|(5,6);(7,8)|]];; Exception: Failure "the first array should be of size two". いかんのか?
593 名前:デフォルトの名無しさん [2012/11/17(土) 19:34:18.32 .net] >>583 ありがとうございます。 出来ました。 関数fの受け付ける ('a * 'b) array list -> 'b = <fun> の形式がどの様な表現なのか直感的に理解できなかったので助かりました。 ('a * 'b) array list形式の引数が与えられると 2番目の条件にマッチングできなくて、3つ目の条件で"the first ~~ two"が表示されるんですね。 [[|(1,2)|]] の様に表現するとタイプミスマッチとか処理系がエラーを出すと思っていました。 でも、('a * 'b) array list形式なので引数としては間違っていない。
594 名前:デフォルトの名無しさん [2012/11/19(月) 03:26:09.19 .net] 結局、[1,2]と入力すると[(1,2)]と返ってくるのでlistの要素構造を勘違いしてた(この部分"[(1,2)]"を見落とし) [1;2]は整数1と2によるlist、これと[(1,2)]の省略した入力[1,2]と混同してた だから、[1;(2,3)]とか入力してエラー出されて??な感じ。 正しくは、[(1,4);(2,3)]と表現しないといけない。 [1,4;2,3]とタイプしても正しく[(1,4);(2,3)]と返ってくる こんな初歩的な部分で躓くとは、これではソースが読めないわけだ。
595 名前:デフォルトの名無しさん mailto:sage [2012/12/02(日) 17:11:41.64 .net] caml.inria.fr/pub/docs/manual-ocaml-4.00/expr.html には書いてないけど、+ や +. って - -. と同じく二項演算子かつ単項演算子じゃないのか? +. (1.0 + 2.0);; とか通るし。
596 名前:デフォルトの名無しさん mailto:sage [2012/12/02(日) 17:46:32.55 .net] Characters 4-7: +. (1.0 + 2.0);; ^^^ Error: This expression has type float but an expression was expected of type int
597 名前:デフォルトの名無しさん mailto:sage [2012/12/02(日) 17:57:04.40 .net] +. (1.0 +. 2.0);;
598 名前:デフォルトの名無しさん mailto:sage [2012/12/03(月) 01:35:54.04 .net] Characters 0-2: +. (1.0 +. 2.0);; ^^ Error: Syntax error
599 名前:デフォルトの名無しさん mailto:sage [2012/12/03(月) 01:37:54.28 .net] parsing/parser.mliを見ると確かにそうらしい | subtractive expr %prec prec_unary_minus { mkuminus $1 $2 } | additive expr %prec prec_unary_plus { mkuplus $1 $2 }
600 名前:デフォルトの名無しさん [2012/12/03(月) 16:07:32.97 .net] pervasives.mliにこんなん書かれてた 147 external ( ~- ) : int -> int = "%negint" 148 (** Unary negation. You can also write [- e] instead of [~- e]. *)
601 名前:デフォルトの名無しさん mailto:sage [2012/12/03(月) 17:08:25.93 .net] むしろ、 caml.inria.fr/pub/docs/manual-ocaml-4.00/libref/Pervasives.html > val (~+) : int -> int > Unary addition. You can also write + e instead of ~+ e. > Since 3.12.0 > val (~+.) : float -> float > Unary addition. You can also write +. e instead of ~+. e. > Since 3.12.0 言語拡張が間に合わなかった感じだねこれ Ad-hockぽいし
602 名前:デフォルトの名無しさん mailto:sage [2012/12/03(月) 17:48:39.20 .net] なるほど。+. が単項opとして機能するのは Since 3.12.0 からの拡張なのか。 で間に合ってないというのは 589 の環境のことか。最新の ocaml では通る。 色々ありがとうございました。
603 名前:デフォルトの名無しさん mailto:sage [2013/02/10(日) 19:42:11.39 .net] 最近、OCamlを勉強し始めたんだけど、標準関数で int listを印字する方法ってありますか? REPLの出力みたいのを求めているんですが。
604 名前:デフォルトの名無しさん [2013/02/28(木) 00:26:28.39 .net] >>594 コンパイラ内部の関数をごにょごにょすれば別かもしれないけど基本的にない。 対象がint listって決まってるなら、自分で書いたほうが楽だと思う。
605 名前:デフォルトの名無しさん mailto:sage [2013/02/28(木) 01:13:07.87 .net] REPL環境に限定すれば実はREPLのプリティプリンタを使えたりするんだけど、 使ってしまうと単独の実行ファイルにできなくなる罠。
606 名前:デフォルトの名無しさん mailto:sage [2013/03/24(日) 17:14:56.10 .net] OCamlで、(=)等を渡す let check b f = if b then f 1 1 else f 1.0 1.0 みたいな関数を定義したいんですけど、こういったやり方は駄目ですか? そのままだとfはintを取ると推論されて?エラーになるので、 型を(f: 'a -> 'a -> bool)と指定してみたんですが変わりませんでした。
607 名前:デフォルトの名無しさん mailto:sage [2013/04/20(土) 01:56:05.49 .net] >>597 よくわからないけど、型環境に intかつfloat みたいなのが積めないからだめなんじゃない? 確かこういうときはヴァリアントを使えばよかったはず type intfloat = E | I of int | F of float let check b (f: intfloat -> intfloat -> bool) = if b then f (I 1) (I 1) else f (F 1.0) (F 1.0)
608 名前:デフォルトの名無しさん mailto:sage [2013/06/09(日) 21:47:36.26 .net] OCaml のはなしです。 module type IO = sig type 'a t val write: string -> unit t val read: string t val run: 'a t -> 'a val bind: 'a t -> ('a -> 'b t) -> 'b t end module MyIO : IO = struct type 'a t = unit -> 'a let read = read_line let write str = fun () -> print_string str let run m = m () let bind m f = fun () -> (run (f (run m))) end で Haskell の IO monad 風にできるのはわかったけど、 'a t を x -> b という関数の形じゃなくて、バリアント型で実現したい。 read に対応したアクションまたは write に対応したアクション、という感じで。 けど、どうやってもうまくいかない。誰か教えてくださいませ。
609 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 21:34:59.42 .net] opamを導入して適当なモジュール(今回はextlib)をインストールして ソースコードにopen Extlibと書いたところExtlibが見つからないと言われてしまいました 何かパス通しのようなものが必要なのでしょうか OSはmacでhomebrewを使っています
610 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 22:08:09.11 .net] よくわかりませんがOCamlFindを使えば良いのですね ocamlfind ocamlc -package extlib -linkpkg test.ml で通りました
611 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 23:27:52.03 .net] あとopen ExtLibがタイポしてました
612 名前:デフォルトの名無しさん mailto:sage [2013/07/23(火) NY:AN:NY.AN .net] Coqもここでいいの?
613 名前:デフォルトの名無しさん mailto:sage [2013/07/23(火) NY:AN:NY.AN .net] そういえば、Coqスレ昔あったけど今はないのか。 定理証明支援のスレのないのかな? Coqスレ toro.2ch.net/test/read.cgi/tech/1300017923/
614 名前:デフォルトの名無しさん mailto:sage [2013/08/13(火) NY:AN:NY.AN .net] 活気が無いように見えるのはきっと皆コーディングに夢中なんだ。きっとそうだ。
615 名前:デフォルトの名無しさん mailto:sage [2013/08/13(火) NY:AN:NY.AN .net] MLに限った事じゃないけど、関数型言語を学び始めて思ったのは、なんで一次元(線形)リストベースに作られてるのかなって。 一番シンプルな一次元から始めたとして、その先にn次元、までは行かなくても2次元・3次元にして言語体型を考えてみるとかやった人いないのかな。 既にトライして無意味と分かったとか、今まさに挑戦中とか、そう言う話はあるのかい? メモリ空間が一次元空間だから、やるだけ無駄なんだろうか?
616 名前:デフォルトの名無しさん mailto:sage [2013/08/13(火) NY:AN:NY.AN .net] >>606 因果が逆。再帰がベースにあるのでリストが使いやすい。 特定のデータ構造をベースにした言語ってSQLくらいしか思いつかない。
617 名前:デフォルトの名無しさん mailto:sage [2013/08/13(火) NY:AN:NY.AN .net] >>606 Linked List は一次元じゃないと思う。
618 名前:デフォルトの名無しさん mailto:sage [2013/08/13(火) NY:AN:NY.AN .net] >>607 だったら再帰の考え方も拡張すればいい。別にデータ構造をベースにする意図ではない。 考え方の向きは相互に変わって良いし、そうする事で何が見えてくるか、こないとしたら何故なのかを考えるきっかけにすればよい。
619 名前:デフォルトの名無しさん mailto:sage [2013/08/13(火) NY:AN:NY.AN .net] >>609 考え方の向きが一方向なのは、関数(写像)が集合間における一方向のn:1関係だから。 もし双方向やn:m関係を扱いたいのなら、述語論理をベースにした言語にすればいい。 論理型言語であれば、リストも順序性がある一方向関係として自然に扱える。
620 名前:デフォルトの名無しさん mailto:sage [2013/08/13(火) NY:AN:NY.AN .net] そう言う話じゃなく、考えたかの向きってのは再帰→リストと発想する考え方の逆向き、と言う意味です。 これ以上の議論は無意味のようですね。終わり
621 名前:デフォルトの名無しさん mailto:sage [2013/08/13(火) NY:AN:NY.AN .net] 消えてくれてありがとう
622 名前:デフォルトの名無しさん mailto:sage [2013/08/13(火) NY:AN:NY.AN .net] >>609 関数型言語を学び始めてどれくらいだ。第一印象でリストベースなのかと感じても3日もすればそんなことないって分かるだろうに。 きっと俺と同じように慣れない酒で益体もないことを考えているんだろうけど。 n次元のリストを捉えるのに再帰が不十分なら拡張とか考えるけどさ、n-1次元のリストを再帰的に処理すればいいだけの話であって、拡張なんて必要ない。 再帰という概念の拡張に1次元->n次元の拡張は使えない。何の需要も喚起しない。
623 名前:デフォルトの名無しさん mailto:sage [2013/08/14(水) NY:AN:NY.AN .net] >>613 なれない酒で頭がいかれてるお馬鹿さんさようなら
624 名前:デフォルトの名無しさん mailto:sage [2013/08/21(水) NY:AN:NY.AN .net] ひどいなこりゃ。
625 名前:デフォルトの名無しさん mailto:sage [2013/08/21(水) NY:AN:NY.AN .net] 「ひどい」と不平を言うよりも、進んでネタを振りましょう。
626 名前:デフォルトの名無しさん mailto:sage [2013/08/27(火) NY:AN:NY.AN .net] 正直関数型言語がどんなところで優位を持っているのかわからん
627 名前:デフォルトの名無しさん [2013/08/31(土) NY:AN:NY.AN .net] リスト内包表記ってOCcamlでできるの?
628 名前:デフォルトの名無しさん mailto:sage [2013/08/31(土) NY:AN:NY.AN .net] Camlp4でできる
629 名前:デフォルトの名無しさん mailto:sage [2013/09/02(月) 01:13:00.20 .net] OCaml でのゲームプログラミングに興味がわいて MLGame mlgame.sourceforge.net/ ってライブラリを導入しようと思ったのですが 準備段階であるSDL, OCamlSDL の cygwin への導入で もうよくわからなくなってしまいました。 sourceforge.net/projects/mlgame/files/mlgame/cross-platform%20devel%20util/ cygwin ごと入ってるらしいパックもためそうとしましたが cygwin コンソールの起動ができません。 あきらめてCで初心者向けのDXLibrary でもつかって 適当にやってればいいのでしょうか?
630 名前:デフォルトの名無しさん mailto:sage [2013/09/02(月) 01:55:09.13 .net] やる前から自分が興味を持ったことを投げ出すなよ やってみて、思っていたのと違ったらそのときに別の方法を考えればいい 要は関数型言語でゲームプログラミングをしたいんだろ? ならF# + DirectXを試してみたら? もしくはCygwinを捨ててLinux環境でMLGameに挑戦してみるとか MLGameなんて地雷臭がするから、いろいろと苦労しそう。その分、力は付くかもしれないけど。 どんな方法をとるにせよ、まずはある程度のところまで突き詰めたほうがいい
631 名前:デフォルトの名無しさん mailto:sage [2013/09/02(月) 01:59:44.29 .net] 「プログラミングする」という観点においては Windowsはウンコということを肝に命じた方が良い
632 名前:デフォルトの名無しさん mailto:sage [2013/09/02(月) 02:33:30.43 .net] なんで?.NETは便利だぞ
633 名前:デフォルトの名無しさん mailto:sage [2013/09/02(月) 02:47:12.09 .net] >>621-622 素早い返答ありがとうございます。 とりあえず OCaml + cygwin + へんなの は捨てて F# + DirectX をためしてみます。 windoes はプログラム書くのにうんこなのですね? Ubuntu いちおう VMware でつかえるけど とりあえず win に F# インストールしてねます 明日 www.codeproject.com/Articles/121194/Managed-DirectX-via-F でもよもう
634 名前:デフォルトの名無しさん [2013/09/02(月) 09:36:30.13 .net] そっか F#だとAPIが叩けるんだな プログラム自体を関数型言語から入ると なかなかできない発想だなと思った
635 名前:デフォルトの名無しさん mailto:sage [2013/09/03(火) 01:42:29.15 .net] let foo () = let bar = baz () in begin (* fooを使ってunitを返すような処理がいくつか *) bar end 個人的にこれはダサいと思うんですけど他の書き方が思いつきません 何かありませんか?
636 名前:デフォルトの名無しさん mailto:sage [2013/09/03(火) 08:33:35.63 .net] 何がダサいと感じるのかよくわからんので何も言えない
637 名前:デフォルトの名無しさん mailto:sage [2013/09/03(火) 10:22:05.74 .net] endの直前にbarをもう一度書かないといけないところがダサいと思うのです
638 名前:デフォルトの名無しさん mailto:sage [2013/09/03(火) 13:34:18.83 .net] tap や finally で書けない?
639 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 19:54:28.33 .net] #load "dynlink.cma";; #load "camlp4o.cma";; #load "Camlp4Parsers/Camlp4ListComprehension.cmo";; [x | x <- [1;2;3] ];; - : int list = [1; 2; 3] できた! すげー感動
640 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 20:04:23.38 .net] [(x,y,z)|x<-[1;2;3;4;5;6;7;8;9;10];y<-[1;2;3;4;5;6;7;8;9;10];z<-[1;2;3;4;5;6;7;8;9;10];x*x+y*y=z*z;x+y+z=24];; haskellの すごHの問題もできた! うおー俺は猛烈に感動している ところでhaskellの[1,2..10]って書いて[1;2;3;4;5;6;7;8;9;10]のリストを一瞬で作る機能は流石にないよな
641 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 20:10:09.50 .net] >>631 残念ながら出来ない それにしても楽しそうだねw
642 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 20:16:21.51 .net] うん 楽しい 関数型言語は最高やでぇぇ
643 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 20:45:29.31 .net] detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10103970335 こんな問題もサクっと4つの組 (85,71,59,50)が出てくる 凄いよぉぉぉ マヂで小学生からプログラムやるべきだな
644 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 21:02:36.14 .net] 日本語が理解できない 自然数の集合から無作為に選んだ4個の数が存在して、この4つの中から、さらに無作為に3個を選んで和を取り、それを4回試行したところ、 180, 194, 206, 215 になった、ってことでいいの?
645 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 21:18:35.37 .net] こいつこの調子でずっと喋り続ける気?
646 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 22:22:27.90 .net] >>612 ==>>614 ==>>636
647 名前:デフォルトの名無しさん mailto:sage [2013/09/04(水) 22:47:24.97 .net] >>637 うむ 正しい == の使い方だ
648 名前:デフォルトの名無しさん mailto:sage [2013/09/05(木) 01:56:06.71 .net] camlp4で今ある文法を制限することって出来ますか? 括弧無しのタプルを排除してリストの区切りをコロンにしたいのですが。
649 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 03:15:14.14 .net] >>629 batteriesの関数ですよね?まさにそういうのを探していました batteriesは何となく名前が気に入らなくてスルーしてましたが食わず嫌いは良くないですね
650 名前:デフォルトの名無しさん mailto:sage [2013/09/07(土) 03:56:00.85 .net] OCamlのクロージャはそれなりにコストがあって、最適化もしてくれないので >>626 ぐらいならそのままにするなあ
651 名前:デフォルトの名無しさん [2013/09/09(月) 15:49:15.59 .net] 初めての言語に関数型選んでしまったから Objectで詰んだ! さっぱりわからん
652 名前:デフォルトの名無しさん mailto:sage [2013/09/09(月) 17:10:04.82 .net] OCamlのobjectは忘れるんだ、そうすればお前は強くなれる っていうかfirst class moduleが入って、ただでさえ継子扱いだったobject/classに存在価値は無くなった
653 名前:デフォルトの名無しさん [2013/09/09(月) 17:38:01.62 .net] おっとwikiみたらCoqの日本語版が登場してた 俺がCoqネタつぶやいたから誰か追加してくれたんだな