除非您正在寻求家庭作业的帮助,否则 hackage 的尝试有许多不同的实现:
http://hackage.haskell.org/packages/archive/pkg-list.html(在那里搜索“trie”)
尝试需要很多代码来实现,所以不要指望这里的人提供完整的实现——我们只能提供一些线索。所以我们需要知道您面临哪些问题,这样我们才能帮助您继续前进。
where
一般提示是使用, 解构参数并放置undefined
而不是尚未开发的部分来开始从上到下的开发:
步骤1:
trieInsert (keyH : keyT) value (TrieNode oldValue oldChars) = undefined
第2步:
然后考虑一些最简单的“基本”案例:
trieInsert [] value (TrieNode _ oldChildren) = TrieNode (Just value) oldChildren
trieInsert (keyH : keyT) value (TrieNode oldValue oldChars) = undefined
在此示例中,第一行显示“如果我们添加一个空键,则该值必须在根处替换,并且子节点必须保持原样”。第二行显示:'如果我们添加一个非空键,那么......'
第 3 步:
trieInsert [] value (TrieNode _ oldChildren) = TrieNode (Just value) oldChildren
trieInsert (keyH : keyT) value (TrieNode oldValue oldChars) = TrieNode oldValue newChildren where
newChildren = undefined
第二行现在显示:“如果我们添加一个非空键,那么我们将 oldValue 保持原样并以某种方式修改子项”。
然后在第 4 步详细说明 newChildren 等等