core: last_pair: Move to core.
authorJan Nieuwenhuizen <janneke@gnu.org>
Tue, 24 Apr 2018 05:00:35 +0000 (07:00 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Tue, 24 Apr 2018 05:00:35 +0000 (07:00 +0200)
* src/lib.c (last_pair): New function.
* module/mes/scm.mes (last-pair): Remove.

module/mes/scm.mes
src/lib.c

index 23d4bf53ba6050c283b3db476efe252da03dad93..3aaac56d26b0fb4c6324cbc47c7527199ebaff36 100644 (file)
   (if (= 0 n) x
       (list-tail (cdr x) (- n 1))))
 
-(define (last-pair lst)
-  (let loop ((lst lst))
-    (if (or (null? lst) (null? (cdr lst))) lst
-        (loop (cdr lst)))))
-
 (define (iota n)
   (if (<= n 0) '()
       (append2 (iota (- n 1)) (list (- n 1)))))
index 7b028d5d2fe2ba00050b8fc30bc5574b76d983e2..1804590897c658d043605d790b6064792015dadb 100644 (file)
--- a/src/lib.c
+++ b/src/lib.c
@@ -331,3 +331,11 @@ equal2_p (SCM a, SCM b)
     }
   return eq_p (a, b);
 }
+
+SCM
+last_pair (SCM x)
+{
+  while (x != cell_nil && CDR (x) != cell_nil)
+    x = CDR (x);
+  return x;
+}