问题标签 [setf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
macros - 使用运算符参数定义-修改-宏
在On Lisp 的第 12.4 节中,Paul Graham 写道:“不幸的是,我们不能用 定义正确_f
的define-modify-macro
,因为要应用于广义变量的运算符是作为参数给出的。”
但是这样的事情有什么问题呢?
ANSI Common Lisp 中的 define-modify-macro 是否有可能在编写 On Lisp 时无效?或者除了这里没有使用的原因之外还有其他原因define-modify-macro
吗?
格雷厄姆似乎希望能够拨打电话,例如
而不是
但这肯定不符合诸如 Common Lisp 之类的 Lisp2 吗?
c++ - 如何在单个 cout 中设置多个变量的精度
我主要有这个:
在 Product.cpp 我有:
但是在 .cpp 中将精度更改为 (1) 也会将 basePrice 更改为 (1)。如何更改同一 cout 中不同变量的精度?有办法吗?还是我只是将它们放在不同的 cout 中?那还能用吗?为什么或者为什么不?
当我尝试第二个 cout 时更新 ,它将数字 2 添加到我的 name 变量的末尾。换句话说,我在 name 变量之后结束了第一个 cout。它正在工作,但将数字 2 添加到末尾。
let - LET 和 SETF 的共同点LISP
根据我的老师告诉我的,我应该使用 let 声明局部变量和 setf 声明全局变量。
我尝试运行以下代码:
我得到零。
但是,当我尝试以下操作时:
我得到了想要的值(问题初始状态问题中的值)。
这是为什么?
PS:我为这些初学者问题道歉,我很难进入 LISP,来自 C 背景。
common-lisp - SETF 既不终止也不报告错误
我是一个 Common Lisp 初学者,遇到了这段代码:
REPL 在尝试执行时似乎只是永远循环。
c++ - Turn off setf in c++?
I am using setf in for displaying decimal places in outputs.
However, when I put the above code before an output, other outputs are affected too. Is there any way I can use setf for just only a single output? Like turning it off?
Thank you a lot!
common-lisp - 评估 setf 表格
这个问题是关于 Common Lispsetf
宏,以及它如何评估它的参数形式(和子形式)——也就是说,如果它们碰巧出现不止一次,则只有一次。(这也是对Using get-setf-expansion评论中给出的示例的部分跟进。)
交换:
进一步测试:
有人可以澄清发生了什么吗?另外,setf
带有副作用的表达式是什么意思?
functional-programming - 无损设置?
Common Lisp 似乎竭尽全力提供非破坏性函数(如 subst 和 remove)和破坏性函数并修改宏(如 delete 和 rotatef)以供一般使用。大概这是为了有效地支持函数式和非函数式编程风格。但在无处不在的设计中,似乎也有一种特别偏向于非功能性风格的倾向setf
。包含广义引用的setf
宏显然足够灵活,可以修改任何可指定的位置(可能不可变的整数和字符除外)。尽管具有非功能性/破坏性行为,但这种能力可能是其广泛使用的原因。
问题是为什么没有相应的“功能风格”非破坏性操作符,仿照其他非破坏性/破坏性 lisp 操作符对setf
(称之为 put,因为set
已经采用)。这样的运算符可能会采用相同的参数、位置和值,但会返回嵌入该位置的对象的副本,而不是该位置的新值。它也可能涉及某种通用复印机,标准setf
只是在返回之前修改副本。然后可以使用非破坏性运算符代替setf
大多数分配,其中setf
为非常大的对象保留。考虑到对通用复印机的(假定)要求以及从嵌入其中的任意位置恢复对象的需要,这样的操作员是否可行(甚至可能)?
common-lisp - SETFable vs place (CLHS) vs location (Norvig)
setf
能否与CLHS中的位置和 Norvig 的 PAIP 中的位置相同?
我试图弄清楚 Common Lisp 中的确切位置,但对我来说 HyperSpec 的解释
地点 n. 1. 适合用作一般参考的形式。2.这样一个地方[1]所指的概念位置。
只是帮助有限。
(我知道这不是真正适合的问题,但如果有人知道一篇解释可设置/地点/位置的好文章,我会很感激链接/参考)
common-lisp - How do setf works under the hood?
Currently learning common lisp, following Peter Seibel's Practical Common Lisp (i'm at chapter 11, about collections), i have difficulties to understand how setf
works behind the hood.
Considering this expression :
I completely understood how the interpreter can (1) retrieve the variable named a
, and (2) change the value it points to to 10
.
Now, i case of particular collections, for instance lists, vectors or hash tables, setf can also be used to change values contained by the collection. For instance, with a vector :
This makes me suspicious about setf
, because it is eventually finding non-trivially accessible information, or making black magic. I see multiple possibilities.
1. setf is a function
The (elt *x* 1)
expression is returning 'b
, so setf
is virtually working with (setf b bb)
. I then do not understand how setf
can infer which object (here, the list *x*
) it must modify, without having the return value of elt
holding both an indication that it comes from a collection, and a pointer to the said collection.
Seems complicated.
2. setf is a macro
The idea is, as setf
is a macro, it works directly with the (setf (elt *x* 1) bb)
and therefore can extract the elt *x* 1
part to infer which object/collection is used, and therefore must be modified.
It do not seems very efficient, nor reliable, nor resistant to complex operations. However, since i'm unable to run this code :
This make me think that setf
is a macro implementing a very simple heuristic to retrieve the function to call, and all other needed information.
Seems complicated.
3. setf is a special case of interpretation
Another way to go could be to have setf be handled differently by the interpreter itself, dealing with some black magic to implement properly the expected behavior. Seems complicated.
4. there is something i do not know about lisp
Probably the real answer. What did i miss ?
Bonus question : is the implementation method dependent of the lisp interpreter implementation ? (or, more simply, what exactly the common lisp standard define about setf implementation) I'm currently using clisp but insights on others implementations are welcome.
macros - 动态定义 setf 扩展器
我正在尝试定义一个宏,它将采用结构的名称、键和结构中的哈希表的名称,并定义函数来访问和修改哈希中键下的值。
为了测试这一点,我有:
当我跑
然后
它应该返回3 T
,但是
给出错误:
(macroexpand-1 '(make-hash-accessor tester x hash))
扩展到
我正在使用 SBCL。我究竟做错了什么?