[表示 : 全て 最新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/

262 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 03:51:07 .net]
libcurlはWindows版では最新の7.19.7を入れました。
MinGWは最新のものを入れています。
ところで、jocaml.inria.fr/caml.inria.fr/ が落ちているのですが。

263 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 04:31:29 .net]
caml.inria.fr/pub/docs/manual-ocaml/manual032.html#toc135
ここの例通りにCでOcamlのモジュール使おうと試してるんだけどうまくいかない。
最後の手順の cc -o prog main.c mod.a -lcurses で詰まっています。
mod.a(startup.o):startup.c:(.text+0x9e): undefined reference to `__lseeki64'
mod.a(startup.o):startup.c:(.text+0x240): undefined reference to `__lseeki64'
mod.a(startup.o):startup.c:(.text+0x2e7): undefined reference to `__lseeki64'
mod.a(startup.o):startup.c:(.text+0x93b): undefined reference to `__beginthread'
mod.a(sys.o):sys.c:(.text+0x7): undefined reference to `__errno'
mod.a(sys.o):sys.c:(.text+0xf7): undefined reference to `__errno'
mod.a(sys.o):sys.c:(.text+0x101): undefined reference to `__errno'
mod.a(str.o):str.c:(.text+0x30f): undefined reference to `__imp___pctype'
mod.a(str.o):str.c:(.text+0x32c): undefined reference to `__isctype'
こんなエラーが大量に出る。
libcamlrun.aが怪しいと思うのだけれどどうすればいいかわからない。

環境はXPでCygwin Ocamlは3.10.2
Cygwinでocamlc -c modwrap.cすると何故かアクセスが拒否されるので modwrap.cとmod.mlのコンパイルはMinGWでやりました。


264 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 08:51:21 .net]
>>259
Cランタイムのシンボルを見つけられてない、ということで
>Cygwinでocamlc -c modwrap.cすると何故かアクセスが拒否されるので modwrap.cとmod.mlのコンパイルはMinGWでやりました。
が怪しい。
この部分MinGWとCygwinの互換性はあるの?Cygwin知らんけど、全部-mnocygwinならどうだろう。

265 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 09:28:15 .net]
>260
>この部分MinGWとCygwinの互換性はあるの?
エラーが出てるのは正に MinGW と Cygwin で互換性のなさそうな部分だね。

>259
>何故かアクセスが拒否される
modwrap.c を Windows ネイティブのアプリで編集していたりすると発生する場合もあるので
・Cygwin アプリで編集する
・mkpasswd とか使って /etc/passwd を見直してみる
・とりあえず chown / chmod してみる
・ACL 周りの設定を変えてみる(mount とか環境変数 CYGWIN とか)
あたりはどうだろ。

266 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 21:48:13 .net]
>>260
>>261
助言ありがとうございます。
レスを頼りにいろいろ試してみましたが、だめでした。
OcamlもCygwinも使ってまだ日が浅いので大事なところを見落としているのかもしれません。
今忙しいのであまり時間が取れないのですが、Cygwinで揃えてまたいろいろと試してみようと思います。
本当にありがとうございました。

267 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 21:54:14 .net]
Moscow ML 使ってみようと思ったら、もうずっと更新されてないんだね…

268 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 00:01:29 .net]
SchemeとMLは、心が洗われるわー

269 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 23:52:14 .net]
あー汚れてるんですね


270 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 10:15:16 .net]
はい



271 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 18:43:33 .net]
        

272 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 02:27:03 .net]
OCamlはCにembedできますか?

273 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 23:27:08 .net]
Milnerが亡くなったそうだね

274 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 23:32:10 .net]
lambda-the-ultimate.org/node/3863

ホントだ。ご冥福をお祈りします。
ML は勉強していて楽しかったです。

275 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 22:50:27 .net]
『プログラミングの基礎』 浅井健一著 を買ってポチポチ楽しく
やってるんですが、著者のサポートサイトに書いてあるように
やっても、未だに日本語の表示が出来ません。

ttp://pllab.is.ocha.ac.jp/~asai/book/Linux.html

環境はWinXPのVMPlayer上のDebian(lenny)でやってます。
端末でインタープリタ走らせてる場合も、Emacs上でtuareg-
modeでやってる場合も文字コードが表示されてしまいます。

助けてけろ〜

276 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 23:42:03 .net]
分からんけど、なんでLANG=en_USのISOなんとかなんだろ?ja_JP.eucJPとかじゃないのか

277 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 23:58:56 .net]
OCamlはoreilly本来ないね

278 名前:デフォルトの名無しさん mailto:sage [2010/04/11(日) 20:56:52 .net]
>>270
奥さん亡くなった三日後に心筋梗塞か。

279 名前:デフォルトの名無しさん mailto:sage [2010/04/11(日) 21:10:03 .net]
ご冥福をお祈りします。

280 名前:デフォルトの名無しさん mailto:sage [2010/04/12(月) 22:51:23 .net]
あの世で福??



281 名前:デフォルトの名無しさん [2010/04/21(水) 21:04:50 .net]
signatureのfunctorの使い方がよくわかりません。

signatureを受け取ってstructureを返すfunctor Aと、
signatureを受け取ってsignatureを返すfunctor Bを定義したとします。

signature CにAとBを適用したものをA(C), B(C)としたとき、
A(C)にB(C)を適用したstructureはどうしたら使えますか?

282 名前:277 mailto:sage [2010/04/21(水) 21:06:26 .net]
言い忘れました。OCamlの話です。

283 名前:277 mailto:sage [2010/04/21(水) 22:56:41 .net]
すみません、自己解決しました。

284 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 01:34:18 .net]
あれ?OCamlのfunctorってsignatureを受け取ったり返したり出来るの?
受け取るのも返すのstructureだけだと思ってた

285 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 01:38:21 .net]
ドキュメント読んでみたけど、
caml.inria.fr/pub/docs/manual-ocaml/manual019.html#toc67
やっぱりfunctorがsignatureを受け取れるようには見えないなぁ

286 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 12:26:40 .net]
質問していいですか。
'a * 'bの値を受け取り、型'aと'bが等しいか否かを判定する関数はo'camlで書けますか?

287 名前:デフォルトの名無しさん [2010/04/25(日) 22:33:07 .net]
>>283

288 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 22:54:26 .net]
>>284

289 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 00:03:13 .net]
>>282
何がしたいのか分からないけど
OCamlでは型情報は実行時には残っていないので
そういう型を扱うプログラムは一切かけないとおもう

290 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 21:09:56 .net]
OCamlってなんで最上位ビットをゴミ集め様に使っちゃうようにしたのかな。
なんか、これが凄くアダになってるように思えるのだが



291 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 20:51:34 .net]
Lisp系含めてわりと見かける仕様なんじゃ

292 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 20:07:48 .net]
$ sudo aptitude install ocaml
 …
以下の新規パッケージがインストールされます:
camlp4{a} ledit{a} libdrm2{a} libgl1-mesa-glx{a} libpthread-stubs0{a}
libpthread-stubs0-dev{a} libx11-dev{a} libxau-dev{a} libxaw7{a}
libxcb-xlib0-dev{a} libxcb1-dev{a} libxdmcp-dev{a} libxext-dev{a}
libxi-dev{a} libxmu6{a} libxpm4{a} libxtst6{a} libxv1{a} libxxf86dga1{a}
libxxf86vm1{a} ocaml ocaml-base{a} ocaml-base-nox{a} ocaml-interp{a}
ocaml-nox{a} tcl8.4{a} tk8.4{a} x11-utils{a} x11proto-core-dev{a}
x11proto-input-dev{a} x11proto-kb-dev{a} x11proto-xext-dev{a} xbitmaps{a}
xterm{a} xtrans-dev{a}
0 個のパッケージを更新、 35 個を新たにインストール、 0 個を削除予定、0 個が更新されていない。
29.4MB のアーカイブを取得する必要があります。 展開後に 97.0MB のディスク領域が新たに消費されます。

(#^ω^)ピキピキ

293 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 20:14:14 .net]
>>288
ocaml-nox

294 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 12:32:47 .net]
こそは自分でMakeだろJK

295 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 16:43:51 .net]
SML#は生きていた

296 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 01:19:01 .net]
音沙汰なくてちょっと諦めかけてたから新バージョンリリースめでたい

297 名前:デフォルトの名無しさん [2010/05/05(水) 04:16:18 .net]
OCamlの型で 'a. 'a list というのを見たんですけど、この「.」って何ですか?

298 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 07:24:38 .net]
「.」が何かと言われるとむずいな
「'a.」は「任意の型パラメータを'aとし、その'aついて...(for all)」の意味
例えば、
type 'a t = { e : 'a }
は'aを型パラメータに取るけど、
type 'a t = { e : 'a; p : 'b. 'b list }
とすると、任意の型'bをパラメータに持つ型をレコードの要素にできる
もちろん
type 'a t = { a : 'a; p : 'b list }
は'bがunboundだからエラー

299 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 15:33:12 .net]
>>294
ありがとうございます

300 名前:デフォルトの名無しさん [2010/05/15(土) 22:35:32 .net]
SMLにはレコード更新の機能がなく、日常的に苦労しているので、ネイティブコードが
はけるSML#のリリースは待ち遠しかった。
ただ、欲を言うと、レコード拡張も言語としてサポートして欲しかった。




301 名前:デフォルトの名無しさん mailto:sage [2010/05/16(日) 08:50:49 .net]
>SMLにはレコード更新の機能がなく、日常的に苦労している
すげえ、日常的にか。仕事に使ってるの?
>ただ、欲を言うと、レコード拡張も言語としてサポートして欲しかった。
レコード拡張って?

302 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 17:27:31 .net]
MLton って無限ストリーム使ったプログラムも最適化してくれるの?

303 名前:デフォルトの名無しさん [2010/05/18(火) 22:20:33 .net]
>>297
小規模な数値計算をしているだけで、すごいことはしていません。
Fortranで十分ですが、いくつかの部品を定義して、NJの対話環境
で評価することで、試行錯誤できて重宝してます。

レコードの拡張
連結と言うべきだった。
{a=1,b=2}#{c=3}
val it={a=1,b=2,c=3}
ができると嬉しい。

304 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 01:51:26 .net]
Vimのインデントファイルで
ocaml.vimやomlet.vimより
いいものありませんか?

305 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 21:02:03 .net]
MLで書くときはスタイルに悩むね。
inの前で改行すべきか?
連続するletはインデントすべきか?
などなど


306 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 23:36:50 .net]
スタイルは悩みますね。
今のところ連続するletもinの後も
インデントしないようにしています。

ただ、こう書きたいという思いがあっても
Vimのインデントファイルでは
うまくいかないことがあって困ります。

ユーザーの多そうなEmacsを使った方が
いいのかもしれません。ま、それを
言ったら関数型言語もHaskellということ
になるかもしれませんが…

307 名前:デフォルトの名無しさん [2010/06/04(金) 16:33:24 .net]
Ocamlで
let plus x y = x + y があるとき
xより先にyに代入する方法はあるますか?

308 名前:デフォルトの名無しさん [2010/06/04(金) 20:40:08 .net]
λ式を使えば良いのでは。
すでに、y = aの代入が決まっているときは、
(fun x -> plus x a)
まだのときは、
(fun y -> fun x -> plus x y)
を使う。
※SML使いなので、構文上の間違いはあるかもしれぬ。


309 名前:デフォルトの名無しさん [2010/06/04(金) 20:44:13 .net]
これも、一種のスタイル問題だが、
列挙型を定義するときに、
datatype X = X1 | X2 | X3 | ...
とするか
type X = int
val X1 = 1
val X2 = 2
...
とするかで悩んでしまう。最初は、vector (ランダムアクセス)を使わない
見込みだったのだが、必要になったときのことを心配してしまう。

310 名前:デフォルトの名無しさん [2010/06/04(金) 22:34:46 .net]
そういう心配をしなくていいくらいコンパイラの最適化は賢いから安心して代数データ型を使えという話をどこかで見た気がするのだがどこだか忘れてしまったな。



311 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 22:41:07 .net]
succ X1が欲しいという話だと思ったんだが。

……俺ならObj.magicしちゃうな

312 名前:デフォルトの名無しさん [2010/06/04(金) 22:44:58 .net]
d.hatena.ne.jp/sumii/20060918/1158537612
これだった。あんまり突っ込んだこと書かれてなかったな。でもこういう話じゃないの?

313 名前:デフォルトの名無しさん [2010/06/05(土) 18:55:54 .net]
>>304
ありがとうございます。

314 名前:デフォルトの名無しさん [2010/06/05(土) 23:46:13 .net]
>> 308, 307
ありがとうございます。そうです、O(1)で整数に変換できるかを心配していました。


315 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 00:10:32 .net]
O(1)での変換速度を気にしなきゃいけないくらい沢山定義するなら、
DEFINEマクロ使った方がいいんじゃないかなぁ。あ、OCamlの場合だけど。

(* compile with -pp "camlp4orf" *)
DEFINE A = 1
let _ = print_int A

316 名前:デフォルトの名無しさん [2010/06/14(月) 19:50:39 .net]
>> 311
Ocamlマクロ使えましたね。いいなぁ〜

317 名前:デフォルトの名無しさん [2010/06/14(月) 19:54:03 .net]
破壊的代入(参照型)の利用はひかえめに、とはいろんなガイド/教科書に書いて
あるけど、どの程度が許容範囲なんだろう。

与えられたリストの部分和を要素とするリストを返す関数を書いてみると、
破壊的代入を使ったバージョンが一番短く直観的に思う。

fun series xs =
(fn s => map (fn i => i + !s before s := !s + i) xs) (ref 0)

fun series2 xs =
(rev o #2) (foldl (fn (i,(s,ys)) => (i+s,(i+s)::ys)) (0,nil) xs)

fun series3' s (i::is) = (i+s) :: series3' (i+s) is
| series3' s nil = nil;
val series3 = series3' 0

関数プログラマ的には、どれがいいのだろう。
(もっといい書き方もあるかもしれない)



318 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 19:58:31 .net]
個人的にはこだわらずに破壊的代入もがんがん使えって思うけど、その前にmapの捜査順は前からって保証されてるのか?

319 名前:デフォルトの名無しさん [2010/06/14(月) 21:34:29 .net]
確かに、一般的には規格違反かもしれない。ちなみに
www.smlnj.org/doc/basis/pages/list.html
には
map f l
 applies f to each element of l from left to right, returning the list of results.
と書かれているが、"from left to right"を副作用を持つfを考慮して、そう書いているのか
は不明。

320 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 05:25:03 .net]
>>313
効率気にしないなら下のようにも.
fun series nil = nil
  | series (h::t) = h :: map (fn x => x + h) (series t)
効率を気にするなら,series3がいいと思った.
refを使うと現在の変数の状態を気にする必要があって大変.
series2はやってることはわかったけど,コードがなんとなく見づらい.



321 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 12:11:01 .net]
>現在の変数の状態を気にする必要があって大変
refが大変で、引数変数が大変でないと思う辺り、関数型言語プログラマだなあ。
俺はまだそこまでの境地には達してないや

322 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 18:09:00 .net]
「こんなこともあろうかと」いいながら、用意しておいたscanlを使うのが一番直感的。

323 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 20:47:50 .net]
なるほど scanl か
mapAccumL で満足しそうになっていた

324 名前:デフォルトの名無しさん [2010/06/17(木) 21:08:40 .net]
>> 316
ひさしぶりに何か美しいものを見た気がします。
>> 318,319
HaskellのData.Listにある関数ですね。GHCは入れてあるが、ほとんど使って
いないので、知らなかったのですが、いっぱい関数が用意されてますね。




325 名前:デフォルトの名無しさん [2010/06/18(金) 19:16:35 .net]
NJに付属するCMLって、multicore対応じゃないみたいですね。
(tar ballのToDoに書いてあった)
ノード内並列には使えない。残念。

326 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 19:31:43 .net]
SML なら Poly/ML がネイティブスレッドに対応してるよ

327 名前:デフォルトの名無しさん [2010/06/18(金) 20:52:49 .net]
>>322
ありがとうございます。
ここを www.polyml.org/Doc.html さらっと見てみましたが、
結構しっかりした実装のようですね。
これは、SML/NJからの移行を検討する価値がある。
他に、
- Windowsプログラミング
- FFIが簡単(のように見える)
が気に入った。

328 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 21:45:31 .net]
MLでGUIプログラミング、って時々やろうとするんだけど準備が面倒で挫折する。
lablgtk2とその依存ライブラリを標準で取り込んでくれ〜

329 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 19:42:48 .net]
ファンクターでモジュールを作ったときに実行される関数がほしいんだけど
OOのコンストラクタみたいなの

330 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 12:51:06 .net]
 V V
(´・ω・`) うさちゃんピース



