【发布时间】:2020-12-30 20:47:25
【问题描述】:
给定 Racket 中任意长度的列表,从连续元素的差异的绝对值创建一个新列表。新列表的最后一个元素应该是输入列表的第一个元素和最后一个元素之差的绝对值。
例如:输入 t = (2, 6, 7, 11) 应导致 t' = (4, 1, 4, 9)。
这是我所拥有的:
(define (a-succ t i)
(cond [(empty? t) empty]
[(>= i (size t)) t]
[else
(cons (abs (- (first t)
(first (rest t))))
(a-succ (rest t) i))]))
问题在于,通过这种方法,我不能用最后一个数字减去列表的第一个数字,因为第一个数字在运行程序后会发生变化。所以我认为需要做的第一步是通过定义一个新函数,用反转的第一个数字减去第一个数字。我只是不知道如何更改列表一次,然后将我的递归函数应用于更改后的列表。
【问题讨论】:
-
长度为 1 的列表应该产生什么?这是一项家庭作业吗?您的解决方案是否有任何限制?您的解决方案是否必须使用递归? “我已经尝试了很多东西......我只是找不到一个好的方法......”:尽你最大的努力;什么不工作?
-
应该给出长度为 1 的列表(列表 0)。这是一项旨在通过递归解决的家庭作业。下面是我目前得到的代码。
-
张贴代码中
i的目的是什么?问题描述中没有提到这一点。如果您显示示例函数调用和预期结果(而不是在逗号分隔列表上显示抽象转换),这将很有帮助。另外,size是什么?您是说length,还是使用#lang racket,或其他学生语言?