此代码的目的是删除并返回列表X的前N部分
{define (grab x n)
(cond
[(< (len x) n) x]
[(> n 1)((car x) (grab(cdr x) (- n 1)))]
[(= n 1)(car x)]
)}
它目前只返回上述错误
答案 0 :(得分:0)
您的解决方案中存在一些错误:
cons
当前值 - 请记住,我们以递归方式构建列表作为答案,我们必须使用cons
来这样做0
而不是1
。否则,当n
等于零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)