331 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 15:03:08 .net]
長澤うさみ

332 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 01:03:21 .net]
>>325
module F (A : sig val x : int end) = struct
let _ = print_int A.x
end

このファンクターに適当なモジュールを適用してごらん

333 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 22:25:03 .net]
MLが関数型言語とか、最初に言い出したのは誰なのかしら

334 名前:名無しさん@そうだ選挙に行こう mailto:sage [2010/07/11(日) 11:47:27 .net]
 \                    /
   \  丶       i.   |      /     ./       /
    \  ヽ     i.   .|     /    /      /
      \  ヽ    i  |     /   /     /
   \
                                  -‐
  ー
 __          わ た し で す            --
     二          / ̄\           = 二
   ̄            | ^o^ |                 ̄
    -‐           \_/                ‐-

    /
            /               ヽ      \
    /                    丶     \
   /   /    /      |   i,      丶     \
 /    /    /       |    i,      丶     \ 

335 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 23:57:35 .net]
プログラミング言語ML
www.amazon.co.jp/dp/4756116418

J. D. Ullmanのこの本絶版になってたのか。
11年前に図書館で世話になったときは、面白かった。

336 名前:デフォルトの名無しさん mailto:sage [2010/08/06(金) 17:34:51 .net]
3.12.0来たのか

