2015-06-06 45 views
6

câu hỏi này là từ người mới sử dụng Haskell."Id" trong mã Haskell này có nghĩa là gì?

Tôi viết mã bên dưới để kiểm tra số lượng True trong danh sách và nếu số này có even số True, sau đó trả lại True, nếu không trả về `False '.

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

Tuy nhiên, tôi tìm thấy một số đoạn mã dưới đây, và có vẻ như nó có thể làm điều tương tự .. Đây là mã:

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

Nhưng tôi chỉ không có ý tưởng như thế nào id công trình trong đoạn code trên, bất cứ ai có thể cho tôi một số trợ giúp?

+3

Đây là chức năng nhận dạng: https://www.haskell.org/hoogle/?hoogle=id –

+3

'id' chỉ là chức năng nhận dạng. 'filter id' giống với' filter (== True) '- nó chỉ loại bỏ các phần tử' False'. – user2407038

+7

Tôi tự hỏi ai sẽ downvote câu hỏi này hoàn toàn tốt (cho người mới bắt đầu) - guys chúng ta nên giữ cho nhóm Haskell cực kỳ tích cực thân thiện! – Carsten

Trả lời

11

Định nghĩa của idid x = x, vì vậy filter id giống với filter (\x -> x). Đó là tất cả các yếu tố của danh sách có giá trị là True.

8

Chức năng id là chức năng nhận dạng, với định nghĩa rất đơn giản

id :: a -> a 
id x = x 

Chức năng filter có loại

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

Phải mất một hàm trả về một boolean, áp dụng chức năng cho mọi phần tử của danh sách và giữ tất cả các phần tử mà hàm trả về True. Vì vậy, khi bạn có filter id, bộ lọc sẽ lọc danh sách trả về tất cả các phần tử bằng True.

+0

Cảm ơn bạn, bạn trả lời đúng nhưng tôi chỉ có thể chọn một" câu trả lời". Tôi bằng cách nào đó biết 'id', nó giống như' [] 'cho' hàm'. Tuy nhiên, sử dụng nó trong vấn đề cụ thể này thực sự thổi tâm trí của tôi :) – computereasy