【发布时间】:2018-04-25 16:06:19
【问题描述】:
我是 Haskell 的初学者,有人告诉我应该避免使用 head 和 tail 进行列表操作,而是使用模式匹配。我这里有一个代码sn-p,不知道应该怎么转换才能不使用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))
【问题讨论】:
-
用
myzipWith func (x:xs) (y:ys) = func x y : myzipWith func xs ys替换最后的等式。 -
有充分的理由避免使用
head和tail。出于好奇,让我问一下:是你给的吗? -
了解
head和tail的定义方式应该会有所帮助:head (x:_) = x和tail (_:xs) = xs。 -
@chepner 我知道定义,但我不太熟悉如何处理输入参数(我是否使用了正确的术语)以及函数签名。无论如何谢谢:)
标签: haskell