繁体   English   中英

Haskell中有类似字典的东西吗?

[英]Is there something like dictionary in Haskell?

输入是单词列表。 如果一个单词的最后一个字母与另一个单词的第一个字母相同,则我们将它们连接起来,并输出包含所有可能连接的列表列表。

我将输入转换为邻接表。 但这将从输入中丢失一些元素。

例如:

convert(["apple","elephant","eraser", "tower","rank"])

会给

[["elephant", "eraser"], ["tower"], ["rank"], ["rank"], []]

“苹果”连接到“大象”和“橡皮擦”。 但是结果就失去了“苹果”。 如何修复代码以在结果中包含元素?

convert :: [String] -> [[String]]
convert [] = []
convert [x] = [[]]
convert (x:xs) = [u | u <- xs, last x == head u] : convert (head xs : tail xs)

在您的代码中:

convert :: [String] -> [[String]]
convert [] = []
convert [x] = [[]]
convert (x:xs) = [u | u <- xs, last x == head u] : convert (head xs : tail xs)

列表理解只剩下另一个词u [x,u]留下您想要的组合。

并且由于列表理解留下了可能的组合,因此它将是一个由两个元素组成的列表。 [[x,u],...]

(:) :: a -> [a] -> [a]
(++) :: [a] -> [a] -> [a]

因此(++)更适合这种情况。

并且( head xs : tail xs )就是xs 无需告诉转换者将它们分开。 模式匹配(x:xs)将解决问题。 当它与大小写x:[]匹配时,下一次它将convert [] ,因此您只需要停止一种情况。

convert :: [String] -> [[String]]
convert [] = []
convert (x:xs) = [[x,u] | u <- xs, last x == head u] ++ convert xs

prompt> convert(["apple","elephant","eraser", "tower","rank"])
[["apple","elephant"],["apple","eraser"],["elephant","tower"],["eraser","rank"],["tower","rank"]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM