【发布时间】:2018-12-16 02:55:04
【问题描述】:
尝试编写一个返回列表中每三个元素的函数
包括球拍中的第一个元素。我现在得到的只是我的代码第一次爆炸:违反合同
预期:(和/c 列表?(不是/c 为空?))
给定:4
(define l (list 1 2 3 4 5 6 7 8 9))
(define (skipper lst)
(if (null? lst)
'()
(cons (first lst)
(skipper (car (cdr (cdr (cdr lst))))))))
(skipper l)
【问题讨论】:
-
抱歉,代码中的skipper应该是递归函数调用名称,我在发布代码时更改了函数顶部的函数名称,并在考虑正文之前过早地点击了发布问题编码。我的道歉。在我的实际代码中,函数名和函数体中的递归名是一样的。这不是错误的问题。
-
triple应该拿一个清单吧?是来自[Listof X] -> [Listof X]的函数吗? -
假设这是真的,在
triple的正文中,lst的类型为[Listof X],(cdr lst)、(cdr (cdr lst))和(cdr (cdr (cdr lst)))也是如此,因为如果你给 @ 987654330@ 一个列表,它为其余部分生成另一个列表。但是,你也有一个car,我不知道为什么。因为如果你给car一个平面列表,你将不会得到一个列表。(car (cdr (cdr (cdr lst))))将不会成为[Listof X]。 -
@teaNcode 如果您发布的问题有一些错误,您可以(并且应该!)编辑您的问题。
标签: racket