2012-03-08 6 views
9

Piszę niektóre funkcje na wykresach w Haskell, i chcę, aby sprawdzić, czy na liście liczb, takich jakJak mogę używać Haskell, aby sprawdzić, czy lista zawiera wartości w krotce

[1,4, 5, 7] 

zawiera wierzchołki, które czynią przewagę, którą reprezentowali jako krotki, tak jak

(1,5) 

Im próbuje przejąć funkcję, która pobiera listy i krotki, a w tym przypadku zwróci true, ponieważ lista zawiera 1 i 5. Głównym problemem, który mam, jest to, że nie jestem pewien, jak przeszukiwać listę w Haskell. Czy jest to funkcja, która pobiera listę typu [a] i wartość typu a, i zwraca Bool, w zależności od tego, czy [a] zawiera znak?

+9

[Czy jest to funkcja, która pobiera listę typu \ [a \] i wartość typu a, i zwraca wartość Bool?] (Http://www.haskell.org/hoogle/?q =% 5Ba% 5D + -% 3E + a + -% 3E + Bool) –

+1

ich -> tam, zarówno w poście, jak iw wklejonym tekście dla linku :) –

Odpowiedz

22

Istnieje funkcja, aby sprawdzić, czy wartość znajduje się na liście,

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

Korzystanie że czynność jest łatwo zdefiniować.

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

Brakuje znaku zamykającego zamykającego na 'zawieraEdge' – pat

+7

Dzięki za spostrzeżenie. Możesz poprawić takie błędy, jeśli chcesz. Żadna rozsądna osoba nie myśli, że ich literówki są naprawione, więc nie lękajcie się. –

5

Funkcja elem robi:

elem 1 [1,3,4] 

da True. Choć funkcja ta jest często wykorzystywana jako operator Infix przez otaczający go backticks:

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

Z drugiej strony, w przypadku dużych zestawów, że nie jest to bardzo dobry pomysł (O (n) złożoność), a zalecana użyj Set (lub nawet IntSet, jeśli twoje elementy są liczbami całkowitymi) zamiast list.

+0

Przykro mi, jeśli to głupie pytanie, ale co stanowiłoby wielki zestaw w ramach Haskella? Jestem nowy w tym języku. –

+1

Nie testowałem, więc nie mogę być pewny, ale coś ponad dziesiątki prawdopodobnie zapewniłoby "Set", zwłaszcza, że ​​łatwo jest zbudować i używać zestawu, więc dlaczego korzystać z gorszej alternatywy list? – Jedai

Powiązane problemy