事情就是这样:我没有"获得"setf-expanders,并希望了解它们是如何工作的.
我需要了解它们是如何工作的,因为我遇到了一个问题,这似乎是为什么你应该学习setf-expanders的典型例子,问题如下:
(defparameter some-array (make-array 10))
(defun arr-index (index-string)
(aref some-array (parse-integer index-string))
(setf (arr-index "2") 7) ;; Error: undefined function (setf arr-index)
Run Code Online (Sandbox Code Playgroud)
如何为ARR-INDEX编写合适的setf-expander?
(push x list)
Run Code Online (Sandbox Code Playgroud)
扩展到
(setq list (cons x list))
Run Code Online (Sandbox Code Playgroud)
什么扩展到以下:
(setq list (append list2 list))
Run Code Online (Sandbox Code Playgroud)
?这有一个标准的宏吗?
我需要一个incf在增量期间执行某些边界检查的函数:
val := val + delta
if val >= 1.0
then return 1.0
else return val
Run Code Online (Sandbox Code Playgroud)
我可以这样写incf:
(defun incf-bounded(val delta)
(incf val delta)
(if (>= val 1.0) 1.0 val))
Run Code Online (Sandbox Code Playgroud)
在这种情况下我需要使用它(setf x (incf-bounded x delta)).但是我该怎么写一个我可以使用的(incf-bounded x delta),比如,哪里x会被修改?