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".
In 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会给你一记耳光,因为last从来没有明确声明它的类型参数。