2014-04-10 6 views
0

안녕하세요 저는 첫 번째 요소 뒤에 세 번째 요소를 가져 오는 것을 씁니다. 그러나 나는 "; 객체 (a b c d e f g)가 적용 가능하지 않기 때문에 논리를 테스트 할 수 없습니다." 코드는 아래에 있습니다, 원자? 목록인지 확인하고, 목록은 빈 목록으로 정의됩니다.개체 ___을 적용 할 수 없습니다

(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)) 

답변

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)))) 

... 그러나 작동하지 않을 수 있습니다.

(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를 참조하십시오 : 예를 들어

(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)))))))) 

: 당신이 here 특히, 마지막 날에 몇 번 요청되었습니다하고 싶은 내 자신의 이전 답변입니다 자세한 설명과 함께 문제를 해결하십시오.

관련 문제