我的方案有点生疏。我刚才在手DR-方案翻译...
需要消耗你的清单,只返回每个子列表的第一个元素。要创建一个列表,您必须使用cons指令,并且不需要输出它,您需要将其作为函数结果返回(但您应该已经知道它)。
如果您需要打印的结果,你应该计算与输出分离,在第二个步骤解决打印问题。
对于建立一个列表,你有几个结构,最基本的就是缺点,它需要一个通用的元素(同样是一个列表),并在前面加上一个列表(空一个,也可以)
(cons 1) => error: cons need two parameters
(cons 1 null) => (list 1)
(cons 1 2) => error: need a value (first parameter) and a list (the second one)
(cons 1 (cons 2 null) => (list 1 2)
现在到你的作业。通常我不张贴功课代码,但这一次我觉得你只是一个暗示离解,所以有可能一个
(define (car-list alist)
(cond
((null? alist) null)
(else (cons (car(car alist)) (car-list (cdr alist))))
)
)
; tail recursion version usage: (car-acc-list alist null)
(define (car-acc-list alist acc)
(cond
((null? alist) acc)
(else (car-acc-list (cdr alist) (cons (car(car alist)) acc)))
)
)
我以前COND,而不是如果“原因我认为它允许更好的代码格式。 他的结构很简单:条件列表,测试条件(或其他)作为汽车和行动执行,如果条件满足cdr。 如果行动决心的值((空?ALIST)空)函数的返回与该值作为返回值。如果递归被触发,那么函数在递归完成时返回。
有两个版本的解决方案,你应该使用步进/调试器来研究他们之间的分歧。
顺便说一下,我用drscheme来测试代码,它是一个非常棒的免费(lgpl)软件。与其他计划环境稍有不同之处在于代码应该是非常基本的代码,因此它应该在任何地方都没有问题。
@Richard,方案。 – 2010-03-30 01:21:14
它应该是方案,一个lisp方言(与静态范围) – Eineki 2010-03-30 01:22:24
@poorStudent有你一个输入的例子吗?你使用什么方案级别? – Eineki 2010-03-30 01:23:42