如何编写这个递归Haskell函数

时间:2016-04-20 19:13:38

标签: function haskell recursion

任务:

  

写一个递归的Haskell函数,它得到2个有序列表,函数决定它们中的每个元素是否相等(如果其中一个相同,则函数值为False)。

     

例如:

     
      
  • myfunction [1..5] [6..10] == True
  •   
  • myfunction [1..5] [5..10] == False
  •   

我无法使用elem功能。 我可以使用递归和案例分开选择。

功能类型:

myfunction :: Ord a => [a] -> [a] -> Bool

我试过这样的事情:

myfunction :: Ord a => [a] -> [a] -> Bool
myfunction [] list = True
myfunction list [] = True
myfunction (x:xs) (y:ys)
    | x == y = False
    | xs == myfunction ???????? = False

但它不起作用......

1 个答案:

答案 0 :(得分:2)

(这个答案实际上只是你在答案表中收到的评论。)你按照以下方式实施:

myFunction [] _ = True
myFunction _ [] = True
myFunction (x : xs) (y : ys) = case compare x y of
  LT -> myFunction xs (y : ys)
  EQ -> False
  GT -> myFunction (x : xs) ys

这是有效的,因为如果x小于yx也比ys中的任何元素更小(因此不相同,这是我们真正想知道的) 1}}。这意味着我们可以忽略它并检查其余的列表。当x大于y时,反之亦然。