2013-12-12 3 views
0

나는 모든 양의 정수보다 작거나 200 동일하게 요약 함수를 작성하기 위해 노력하고 있습니다 오전 6 배수, 7잘못된 재귀 함수는 특정 숫자의 배수 합 양의 정수를 추가하는

(defun sumFunction(current sum) 
    (if (/= current 200) 
     (if ((eq (mod current 6) 0) or (eq (mod current 7) 0)) 
      (setf sum (+ sum current)) 
      (sumFunction (+ current 1) sum) 
     ) 
     (sumFunction ((+ current 1) sum) 
    ) 
) 

그것은 나에게주고 다음과 같은 오류 :

이 재귀 적 (라고

오류 처리기 : INVALID-기능 NIL IF "가" 는 "~ S는 무효이며 내가 가지고하면 다음과 같다 기능. " (EQ (MOD CURRENT 3) 0))

나는 왜 오류가 있는지 잘 모르겠습니다.

로직을 따르면 필요한 결과를 반환해야합니다.

도움을 주시면 감사하겠습니다. 감사합니다

답변

2

코드에 구문 오류가 두 개 있으며 Lisp 스타일과 일치하지 않는 몇 가지 다른 문제가 있습니다. 아래의 수정 된 코드를 참조하십시오.

(defun sumFunction(current sum) 
    (if (/= current 200) 
     (if (or (eq (mod current 6) 0) (eq (mod current 7) 0)) 
      (sumFunction (+ current 1) (+ current sum)) 
     (sumFunction (+ current 1) sum)) 
    sum)) 

다음은 결과입니다.

(sumFunction 20 0) 
;=> 5731 
+0

고맙습니다. 지금은 문제가 있습니다. 이것은 대단히 도움이되었습니다! – user1661211

+0

Nit pickers corner : 숫자 값을 비교하기 위해'eq' 대신'eql'을 사용하십시오. 또는이 경우'(eq (mod current 6) 0)'대신'(zerop (mod current 6))'와 같이'zerop'을 사용하십시오. – Dirk