[過去ログ] 関数型言語ML (SML, OCaml, etc.), Part 6 (949レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
835
(3): 2014/04/20(日)03:11 ID:8gJTdsza(1) AAS
初学者の質問で申し訳ないのですが、
type hoge ={ t : 'a. ('a -> 'a) -> 'a -> 'a };;
という型で'a.('a -> 'a)の「 . (ドット)」は何を意味するのでしょうか?
838: 2014/04/23(水)20:07 ID:yuYA7aLZ(1) AAS
>>835
型hogeは('a -> 'a) -> 'a -> 'aという関数tを持つものだよ、というだけなんだが、
まずその'a.っていう表記が無いとエラーが出る。
エラーメッセージに脊髄反射してtype 'a hoge = { t : ('a -> 'a) -> 'a -> 'a }と定義すると、
hoge型の値を作ったときint hogeとかstring hogeとかになって、
tも(int -> int) -> int -> intとかになっちゃう。
いや違う、オレはhoge型の値にidentity:'a -> 'aや(=): 'a -> 'a -> boolのように、多相性を持った関数tが欲しいんだって時に
'a.っていう表記を使う。

用途は何と問われるとちょっと困る程度にはマイナー。
841: 2014/04/23(水)22:41 ID:OJl2bhdr(1) AAS
基本的に、変数は(もし多相性を持っていても)初期化された時点で単相型になる
関数は呼び出されると引数が初期化されるのでその時点で単相型になる
関数自身を変数に入れると、呼び出してなくても変数を初期化しただけで単相型になる

>>835のhoge型の変数は基本とは違って、初期化しただけでは単相型にならないっぽい
843: 835 2014/04/24(木)21:17 ID:4Y8KSBKa(1) AAS
回答ありがとうございます。与えられたチャーチ数の定義がこれだったのですが、周りに聞いてもあまり良い回答を得られなかったので、とても助かりました。
確かにチャーチ数であれば、多相性が維持されなければ駄目ですね。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.037s