337 名前:デフォルトの名無しさん mailto:sage [2010/08/14(土) 16:35:21 .net]
OCaml出たばっかりなのに人が少ないってどういうことなの

338 名前:デフォルトの名無しさん mailto:sage [2010/08/16(月) 01:05:07 .net]
平和ってすばらしい

339 名前:デフォルトの名無しさん mailto:sage [2010/08/16(月) 01:22:01 .net]
windows用の最新版は3.11.0ってことですか?公式のリンクが切れてるという。。

340 名前:デフォルトの名無しさん mailto:sage [2010/08/16(月) 12:57:13 .net]
自分でビルドすればいいし、URLの修正ぐらい自分でやればいいし



341 名前:デフォルトの名無しさん mailto:sage [2010/08/21(土) 23:26:49 .net]
windows 3.11.0

ocaml.jp/Chapter%2024%20The%20threads%20library

>threads ライブラリを使用するプログラムは以下のようにリンクしてください:
>ocamlc -thread other options unix.cma threads.cma other files

って書いてあるのに

ocamlc -thread unix.cma threads.cma thread.ml
File "thread.ml", line 7, characters 8-21:
Error: Unbound value Thread.create

Threadはどこにあるんだ・・・


342 名前:デフォルトの名無しさん mailto:sage [2010/08/22(日) 01:37:10 .net]
いっこうにMacPortsにこねえ>3.12.0
なんか既存アプリ壊してるとかあるのかね

