SETF expansions for NTH and AREF.
authorKen Harris <kengruven@gmail.com>
Sun, 16 Jun 2013 01:05:51 +0000 (18:05 -0700)
committerKen Harris <kengruven@gmail.com>
Sun, 16 Jun 2013 01:05:51 +0000 (18:05 -0700)
src/array.lisp
src/list.lisp

index b66d87c..db7ad21 100644 (file)
     (error "~S is not an array." array))  
   (storage-vector-set array index value))
 
+(define-setf-expander aref (array index)
+  (let ((g!array (gensym))
+        (g!index (gensym))
+        (g!value (gensym)))
+    (values (list g!array g!index)
+            (list array index)
+            (list g!value)
+            `(aset ,g!array ,g!index ,g!value)
+            `(aref ,g!array ,g!index))))
+
 
 ;;; Vectors
 
index d39a6e6..6b58aae 100644 (file)
 (defun nth (n list)
   (car (nthcdr n list)))
 
+(define-setf-expander nth (n list)
+  (let ((g!list (gensym))
+        (g!index (gensym))
+        (g!value (gensym)))
+    (values (list g!list g!index)
+            (list list n)
+            (list g!value)
+            `(rplaca (nthcdr ,g!index ,g!list) ,g!value)
+            `(nth ,g!index ,g!list))))
+
 (defun caar (x) (car (car x)))
 (defun cadr (x) (car (cdr x)))
 (defun cdar (x) (cdr (car x)))