检查两个列表在第N个位置是否相等

时间:2015-10-07 13:45:00

标签: haskell

我刚刚开始学习Haskell作为我CS学位的模块。

目前正在尝试创建一个带有列表[Int]和列表[Integer]的函数。

我的目标是检查两个列表在第n个位置是否相等。

到目前为止,我已经能够比较两个[Int]列表,看看它们是否相等。

compareList :: [Int] -> [Int] -> Bool 
compareList x y = x == y 

但我不确定如何在第n个位置进行比较。如果有人可以帮助我那会很棒。

提前致谢, 山姆

1 个答案:

答案 0 :(得分:1)

(假设元素索引从0开始。)

列表的第n个元素与其尾部的第(n-1)个元素相同,因此我们可以在列表上使用递归。

比较两个非空列表的第一个(第0个)位置很容易:

compareLists (x:xs) (y:ys) 0 = x == y

如果一个或两个列表都是空的,如果我们采用第n个元素如果它们不存在则不相等的约定,这也很容易:

compareLists [] [] n = False
compareLists [] (y:ys) n = False
compareLists (x:xs) [] n = False

(这些案例可以稍微合并,但我会把它们拼写出来,希望它更清楚。)

对于一般情况,请取两个列表的尾部并比较它们的(n-1):元素:

compareLists (x:xs) (y:ys) n = compareLists xs ys (n - 1)