首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ocaml count trie元素

Ocaml count trie元素
EN

Stack Overflow用户
提问于 2020-06-02 19:48:40
回答 1查看 53关注 0票数 0

我在试着找出我的Trie中有多少个字符。

这是我的Trie类型。

代码语言:javascript
复制
type 'a t = Node of 'a list * ('a arc list) and 'a arc = char * 'a t

这是我的实现,但不是详尽的:

代码语言:javascript
复制
let arc_size trie =
let rec count_arcs counter trie =
match trie with
| Node (_,[]) -> counter
| Node (_,[(_,x)] -> count_arcs (counter+1) trie
in
count_arcs 0 trie;;

如果trie只包含1个单词,这将会起作用。问题是如果trie分支,并且其中一个节点具有此类型的Node(_,[(_,x)] :: _ :: _)

我似乎找不到这种情况下的匹配模式,因为如果我将trie与Node(_,x)进行匹配,那么本例中的x是a arc list,但我的函数有一个trie作为参数。我在扩展到'a arc list中的另一个'a arcs时遇到了麻烦。

EN

回答 1

Stack Overflow用户

发布于 2020-06-03 01:31:51

您应该在节点的每个子圆弧上递归调用count_arcs函数(您在递归期间保持不变的相同trie上递归调用它,因此如果您的函数命中示例的第二个分支,它将永远不会终止)。

可以依靠List.fold_left,对于具有弧列表的节点xxs将弧数定义为xs中每个弧的弧数加上x的弧数之和。

或者,您可以使用模式匹配并手动解构弧线列表,但最好将复杂任务拆分成较小的子任务,然后将它们组合起来。如果不允许使用标准库中的函数(用于教学目的),那么现在是实现您自己的fold函数的好时机。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62151307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档