2011-01-31 15 views
26

Sono nuovo di Haskell, scusa se questa è una domanda di base.Haskell: Controlla se Int è in un elenco di Int

Attualmente ho un elenco di Int e sto tentando di creare una funzione che accetta una variabile x e restituisce un valore booleano a seconda che la variabile esista nell'elenco.

Ho avuto una ricerca e trovato Data.List trova funzione ma questo dosent sembra restituire un valore booleano.

Sto usando GHCi.

Grazie,

risposta

67

Per prima cosa individuare il tipo di funzione desiderata.

"Controllare se" significa restituire Vero o Falso, un Bool.

Quindi la funzione prende un int, un elenco di Int (aka [Int]) e restituisce Bool:

Int -> [Int] -> Bool 

Ora ask hoogle.

elem :: Eq a => a -> [a] -> Bool 

Hoogle è uno strumento molto utile. È possibile integrate it with ghci.

+5

Chiedere a google mi guida qui. Non devi essere duro con OP. – fotanus

+6

Come posso migliorare il tono della risposta? Non stavo cercando di essere duro. – AtnNn

+10

Mio male, ho letto "chiedi google" MrGreen – fotanus

15

Se la funzione standard elem non esisteva, si sarebbe potuto essere sulla strada giusta con find.

myElem :: (Eq a) => a -> [a] -> Bool 
myElem x = maybe False (const True) . find (== x) 

C'è un sacco di altri modi per attuarlo anche, come

myElem x = any (== x) 
myElem x = or . map (== x) 
myElem x = not . null . filter (== x) 
myElem x = foldr (\y b -> y == x || b) False 

ecc

0

ho fatto più semplicemente come questo.

l=[1,2,3,4,5] 


checkIfElem :: Int -> [Int] ->Bool 
checkIfElem x l 
     |x`elem` l =True 
     |otherwise=False 
+12

Questo è davvero semplice, ma si potrebbe anche dire che è un modo incredibilmente complicato di scrivere la definizione "checkIfElem = elem', perché è _exactly_ equivalente a quello! (Le guardie controllano già i valori booleani, '| condition = True'' | otherwise = False' quindi equivale semplicemente a '= condition'. Questo ti lascia con' checkIfElem xl = elem xl', dove con η-reduction puoi cadere gli argomenti su entrambi i lati). – leftaroundabout

+0

Non penso che sia semplice. –

Problemi correlati