List DNA匹配LISP
我目前正在尝试使用LISP创建一个函数,该函数查看DNA对,并根据它们是否匹配返回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
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)))