haskell 尝试在不使用elem的情况下在列表中查找n

ldioqlga  于 2023-02-23  发布在  其他
关注(0)|答案(1)|浏览(170)

我试图在一个整数列表中查找n,如果n存在,而不使用elem函数,则out应为true。

present:: Integer -> [Integer] -> Bool
present n llist = [x | x <- llist, x == n]
nukf8bse

nukf8bse1#

您当前的present函数没有类型检查:[x | x <- llist, x == n]的结果是[Integer],而不是Bool
正如这个注解中所述,您可以通过使用null检查生成的列表是否为空来确定n是否在列表中:

present :: Integer -> [Integer] -> Bool
present n llist =  not $ null [x | x <- llist, x == n]

列表解析的结果是所有元素都等于原始列表中的n,因此,如果生成的列表为空,则原始列表中没有值为n的元素。
另一个有趣的方法不使用elem,而是依赖于显式递归:

present :: Integer -> [Integer] -> Bool
present _ [] = False -- base case
present n (x:xs) | x == n = True
                 | otherwise = present n xs

这里,输入列表的第一个元素与n进行比较,如果它等于n,则n存在于列表中,从而产生最终结果True,否则递归调用present。并且传递到present的输入列表随着每次递归变小一个元素直到它找到n或最终收敛到基本情况,空列表,在这种情况下产生False

相关问题