我有一点的,实施这个方案的计划麻烦,但我觉得我的存在方式90%。 不幸的是,我需要一点含糊它,因为这是一个家庭作业。 我想(ABCD)返回(BD)。 但我得到的是说,作为参数传递给安全车传递的对象(),一个错误,是不是一对| “这是我的代码:
(DEFINE (other_el lis)
(COND
(( NULL? lis ) '())
((LIST? lis)
(append (CADR lis) (other_el (CDR lis))))
(ELSE (show " USAGE: (other_el [LIST])"))))
有许多与此代码之前我演示了正确的代码,应该提到的小问题。
- 不要利用程序的名字,如CDR和方案定义。
- 不要手动显示错误消息。 使用异常。
- 你应该总是缩进代码。 (编辑:它看起来像有人已经编辑了问题的代码,包括缩进)
总之,这里是您正在寻找的功能:
(define (evens lst)
(if (or (null? lst) ; if the list is empty
(null? (cdr lst))) ; or the list has a single element
'() ; then return the empty list
(cons (cadr lst) ; otherwise `cons` the second element
(evens (cddr lst))))) ; and recursively advance two elements
我在DrRacket 5.3测试功能,并按照指定的(埃文斯 '(ABCD))返回'(BD)。 如果您有任何问题,让我知道。 祝你的功课!
这个比你问前面的问题要简单得多。 记住,你不必计算每一步的长度(这可能是非常低效的),或使用追加操作来解决它(使用cons
代替); 这里的答案的结构,因为它看起来像功课I'l让你填写的空白:
(define (every-other lst)
(if (or <???> ; if the list is empty
<???>) ; or the list has a single element
<???> ; then return the empty list
(cons <???> ; otherwise `cons` the second element
(every-other <???>)))) ; and recursively advance two elements
如果你需要做一些错误首先检查,使用其他功能,并呼吁你一定的论据是正确后,上面的程序:
(define (other_el lst)
(if (list? lst)
(every-other lst)
(error "USAGE: (other_el [LIST])")))
使用这样的:
(other_el '(A B C D E G))
=> '(B D G)