Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ocaml 签名不匹配';列表->';&x27中不包括Core.Std.List.t;列表->';t_Ocaml_Ocaml Core - Fatal编程技术网

Ocaml 签名不匹配';列表->';&x27中不包括Core.Std.List.t;列表->';t

Ocaml 签名不匹配';列表->';&x27中不包括Core.Std.List.t;列表->';t,ocaml,ocaml-core,Ocaml,Ocaml Core,我正在写《更多Ocaml》一书的第11章,在这一章中,您尝试以各种方式实现一个集合。这段代码大部分来自这本书,但我将其改为使用Core(和Core的列表)而不是stdlib open Core.Std;; open Printf;; module SetList : sig type 'a t;; val set_of_list : 'a list -> 'a t;; val list_of_set : 'a t -> 'a list;; val

我正在写《更多Ocaml》一书的第11章,在这一章中,您尝试以各种方式实现一个集合。这段代码大部分来自这本书,但我将其改为使用Core(和Core的列表)而不是stdlib

open Core.Std;;
open Printf;;

module SetList :
  sig
    type 'a t;;
    val set_of_list : 'a list -> 'a t;;
    val list_of_set : 'a t -> 'a list;;
    val insert : 'a -> 'a t -> 'a t;;
    val size : 'a t -> int;;
    val member : 'a t -> 'a -> bool;;
  end
=
  struct
    type 'a t = 'a list;;

    let member = List.mem ~equal:(=);;

    let insert x l = if member l x then l else x::l;;

    let rec set_of_list l = match l with
      [] -> []
      |h::t -> insert h (set_of_list t);;

    let list_of_set x = x;;

    let size = List.length;;
  end;;
这给了我一个错误
值不匹配:列表的val set\u:“'a list->'”a Core.Std.list.t不包括在列表的val set\u中:“a list->”a t


第一个问题,我该如何修复该错误?第二,也是更重要的一点,为什么编译器没有意识到
'a Core.Std.List.t
等于
'a t
,并与第15行给出的定义值相匹配

您遇到了值限制,需要扩展功能,例如

let member lst = List. ~equal:(=) lst
关于值限制,也就是SO中的弱类型多态性,有很多问题和答案,所以我认为快速搜索将揭示更多信息


'a Core.Std.List.t
'a List
的类型同义词,因此不会有任何问题。应该提醒您的部分是类型
“\u a
中的这一强烈下划线。这称为弱类型变量。

您遇到了值限制,需要扩展函数,例如

let member lst = List. ~equal:(=) lst
关于值限制,也就是SO中的弱类型多态性,有很多问题和答案,所以我认为快速搜索将揭示更多信息


'a Core.Std.List.t
'a List
的类型同义词,因此不会有任何问题。应该提醒您的部分是类型
“\u a
中的这一强烈下划线。这称为弱类型变量。

您遇到了值限制,需要扩展函数,例如

let member lst = List. ~equal:(=) lst
关于值限制,也就是SO中的弱类型多态性,有很多问题和答案,所以我认为快速搜索将揭示更多信息


'a Core.Std.List.t
'a List
的类型同义词,因此不会有任何问题。应该提醒您的部分是类型
“\u a
中的这一强烈下划线。这称为弱类型变量。

您遇到了值限制,需要扩展函数,例如

let member lst = List. ~equal:(=) lst
关于值限制,也就是SO中的弱类型多态性,有很多问题和答案,所以我认为快速搜索将揭示更多信息


'a Core.Std.List.t
'a List
的类型同义词,因此不会有任何问题。应该提醒您的部分是类型
“\u a
中的这一强烈下划线。这被称为弱类型变量。

您在错误上弄错了。如果我们给出选项-short path(在给出类型错误时尝试查找最小的类型别名),我们将得到以下错误:

   Values do not match:
     val set_of_list : '_a t -> '_a t
   is not included in
     val set_of_list : 'a t -> 'a t
因此
Core.Std.List.t
实际上等于
t
,编译器可以看到这一点。问题在于鬼鬼祟祟的
\uu

错误的原因是所谓的值限制。基本上,只有当值被绑定时,typechecker才能泛化(选择最通用的类型)。在您的例子中,cullprint是
成员的定义

如果以这种方式定义,错误将消失:

let member x = List.mem ~equal:(=) x
列表绑定到一个名称,因此typechecker可以进行泛化


如果编译器不能,它会生成一个“未知但不多态”(我们称之为单态)的类型变量,并在名称中添加
。第一次使用时,类型变量将被专门化。您可以尝试在顶层玩
让r=ref None
,以便更仔细地查看它。

您在错误上搞错了。如果我们给出选项-short path(在给出类型错误时尝试查找最小的类型别名),我们将得到以下错误:

   Values do not match:
     val set_of_list : '_a t -> '_a t
   is not included in
     val set_of_list : 'a t -> 'a t
因此
Core.Std.List.t
实际上等于
t
,编译器可以看到这一点。问题在于鬼鬼祟祟的
\uu

错误的原因是所谓的值限制。基本上,只有当值被绑定时,typechecker才能泛化(选择最通用的类型)。在您的例子中,cullprint是
成员的定义

如果以这种方式定义,错误将消失:

let member x = List.mem ~equal:(=) x
列表绑定到一个名称,因此typechecker可以进行泛化


如果编译器不能,它会生成一个“未知但不多态”(我们称之为单态)的类型变量,并在名称中添加
。第一次使用时,类型变量将被专门化。您可以尝试在顶层玩
让r=ref None
,以便更仔细地查看它。

您在错误上搞错了。如果我们给出选项-short path(在给出类型错误时尝试查找最小的类型别名),我们将得到以下错误:

   Values do not match:
     val set_of_list : '_a t -> '_a t
   is not included in
     val set_of_list : 'a t -> 'a t
因此
Core.Std.List.t
实际上等于
t
,编译器可以看到这一点。问题在于鬼鬼祟祟的
\uu

错误的原因是所谓的值限制。基本上,只有当值被绑定时,typechecker才能泛化(选择最通用的类型)。在您的例子中,cullprint是
成员的定义

如果以这种方式定义,错误将消失:

let member x = List.mem ~equal:(=) x
列表绑定到一个名称,因此typechecker可以进行泛化


如果编译器不能,它会生成一个“未知但不多态”(我们称之为单态)的类型变量,并在名称中添加
。第一次使用时,类型变量将被专门化。您可以尝试在顶层玩
让r=ref None
,以便更仔细地查看它。

您在错误上搞错了。如果我们给出选项-short path(在给出类型错误时尝试查找最小的类型别名),我们将得到以下错误:

   Values do not match:
     val set_of_list : '_a t -> '_a t
   is not included in
     val set_of_list : 'a t -> 'a t
因此
Core.Std.List.t
实际上等于
t
,编译器可以看到这一点。问题是w