diff --git a/TODO b/TODO index 399e3a1f..7a323edf 100644 --- a/TODO +++ b/TODO @@ -15,7 +15,7 @@ v "string" assq call-with-values v char? -length +v length v list list->vector make-vector diff --git a/mes.c b/mes.c index d02b0ba6..7a255080 100644 --- a/mes.c +++ b/mes.c @@ -560,6 +560,18 @@ string_length (scm *x) return make_number (strlen (x->name)); } +scm * +length (scm *x) +{ + int n = 0; + while (x != &scm_nil) + { + n++; + x = cdr (x); + } + return make_number (n); +} + scm * lookup (char *x, scm *a) { diff --git a/test.mes b/test.mes index 2eff4e96..f1215dc8 100644 --- a/test.mes +++ b/test.mes @@ -182,4 +182,11 @@ (display (string #\a #\space #\s #\t #\r #\i #\n #\g #\newline)) (newline) +(display "length of nil: ") +(display (length '())) +(newline) +(display "length of '(a b c): ") +(display (length '(a b c))) +(newline) + '()