【发布时间】:2013-10-03 01:25:38
【问题描述】:
这段代码的目的是删除并返回列表 X 的前 N 部分
{define (grab x n)
(cond
[(< (len x) n) x]
[(> n 1)((car x) (grab(cdr x) (- n 1)))]
[(= n 1)(car x)]
)}
目前只是返回上述错误
【问题讨论】:
标签: scheme
这段代码的目的是删除并返回列表 X 的前 N 部分
{define (grab x n)
(cond
[(< (len x) n) x]
[(> n 1)((car x) (grab(cdr x) (- n 1)))]
[(= n 1)(car x)]
)}
目前只是返回上述错误
【问题讨论】:
标签: scheme
您的解决方案中有几个错误:
cons 当前值 - 请记住,我们正在递归构建一个 list 作为答案,我们必须使用 cons 这样做李>
0 而不是1。否则,当n 等于零时,该过程将失败n 等于 0 时,应该返回空列表 - 否则输出列表将无法正确构造通过上述所有修复,该过程将起作用:
(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)
【讨论】: