2016-08-06 22 views
1

Ich habe ein Problem, meine Lösung zu Projekt Euler Problem zu kompilieren, SLIME gibt mir den Fehler "Undefinierte Variable 'ich" und ich habe keine Ahnung, wie zu lösen Sie haben nach einer Lösung gesucht.Undefinierte Variable ich beim Erstellen einer for-Schleife in gemeinsamen Lisp

(defun sol1 (natnum) 
    (loop for i from 1 to (1- natnum)) 
    do (if (or (zerop (mod sum i 3)) 
       (zerop (mod sum i 5))) 
      (incf sum i)) 
    sum) 
+0

Wenn Sie den Code tatsächlich korrekt eingerückt haben, wurden die Klammern falsch platziert. Bei der Programmierung ist das Einrücken und Formatieren von Code für den Entwickler sehr wichtig, um sicherzustellen, dass er den Code versteht. –

+0

Zusätzlich ist die Variable 'sum' undefiniert. –

Antwort

4

Die Variable i ist zum Ausdruck loop local. Die if ist außerhalb dieser Schleife, so dass die Variable nicht mehr existiert.

Sie haben auch die Variable sum nicht deklariert oder initialisiert. Aber loop kann summieren von selbst, so dass Sie es nicht brauchen.

Und Sie geben zu viele Argumente an die mod Funktion, es dauert nur zwei Argumente. Ich bin mir nicht sicher, warum du sum drin hast.

(defun sol1 (natnum) 
    (loop for i from 1 to (1- natnum) 
     when (or (zerop (mod i 3)) 
       (zerop (mod i 5))) 
      sum i)) 

Da Sie SLIME verwenden, müssen Sie Emacs verwenden. Es verfügt über eine integrierte Lisp-Einrückungsunterstützung. Sie sollten diese verwenden, um die Struktur Ihres Codes zu sehen.