;Set the given field to the give value in the given alist-style struct. ;The strategy is the following: ; 1. Cruise down alist, looking for a pair starting with field-name. ; 2. As we go, we're building a new alist of each pair that we examine. ; 3. If we get to pair that does start with field-name, we make a new ; pair with the value of the parmameter sent in, glue on the rest of ; the alist and we're done. ; 4. Otherwise we glue in the pair we just examined as is and continue ; looking down the rest of the list, until we get to the end (signaled ; by a null list). ; (defun setfield (field-name value struct) (cond ( (null struct) nil ) ( (eq field-name (caar struct) ) (cons (cons (caar struct) (list value)) (cdr struct)) ) ( t (cons (car struct) (setfield field-name value (cdr struct))) ) ) )