Избавление от ошибок ограничения стоимости - PullRequest
3 голосов
/ 15 июня 2011

в 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

Что я должен сделать, чтобы иметь возможность передавать пустой список в качестве аргумента, не вызывая ошибку ограничения значения?

Ответы [ 2 ]

1 голос
/ 15 июня 2011

Я думаю, вам нужно будет где-то поместить аннотацию типа, либо в пустой список (как у вас), либо в результате последнего вызова: (last [] : int).

0 голосов
/ 15 июня 2011

Вы можете сделать

last<obj> []

Но fsi даст вам пощечину, потому что последний никогда явно не объявляет свой параметр типа.

...