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/
62 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 23:13:22 .net] > OCaml : こ…ここがWindowsだったのか…!感じる…Javaの魔力を… ワロタ
63 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 00:05:56 .net] F#ってOCamlとどれほど違うの?
64 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 00:40:01 .net] >>62 F#スレにこんなのあったよ 553 名前:デフォルトの名無しさん[sage] 投稿日:2009/06/01(月) 22:32:37 >>552 OCamlのみ 多相ヴァリアント、ファンクタ、注釈ありで型がつく箇所では省略しても必ず型推論できる性質 Camlp4/5、ビルド関係のツール(F#はしょぼい) オブジェクト指向部分は根本的に違う(nominal/structural)
65 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 00:47:26 .net] >>63 ありがとう。なんか半分以上わからないけど。わかった事にしとく。
66 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 02:30:58 .net] >>60 ワロタw WindowsのWindowにやられたww
67 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 11:26:18 .net] >>50 caml-list で Harrop が New HLVM examples! というサブジェクトで騒いでるから、それ見て、判断して。
68 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 11:37:09 .net] >>63 ここで聞くのもアレだけど 型推論が残念なことになったのは演算子のオーバーロードのせい?
69 名前:デフォルトの名無しさん mailto:sage [2009/06/25(木) 21:23:16 .net] >Java : そうか そうかってwww どんだけスルー
70 名前:デフォルトの名無しさん [2009/06/26(金) 03:32:33 .net] List.fold_left (fun (x,_) y -> x + y) 0 [(1,1)];; を通そうとしたところ This expression has type int but is here used with type int * 'a といわれてしまいます。うまい方法はないのでしょうか?
71 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 04:50:58 .net] >>69 高階関数の引数が順番逆なだけじゃね フォールドライトならそれでおkかも
72 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 11:43:48 .net] すいません スレよごしてしまって .... おっしゃる通りでした .... orz
73 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 12:25:05 .net] fold 辺りまで来たら、フィーリングでデバッグするんじゃなくて、 ちゃんと型を確認しだしたほうがいいね。
74 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 22:06:11 .net] itpro.nikkeibp.co.jp/article/COLUMN/20061212/256657/?ST=develop ↑ここを読んでいて、LablGLをインストールしようとして失敗しました。 どうしたらいいか教えてください。 OSはWindowsXPです。 ・lablgl-1.04-win32.zipをObjective Caml以下のディレクトリに直接展開しました。 ・Microsoft Visual C++ 2008 Redistributable Package (x86).をインストールしました。 ・glut-3.7.6-bin.zipをダウンロードし、glut32.dllをsystem32フォルダにコピーしました。 ・コマンドプロンプトを開き、 C:\Program Files\Objective Caml\lib\lablGLまで移動し、 ocaml build.mlをコマンドプロンプトから実行しました。 途中までは走っていたのですが、以下のようにエラーが出ました。 C:/Tcl/lib tk84.lib tcl84.lib gdi32.lib user32.lib " togl.cmo ocamlc.opt -w s -I +labltk -a -o lablglut.cma -cclib -llablglut -dllib -llablglu t -cclib "glut32.lib " glut.cmo ocamlopt.opt -w s -I +labltk -c raw.ml 'ml' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 File "raw.ml", line 1, characters 0-1: Error: Assembler error, input left in file C:\DOCUME~1\****<※ユーザ名>\LOCALS~1\Temp\camla smd25ac5.asm Native build failed: error 2 You can still use the bytecode version Now ready to use on an OCaml MSVC port ※ここまで またコマンドプロンプトから > lablglut を実行した際にもエラーが出ました。 Cannot load required shared library dlllablgl. Reason: C:\Program Files\Objective Caml\lib\stublibs\dlllablgl.dll: このアプリケ ーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケ ーションを再度インストールすることにより問題が解決する場合があります。 ※ここまで
75 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 22:25:15 .net] 原因はわからんが、参考までに labltkはインストールしてるか ocamlはネイティブコンパイラまでインストール済か Activetclはバージョン8.5系だと動かなかったので8.4を入れる build.mlを実行した際に cygwinのlink.exeが使われるとエラーになるので 環境変数からcygwinのパスをはずす glutはそれと同じバージョンで動いたよ
76 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 03:11:27 .net] >>74 レスありがとうございます。 ですがどうも上手く行かないので、悩んでいます。 どこかで薦められてOCamlは "Self installer (3.11.0) for the port based on the MinGW toolchain" が入ってますが、Cygwin入れてないんです。これが原因なのかなぁ。 Cygwin以前入れたのですが今は外してしまってます。 近いうちに再度Cygwinをインストールしてみることにします。 読み進めたいので、このまま>>73 の第五回は一応読むだけ読んで、 次に行きたいと思います。
77 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 13:21:20 .net] ocaml用のサウンドライブラリ(スピーカーから音を出したりマイクの音を拾ったり)で一番ポピュラーなのって何かな?
78 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 13:34:48 .net] >>76 OCamlSDL でサポートしてなかったら自作して公開よろ。
79 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 13:40:59 .net] >>77 だって、作るとしたらWin32APIとかOSSとかALSAとかいろいろサポートして、なおかつメンテもしないといけないんでしょう? 嫌ですよ。
80 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 16:08:25 .net] >>78 うわなんかヘタレられた。 自分のやりたいAPIのインターフェースだけ作りゃいいじゃん。 メンテもしたけりゃするだけでいいじゃん。 初期化とかは何かのライブラリ関数呼ぶだけだし。 やりたいことはほとんどデバイスから ノンブロッキングに読んだり書いたりするだけで大抵出来るっしょ。
81 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 17:35:00 .net] >>79 そんな俺しか使わないライブラリを公開するぐらいなら、公開せずに手元に持っておいて、作り溜めしときますよ。
82 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 20:12:55 .net] >>75 俺もなんかそうなる。 OCamlは3.10.2でLablGLは1.03にもどしたら上手くいった
83 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 21:04:21 .net] >>81 ありがとうございます。1.03にしたら "OCaml build.ml"は上手く行ったようです。 しかし 「ocamlrun.exe - コンポーネントが見つかりません ocamlrun.dll が見つからなかったため、このアプリケーションを開始できませんでした。」 となってしまいまたもや失敗。 >>73 のリンク先を見るとLablGLのインストールが失敗してるというのですが インストールしなおしても同じエラーメッセージが出ます。はてさて。 OCaml本体は"ocaml-3.11.0-win-msvc.exe"をインストールしなおしました。
84 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:06:31 .net] Windowsだとライブラリのビルドでつまづくことが多いよね。 OcamlSDL関連のビルドで上手くいなかくてビルドを諦めた。 OCaml自体はプログラミング入門者にも比較的優しいと 思うけど環境は若干敷居が高めだと思う。 んでWindows使うのが悪いとかいわれちゃうとしょんぼりする。 そもそもLinux系を使うこと自体、本職でない人にとっては 普通ではないわけで。
85 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:14:49 .net] あれぇ?書き込めた。どうせアク禁の巻き添えで書き込めないだろうと 勉強不足を棚に上げた愚痴>>83 を書いてみたら・・・。 ごめんなさい。反省しています。
86 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:15:43 .net] OCamlユーザは計算機科学の研究者が多いんだから、それは仕方ないだろ
87 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:17:23 .net] 教育用というか初心者向けのサイトですらUNIX前提の記述が多いように思えるけどな。
88 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:17:58 .net] UnixやLinuxがプログラミング教育に適しているからだろう。
89 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:18:10 .net] >>85 >>86 うん。わかってはいるんだ。あんな書き込みをしてしまってごめんとしかいいようがない。
90 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:29:17 .net] まあ、ドザーはおとなしくF#でも弄ってなさいって事だw
91 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 23:16:11 .net] >>82 (いまさらだが)OCamlのReadmeを見ると MinGWの場合は Do *not* install the Mingw/MSYS development tools from www.mingw.org: these are not compatible with this Caml port (@responsefile not recognized on the command line). って書いてあるからCygwinが必要なんだと思われる。 英語は雰囲気で読んでいるので間違っていたら誰かやさしく叱ってくれ。
92 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 23:40:30 .net] >>84 > あれぇ?書き込めた。どうせアク禁の巻き添えで書き込めないだろうと > 勉強不足を棚に上げた愚痴>>83 を書いてみたら・・・。 この精神でビルドがんばれ。 どうせビルドできないと思ってもできるかも。
93 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 00:26:31 .net] いやcygwin/mingw系はさっさとあきらめるのが吉だと思う
94 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 03:36:38 .net] >>89 そんなこと言ってるから関数型はいつまでたってもドマイナーなんだよ
95 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 04:59:31 .net] それって何か問題があるんだっけ?
96 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 12:32:44 .net] スレとは関係ないが、東北型言語を使用する俺は「だっけ?」が方言かどうかわからなくなるときがある。
97 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 12:45:46 .net] そうですけ?
98 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 12:50:27 .net] >>95 それは、ずいぶん、どい なか です ね
99 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 13:13:58 .net] 東北型言語と聞いたら、語尾に#を付けるんだと思った。
100 名前:82 mailto:sage [2009/06/30(火) 17:56:45 .net] そういうもんなんだとあきらめる事にしましたw 結局Cygwinなんか入れるよりもお勉強用のLinuxマシンを用意した方が早そうですね。 レス頂いてありがとうございます。
101 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 18:50:55 .net] >>99 完全にスレチだが、別にマシンを用意しなくても仮想環境を使えば楽なのに。
102 名前:82 mailto:sage [2009/06/30(火) 18:57:35 .net] セレロン1G、メモリ256Mしかないノートなんです。仮想環境は無理では。 Knopixとかならできるのかな?
103 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 23:12:27 .net] >>101 virtual boxでdebianがおすすめです。 かなり低スペックでも動いて、何よりaptーgetでocamlも含め、たいていのライブラリが簡単にインストール出来ます。
104 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 00:05:15 .net] プログラミングinOCamlの練習問題5.6 @を使わずにquick_sortを書き換えよ ヒント:引数を一つ増やして整列済みのリストを受け取る ってやつが解けまへん。。 教えて、偉い人
105 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 01:27:12 .net] >>102 まじっすかー!ありがとうございます。 今Ubuntuのデュアルブート環境作成厨…orz ウブンツ重かったらそちらを試してみます。
106 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 01:35:56 .net] >>103 本読んでないけど末尾再帰じゃないすかね。
107 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 08:39:57 .net] >>104 apt getはububtuもdebianもほぼ同じなので、ububtuでも大丈夫ですよ。
108 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 16:48:02 .net] virtual box + debian + OCamlで作成したネイティブコードはやっぱり Windows上では動かないん?会社がWindowsだから・・・。 動くなら今すぐそっちの環境に移行したい。
109 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 16:55:45 .net] &g
110 名前:t;>107 当然動く訳無い。 大体Linux上で生成されるオブジェクトファイルはELFフォーマットだし。 [] [ここ壊れてます]
111 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 21:24:54 .net] OCamlってLLVMのコード吐けるんじゃなかったっけ
112 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 09:07:04 .net] >>109 憶測で物を言うな。吐かない。終わり。
113 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 09:15:48 .net] LLVMのocamlバインディングはある。という話と取り違えたのかな。
114 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 12:14:41 .net] >>110 終わったところすまないが、>>109 は吐ける!と断定しているわけではないから もう少し生暖かくてもいいと思うんだ。
115 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 12:49:21 .net] >>112 >>110 はいい加減なこと言う奴にうんざりしてるんだろうな。 この板はそんな奴ばかりだから、せめてソースくらい示さないと。
116 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 05:15:37 .net] LLVMのコード吐けるようにしようぜ、という話だけなら有った気がするが
117 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 08:55:56 .net] >>114 しーっ!そういうこと言うと 憶測で(ry とか言われちゃう
118 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 12:38:28 .net] >>103 「書き換えよ」とか「引数を一つ増やして」といわれても元々のコードがないと 答えられないぜよ。
119 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 17:08:59 .net] 偉い人は プログラミング in OCaml を買ってないので答えられないのではないか。
120 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 18:05:20 .net] >>117 そういえばOcaml-nagoyaの連中(有限会社ITプランニング)ってどうなったの? なんか公式サイトにつながらないんだけど。
121 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 19:23:03 .net] OCamlは大文字で始まるidはconstructor扱いになるんだな SMLのコードを移植していてはまった
122 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 11:16:05 .net] ocaml触ってみたんだけど、やっぱりライブラリが少ないね。 練習でちょっとしたものを作ろうとしたけど、ライブラリの少なさでたちまち不便で止まってしまった。
123 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 11:52:02 .net] そんなに副作用たっぷりのコードを書きたいならF#でも使えばいいのに
124 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 12:10:39 .net] 副作用の無いライブラリを作るのは難しいの?
125 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 12:19:32 .net] >>122 HaskellならMonad IOがスタンダードだが、OCamlにはないからね。 IOはどうしても副作用になってしまう。
126 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 12:32:25 .net] それでF#でも使えと言われると辛いね…
127 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 13:37:39 .net] >>120 どんなライブラリが欲しかったのん?
128 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 13:58:47 .net] >>118 憶測(ry じゃなくて、本が違う。 ITplan は知らんけど、一日ぐらいサイトが落ちてていいだろ。週末だし。
129 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 14:19:25 .net] >>126 どうでも良いけど、365日接続できないサイト運営してる時点で技術力を疑う。
130 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 14:34:19 .net] 休日にメンテなら仕方ないけど、平日の夕方に落ちてるのは問題だな。
131 名前:ogasawara mailto:sage [2009/07/04(土) 17:30:22 .net] >>118 ,126,127,128 恐縮です。うちが契約してるデータセンター屋さんの電源障害だそうで、何ともならなくて。 そろそろ復活するらしいのですが、うーん。
132 名前:ogasawara mailto:sage [2009/07/05(日) 09:28:07 .net] >>120 The Caml Hump(caml.inria.fr//cgi-bin/hump.en.cgi )という ところがあって、ここでライブラリを探すとかなり見付かりますよ。 CGI、DB接続、GUI、UTF-8、アルゴリズム色々など有ます。
133 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 15:57:43 .net] 質問です。match文に関する質問です。 これは文法の慣習みたいなものかなと思うんですがどうなのかなぁと。 リストを受け取って何かを返す関数の場合、リストの要素が組やレコードだと match文の中にmatch文を書くことがありますが、match文ではなく直接パターンマッチさせる書き方の方が 良いのでしょうか? >>83 vmwareを使ってxp上でubuntuを動かして、ocaml勉強してます。
134 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 16:48:01 .net] >>131 質問をするときはサンプルコードを示したほうが回答してもらいやすいよ。 この文章だと >match文ではなく直接パターンマッチさせる書き方の方が良いのでしょうか? あたりがわかりづらいと思われ。
135 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 17:28:04 .net] >>132 kekkonっていう関数で、anataというレコードが要素のリストを引数にして 条件に合う人数を返すとかいう場合に・・・ let rec kekkon anata = match anata with [] -> 0 | first :: rest -> (match first with {name = n; toshi = t; syunyu = s; tyotiku = t; sisan = s; youshi = y} -> 0 とかと書かずに、以下のように書くほうがいいのかなぁという質問です。 let rec kekkon anata = match anata with [] -> 0 | {name = n; toshi = t; syunyu = s; tyotiku = t; sisan = s; youshi = y} :: rest ->
136 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 17:44:47 .net] >>133 お好きな方を。ただ、 let rec kekkon anata = match anata with は let rec kekkon = function の方が簡潔。
137 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 17:46:33 .net] どっちでもいいんですね。どもです。
138 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 18:49:38 .net] >>133 このサンプルコードのように
139 名前:激Rードであれば直接アクセスするっていう手も あるよ。タプルの場合は状況にもよるけど2番目の方法が多いんじゃないかな。 [] [ここ壊れてます]
140 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 09:38:23 .net] record label に折角意味のある名前を付けてあるのに、 pattern match でワザワザ意味不明な変数に束縛するスタイルはおかしい。 そんなことするから s が二回束縛されてるヨ。 136 の言うように r.name とかでアクセスするほうが普通。
141 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 16:02:51 .net] データ構造について調べていたら ttp://en.wikipedia.org/wiki/VList のVlistというものを見つけたのですが、これはリストを使った 動的配列のようなものでしょうか。(英語が苦手のためよくわかりませんでした) また、OCamlで書くとどのようになるのでしょうか。 分かる方がいたら教えてください。
142 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 20:09:46 .net] まぁ、List.nth が妙に早い list と思えばいいね。 答えが欲しいの?それとも一緒に考えてほしいの? Okasaki には載ってないね。
143 名前:(* 〜 *) mailto:sage [2009/07/10(金) 22:04:04 .net] 長さが倍になっていくarrayが中身のリンクリストにしか見えないんですけど。 英語が読めなくても図は見えますよね。 構造はこんな感じでいいんじゃないの(図のまんま)。 type 'a vlisti = VLNil | VLCel of 'a vlisti * int * 'a array type 'a vlist = 'a vlisti * int 操作は自分で考えませう。
144 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 22:38:27 .net] >>140 ありがとうございます。コードのおかげでなんとなくですが イメージできました。(とはいってもこのデータ構造が どんな風にありがたいのかは、まだ理解できてはいないのですが・・・)
145 名前:139 mailto:sage [2009/07/11(土) 08:49:39 .net] 教育上は type 'a vlisti = VLNil | VLCel of 'a vlisti * int * 'a option array のほうが良いです。 140 だと埋まって無いトコを埋める値が必要ですね。(Obj.magic 0 などで埋めるのはダメ絶対。)
146 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 20:12:39 .net] ctags5.8でOCamlがサポートされたらしいよ。
147 名前:143 mailto:sage [2009/07/12(日) 20:52:01 .net] ctags -> Exuberant Ctagsに訂正。
148 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 08:02:09 .net] otagsがいらなくなると嬉しいな 微妙にctagsとオプションが違ったりするのがウザかったんだ
149 名前:デフォルトの名無しさん [2009/07/23(木) 08:24:19 .net] OCamlからCへのトランスレーターってありませんか?
150 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 09:00:30 .net] >>146 groups.google.com/group/fa.caml/browse_thread/thread/cc13807fa7204874/91529afa62a52640
151 名前:デフォルトの名無しさん [2009/07/25(土) 19:43:01 .net] OCamlで (('a -> 'b) -> 'a -> 'b) -> 'a -> 'b = <fun> int -> int = <fun> で型だけを指定して変数を宣言することはできますか?
152 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 23:52:22 .net] 変数何それ怖い というか何がやりたいのか全くわからん
153 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 00:07:08 .net] >>148 の型を持つ識別子なら定義出来る
154 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 00:07:51 .net] ただ、上は-rectypesなしで出来るかはわからん
155 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 20:13:20 .net] 型注釈を使った無名関数をかいていて、ふと閃いて fun (x:('a->'b)->(z:'a->'b)) z -> z;;としたところ - : (('a -> 'b) -> z:'a -> 'b) -> 'c -> 'c = <fun> のように受理されましたが、3つのうちの最初、z:'aのz はどういう意味があるのか わかりません。 fun (x:('a->'b)->(z:'a->'b)) -> z;; としてもzは拘束されていないようですし。
156 名前:148 mailto:sage [2009/07/26(日) 21:13:50 .net] それはxという識別子をxはintである、ということだけ指定して 宣言できるということですよね?やりかたを教えていただけますか?
157 名前:148/153 mailto:sage [2009/07/26(日) 21:15:14 .net] >>148 は >>149 >>150 様あてです。失礼しました。それと回答ありがとうございます。
158 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 22:59:56 .net] 変数が宣言できるとは言ってない ただ、関数の引数などにアノテーションすることで 関数の定義範囲を狭めることは出来る 普通の定義 let f x = x;; 型全体 let f x : int = x;; let f x : int ->int = x;; 引数 let f (x:int) = x;; let f (x:int->int) = x;; >>148 の上の型は、これを使って Yコンビネータの型をint->intで制限したもの
159 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 23:00:46 .net] int->intじゃなくて'a->'bだった
160 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 10:29:45 .net] 質問者はもう少し動機などを書き加えてほしい。推敲した上で。 背景説明無しに、間違った用語で質問されても答えられません。 逆に説明があれば、多少間違っていても回答者の方で正しく解釈できます。 148 だけだとホントに意味不明だが 153 からすると、C における int x; の様に「変数を宣言」できるか、というのが質問の意図だと思いますが、 ML では値の無い「識別子の束縛」は出来ません。 154、お前は未来に向けて話しているのか。 >>152 z:'a の z は識別子ではなくラベルです。後の z とは関係ありません。 文法をちゃんと確認して、ラベル付き引数の解説を読んでください。
161 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 12:36:02 .net] 切口上的に始まる親切なレス乙!
162 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 00:57:41 .net] val come_on : orz -> or2