2015-06-06 33 views
6

Bu soru bir Haskell acemi yöneticisinden.Bu Haskell kodunda "id" ne anlama geliyor?

başka türlü '`yanlış dönmek nasıl bir listede True birçok kontrol etmek için aşağıdaki kod yazmak ve bu True ait even sayısına sahipse, o zaman True dönün.

xor = 
foldr xor' False 
where 
xor' True True = False 
xor' False False = False 
xor' _ _ = True 

Ancak, bazı kod parçacıkları aşağıda buldum ve onu aynı şeyi yapabilir gibi görünüyor .. İşte kodudur:

xor :: [Bool] -> Bool 
xor = odd . length . filter id 

Ama ne kadar id eserler hiçbir fikrim yok Yukarıdaki kodda, bana biraz yardım edebilir misiniz?

+3

Bu kimlik işlevidir: https://www.haskell.org/hoogle/?hoogle=id –

+3

'id' yalnızca kimlik işlevidir. 'filter id', 'filter (== True) 'ile aynıdır - sadece' False 'öğelerini kaldırır. – user2407038

+7

Bu mükemmel soruya (yeni başlayanlar için) kimlerin düşeceğini merak ediyorum - çocuklar son derece olumlu Haskell alt grubunu tutmalıyız! – Carsten

cevap

11

id'un tanımı id x = x, yani filter id, filter (\x -> x) ile aynıdır. Bu, değeri True olan listenin tüm öğelerini alır.

8

id fonksiyon kimlik işlevi

fonksiyon filter tip bir boolean döndüren bir işlev alır

filter :: (a -> Bool) -> [a] -> [a] 

vardır, her üzere bu işlevi uygular

id :: a -> a 
id x = x 
çok basit tanımıyla, bir listenin öğesi ve işlevi True döndüren tüm öğeleri tutar. Yani, filter id olduğunda, True'a eşit tüm öğeleri döndüren listeyi filtreler.

+0

Teşekkür ederim bheklilr, bana doğru cevabı verirsiniz ama sadece birini seçebilirim. Cevap". Ben bir şekilde 'id' yi bilirim, '' '' '' '' '' '' '' '' 'işlevi '' gibidir. Ancak, bu özel problemde kullanmak gerçekten aklımı karıştırır :) – computereasy