Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 夏普方法签名_.net_F#_Functional Programming - Fatal编程技术网

.net 夏普方法签名

.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) 我得到的是

返回此值的函数的第一行应该是什么

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)
我得到的是

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是参数的名称,但编译器无法映射它们似乎是一个很好的解释。谢谢,我想知道这一点,因为这个函数的预期输出格式是事先提供给我的。我知道和列表是参数的名称,但编译器无法映射它们似乎是一个很好的解释。