我正在创建一个使用语法的程序,并查看该语法是否为 LL (1)。我想使用Set模块,但我不知道如何进行,当然,set元素的类型将是char,你能帮忙吗?
这个答案假设您已经知道如何确定语法是否为 LL (1),并且只是在寻求有关 Objective Caml 的具体用法的帮助Set
模块。
标准库Set
提供了一个函子,让您可以构建自己的集合模块,以满足您的特定需求。您需要提供一个描述集合内元素类型的模块,以及遵循与以下相同约定的比较函数compare http://caml.inria.fr/pub/docs/manual-ocaml/libref/Set.OrderedType.html : compare a b = 0
if a = b
, compare a b < 0
if a < b
等等。对于角色来说,这将是:
module OrderedChar = struct
type t = char
let compare = compare
end
module CharSet = Set.Make(OrderedChar)
The CharSet
上面的模块有文档中描述的接口 http://caml.inria.fr/pub/docs/manual-ocaml/libref/Set.S.html。其要点是集合是不可变的值(如列表),因此该模块为您提供了通过添加或删除元素从现有集合创建新集合的函数:
let a = CharSet.add 'a' CharSet.empty
let ab = CharSet.add 'b' a
let b = CharSet.remove 'a' ab
(* /* a, b and ab are three sets containing respectively {a}, {b} and {ab} */ *)
对集合元素的访问主要通过存在查询和迭代进行:
assert (CharSet.mem 'a' ab)
assert (not (CharSet.mem 'c' b))
CharSet.iter print_char ab
(* /* Prints 'ab' : follows the order defined by your 'compare' function */ *)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)