2013-12-12 37 views
0

我想寫功能,總結小於或等於 200所有正整數且倍數和7口齒不清內國防部功能無效遞歸添加一定數目的倍數和正整數的6

我有如下:

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

這是給我下面的錯誤:

遞歸(被稱爲

錯誤處理程序:無效功能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挑選角:使用'eql'而不是'eq'來比較數值。或者,在這種情況下,使用'zerop'作爲'(zerop(mod current 6))'而不是'(eq(mod current 6)0)'。 – Dirk