Functional programming 是`有趣的x->;x`唯一具有类型';a->';一个用OCaml写的?
题目很简单,就是这个问题 标识函数Functional programming 是`有趣的x->;x`唯一具有类型';a->';一个用OCaml写的?,functional-programming,ocaml,Functional Programming,Ocaml,题目很简单,就是这个问题 标识函数funx->x的类型为'a->'a 是否有任何其他功能具有相同类型的'a->'a? 我想不出别的了。不 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)
funx->x
的类型为'a->'a
是否有任何其他功能具有相同类型的'a->'a
?
我想不出别的了。不
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);;
identity函数是total编程语言中
'a->'a
的唯一驻留函数,没有任何副作用,包括非终止。OCaml和Haskell都不符合条件,但一些用作证明助手的语言(在这种情况下,总体性很重要)符合条件,特别是Coq(它具有用于表示此类型的非指示性多态性)。部分函数应用程序也可以提供任意数量的证明助手,对吗?如果你有'b->'a->'a,并将其应用于'b,你会得到'a->'a@plinth:你必须这样做,但一定要这样做。然而,我不认为这有什么区别:我的意思是你可以自己计算应用程序的结果,你会得到一个可以直接表达为'a->'a
的封闭程序,类似于我上面给出的那些程序。