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 は型パラメータであることを明示的に宣言しないため、手首を平手打ちします。

于 2011-06-15T14:14:37.947 に答える