gpt4 book ai didi

lisp - 什么时候在 Lisp 中更喜欢 gensym 而不是 make-symbol

转载 作者:太空宇宙 更新时间:2023-11-03 18:42:17 25 4
gpt4 key购买 nike

gensym 的前缀附加唯一数字的功能有没有派上用场的情况?我不明白为什么有 gensym

(let ((str "batman"))
(eq (make-symbol str)
(make-symbol str)))

总是返回nil

最佳答案

例如,GENSYM 使调试生成的代码稍微容易一些。

例子:

查看 LOOP 宏的扩展。您可以通过查看它们的名称来了解哪些符号是相同的,即使它们不在包中也是如此。有两个未实习的临时变量。现在不同的名称使用途更加明确。

CL-USER 4 > (pprint (macroexpand '(loop for i in '(1 2 3) sum i)))

(BLOCK NIL
(MACROLET ((LOOP-FINISH () '(GO #:|end-loop-1103|)))
(LET ((I NIL) (#:|tail-1106| '(1 2 3)) (#:|by-1107| 'SYSTEM:CDR$CONS))
(LET ((#:|accumulator-1104| 0))
(DECLARE (TYPE NUMBER #:|accumulator-1104|))
(TAGBODY
#:|begin-loop-1102| NIL
(PROGN
(WHEN (OR (ENDP #:|tail-1106|)) (GO #:|end-loop-1103|))
(LET ((#:|temp-1109| (FUNCALL #:|by-1107| #:|tail-1106|))
(#:|temp-1108| (SYSTEM:CAR$CONS #:|tail-1106|)))
(SETQ I #:|temp-1108|)
(SETQ #:|tail-1106| #:|temp-1109|)))
(INCF #:|accumulator-1104| I)
(GO #:|begin-loop-1102|)
#:|end-loop-1103| (RETURN-FROM NIL #:|accumulator-1104|))))))

关于lisp - 什么时候在 Lisp 中更喜欢 gensym 而不是 make-symbol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11764518/

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