如何正确使用 in Haskell zipWith 来创建 [ [ int int ] ] 列表?
How to use in Haskell zipWith correctly to create a [ [ int int ] ] list?
data Tegel = Teg Int Int
type RijTegels = [Tegel]
volleRijTegels :: RijTegels
volleRijTegels = ziptwee [21..36] (replicate 4 1 ++ replicate 4 2 ++ replicate 4 3 ++ replicate 4 4)
ziptwee :: [Int] -> [Int] -> RijTegels
ziptwee [] [] = []
ziptwee (x:xs) (y:ys) = Teg x y: ziptwee xs ys
现在我使用两个函数,但我想用一个来完成。
我以为我可以使用 zipWith,但我似乎无法弄清楚如何。
volleRijTegels :: RijTegels
volleRijTegels = [zipWith (++) [1,2,3] [4,5,6]] -- here it is going wrong
我猜我把外括号放错了,但我不知道它们应该放在哪里。
谁能告诉我这项工作是如何完成的?
这里的问题是您想要 RijTegels
类型,但实际上您使用 zipWith (++)
创建的类型是 [[a]]
。因此,要更改它,您可以使用类型构造函数而不是 (++)
:
data Tegel = Teg Int Int deriving (Show)
type RijTegels = [Tegel]
volleRijTegels :: RijTegels
volleRijTegels = zipWith Teg [1,2,3] [4,5,6] -- here it is going wrong
main = print volleRijTegels
data Tegel = Teg Int Int
type RijTegels = [Tegel]
volleRijTegels :: RijTegels
volleRijTegels = ziptwee [21..36] (replicate 4 1 ++ replicate 4 2 ++ replicate 4 3 ++ replicate 4 4)
ziptwee :: [Int] -> [Int] -> RijTegels
ziptwee [] [] = []
ziptwee (x:xs) (y:ys) = Teg x y: ziptwee xs ys
现在我使用两个函数,但我想用一个来完成。 我以为我可以使用 zipWith,但我似乎无法弄清楚如何。
volleRijTegels :: RijTegels
volleRijTegels = [zipWith (++) [1,2,3] [4,5,6]] -- here it is going wrong
我猜我把外括号放错了,但我不知道它们应该放在哪里。
谁能告诉我这项工作是如何完成的?
这里的问题是您想要 RijTegels
类型,但实际上您使用 zipWith (++)
创建的类型是 [[a]]
。因此,要更改它,您可以使用类型构造函数而不是 (++)
:
data Tegel = Teg Int Int deriving (Show)
type RijTegels = [Tegel]
volleRijTegels :: RijTegels
volleRijTegels = zipWith Teg [1,2,3] [4,5,6] -- here it is going wrong
main = print volleRijTegels