为什么我在第一种情况下出现错误,而在第二种情况下却没有?
Why am I getting an error in first case but not in second?
最近开始学习OCaml,遇到了以下问题:
*编写一个函数 last : 'a list -> 'a option
来 returns 列表的最后一个元素。 *
我尝试了以下代码:
# let rec last = function
| [] -> None
| _ :: t -> last t
| [x] -> Some x;;
我收到以下回复:
Characters 65-68:
Warning 11: this match case is unused.
val last : 'a list -> 'a option = <fun>
但是下面的代码编译没有错误:
# let rec last = function
| [] -> None
| [x] -> Some x
| _ :: t -> last t;;
给予回应
val last : 'a list -> 'a option = <fun>
所以,我的疑问是为什么仅仅通过更改顺序我就会收到错误消息?
任何意见和指导将不胜感激。
我在 programmers.stackexchange 上问了这个问题。根据建议,我在溢出时问。
在这一行中,
| _ :: t -> last t
什么是t
?这是一个列表!这意味着它可以是 (a :: a list)
的一个 cons cell,也可以是 []
。由于这种情况与第一种情况现在匹配所有可能的列表,因此无法达到第三种情况。
最近开始学习OCaml,遇到了以下问题:
*编写一个函数 last : 'a list -> 'a option
来 returns 列表的最后一个元素。 *
我尝试了以下代码:
# let rec last = function
| [] -> None
| _ :: t -> last t
| [x] -> Some x;;
我收到以下回复:
Characters 65-68:
Warning 11: this match case is unused.
val last : 'a list -> 'a option = <fun>
但是下面的代码编译没有错误:
# let rec last = function
| [] -> None
| [x] -> Some x
| _ :: t -> last t;;
给予回应
val last : 'a list -> 'a option = <fun>
所以,我的疑问是为什么仅仅通过更改顺序我就会收到错误消息?
任何意见和指导将不胜感激。
我在 programmers.stackexchange 上问了这个问题。根据建议,我在溢出时问。
在这一行中,
| _ :: t -> last t
什么是t
?这是一个列表!这意味着它可以是 (a :: a list)
的一个 cons cell,也可以是 []
。由于这种情况与第一种情况现在匹配所有可能的列表,因此无法达到第三种情况。