.net 夏普方法签名
返回此值的函数的第一行应该是什么 val memberof:'a*'a list->bool when'a:equality 我试过下面的街区,但没有成功。代码本身可以工作,但是当我在解释器中输入时,我会得到一个额外的标记.net 夏普方法签名,.net,f#,functional-programming,.net,F#,Functional Programming,返回此值的函数的第一行应该是什么 val memberof:'a*'a list->bool when'a:equality 我试过下面的街区,但没有成功。代码本身可以工作,但是当我在解释器中输入时,我会得到一个额外的标记 let rec memberof (a, list)= match list with | [] ->false | x::xs -> if x=a then true else memberof(a, xs) 我得到的是
let rec memberof (a, list)=
match list with
| [] ->false
| x::xs -> if x=a then true else memberof(a, xs)
我得到的是
val memberof:a:'a*列表:'a列表->布尔当'a:相等时
我怎样才能摆脱a:在a之前?谢谢类型签名中
:
前面的a
和列表
只是函数所采用的两个参数的名称。您可以看到,如果重命名它们,签名也会更改:
> 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
类型签名中
:
前面的a
和列表
只是函数使用的两个参数的名称。您可以看到,如果重命名它们,签名也会更改:
> 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
谢谢,我想知道这个,因为这个函数的预期输出格式是事先给我的。我知道a和list是参数的名称,但编译器无法映射它们似乎是一个很好的解释。谢谢,我想知道这一点,因为这个函数的预期输出格式是事先提供给我的。我知道和列表是参数的名称,但编译器无法映射它们似乎是一个很好的解释。