长度函数的类型错误
Type error on a length function
我有一个非常有趣的第一个学习 OCaml 的项目,在创建一个像这样的个人 list
类型之后:
type 'a my_list = Item of ('a * 'a my_list) | Empty;;
然后像这样填写:
let num_list = Item (1, Item (2, Item(3, Empty)));;
我必须重新编写列表模块的许多功能,这些功能将适应我的新列表类型,如上所示。
我从 Length
开始,这听起来最简单,也是一个很好的开始。
这是我目前的情况:
let rec length my_list =
match my_list with
| [] -> 0
| head::rest -> 1 + (length rest);;
哪个定义正确:
val length : 'a list -> int = <fun>
但是当我传递新创建的列表时,出现以下错误:
Error: This expression has type int my_list
but an expression was expected of type 'a list
我错过了什么?
到目前为止,我很喜欢 OCaml,非常感谢您的帮助。
您实际上并不是在使用自己的 'a my_list
类型,而是使用原始的 'a list
。
您的函数必须进行模式匹配,不是 'a list
而是 'a my_list
:
let rec my_length my_list =
match my_list with
| Empty -> 0
| Item (_, rest) -> 1 + (my_length rest);;
您现在得到的类型是:
val my_length : 'a my_list -> int = <fun>
现在您正在使用自己的 'a my_list
类型。
我有一个非常有趣的第一个学习 OCaml 的项目,在创建一个像这样的个人 list
类型之后:
type 'a my_list = Item of ('a * 'a my_list) | Empty;;
然后像这样填写:
let num_list = Item (1, Item (2, Item(3, Empty)));;
我必须重新编写列表模块的许多功能,这些功能将适应我的新列表类型,如上所示。
我从 Length
开始,这听起来最简单,也是一个很好的开始。
这是我目前的情况:
let rec length my_list =
match my_list with
| [] -> 0
| head::rest -> 1 + (length rest);;
哪个定义正确:
val length : 'a list -> int = <fun>
但是当我传递新创建的列表时,出现以下错误:
Error: This expression has type int my_list but an expression was expected of type 'a list
我错过了什么?
到目前为止,我很喜欢 OCaml,非常感谢您的帮助。
您实际上并不是在使用自己的 'a my_list
类型,而是使用原始的 'a list
。
您的函数必须进行模式匹配,不是 'a list
而是 'a my_list
:
let rec my_length my_list =
match my_list with
| Empty -> 0
| Item (_, rest) -> 1 + (my_length rest);;
您现在得到的类型是:
val my_length : 'a my_list -> int = <fun>
现在您正在使用自己的 'a my_list
类型。