[過去ログ]
関数型言語ML (SML, OCaml, etc.), Part 6 (1002レス)
関数型言語ML (SML, OCaml, etc.), Part 6 http://mevius.5ch.net/test/read.cgi/tech/1245017721/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
567: デフォルトの名無しさん [sage] 2012/10/12(金) 17:55:16.91 >>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なら不可解な振る舞いは無く、現象を明解に説明できるよ.... ****) http://mevius.5ch.net/test/read.cgi/tech/1245017721/567
570: デフォルトの名無しさん [sage] 2012/10/13(土) 10:18:23.39 おお。皆さん回答ありがとう。 >> 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 の内容を辿るように頑張って実装すればイケるのか、 型理論的になにか問題があるのかよく分からない。 http://mevius.5ch.net/test/read.cgi/tech/1245017721/570
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.178s*