2012-03-08 13 views
9

sto scrivendo alcune funzioni per i grafici a Haskell, e voglio verificare se una lista di interi, come ad esempioCome posso usare Haskell per verificare se un elenco contiene i valori di una tupla

[1,4, 5, 7] 

contiene vertici che fanno un bordo, che ho rappresentato come una tupla, in questo modo

(1,5) 

nel tentativo di fare una funzione che prende la lista e la tupla, e in questo caso sarebbe restituire true, perché l'elenco contiene una 1 e 5. Il problema principale che sto avendo è che non sono sicuro di come cercare una lista in Haskell. È una loro funzione che prende un elenco di tipo [a] e un valore di tipo a e restituisce un Bool, a seconda che [a] contenga un?

+9

[È loro una funzione che prende un elenco di tipo \ [a \] e un valore di tipo uno, e restituisce un bool?] (Http://www.haskell.org/hoogle/?q =% 5Ba% 5D + -% 3E + a + -% 3E + Bool) –

+1

loro -> lì, sia nel post e nel testo incollato per il collegamento :) –

risposta

22

C'è una funzione per verificare se un valore è in una lista,

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

Usando questo, la funzione è facilmente definito.

containsEdge :: [Int] -> (Int,Int) -> Bool 
xs `containsEdge` (a,b) = (a `elem` xs) && (b `elem` xs) 
+0

Manca la chiusura all'indietro su 'containsEdge' – pat

+7

Grazie per averlo individuato. Puoi correggere questi errori, se vuoi. Nessuna persona ragionevole pensa che i loro refusi siano corretti, quindi non aver paura. –

5

La funzione elem lo fa:

elem 1 [1,3,4] 

darà vero. Anche se questa funzione è spesso usato come un operatore infisso circondandolo con apici inversi:

1 `elem` [1,4,5,7] 

D'altra parte, per i grandi gruppi, che non è una buona idea (O (n) la complessità), e si dovrebbe usa Set (o anche IntSet se i tuoi elementi sono interi) invece di liste.

+0

Mi dispiace se questa è una domanda stupida, ma che cosa costituirebbe un grande set sotto lo scopo di Haskell? Sono nuovo della lingua. –

+1

Non ho fatto un benchmark quindi non posso esserne sicuro, ma qualcosa oltre le decine probabilmente garantirebbe un 'Set', specialmente dal momento che è abbastanza facile costruire e usare un Set, quindi perché usare l'alternativa inferiore delle liste? – Jedai

Problemi correlati