Haskell 比较两个列表并返回两个列表中的第一个元素

Haskell 比较两个列表并返回两个列表中的第一个元素,haskell,Haskell,我被卡住了,不知道如何从这里开始,我想检查两个列表并返回两个列表中的第一个元素。不清楚它们是否应该在同一位置。假设是: element1 :: [a] -> [a] -> [a] element1 [] [] = [] element1 [] _ = [] element1 _ [] = [] element1 (h1:t1) (h2:t2) = if 或者,扩展: f = ((head . concat) .) . zipWith (\x y ->

我被卡住了,不知道如何从这里开始,我想检查两个列表并返回两个列表中的第一个元素。不清楚它们是否应该在同一位置。假设是:

  element1 :: [a] -> [a] -> [a]
  element1 [] [] = []
  element1 [] _ = []
  element1 _ [] = []

  element1 (h1:t1) (h2:t2) = if 
或者,扩展:

f = ((head . concat) .) . zipWith (\x y -> [x | x == y])
如果索引必须在第一个列表中最小:

f xs ys = head $ concat $ zipWith (\x y -> [x | x == y]) xs ys

f xs ys=head[x | x您可以定义一个辅助谓词来检查元素是否在列表中(这已在Data.list中实现)。然后在主函数中对第一个列表进行递归。这是一种方法

f xs ys = head [x | x <- xs, x `elem` ys] 
一些产出:

element1 :: (Eq a) => [a] -> [a] -> [a]
element1 [] _ = []
element1 _ [] = []
element1 (h:t) xs = if   (isInList h xs)
                    then [h]
                    else element1 t xs

isInList :: (Eq a) => a -> [a] -> Bool
isInList _ [] = False
isInList e (x:xs) = if   e == x
                    then True  
                    else isInList e xs

您已经在路上了;您需要返回
h1
h2
作为列表。您想从数据中得到“intersect”。似乎是列表?返回两个列表中的第一个元素,但它们不必在两个列表中的同一位置。@theBean,“第一个”是什么意思均值?第一个指数应该是最小的吗?第二个指数应该是最小的吗?或者它们的总和呢?f[1,2][2,1]
应该返回什么?
element1 [1,2,3] [8,5,9,3] = [3]
element1 [1,2,3] [1,5,9,3] = [1]
element1 [1,2,3] [3,2,1] = [1]