摆脱价值限制错误
在 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
我应该做什么才能将空列表作为参数传递而不触发值限制错误?
in 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".
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
What whould I do to be able to pass the empty list as argument without triggering a value restriction error ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我认为您必须在某个地方放置一个类型注释,要么在空列表上(如您所拥有的),要么在调用 last:
(last [] : int)
的结果上。I think you're going to have to put a type annotation somewhere, either on the empty list (as you have) or on the result of the call to last:
(last [] : int)
.你可以这样做
,但 fsi 会给你一个耳光,因为最后一个从未明确声明它的类型参数。
You can do
But fsi will give you a slapped wrist because last never explicitly declare it's type parameter.