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
消除值限制错误 在OCaml中 目标Caml版本3.11.0 #让记录最后一次= 匹配 []->failwith(“空列表”) |a::[]->a |a::r->last r;; val last:'列表->'a= #最后[];; 异常:失败“空列表”。 在F# >让rec last l= 匹配 []->failwith(“空列表”) |a::[]->a |a::r->last r;; val last:“列表->”a >最后[];; 最后[];; ^^^^^^^ 标准输入(8,1):错误FS0030:限制值。。。。 >最后([]:int list);; 系统异常:空列表 最后[a](FSharpList`1l) $FSI_0003.main@() 存在的理由_F#_Ocaml_Value Restriction - Fatal编程技术网

消除值限制错误 在OCaml中 目标Caml版本3.11.0 #让记录最后一次= 匹配 []->failwith(“空列表”) |a::[]->a |a::r->last r;; val last:'列表->'a= #最后[];; 异常:失败“空列表”。 在F# >让rec last l= 匹配 []->failwith(“空列表”) |a::[]->a |a::r->last r;; val last:“列表->”a >最后[];; 最后[];; ^^^^^^^ 标准输入(8,1):错误FS0030:限制值。。。。 >最后([]:int list);; 系统异常:空列表 最后[a](FSharpList`1l) $FSI_0003.main@() 存在的理由

消除值限制错误 在OCaml中 目标Caml版本3.11.0 #让记录最后一次= 匹配 []->failwith(“空列表”) |a::[]->a |a::r->last r;; val last:'列表->'a= #最后[];; 异常:失败“空列表”。 在F# >让rec last l= 匹配 []->failwith(“空列表”) |a::[]->a |a::r->last r;; val last:“列表->”a >最后[];; 最后[];; ^^^^^^^ 标准输入(8,1):错误FS0030:限制值。。。。 >最后([]:int list);; 系统异常:空列表 最后[a](FSharpList`1l) $FSI_0003.main@() 存在的理由,f#,ocaml,value-restriction,F#,Ocaml,Value Restriction,我该怎么做才能在不触发值限制错误的情况下将空列表作为参数传递?我认为您必须在空列表(如您所做)或调用last:(last[]:int)的结果的某个位置放置类型注释。您可以这样做 last<obj> [] last[] 但是fsi会给你一记耳光,因为last从未明确声明它的类型参数。@Johan-想象一下,你的第一个案例返回了未选中的.defaultof,而不是抛出异常。那么在解释器中,last[]会给您带来什么呢?它会带来另一种类型的异常?只是猜测而已。在我写这篇文章的时候(20

我该怎么做才能在不触发值限制错误的情况下将空列表作为参数传递?

我认为您必须在空列表(如您所做)或调用last:
(last[]:int)的结果的某个位置放置类型注释。

您可以这样做

last<obj> []
last[]

但是fsi会给你一记耳光,因为last从未明确声明它的类型参数。

@Johan-想象一下,你的第一个案例返回了
未选中的.defaultof
,而不是抛出异常。那么在解释器中,
last[]
会给您带来什么呢?它会带来另一种类型的异常?只是猜测而已。在我写这篇文章的时候(2011-06-16),似乎没有更好的方法了。可能也看到了
>let rec last l = 
    match l with
    [] -> failwith("Empty list")
    | a::[] -> a
    | a::r -> last r;;

val last : 'a list -> 'a

>last [];;
 last [];;
 ^^^^^^^

 stdin(8,1): error FS0030: Restriction de valeur....

>last ([]:int list);;

System.Exception: Empty list
   à FSI_0002.last[a](FSharpList`1 l)
   à <StartupCode$FSI_0003>.$FSI_0003.main@()
Arrêt en raison d'une erreur
last<obj> []