gpt4 book ai didi

common-lisp - (defun (setf …)) defsetf 和 define-setf-expander 的典型用例是什么

转载 作者:行者123 更新时间:2023-12-04 02:51:43 24 4
gpt4 key购买 nike

在使用 Common Lisp 进行开发时,我们可以通过三种方式来定义新的 setf 形式:

  • 我们可以定义一个函数,其名称是两个符号的列表,第一个是 setf,例如(defun (setf some-observable) (…))

  • 我们可以使用defsetf的缩写形式。

  • 我们可以使用defsetf的长格式。

  • 我们可以使用define-setf-expander

我不确定每种可能性的正确或预期用例是什么。

对这个问题的回答可能会暗示最通用的解决方案,并概述其他解决方案更优越的上下文。

最佳答案

define-setf-expander 是其中最通用的。 setf 的所有功能都包含在其中。

定义一个 setf 函数对大多数访问器来说都很好。使用通用函数也是有效的,因此多态性不足以要求使用其他东西。控制正确性或性能评估是使用 setf 函数的主要原因。

为了正确性,许多形式的解构不可能用 setf 函数来处理(例如 (setf (values ...) ...))。类似地,我看到了一个示例,该示例通过更改 (setf (dict-get key some-dict) 2) 将新字典分配给 some 使功能数据结构在本地表现得像一个可变结构-dict.

为了性能,请考虑 (incf (nth 10000 list)) 的愚蠢情况,如果将 nth 编写器实现为函数,则需要遍历 10k 列表节点两次, 但在 setf 扩展器中可以通过一次遍历完成。

关于common-lisp - (defun (setf …)) defsetf 和 define-setf-expander 的典型用例是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54723353/

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