gpt4 book ai didi

scheme - 列表长度比较

转载 作者:行者123 更新时间:2023-12-04 05:38:42 25 4
gpt4 key购买 nike

我想编写用于比较两个列表大小的代码。我利用了长度并将其写下来。

(define (same-size-matrix? mtrx1 mtrx2)
(equal? (length mtrx1) (length mtrx2))).

我认为这对我有用,但我发现它只检查总长度,而不是子列表。例如,它在比较时返回 true。 '((1 2 3 4) (4 5 6 6) (6 7 8 9)) 和 '(( 5 4) (3 2) (7 1)),但它应该返回false,因为第一个有4列表中的值,第二个值只有两个,即使它们总体上具有相同的长度。我该怎么做。任何帮助将不胜感激。

最佳答案

试试这个:

(define (same-size-matrix? mtrx1 mtrx2)
(equal? (map length mtrx1) (map length mtrx2)))

请注意,在您的解决方案中,您正在比较每个列表的总长度(矩阵中的行数),但忽略了每个子列表的长度(矩阵中每行的列数)。在我的灵魂中,首先我们计算每个子列表的长度,然后检查所有长度是否相等。例如,采用以下输入:
(define mtrx1 '((1 2 3 4) (4 5 6 6) (6 7 8 9)))
(define mtrx2 '((5 4) (3 2) (7 1)))
(same-size-matrix? mtrx1 mtrx2)

先是 same-size-matrix?计算这个表达式,它在 mtrx1 中找到每个子列表的长度.有必要检查所有长度,而不仅仅是第一个,以防我们处理锯齿状数组:
(map length mtrx1)
; evaluates to '(4 4 4)

然后我们有这个表达式,它对 mtrx2 执行相同的操作:
(map length mtrx2)
; evaluates to '(2 2 2)

最后,我们比较两个长度列表(实际上:每行的列数),返回预期结果:
(equal? '(4 4 4) '(2 2 2))
> #f

请注意,最后一次比较还将检测列表的大小是否不同,以防矩阵具有不同的行数。

关于scheme - 列表长度比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11572099/

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