gpt4 book ai didi

common-lisp - 在Common Lisp中定义setf-expanders

转载 作者:行者123 更新时间:2023-12-03 15:16:37 25 4
gpt4 key购买 nike

事情是这样的:我没有“得到” setf扩展器,而是想学习它们是如何工作的。

我需要学习它们的工作原理,因为我遇到了一个问题,这似乎是为什么您应该学习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)


如何为ARR-INDEX编写适当的setf-expander?

最佳答案

(defun (setf arr-index) (new-value index-string)
(setf (aref some-array (parse-integer index-string))
new-value))


在Common Lisp中, function name不仅可以是一个符号,而且可以是两个以 SETF作为第一个符号的符号的列表。往上看。 DEFUN因此可以定义 SETF函数。该函数的名称为 (setf arr-index)

setf函数可以以下形式使用: CLHS: Other compound forms as places

新值是第一个参数。

CL-USER 15 > some-array
#(NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL)

CL-USER 16 > (setf (arr-index "2") 7)
7

CL-USER 17 > some-array
#(NIL NIL 7 NIL NIL NIL NIL NIL NIL NIL)

关于common-lisp - 在Common Lisp中定义setf-expanders,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11457071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com