问题描述
|
在OCaml中
Objective Caml version 3.11.0
# let rec last l=
match l with
[] -> failwith(\"Empty list\")
|a::[] -> a
|a::r -> last r;;
val last : \'a list -> \'a = <fun>
# last [];;
Exception: Failure \"Empty list\".
在F#中
>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的调用结果上添加类型注释:
(last [] : int)
。
, 你可以做
last<obj> []
但是fsi会给您打耳光的感觉,因为最后永远不会显式声明它的type参数。