gpt4 book ai didi

scheme - (Scheme) 如何将 2 个不同大小的列表加在一起

转载 作者:行者123 更新时间:2023-12-01 12:40:03 25 4
gpt4 key购买 nike

我是 scheme 的新手,我在尝试添加 2 个不同大小的列表时遇到了问题。我想知道如何正确地将 2 个不同大小的列表加在一起。在我的代码中,我比较了值并将 '(0) 附加到较短的列表,以便它们可以获得相同的大小,但即使这样做之后我也无法使用 map 添加 2 个列表。运行程序后出现错误代码。我应该得到的结果是'(2 4 5 4)。谁能帮帮我?谢谢。

#lang racket

(define (add lst1 lst2)

(cond [(< (length lst1) (length lst2)) (cons (append lst1 '(0)))]
[else lst1])

(cond
((and (null? lst1)(null? lst2)) null)
(else
(map + lst1 lst2))))

;;Result should be '(2 4 6 4)
(add '(1 2 3) '(1 2 3 4))

错误:

cons: arity mismatch;
the expected number of arguments does not match the given number
expected: 2
given: 1
arguments...:
'(1 2 3 0)

最佳答案

您的代码的问题是有两个 cond 表达式一个接一个 - 两个都会执行,但只会返回第二个的结果 -换句话说,代码并没有按照您的想法行事。现在,要解决这个问题,如果我们将解决方案分成两部分会更容易(一般来说,这是一个很好的策略!)。试试这个:

(define (fill-zeroes lst n)
(append lst (make-list (abs n) 0)))

(define (add lst1 lst2)
(let ((diff (- (length lst1) (length lst2))))
(cond [(< diff 0)
(map + (fill-zeroes lst1 diff) lst2)]
[(> diff 0)
(map + lst1 (fill-zeroes lst2 diff))]
[else (map + lst1 lst2)])))

解释:

  • fill-zeroes 过程负责用给定数量的零填充列表的尾部
  • add 过程负责确定需要填充哪个列表,当两个列表的大小都合适时执行实际添加

对于列表长度的任意组合,它都按预期工作:

(add '(1 2 3 4) '(1 2 3))
=> '(2 4 6 4)
(add '(1 2 3) '(1 2 3 4))
=> '(2 4 6 4)
(add '(1 2 3 0) '(1 2 3 4))
=> '(2 4 6 4)

关于scheme - (Scheme) 如何将 2 个不同大小的列表加在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25752747/

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