Implement nth, first and rest
authorIqbal Ansari <iqbalansari02@yahoo.com>
Sun, 21 Aug 2016 14:17:26 +0000 (19:47 +0530)
committerIqbal Ansari <iqbalansari02@yahoo.com>
Sat, 27 Aug 2016 12:43:33 +0000 (18:13 +0530)
common_lisp/core.lisp

index 6ee7f12..d475590 100644 (file)
          (types:make-mal-builtin-fn (lambda (&rest lists)
                                       (types:make-mal-list (apply #'concatenate
                                                                   'list
-                                                                  (mapcar #'types:mal-value lists))))))))
+                                                                  (mapcar #'types:mal-value lists))))))
+
+
+   (cons (types:make-mal-symbol '|nth|)
+         (types:make-mal-builtin-fn (lambda (sequence index)
+                                      (or (nth (mal-value index)
+                                               (map 'list #'identity (mal-value sequence)))
+                                          (error "Index out of range")))))
+
+   (cons (types:make-mal-symbol '|first|)
+         (types:make-mal-builtin-fn (lambda (sequence)
+                                      (or (first (map 'list #'identity (mal-value sequence)))
+                                          (types:make-mal-nil nil)))))
+
+   (cons (types:make-mal-symbol '|rest|)
+         (types:make-mal-builtin-fn (lambda (sequence)
+                                      (types:make-mal-list (rest (map 'list
+                                                                      #'identity
+                                                                      (mal-value sequence)))))))))