搜索列表

Joh*_*ohn 0 haskell integer boolean list

我一直在尝试定义一个函数,给定一个整数列表和一个整数n,返回一个布尔值,指示n是否在列表中恰好出现一次.

我有这个,但它不起作用,我无法弄明白

once :: [a] -> (a -> Bool) -> Bool 
filter _ [] = []  
filter p (x:xs)   
    | p x       = x : filter p xs  
    | otherwise = filter p xs 

An example of what I want would be:
Main>  once [2,3,2,4] 2
False
Main> once [1..100] 2
True
Run Code Online (Sandbox Code Playgroud)

Lan*_*dei 6

我以为我以前的解决方案很难看,我在另一个论坛上问过这个答案:

once :: Eq a => a -> [a] -> Bool
once x = (== [x]) . filter (== x)
Run Code Online (Sandbox Code Playgroud)

我认为你不能更好地编写这个功能,与接受的答案相比,它是懒惰的.