嗨我正在写第一个元素之后抓住每个第三个元素的东西。但是由于“对象(a b c d e f g)不适用,我无法测试逻辑。”代码如下,原子?检查它是否是列表,listful被定义为空列表。
(DEFINE (threes var)
(if(atom? var)
((newline) (DISPLAY "Bad input") ))
(APPEND(listful (CAR var)))
(if(> 3 (length var))
(threes (cdddr(listful)))
(listful))
)
有人能给我一些提示吗?以下是我在Scheme环境中调用方法的方法。
>(threes (list1)) >(threes '(A B C D E F))
答案 0 :(得分:1)
if
只能有一个表达式作为结果,另一个作为替代。如果您需要多个表达式,则必须使用begin
来包含表达式序列 - 围绕()
表达式的表达式,并且会导致报告错误,因为Scheme将()
解释为函数应用程序。这将是正确的语法:
(define (threes var)
(if (atom? var)
(begin
(newline)
(display "Bad input")))
(append (listful (car var)))
(if (> 3 (length var))
(begin
(threes (cdddr (listful)))
(listful))))
......然而,这不太可行。你想做的事情在最后几天被问过几次,特别是here是我自己以前的回答:
(define (threes lst)
(cond ((or (null? lst) (null? (cdr lst))) lst)
((null? (cdr (cdr lst))) (list (car lst)))
(else (cons (car lst)
(threes (cdr (cdr (cdr lst))))))))
例如:
(threes '(a b c d e f g h i j k l m n o p))
=> '(a d g j m p)
有关解决问题的其他方法,请参阅original question,并提供详细说明。