# HG changeset patch # User Steve Losh # Date 1504812354 14400 # Node ID ddd06eaac1cb585f60a3df8de40fe370f6f1fd8c # Parent 6494ca97e78bf96535f05ea08c5b129854910dce Clean up iset diff -r 6494ca97e78b -r ddd06eaac1cb src/istruct.lisp --- a/src/istruct.lisp Sun Aug 13 00:09:56 2017 -0400 +++ b/src/istruct.lisp Thu Sep 07 15:25:54 2017 -0400 @@ -27,7 +27,11 @@ (finally (return result)))) -(defgeneric iset (instance slot new-value)) +;; (defgeneric iset (instance slot new-value)) +(defun iset (instance slot new-value) + (let ((result (copy-structure instance))) + (setf (slot-value result slot) new-value) + result)) (defun iset-in (instance slot-path new-value) (destructuring-bind (slot . remaining) slot-path @@ -67,15 +71,6 @@ `(defstruct ,name ,@(mapcar #'build-slot slots))) - (defun build-iset (name slots) - `(defmethod iset ((instance ,name) slot new-value) - (,(symb 'make- name) - ,@(iterate (for (slot . nil) :in slots) - (collect (ensure-keyword slot)) - (collect `(if (eq slot ',slot) - new-value - (slot-value instance ',slot))))))) - (defun build-equal? (name slots) `(defmethod equal? ((a ,name) (b ,name)) (and ,@(iterate (for (slot . nil) :in slots) @@ -98,7 +93,6 @@ (let ((slots (mapcar #'ensure-list slots))) `(progn ,(build-immutable-struct-form name slots) - ,(build-iset name slots) ,(build-equal? name slots) ,(build-constructor name slots) ',name))))