2012-03-08 23 views
9

Tôi viết một số chức năng cho đồ thị trong Haskell, và tôi muốn kiểm tra xem một danh sách các số nguyên, chẳng hạn nhưLàm thế nào tôi có thể sử dụng Haskell để kiểm tra xem một danh sách chứa các giá trị trong một tuple

[1,4, 5, 7] 

chứa đỉnh mà làm cho một cạnh, mà tôi đã thể hiện dưới dạng một tuple, như vậy

(1,5) 

Im cố gắng để có một hàm mang theo danh sách và các tuple, và trong trường hợp này sẽ trở thành sự thật, bởi vì danh sách có chứa một 1 và 5. Vấn đề chính tôi đang gặp là im thực sự không chắc chắn làm thế nào để tìm kiếm một danh sách trong Haskell. Là hàm của chúng có danh sách loại [a] và giá trị kiểu a và trả về một Bool, tùy thuộc vào việc [a] chứa a?

+9

[Hàm của chúng có danh sách loại \ [a \] và giá trị loại a và trả về Bool không?] (Http://www.haskell.org/hoogle/?q =% 5Ba% 5D + -% 3E + a + -% 3E + Bool) –

+1

của chúng -> ở đó, cả trong bài đăng và văn bản được dán cho liên kết :) –

Trả lời

22

Có một chức năng để kiểm tra xem một giá trị trong một danh sách,

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

dùng đó, chức năng của bạn có thể dễ dàng xác định.

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

Bạn đang thiếu dấu đóng lại trên 'containsEdge' – pat

+7

Cảm ơn bạn đã tìm thấy nó. Bạn có thể tự sửa lỗi chính tả đó nếu muốn. Không có người hợp lý nào quan tâm đến lỗi chính tả của họ, vì vậy đừng sợ. –

5

Chức năng elem nào đó:

elem 1 [1,3,4] 

sẽ cho True. Mặc dù chức năng này thường được sử dụng như một nhà điều hành ghi bởi xung quanh nó với backticks:

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

Mặt khác, đối với bộ lớn, đó không phải là một ý tưởng rất tốt (O (n) tính phức tạp), và bạn nên sử dụng Set (hoặc thậm chí IntSet nếu các phần tử của bạn là số nguyên) thay vì danh sách.

+0

Tôi xin lỗi nếu đây là câu hỏi ngớ ngẩn, nhưng sẽ tạo thành một bộ lớn trong phạm vi của Haskell? Tôi mới đến ngôn ngữ. –

+1

Tôi không chuẩn bị vì vậy tôi không thể chắc chắn nhưng bất cứ điều gì trên hàng chục có lẽ sẽ đảm bảo một 'Set', đặc biệt là vì nó khá dễ dàng để xây dựng và sử dụng một Set vậy tại sao sử dụng thay thế kém của danh sách? – Jedai

Các vấn đề liên quan