gpt4 book ai didi

string - 列表或向量上相同的头部和尾部操作

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

我在 LISP 和列表处理方面没有经验,但我有一组 C++ STL 向量(或字符串),我需要对其执行以下操作:

IdenticalHead(v1, v2):返回v1和v2都以它开头的最大序列。

IdenticalTail(v1, v2):返回v1和v2都以它结尾的最大序列。

IdenticalTailHead (v1, v2):返回v1以它结束,v2以它开始的最大序列。

例如:

如果 v1 = (a,b,c,e,f),v2 = (a,b,d,e,f),则:

IdenticalHead (v1, v2) = (a,b)
IdenticalTail (v1, v2) = (e,f)

如果 v1 = (a,b,c), v2 = (b,c,g), 那么:

IdenticalTailHead (v1, v2) = (b,c)

我的问题是,这些是 LISP 或任何其他语言的标准操作吗?它们有 CDR 和 CAR 等标准名称吗?

最佳答案

IdenticalHead 和IdenticalTail 基本上由Common Lisp 函数提供MISMATCH .

CL-USER 81 > (mismatch '(a b c e f) '(a b d e f))
2

CL-USER 82 > (mismatch '(a b c e f) '(a b d e f) :from-end t)
3

CL-USER 83 > (defun identical-head (s1 s2)
(let ((m (mismatch s1 s2)))
(if (numberp m)
(subseq s1 0 m)
s1)))
IDENTICAL-HEAD

CL-USER 84 > (identical-head '(a b c e f) '(a b d e f))
(A B)

CL-USER 85 > (defun identical-tail (s1 s2)
(let ((m (mismatch s1 s2)))
(if (numberp m)
(subseq s1 (1+ m))
s1)))
IDENTICAL-TAIL

CL-USER 86 > (identical-tail '(a b c e f) '(a b d e f))
(E F)

第三个函数比较复杂:

CL-USER 87 > (defun identical-tail-head (s1 s2 &aux (l1 (length s1)))
(loop for i from 0 below l1
for m = (mismatch s2 s1 :start2 i)
when (and m (= (+ i m) l1))
do (return (subseq s1 i))))

CL-USER 88 > (identical-tail-head '(a e d b c d) '(b c d a f))
(B C D)

关于string - 列表或向量上相同的头部和尾部操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11475685/

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