【发布时间】:2015-09-06 22:18:16
【问题描述】:
我在从我使用的字符串列表中删除字符串时遇到问题
(remove "lol" '("lol" "lol2" "lol")
但它返回相同的列表。这里有什么问题?
【问题讨论】:
标签: lisp
我在从我使用的字符串列表中删除字符串时遇到问题
(remove "lol" '("lol" "lol2" "lol")
但它返回相同的列表。这里有什么问题?
【问题讨论】:
标签: lisp
您遇到了试图确定平等的问题。我相信remove 使用eql 作为其默认的相等测试器。不幸的是,两个字符串不是eql,除非它们实际上是同一个对象。
试试:
`(remove "lol" '("lol" "lol2" "lol") :test #'equal)
或者,如果您知道要测试字符串,则可以将 string= 作为测试函数传递。
【讨论】:
eql是正确的,但你不应该只是相信它,而是在hyperspec中查找它。顺便说一句,Eql 是整个语言的标准默认比较,几乎没有例外。
eql 并且它没有另外说,但是...... "。
remove 的条目中点击两个链接,“满足测试”和“满足两个参数测试”才能到达第 17.2 章。 1,指定一般默认值。
你应该关闭')' 所以写:(删除“lol”'(“lol”“lol2”“lol”))
【讨论】: