[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 09/01 11:11 / Filesize : 241 KB / Number-of Response : 1017
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

関数型言語ML (SML, OCaml, etc.), Part 6



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/

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

163 名前:デフォルトの名無しさん [2009/07/29(水) 13:23:33 .net]
>>159
ありがとうございます。Yコンビネータのようなものを作ろうとしていました。
非常に参考になりました。 

>>154が回答に感謝しているのは
>>150の、出来る、が回答になっていると思ったからなのですが。


164 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 21:32:04 .net]
(('a -> 'b) -> 'a -> 'b) -> 'a -> 'bという型の識別子を定義できる



Yコンビネータを定義できる

は100光年くらい離れてる気がする




165 名前:デフォルトの名無しさん [2009/08/15(土) 12:47:34 .net]
(///)のような演算子をつくってhaskellのようなリスとりてらるを部分的に実現したいです。
(3///5) == [3;4;5] みたいな感じ。
演算記号は何が適当ですか?

166 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 15:34:30 .net]
( -- ) をどっかのサンプルコードで見たな






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<241KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef