在常见的lisp中查找字符串向量中元素的位置

时间:2012-03-14 08:04:25

标签: vector common-lisp

返回字符串和数字向量中元素的位置,字符向量使用position

CL-USER> (position #\T  "ACGT")
3
CL-USER> (position 2  #(1 2 3 4))
1

CL-USER> (position #\A  #(#\A #\C #\G #\T))
0

以下字符串向量不起作用。我认为这是因为字符串本身就是一个字符向量。 那么,有什么用呢?

CL-USER> (position "A"  #("A" "C" "G" "T"))
NIL

2 个答案:

答案 0 :(得分:9)

默认情况下,POSITION使用EQL测试元素,对于大多数使用测试的序列函数都是如此CLHS 17.2.1。对于向量,EQL按身份而不是内容进行比较,以及两个字符串" A"通常会有所不同,即使它们看起来一样。要按内容进行比较,您需要将:test #'equal传递给POSITION。或string= or string-equal,它们专门用于字符串,如果其中一个参数不是字符串,则会发出错误信号。 string-equal也不区分大小写。

答案 1 :(得分:2)

尝试(position "A" #("A" "B" "C" "D") :test #'equal)