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

Fah*_*tha 4 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
Run Code Online (Sandbox Code Playgroud)

字符串向量的以下内容不起作用.我认为这是因为字符串本身就是一个字符向量.那么,一个人可以使用什么?

CL-USER> (position "A"  #("A" "C" "G" "T"))
NIL
Run Code Online (Sandbox Code Playgroud)

Ram*_*ren 9

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

  • @MironBrezuleanu:在CLHS的seqence文档中:17.2.1 ...如果既没有提供:test也没有提供:test-not参数,那就好像提供了一个#'eql的test参数.... (3认同)