如何在haskell中的树中列出所有可能的单词

问题描述 投票:0回答:1

我有

t1 = Node 'a' (Node 'c' (Node 'f' Empty Empty)
 (Node 'd' Empty Empty))                     
 (Node 'b' Empty                            
 (Node 'e' Empty Empty))                    

data BTree = Empty | Node Char BTree BTree

我需要执行的功能是genWords :: BTree -> [String]

这是我到目前为止所拥有的:

genWords :: BTree -> [String]
genWords Empty = []
genWords (Node ch Empty Empty) = [ch]
genWords (Node ch left right) = map (ch:) (genWords left ++ genWords right)

我知道我的错误是我使用了char,并且我的函数需要返回字符串列表,但是我不知道如何解决它。

list haskell tree word
1个回答
0
投票
data BTree = Empty | Node Char BTree BTree

genWords :: BTree -> [String]
genWords Empty = []
genWords (Node ch left right) =  [ch] : genWords left ++ genWords right

这将在评估右侧之前向下钻取树的左侧,将每个节点的char添加到字符串数组中。请注意,我是如何将ch放入[]的,这将char变成了字符串,因为haskell中的字符串只是char的列表。

© www.soinside.com 2019 - 2024. All rights reserved.