我想输入一个单词列表。如果一个单词的最后一个字母与另一个单词的第一个字母相同,则我们将它们连接起来并输出包含所有可能连接的列表列表。
示例:convert(["apple","elephant","eraser", "tower","rank"])
将给出
[["elephant", "eraser"], ["tower"], ["rank"], ["rank"], []]
我实现了以下代码:
convert :: [String] -> [[String]]
convert [] = []
convert [x] = []
convert (x : xs) = if last x == head (head xs)
then [head xs] : [] : convert (x : (tail xs))
else convert (x : (tail xs))
但这只能检查第一个元素。如何遍历整个列表并检查每个单词?
================================================ ==========================
好的。我完成了。
convert :: [String] -> [[String]]
convert [] = []
convert (x:xs) = [u | u <- xs, last x == head u] : convert (xs)