From 3375b8fba2bc1481de9bf3d589a020b442351712 Mon Sep 17 00:00:00 2001 From: Paul Stansifer Date: Wed, 25 May 2011 09:54:43 -0700 Subject: [PATCH] Add list function 'has'. --- src/lib/list.rs | 13 +++++++++++++ src/test/run-pass/lib-list.rs | 12 ++++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/lib/list.rs b/src/lib/list.rs index c1c915e3577..b61622e60cc 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 caf80e84ede..0cd1ae1a9f5 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(); }