>>337
志村ー、"thread.ml"ー

343 名前:デフォルトの名無しさん mailto:sage [2010/08/22(日) 02:53:00 .net]
>>337
圧倒的感謝
悩んでた自分が馬鹿らしい つーか馬鹿だった

344 名前:デフォルトの名無しさん mailto:sage [2010/08/22(日) 02:54:15 .net]
ミス
>>338

345 名前:デフォルトの名無しさん mailto:sage [2010/08/23(月) 01:39:58 .net]
unitをどうやって代入させるかで数分悩んでしまった。

346 名前:デフォルトの名無しさん mailto:sage [2010/08/30(月) 15:11:49 .net]
可読なCに変換してくれるコンパイラはないのか


347 名前:デフォルトの名無しさん mailto:sage [2010/09/19(日) 08:18:17 .net]
これはOCamlの仕様書と思って良いのでしょうか?
ttp://caml.inria.fr/pub/docs/manual-ocaml/index.html

348 名前:デフォルトの名無しさん mailto:sage [2010/09/19(日) 22:05:30 .net]
仕様なんてない

349 名前:デフォルトの名無しさん [2010/09/21(火) 22:59:45 .net]
最近SML#が活発に更新されているようなので、0.56インストールしてみました。

集合演算を使ったプログラムを書こうとしているのですが、
CM周りの問題のせいか上手く動きません。

