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/
495 名前:365 mailto:sage [2011/09/29(木) 18:07:57.87 .net] >>485 Prolog で型チェック:Rainy Day Codings:So-net blog rainyday.blog.so-net.ne.jp/2008-06-16 題名は型チェックだけど、コードはまぎれもなく型推論
496 名前:デフォルトの名無しさん mailto:sage [2011/09/29(木) 19:09:02.35 .net] ああPrologだから単一化で型推論が起きるのか。
497 名前:デフォルトの名無しさん mailto:sage [2011/10/04(火) 18:43:07.61 .net] prologで型推定が一番楽にできそう しかし返値しか推定してないね
498 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 15:33:53.10 .net] SMLやろうと思うんだけど、関数書いたファイルはどこ入れときゃいいの?
499 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 19:31:29.68 .net] WinにもOCaml3.12.1きてるー ttp://gallium.inria.fr/~protzenk/caml-installer.html
500 名前:sage [2011/10/06(木) 20:07:16.49 .net] >>492 SML/NJの場合だと、適当なファイル(例えばhoge.sml)に保存して、保存した フォルダでNJの対話環境を起動して、 use "hoge.sml" とすればよい。useはカレントディレクトリからソースを読み込む関数で、 カレントディレクトリの取得/変更は、 OS.FileSys.getDirとOS.FileSys.chDirでできる。
501 名前:デフォルトの名無しさん mailto:sage [2011/10/06(木) 21:24:34.13 .net] >>493 ありがとう!
502 名前:デフォルトの名無しさん mailto:sage [2011/10/11(火) 22:10:01.73 .net] queue.acm.org/detail.cfm?id=2038036 これみるとC#とかやってられんな
503 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 22:44:28.70 .net] 型推論があるから簡潔になるのか パターンマッチがあるから簡潔になるのか
504 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 22:47:43.98 .net] 両方
505 名前:デフォルトの名無しさん mailto:sage [2011/10/13(木) 23:19:58.73 .net] 高階関数とカリー化も簡潔に書くのに一役買ってる
506 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 07:40:42.96 .net] >>495 ひどいよな。C#じゃ複雑なデータ構造を扱おうなんてすると沼じゃないか! 今Haskellの勉強をしててOcamlは読んだことはなかったんだけど 読めるもんだなとも思った。
507 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 07:48:35.09 .net] The C# code, while functionally equivalent, looks cluttered, with the real structure obscured by syntactic noise. 事実だけど、辛辣だな。
508 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 11:38:18.36 .net] >>499 関数型言語群はMLの影響が強いからね。 C言語系という言い方では、ML系と言ってしまってもいい。
509 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 21:38:01.24 .net] >>501 なるほど、ML系かぁ。そういわれれば納得です。
510 名前:デフォルトの名無しさん mailto:sage [2011/10/14(金) 22:41:41.95 .net] C#とかJavaとかはジェネリックが狂ってるな
511 名前:デフォルトの名無しさん mailto:sage [2011/10/16(日) 05:15:33.48 .net] js_of_ocaml が面白そうだな
512 名前:デフォルトの名無しさん [2011/10/19(水) 21:52:08.21 .net] ocamlてmain関数的なエントリポイントって無いの? Pythonみたいな泥臭い方法でもいいんだけど.
513 名前:デフォルトの名無しさん mailto:sage [2011/10/20(木) 12:56:49.09 .net] 具体的に OCaml で何をしたいのか、Python のどこがダサいのか 書いた方が答をもらいやすいよ
514 名前:デフォルトの名無しさん mailto:sage [2011/10/20(木) 14:05:46.81 .net] >>505 OCamlにエントリポイントはないです。__main__とかないです。 ocamlc -o a.out a.ml b.ml c.mlとしてコンパイルすると、 a.outの動きとしてはmodule A,B,Cの順番で評価されるイメージになります。
515 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 03:27:50.02 .net] 最近HaskellからOCamlに興味を持って少し触り始めたんですが,OCamlの対話環境にはghciの「:i 」みたいなものは無いんでしょうか?
516 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 06:11:24.22 .net] 「なぜ次に学ぶ言語は関数型であるべきか」 d.hatena.ne.jp/ymotongpoo/20111105/1320506449 原文: queue.acm.org/detail.cfm?id=2038036
517 名前:デフォルトの名無しさん mailto:sage [2011/11/06(日) 22:31:50.25 .net] toplevel の pretty printer を普通のプログラム内で使う方法ってありますか。
518 名前:デフォルトの名無しさん mailto:sage [2011/11/07(月) 22:42:07.36 .net] >>509 どしょっぱつの,Sometimes, が訳されていないとか,いろいろと 気になるところはあるけれど,大意は伝わった。うむうむ。
519 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 05:42:33.31 .net] >>510 #install_printer のやつ?
520 名前:デフォルトの名無しさん mailto:sage [2011/11/12(土) 05:53:40.36 .net] >>510 言語は?
521 名前:デフォルトの名無しさん mailto:sage [2011/11/19(土) 10:47:17.91 .net] scan.netsecurity.ne.jp/article/img/2011/11/13/27625/93.html tokuhirom、ma.la?っていう人の話だけ聞きたい 色々なスレで見かけるけどWEB業界で有名らしいね 動画ありませんか?
522 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 00:53:05.05 .net] The little MLerの情報って調べたけど少ないね。大学の図書館 とかなら有りそうに思うけど、今は大学と関係ないから探せんわ。 SML中心で書いてるようだ。Ocamlへの改変の仕方ものってる というのはgoogle booksでわかった。 使って学習した人っておらんの?
523 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 09:07:06.79 .net] NACSIS Webcatで検索するか買えば? 面白いよ。
524 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 14:49:34.72 .net] NACSIS Webcatか webcat.nii.ac.jp/cgi-bin/shsproc?id=BA3501073X 意外とおいてるところ少ないね。今学習してる本が片付いたら 購入検討するわ。
525 名前:デフォルトの名無しさん mailto:sage [2011/11/23(水) 15:07:11.14 .net] www.d12k.org/tso/intro.html
526 名前:デフォルトの名無しさん mailto:age [2011/12/10(土) 10:15:38.86 .net] age
527 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 01:18:07.20 .net] MLってCACHEに使われてるんだっけ? RDBでないDBに興味を持ったので調べ始めたんだけど、 ML、CACHEとも事例が中々見つからない...
528 名前:デフォルトの名無しさん [2012/01/02(月) 00:09:12.82 .net] OCaml のモジュールについて質問です. たとえば A.B A.C A.D みたいにネストしたモジュールをそれぞれ分割されたファイル(a/b.ml, a/c.ml, a/d.ml など階層化されたディレクトリに分けられる?)に書くには OCaml ではどういう方法が一般的でしょうか?
529 名前:デフォルトの名無しさん mailto:sage [2012/01/19(木) 07:56:03.89 .net] ocamlc -pack
530 名前:営利利用に関するLR審議中@詳細は自治スレへ mailto:sage [2012/03/29(木) 00:44:48.75 .net] SML# partake.in/events/f04706e0-0eac-4751-901f-41707bdfb1ef
531 名前:デフォルトの名無しさん [2012/04/22(日) 14:29:24.78 .net] MLの無名関数 (fn x => x + 1 みたいなの)って再帰的な定義をする記法はないのですか? fn n => n * (fn n-1) みたいな感じで。
532 名前:デフォルトの名無しさん mailto:sage [2012/04/22(日) 17:17:03.18 .net] >>524 どうしてもやりたいならY combinatorを定義して使うとか: let rec y f x = f (y f) x;; (y (fun f x -> match x with 0 -> 1 | n -> n * f (n-1))) 10;;
533 名前:デフォルトの名無しさん mailto:sage [2012/04/23(月) 08:12:58.62 .net] >>524 そのため(名前を付けて循環定義にするため)に let rec があるので let rec と組み合わせればいいと思うんだけど、let rec と組み合わせたくない 理由とかある?
534 名前:デフォルトの名無しさん mailto:sage [2012/04/23(月) 20:37:41.35 .net] SML/NJでdatatype 'a tree = Empty | Node of 'a * 'a tree * 'a treeとかやっといて、適当な深い木を定義してやると 表示が"Node #"と出てきて省略されてしまうんだけど、略記せずに全部出力させる方法があれば教えて。
535 名前:デフォルトの名無しさん mailto:sage [2012/04/23(月) 21:20:09.21 .net] 自分でプリンタ書けよ
536 名前:デフォルトの名無しさん mailto:sage [2012/04/27(金) 00:54:20.88 .net] camlp4 使った奴でよくみる pa_* な名前の奴の pa って何の略なんだ?
537 名前:デフォルトの名無しさん mailto:sage [2012/04/29(日) 02:59:34.92 .net] PArsing つ mjambon.com/extend-ocaml-syntax.html
538 名前:デフォルトの名無しさん mailto:sage [2012/04/30(月) 15:05:27.19 .net] >>530 おお、ありがとう!
539 名前:デフォルトの名無しさん [2012/05/08(火) 20:26:45.44 .net] >>527 以下2つに適当に大きな数字を書き込む。 Control.Print.printLength; Control.Print.printDepth; あと、 Control.Print.out も便利。何もしない関数に置き換えると、エコーバックを消せる。
540 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 13:35:08.25 .net] ttp://www.amazon.co.jp/Modern-Functional-Programming-Chris-Reade/dp/0201648644/ref=sr_1_2?s=english-books&ie=UTF8&qid=1339043582&sr=1-2 www
541 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 13:40:40.11 .net] どこからつっこめばいいの…w
542 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 17:40:09.00 .net] > 掲載画像とお届けする商品の表紙が異なる場合があります。ご了承ください。 とあるけど、どういうことだろう
543 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 21:01:28.02 .net] オリンピックをもう一回
544 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 15:25:00.19 .net] 300?
545 名前:デフォルトの名無しさん mailto:sage [2012/07/25(水) 19:10:23.62 .net] >>534 >出版社: Addison-Wesley (2017/11/20) 2017年・・・
546 名前:デフォルトの名無しさん [2012/07/25(水) 20:56:09.52 .net] OCamlで int_of_float -0.7;; がエラーになるんですが、どうして? Error: This expression has type float -> int but an expression was expected of type int ちなみに、、 # int_of_float 0.7;; - : int = 0 # -0.7;; - : float = -0.7 -0.7はfloatじゃないの?何がダメなの?
547 名前:デフォルトの名無しさん mailto:sage [2012/07/25(水) 21:13:02.20 .net] 中置関数 (-) : int -> int -> int ががっつり int_of_float を引数に取っているわけで。 int_of_float (-0.7) で使ってください。
548 名前:デフォルトの名無しさん mailto:sage [2012/07/25(水) 22:13:31.14 .net] >>540 そういうことでしたか! ありがとうございます
549 名前:デフォルトの名無しさん mailto:sage [2012/07/28(土) 13:56:10.63 .net] >>541 ~-.0.7 と書いても良いね
550 名前:デフォルトの名無しさん mailto:sage [2012/07/29(日) 11:24:50.70 .net] いつの間にか OCaml4.00.0
551 名前:デフォルトの名無しさん mailto:sage [2012/07/29(日) 12:34:47.25 .net] 岡村4.00.0
552 名前:デフォルトの名無しさん mailto:sage [2012/07/30(月) 17:15:20.50 .net] OCaml コンパイルして、nativeなコード吐いて、不思議な実行のさせかたしてるのね
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);; とか通るし。