gpt4 book ai didi

list - DNA匹配LISP

转载 作者:太空宇宙 更新时间:2023-11-03 18:59:56 28 4
gpt4 key购买 nike

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

从逻辑上讲,我知道您需要递归地处理不同的可能情况,但我不太确定如何在 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-1 (x y)
(ecase x
((a) (eq y 't))
((t) (eq y 'a))
((c) (eq y 'g))
((g) (eq y 'c))))

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

(dnamatch-list '(a t c g) '(a c g g))
==> NIL
(dnamatch-list '(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)))

文档:

注意事项

nucleobase表示

您正在使用标准常量 t作为核碱基的名称,这可能不是最好的方法。您可能想使用 characters (#\t &c) 或更长的符号 (thymine &c)。如果您决定使用字符,则可能需要使用 strings而不是 lists .

错误检查

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

长度检查

dnamatch-list 的两个版本只比较其参数的最短公共(public)部分,您可能想做类似的事情

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

关于list - DNA匹配LISP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43397961/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com