返回此值的函数的第一行应该是什么?
val memberof:'a *'列表 - > bool'a:equality
我尝试了以下块无济于事。代码本身可以工作,但是当我放入解释器时,我得到了一个额外的标签。
let rec memberof (a, list)=
match list with
| [] ->false
| x::xs -> if x=a then true else memberof(a, xs)
我得到的是
val memberof:a:'a * list:'列表 - > bool'a:equality
如何摆脱a:在'a?之前?感谢
答案 0 :(得分:4)
类型签名中a
之前的list
和:
只是您的函数所采用的两个参数的名称。您可以看到,如果重命名它们,签名也会更改:
> let rec memberof (element, inputList)=
match inputList with
| [] ->false
| x::xs -> if x=element then true else memberof(element, xs)
;;
val memberof : element:'a * inputList:'a list -> bool when 'a : equality
我不明白为什么你想要摆脱它们 - 它们只是类型签名的另一个有用部分。也就是说,如果您更改代码以便编译器无法直接将您使用的名称映射到参数,则会省略它。例如:
> let rec memberof arg =
let (element, inputList) = arg
match inputList with
| [] ->false
| x::xs -> if x=element then true else memberof(element, xs)
;;
val memberof : 'a * 'a list -> bool when 'a : equality