例えば、sml#では、

# structure SSet = RedBlackSetFn(struct type ord_key = string; val compare = String.compare end);
stdIn:1.18-1.94 Error: unbound functor: RedBlackSetFn

となります。smlだと、

- structure SSet = RedBlackSetFn(struct type ord_key = string; val compare = String.compare end);
[autoloading]
[library $SMLNJ-BASIS/basis.cm is stable]
[library $SMLNJ-LIB/Util/smlnj-lib.cm is stable]
[autoloading done]
structure SSet : ORD_SET?

と上手く動いています。

どのあたりを調べれば良いかのポインタだけでも構いませんので、
解決方法ご存知の方、教えていただけますでしょうか。

350 名前:デフォルトの名無しさん mailto:sage [2010/09/21(火) 23:10:05 .net]
SML#ってMSの.Net系言語だと思って無視してたんだけど、
全然関係無しなんだね。まぎらわしすぎw

解決方法でないレスでゴメソ >>345



351 名前:デフォルトの名無しさん mailto:sage [2010/09/22(水) 02:13:02 .net]
>>345
SML/NJだと自動でライブラリを読み込むようだが,SML#ではそうでないみたいね.
ソースの smlsharp-0.56/smlnj-lib/Util/redblack-set-fn.sml
にRedBlackSetFnが入ってるから,必要なファイル込みでuseすればいいんじゃないかな.

