我是Haskell的初学者,我被告知我应该避免使用head和tail进行列表操作,而是使用模式匹配。我在这里得到了一个代码片段,我想知道如何转换它以便不使用头部或尾部?
myzipWith :: (a->b->c) -> [a] -> [b] ->[c]
myzipWith func [] [] = []
myzipWith func listA listB =
[func (head listA) (head listB) ] ++ (myzipWith func (tail listA) (tail listB))
答案 0 :(得分:7)
myzipWith :: (a->b->c) -> [a] -> [b] ->[c]
myzipWith func [] [] = []
myzipWith func (headA:restA) (headB:restB) =
[func headA headB] ++ myzipWith func restA restB
但请注意,追加(++
)不是必需的。这将是更惯用(和有效):
func headA headB : myzipWith func restA restB
答案 1 :(得分:4)
myzipWith func (a:as) (b:bs) = [func a b] ++ (myzipWith func as bs)
语法function (x:xs)
将传递给function
的列表拆分为两部分:第一个元素x
和列表的其余部分xs
。