Common LISP 中的函数“position”与“gensym”一起工作很奇怪

问题描述 投票:0回答:1

我是

LISP
的新手,所以对于可能不聪明的问题提前表示歉意。 现在需要检查给定的符号是否是给定符号列表的成员。函数
position
在大多数情况下工作良好,但是当符号由
gensym
函数生成时就会出现问题:

(position '#:G808 (list '#:G808))

我期望

0
作为此查询的响应,但得到的是
nil
。我怀疑
#
:
有一些特殊含义,但是项目
'#:G808
无论如何都属于列表
'#:G808
不是吗?

list common-lisp symbols
1个回答
0
投票

GENSYM
每次使用时都会创建一个新符号,因此
#:G808
的这两次使用实际上是具有相同名称的不同符号。

将其分配给一个变量,这样您将拥有相同的符号。

(let ((sym (gensym)))
  (position sym (list sym)))
© www.soinside.com 2019 - 2024. All rights reserved.