7

タイトルは簡単な質問です。

恒等関数fun x -> xのタイプは'a -> 'aです。

同じタイプの他の関数はあります'a -> 'aか?

私は別のことを考えることはできません。

4

1 に答える 1

15

いいえ。

fun x -> print_endline "foo"; x;;

(failwith "bang" : 'a -> 'a);;

(fun x -> failwith "bang" : 'a -> 'a);;

(fun x -> List.hd [] : 'a -> 'a);;

let rec f (x : 'a) : 'a = f x;;

let counter = ref 0;;
(fun x -> incr counter; x);;

恒等関数は、'a -> 'aプログラミング言語全体で唯一の住民であり、非終了を含む副作用はまったくありません。OCamlもHaskellも資格がありませんが、証明アシスタントとして使用されるいくつかの言語(この全体性が重要な場合)、特にCoq(このタイプを定式化するために使用される非叙述的なポリモーフィズムを持っています)は資格があります。

于 2013-01-17T14:31:16.463 に答える