类型错误 OCaml
Type-error OCaml
我实际上是一名计算机科学专业的法国学生,我正在学习一门名为“高级编程”的课程。出于本课程的目的,我需要在 OCaml 中开发游戏......blablabla......但我面临着一个我无法独自解决的问题。
正如您在下面看到的,我创建了一个名为 l_exists 的函数(我认为它是 List.exists 的扩展,具有我期望的行为)。该函数 return 符合谓词的元素列表。
问题是"meme_pos"。我有一个类型错误,但我不明白为什么,因为类型 objet 也是一种位置。所以,如果有人能告诉我出了什么问题以及如何避免它。我会很满意的。
顺便说一下,对不起我的英语。我尽力了:/
type position = { i : int; j : int }
type objet =
| Robot of position
| Debris of position
let l_exists p li arg_s =
let rec aux l acc = match l with
|[] -> acc
|x::xs -> aux xs (if(p arg_s x) then x::acc else acc)
in aux li []
val l_exists : ('a -> 'b -> bool) -> 'b list -> 'a -> 'b list = <fun>
let meme_pos pos (objetl:objet list) =
let p_pos_egale (pos1:position) (pos2:position) =
if(pos1=pos2) then true else false
in l_exists p_pos_egale objetl pos
Error: This expression has type objet list but an expression was expected of type position list.
Type objet is not compatible with type position.
Expression : in l_exists p_pos_egale objetl pos
val l_exists : ('a -> 'b -> bool) -> 'b list -> 'a -> 'b list = <fun
您声明p_pos_egale
:
let p_pos_egale (pos1:position) (pos2:position) = pos1=pos2
然后你写
l_exists p_pos_egale objetl pos
让我们将 l_exists
应用到 p_pos_egale
:
# l_exists p_pos_egale;;
- : position list -> position -> position list = <fun>
如果将 p_pos_egale
替换为 l_exists
,您会看到 'a
与 'b
相同,即 position
。 OCaml 决定 objetl
应该是一个位置列表,但是您在 meme_pos
定义中手动指定了类型 objel list
。所以,出现这个错误。
您很可能需要重写您的 p_pos_egale
定义。它的类型应该是 objel -> position -> bool
。
我实际上是一名计算机科学专业的法国学生,我正在学习一门名为“高级编程”的课程。出于本课程的目的,我需要在 OCaml 中开发游戏......blablabla......但我面临着一个我无法独自解决的问题。
正如您在下面看到的,我创建了一个名为 l_exists 的函数(我认为它是 List.exists 的扩展,具有我期望的行为)。该函数 return 符合谓词的元素列表。
问题是"meme_pos"。我有一个类型错误,但我不明白为什么,因为类型 objet 也是一种位置。所以,如果有人能告诉我出了什么问题以及如何避免它。我会很满意的。
顺便说一下,对不起我的英语。我尽力了:/
type position = { i : int; j : int }
type objet =
| Robot of position
| Debris of position
let l_exists p li arg_s =
let rec aux l acc = match l with
|[] -> acc
|x::xs -> aux xs (if(p arg_s x) then x::acc else acc)
in aux li []
val l_exists : ('a -> 'b -> bool) -> 'b list -> 'a -> 'b list = <fun>
let meme_pos pos (objetl:objet list) =
let p_pos_egale (pos1:position) (pos2:position) =
if(pos1=pos2) then true else false
in l_exists p_pos_egale objetl pos
Error: This expression has type objet list but an expression was expected of type position list.
Type objet is not compatible with type position.
Expression : in l_exists p_pos_egale objetl pos
val l_exists : ('a -> 'b -> bool) -> 'b list -> 'a -> 'b list = <fun
您声明p_pos_egale
:
let p_pos_egale (pos1:position) (pos2:position) = pos1=pos2
然后你写
l_exists p_pos_egale objetl pos
让我们将 l_exists
应用到 p_pos_egale
:
# l_exists p_pos_egale;;
- : position list -> position -> position list = <fun>
如果将 p_pos_egale
替换为 l_exists
,您会看到 'a
与 'b
相同,即 position
。 OCaml 决定 objetl
应该是一个位置列表,但是您在 meme_pos
定义中手动指定了类型 objel list
。所以,出现这个错误。
您很可能需要重写您的 p_pos_egale
定义。它的类型应该是 objel -> position -> bool
。