我想编写一个函数,给定一个非负整数n,返回{1,...,n}的幂集.所以我想使用这里找到的Set.S模块.但我似乎无法导入它.当我运行以下代码时:
open Set.S
let rec power_set n =
if n = 0 then add empty empty else union (iter (add n s) power_set (n-1)) (power_set (n-1));;
let print_set s = SS.iter print_endline s;;
print_set (power_set 2)
Run Code Online (Sandbox Code Playgroud)
我收到错误:
File "countTopologies.ml", line 1, characters 5-10:
Error: Unbound module Set.S
Run Code Online (Sandbox Code Playgroud)
也许我只是没有在我的电脑上安装Set.S模块?(我只完成了安装OCaml所需的裸骨).如果是这种情况,我该怎么做?
的Set.S是一种模块类型不是一个模块.您只能打开模块.实际上模块Set包含三个元素:
OrderedType,是一种实现有序类型的模块;S,是一种实现Set数据结构的模块;Make带有类型模块OrderedType并返回类型模块的仿函数S.例如,要创建实现整数集的模块,可以执行以下操作:
module Int = struct
type t = int
(* use Pervasives compare *)
let compare = compare
end
module Ints = Set.Make(Int)
Run Code Online (Sandbox Code Playgroud)
其他库,如Janestreet的核心库,提供了开箱即用的功能,例如,Core库有一个Int模块,已经充满了集合,地图,哈希表,所以它可以在没有任何仿函数的情况下访问:
open Core.Std
let nil = Int.Set.empty
Run Code Online (Sandbox Code Playgroud)