3

在 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

我应该怎么做才能将空列表作为参数传递而不触发值限制错误?

4

2 回答 2

1

我认为您将不得不在空列表(如您所拥有的)或调用 last: 的结果上的某处放置类型注释(last [] : int)

于 2011-06-15T14:13:57.070 回答
0

你可以做

last<obj> []

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

于 2011-06-15T14:14:37.947 回答