Haskell:与元组中的数字配对的单词列表

时间:2015-09-16 19:46:05

标签: list function haskell tuples

我需要从第4阶段到第5阶段的帮助。我不确定Haskell函数是否接受每个元素并将其置于元组中。也许我已经手动完成了这个,我也不知道该怎么做。

到目前为止,这是我的功能:

splitLines :: String -> [[String]]
splitLines splitLinesStr = splitWords (lines splitLinesStr)

splitWords :: [String] -> [[String]]
splitWords splitWordList = map words splitWordList

tupleNums tupleNumList = zip [1..] tupleNumList

第1阶段:原始输入,例如

"a&b b c.\na dd\n"

阶段2:原始输入,分为行列表,如

["a&b b c.", "a dd"]

阶段3:行列表,进一步拆分为单词列表列表,如

[["a", "b", "b", "c"], ["a", "dd"]]

阶段4:列表列表,“tupled”以便将行号附加到它们,如

[(1,["a", "b", "b", "c"]), (2,["a", "dd"])]

阶段5:单词列表(全部位于顶层),其中每个单词与其行号配对,如

[(1,"a"), (1,"b"), (1,"b"), (1,"c"), (2,"a"), (2,"dd")]

2 个答案:

答案 0 :(得分:2)

我们可以设计一个函数来将第4阶段列表中的每个元素都这样:

cluster.link.enabled=true

然后我们可以使用helper :: (Int, [a]) -> [(Int, a)] helper (num, xs) = zip (repeat num) xs

concatMap :: (a -> [b]) -> [a] -> [b]

就是这样。这是一个例子:

fourToFive :: [(Int, [a])] -> [(Int, a)]
fourToFive = concatMap helper

答案 1 :(得分:1)

您所要做的就是应用 Dim TestMe = CInt(Val(New Text.StringBuilder((From ch In "123abc123".ToCharArray Where IsNumeric(ch)).ToArray).ToString)) map的组合。 concat中的演示:

ghci

请注意,我使用了两个λ> let x = [(1,["a", "b", "b", "c"]), (2,["a", "dd"])] λ> map (\(y,z) -> map (\a -> (y,a)) z) x [[(1,"a"),(1,"b\"),(1,"b"),(1,"c")],[(2,"a"),(2,"dd")]] 函数。外map将遍历map的元素。 x(它是一个元组)的每个元素都由x模式匹配。我们知道(y,z)是一个列表。因此,我们使用另一个z来遍历列表map。这个内部z函数将返回map元组,其中(y,a)是列表a中遍历的当前元素,z是第一个元素元组。

现在您需要做的就是在结果列表中应用y函数:

concat