list - 如何使用递归删除 Racket 列表中的第一个和最后一个元素

标签 list recursion racket

本质上,我正在尝试删除列表中的第一个和最后一个元素。我目前已经能够确定如何删除列表中的最后一个元素,但我正在努力如何删除列表中的第一个元素和列表中的最后一个元素。

这是我到目前为止的代码。有没有办法修改我的代码,以便我能够删除列表中的第一个元素。

(define (rid L)
  (cond
    [(empty? L) '()]
    [(empty? (rest L)) '()]
    [(cons (first L) (rid (rest L)))]))

这是我期望的代码结果

(check-expect (rid (list 1 2 3 4 5)) (list 2 3 4))
(check-expect (rid (list "cat" "dog" "giraffe")) (list "dog"))

最佳答案

只是为了好玩 - 在 Racket 中,您可以在不使用显式递归的情况下解决这个问题。始终尝试使用现有程序来解决您的问题:

(define (rid L)
  (rest (drop-right L 1)))

(rid '(1 2 3 4 5 6))
=> '(2 3 4 5)

关于list - 如何使用递归删除 Racket 列表中的第一个和最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56845876/

相关文章:

C# Return Generic List/IEnumerable,它是如何工作的?

python - 避免在 for 循环中更新嵌套列表

mysql - 防止循环连接、递归搜索

python - 转义包含 '\xae' 元素的列表并打印结果

c# - 从对象列表创建逗号分隔列表

c++ - 为什么这种递归比等效迭代快得多?

javascript - 递归循环数组并返回项目数?

macros - Scheme宏中的任意计算

racket - Racket 允许函数重载吗?

scheme - 如何计算 bool 列表中 true 元素的数量?