From 21d052d84e68ca27e1815d2c8a9484da8f7beb7a Mon Sep 17 00:00:00 2001 From: Ken Harris Date: Sat, 15 Jun 2013 18:05:51 -0700 Subject: [PATCH] SETF expansions for NTH and AREF. --- src/array.lisp | 10 ++++++++++ src/list.lisp | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/array.lisp b/src/array.lisp index b66d87c..db7ad21 100644 --- a/src/array.lisp +++ b/src/array.lisp @@ -73,6 +73,16 @@ (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 diff --git a/src/list.lisp b/src/list.lisp index d39a6e6..6b58aae 100644 --- a/src/list.lisp +++ b/src/list.lisp @@ -68,6 +68,16 @@ (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))) -- 1.7.10.4