List DNA匹配LISP

List DNA匹配LISP,list,lisp,List,Lisp,我目前正在尝试使用LISP创建一个函数,该函数查看DNA对,并根据它们是否匹配返回T或NIL 从逻辑上讲,我知道您需要递归地处理各种可能的情况,但我不太确定如何在LISP中实现这一点。如果您能提供任何帮助,我将不胜感激 我知道我现在需要把A和T,C和G进行比较,但我不知道怎么做 编辑:测试用例以更清楚地显示我的意思 (dnamatching '(a t c g) '(a c g g)) ==> NIL (dnamatching '(a a t c g) '(t t a g c)) ==&g

我目前正在尝试使用LISP创建一个函数,该函数查看DNA对,并根据它们是否匹配返回
T
NIL

从逻辑上讲,我知道您需要递归地处理各种可能的情况,但我不太确定如何在LISP中实现这一点。如果您能提供任何帮助,我将不胜感激

我知道我现在需要把A和T,C和G进行比较,但我不知道怎么做

编辑:测试用例以更清楚地显示我的意思

(dnamatching '(a t c g) '(a c g g))
==> NIL
(dnamatching '(a a t c g) '(t t a g c))
==> T
这是一个基本版本 如果您愿意,这里是一个迭代版本:

(defun dnamatch-list (a b)
  (loop for x in a and y in b
    always (dnamatch-1 x y)))
文档:
  • :及
笔记 代表 您使用标准常量作为碱基的名称,这可能不是最好的方法。 您可能需要使用(
#\t
&c)或更长的符号(
胸腺嘧啶
&c)。 如果决定使用字符,则可能希望使用而不是

错误检查 请注意,我的
dnamatch-1
检查
x
是否仅包含有效符号,但不检查
y

长度检查 两个版本的
dnamatch list
仅比较其参数的最短公共部分,您可能希望执行以下操作

(defun dnamatch-list (a b)
  (and (= (length a) (length b))
       (every #'dnamatch-1 a b)))

你能添加一些测试用例吗?e、 例如,哪些列表会匹配,哪些不会匹配。@sds您就这样做了,希望这会有所帮助!恐怕我不明白这个问题。如果您想将第一个dna的第一个碱基与第二个dna的最后一个碱基匹配,那么,是的,您需要按照您的建议使用反向。第一个碱基中的
MAPCAR
是不必要的,因为
EVERY
可以将多个列表作为参数,因此
(EVERY#dnamatch-1 a b)
应该可以工作。
(defun dnamatch-list (a b)
  (and (= (length a) (length b))
       (every #'dnamatch-1 a b)))