2012-03-08 20 views
9

ben Haskell grafikler için bazı fonksiyonları yazıyorum değerleri olup olmadığını kontrol etme Haskell kullanabilir ve ben gibiNasıl bir liste bir tuplea

[1,4, 5, 7] 

içeren, tamsayılar listesi olmadığını kontrol etmek istiyorum gibi ben bir başlığın olarak temsil etmiş bir kenar yapmak köşe böylece

(1,5) 

Im, gerçek döneceğini listesi ve tuple alır ve bu durumda bir işlev almaya çalışan liste içerdiğinden bir 1 ve bir 5. Asıl sorunum, Haskell'deki bir listeyi nasıl arayacağımı gerçekten bilmiyorum. [A] türünün bir listesini ve a türünün bir değerini alan bir işlevdir ve [a] öğesinin içerip içermediğine bağlı olarak bir Bool döndürür.

elem 1 [1,3,4] 

Doğru verecektir:

+9

[tip \ [a \] ve tip a olan bir değeri bir listesini alan bir fonksiyonu kendi mi ve BOOL döner?] (Http://www.haskell.org/hoogle/?q =% 5Ba% 5D + -% 3E + a + -% 3E + Bool) –

+1

onların -> hem post hem de link için yapıştırılan metinde :) –

cevap

22

bir değer bir listede olup olmadığını kontrol etmek için bir işlevi yoktur,

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

, sizin fonksiyonu kolayca tanımlanır.

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

'IncludeEdge' – pat

+7

'daki kapanış geri sayımını kaçırıyorsunuz. İsterseniz bu tür hataları kendiniz düzeltebilirsiniz. Makul bir insanın yazım hataları düzeltilmediğine inanma, bu yüzden korkma. –

5

elem işlevi bunu yapmaz. Bu fonksiyon genellikle ters tırnakların ile onu çevreleyen tarafından infix operatörü olarak kullanılmasına rağmen: Öte yandan

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

, büyük setleri için, bu çok iyi bir fikir (O ​​(n) karmaşıklık) değildir ve şunları yapmalısınız Listeler yerine Set'i (veya öğeleriniz tamsayı ise IntSet'i) kullanın. Bu kullanma

+0

Eğer bu aptalca bir soru ise üzgünüm Haskell kapsamında büyük bir set oluşturacak mı? Ben dil için yeniyim. –

+1

Karşılaştırma yapmadım, bu yüzden emin olamıyorum, ancak onlar üzerinde herhangi bir şey, bir Set oluşturmak, özellikle de bir Set oluşturmak ve kullanmak oldukça kolay olduğu için listelerin daha düşük alternatifi kullanmak zorundadır. – Jedai

İlgili konular