diff --git a/src/lib/list.rs b/src/lib/list.rs index c1c915e35779..b61622e60cca 100644 --- a/src/lib/list.rs +++ b/src/lib/list.rs @@ -52,6 +52,19 @@ fn find[T,U](&list[T] ls, } } +fn has[T](&list[T] ls, &T elt) -> bool { + alt(ls) { + case (cons[T](?hd, ?tl)) { + if (elt == hd) { + ret true; + } else { + be has(*tl, elt); + } + } + case (nil[T]) { ret false; } + } +} + fn length[T](&list[T] ls) -> uint { fn count[T](&T t, &uint u) -> uint { ret u + 1u; diff --git a/src/test/run-pass/lib-list.rs b/src/test/run-pass/lib-list.rs index caf80e84edeb..0cd1ae1a9f55 100644 --- a/src/test/run-pass/lib-list.rs +++ b/src/test/run-pass/lib-list.rs @@ -43,6 +43,17 @@ fn test_find_fail() { assert (res == option::none[int]); } +fn test_has() { + auto l = from_vec([5, 8 ,6]); + auto empty = list::nil[int]; + + assert (list::has(l, 5)); + assert (!list::has(l, 7)); + assert (list::has(l, 8)); + + assert (!list::has(empty, 5)); +} + fn test_length() { auto l = from_vec([0, 1, 2]); assert (list::length(l) == 3u); @@ -54,4 +65,5 @@ fn main() { test_find_success(); test_find_fail(); test_length(); + test_has(); }