此代码的目的是删除并返回列表 X 的前 N 部分
{define (grab x n)
(cond
[(< (len x) n) x]
[(> n 1)((car x) (grab(cdr x) (- n 1)))]
[(= n 1)(car x)]
)}
它目前只返回上述错误
此代码的目的是删除并返回列表 X 的前 N 部分
{define (grab x n)
(cond
[(< (len x) n) x]
[(> n 1)((car x) (grab(cdr x) (- n 1)))]
[(= n 1)(car x)]
)}
它目前只返回上述错误
您的解决方案中有几个错误:
cons
了当前值 - 请记住,我们正在递归地构建一个列表作为答案,我们必须cons
这样做0
而不是1
。否则程序将在n
等于 0时失败n
等于零时,应该返回空列表 - 否则输出列表将无法正确构造完成上述所有修复后,该过程将起作用:
(define (grab x n)
(cond
[(< (len x) n) x]
[(> n 0) (cons (car x) (grab (cdr x) (- n 1)))]
[(= n 0) '()]))
作为旁注,您基本上是在实施该take
过程,如果您的解释器中可以使用该过程(除非如果大于列表的长度take
会引发错误):n
(take '(1 2 3 4 5) 3)
=> '(1 2 3)