Skip to main content

get-setf-expansion

get-setf-expansion Function

Syntax:

get-setf-expansion place &optional environment

! vars, vals, store-vars, writer-form, reader-form

Arguments and Values:

place—a place.

environment—an environment object.

vars, vals, store-vars, writer-form, reader-form—a setf expansion.

Description:

Determines five values constituting the setf expansion for place in environment; see Section 5.1.1.2 (Setf Expansions).

If environment is not supplied or nil, the environment is the null lexical environment.

Examples:

(get-setf-expansion ’x) 
*!* NIL, NIL, (#:G0001), (SETQ X #:G0001), X
;;; This macro is like POP
(defmacro xpop (place &environment env)
(multiple-value-bind (dummies vals new setter getter)
(get-setf-expansion place env)
(let\* (,@(mapcar #’list dummies vals) (,(car new) ,getter))
(if (cdr new) (error "Can’t expand this."))
(prog1 (car ,(car new))
(setq ,(car new) (cdr ,(car new)))
,setter))))
(defsetf frob (x) (value)
(setf (car ,x) ,value)) *!* FROB
;;; The following is an error; an error might be signaled at macro expansion time (flet ((frob (x) (cdr x))) ;Invalid
(xpop (frob z)))

See Also:

defsetf, define-setf-expander, setf

Notes:

Any compound form is a valid place, since any compound form whose operator f has no setf expander are expanded into a call to (setf f ).

Expanded Reference: get-setf-expansion

tip

TODO: Please contribute to this page by adding explanations and examples

(get-setf-expansion )