352 名前:345 mailto:sage [2010/09/22(水) 21:06:32 .net]
>>347
$prefix/lib/smlsharp/smlnj-lib/Util 以下に各set用のfunctorが
あったので、こちらをuseしてみたところ、
上手く動くようになりました。
ありがとうございます。

sml#ではCM上手く動かないのはやっぱり嫌だなぁ。
なんとかならないものか…

353 名前:デフォルトの名無しさん mailto:sage [2010/09/26(日) 18:45:17 .net]
初歩の初歩ですいません、symbolic nameって何?

ML for the working programmerを読み始めて早速引っ掛かってしまいました。

354 名前:デフォルトの名無しさん mailto:sage [2010/09/28(火) 01:50:38 .net]
alphabeticでない名前

355 名前:デフォルトの名無しさん mailto:sage [2010/10/16(土) 00:36:53 .net]
Jane StreetのCoreってOCaml 3.12に対応してる?
コンパイルに失敗する

356 名前:デフォルトの名無しさん mailto:sage [2010/10/24(日) 18:34:30 .net]
エディタの桁数はいくつに設定していますか?

357 名前:デフォルトの名無しさん mailto:sage [2010/11/10(水) 00:02:31 .net]
遅レスだけど、桁数は80でインデントは4。

:se nu ai sw=4 ts=4

358 名前:デフォルトの名無しさん mailto:sage [2010/11/10(水) 23:06:49 .net]
私も桁は80(インデントは2)。
でも無名関数を多用すると桁が足りなくなるので
増やすべきか悩む。横長モニタ買いたくなる。


359 名前:デフォルトの名無しさん [2010/11/11(木) 21:11:38 .net]
通常は80に設定しているが、MLを編集するときは、120に増す。
とはいえ、100を超えると読みにくくなるので、適当に折り返すことにしている。
ただ、このコーディングルールに従えばOK、というようなのがないので、
毎回困っている。

360 名前:デフォルトの名無しさん [2010/11/11(木) 21:19:26 .net]
>>305 解決策(SML/NJの場合の)が見つかった。
data label = A | B | C
Unsafe.cast A: int;
Unsafe.cast B: int;
Unsafe.cast C: int;
とすると、それぞれ0,1,2になる。




361 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 21:49:53 .net]
>>356
MLは初心者だけど、>>305は(コードの問題ではなく)設計の問題だと思う。

代数構造として、直積(組型やレコード型)と列(リスト型や配列型)は全く別の概念。
コンパイルの前に要素の数が決定できるなら直積を使うべきだし、
実行してみないと決定できないのなら列を使う。あるいは動的なシンボルで
ランダムアクセスしたいならハッシュ型を、更に順序性が必要ならB木型を。

これらすべてはプログラムの設計工程で決定しておくべきもの。
設計工程での不具合をコーディング工程で取り返そうとするのは、よくある過ち。
>>356の解決策というのは、いわゆる「泥縄」的手法。いずれ破綻する。

いくらMLが美しい言語でも、設計が汚ければコードはグチャグチャになるよ。
逆に、設計が適切であれば手続き型言語であっても美しいコードは書ける。

362 名前:デフォルトの名無しさん mailto:sage [2010/11/11(木) 21:54:05 .net]
そんな大仰な話でもないだろ。
Pascal、Modula系からMLやら(その他EiffelやらOberonやら)への流れで、
なぜか列挙型を配列のインデックスに使う機能が捨てられた悲しいね、ってだけの話だ。






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

前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