我想要一个函数,我在其中传递一个列表列表和一个列表,例如[[1,2,3],[5,6,3],[9,12,7]]
和[4,5,6]
并且该函数应返回列表列表,其中第二个列表中的每个项目都附加到第一个列表的末尾
例如,输出将为[[1,2,3,4],[1,2,3,5],[1,2,3,6],[9,12,7,5],[9,12,7,6],[9,12,7,4],[5,6,3,4],[5,6,3,5],[5,6,3,6]]
感谢
答案 0 :(得分:0)
有很多方法可以做到这一点,比如
Prelude> x = [[1,2,3],[5,6,3],[9,12,7]]
Prelude> y = [4,5,6]
Prelude> (flip (++) . return) <$> y <*> x
[[1,2,3,4],[5,6,3,4],[9,12,7,4],[1,2,3,5],[5,6,3,5],[9,12,7,5],[1,2,3,6],[5,6,3,6],[9,12,7,6]]
您可以将<$>
视为中缀fmap
,<*>
作为笛卡尔积。
或列表理解
Prelude> [ a ++ [b] | a <- x, b <- y ]
[[1,2,3,4],[1,2,3,5],[1,2,3,6],[5,6,3,4],[5,6,3,5],[5,6,3,6],[9,12,7,4],[9,12,7,5],[9,12,7,6]]
或do
语法
f :: [a] -> [[a]] -> [[a]]
f ys xs = do
y <- ys
x <- xs
return $ x ++ return y
main :: IO ()
main = do
let x = [[1,2,3],[5,6,3],[9,12,7]]
let y = [4,5,6]
print $ f y x
有关详细信息,请参阅