scm.mes: add list-ref.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 24 Jul 2016 15:25:03 +0000 (17:25 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 24 Jul 2016 15:25:03 +0000 (17:25 +0200)
scm.mes
test.mes

diff --git a/scm.mes b/scm.mes
index 001cacbd262fb2ba0678b13eeaa88f507fdc9c15..87fb2013935f819051ca6ce0a72e3d00bd8fa9a4 100755 (executable)
--- a/scm.mes
+++ b/scm.mes
   (display rest)
   (newline))
 
   (display rest)
   (newline))
 
+(define (list-ref lst k)
+  (let loop ((lst lst) (k k))
+    (if (= 0 k) (car lst)
+        (loop (cdr lst) (- k 1)))))
+
 ;; srfi-1
 (define (last-pair lst)
   (let loop ((lst lst))
 ;; srfi-1
 (define (last-pair lst)
   (let loop ((lst lst))
index cc614c37f8c93f3c843f8fdb068de917d51c8196..bed78cee9b89a46d696936352d32be9abb3e5b19 100644 (file)
--- a/test.mes
+++ b/test.mes
 (pass-if "min 1" (seq? (min 0 1) 0))
 (pass-if "min 2" (seq? (min 1 0 2) 0))
 
 (pass-if "min 1" (seq? (min 0 1) 0))
 (pass-if "min 2" (seq? (min 1 0 2) 0))
 
+(pass-if "list-ref" (seq? (list-ref '(0 1 2) 1) 1))
+
 (pass-if "do" (sequal? (let ((acc '())) (do ((i 0 (+ i 1))) ((>= i 3)) (set! acc (cons i acc))) acc) '(2 1 0)))
 
 (newline)
 (pass-if "do" (sequal? (let ((acc '())) (do ((i 0 (+ i 1))) ((>= i 3)) (set! acc (cons i acc))) acc) '(2 1 0)))
 
 (newline)