lisp-Programm zur Berechnung der Summe von n zahlen
(defun sum-n-numbers(n)(if(=n 1)
1
(+N(sum-n-numbers(-n 1)))))
Edit 2:(defun sum-n-numbers(n)
(if(=n 1)
1
(+N(sum-n-numbers(-n 1))
)
)
)
Der obige code wird ausgeführt, aber wenn ich den Typ ((SUMME-N-ZAHLEN 1 3 2) für die Ausgabe,funktioniert es nicht und ich bekomme Fehler.
Ich weiß, dieser einfache code kann auch ausgeführt werden, indem die inbuild lisp-Funktion (+ 1 3 2), die automatisch berechnet die Summe der zahlen,aber ich habe eine Klausur Frage, wo es um die Frage, zur Berechnung der Summe von n zahlen mithilfe der defun-Funktion.
Edit 1: Dies ist die Fehlermeldung, die ich erhalte:
Error: Call ((LAMBDA (#:N) (DECLARE (SPECIAL:SOURCE #) (LAMBDA-NAME SUM-N-NUMBERS)) (BLOCK #:SUM-N-NUMBERS (IF # 1 #))) 1 3 2) has the wrong number of arguments.
1 (abort) Return to level 1.
2 Return to debug level 1.
3 Return to level 0.
4 Return to top loop level 0.
- Welche Fehler machen Sie?
- Vielen Dank für Ihre Antwort,dies ist der Fehler, dass ich immer: ` Error: Call ((LAMBDA (#:N) (DECLARE (SPECIAL:SOURCE #) (LAMBDA-NAME SUMME-N-ZAHLEN)) (BLOCK #:SUM-N-NUMMERN (WENN # 1 #))) 1 3 2) hat die falsche Anzahl von Argumenten. 1 (Abbruch) Zurück in Ebene 1. 2 Zurück zu debug-level 1. 3 Zurück zu Ebene 0. 4 gehen Sie Zurück zu top loop level 0.`
- Ich bearbeitet meine Frage, so dass es leicht zu Lesen ist der Fehler.
- jetzt würden Sie zu formatieren müssen Sie die Lisp-Funktion in einem richtigen Weg...
- (1) verstehen, dass die Zeichen, die Sie denken, die als operations-oder Satzzeichen in anderen Sprachen können bis gültig Symbolen in Lisp (2) separate Symbole mit Leerzeichen und (3) missbrauchen Sie nicht die Tatsache, dass Ihre Lisp-reader angezeigt wird, um zu konvertieren alpha Zeichen in Großbuchstaben durch die Verwendung konsistente Fall (4), etwas zu Lesen und Experimentieren - dies ist Eure Prüfung!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was ist falsch mit:
??
Nicht testen. Ich habe nicht ein lisp-interpreter zur hand.
Genau das zu bekommen, was Sie wollen:
Diese nehmen eine beliebige Anzahl von Argumenten und rekursiv berechnen Sie Ihre Summe. Zum Beispiel:
(sum-n-numbers 1 2 3) => 6
Verwendung von iteration, Rekursion nicht:
Aus der Benutzer-Sicht, das sind die gleichen, nur ein bisschen anders, wie Sie innen funktionieren. Und getestet hab ich beide, um sicherzustellen, dass Sie funktionieren.
Die Funktion, die Sie schrieb, Sie nimmt ein argument und gibt die Summe der zahlen von 1 bis zum argument (beachten Sie, dass es niemals zurückkehren wird - theoretisch und scheitern mit einer stack-overflow - in der Praxis - für negative Argumente).
Diese Funktion kann nicht akzeptiert 3 Argumente übergeben, so dass Sie bekam eine Fehlermeldung.