2016-03-22 6 views
-2

Die Funktion hat 1 Parameter, eine ganze Zahl. Zum Beispiel rot-left(2 '(1 2 3 4 5)) sollte (3 4 5 1 2) zurückgeben und rot-right(2 '(1 2 3 4 5)) sollte (5 4 1 2 3) zurückgeben.Rekursive Funktionen, die n Elemente einer Liste nach links und rechts in Lisp drehen

Ich habe das versucht ... es funktioniert nicht, aber was es tun soll, ist die letzten n Elemente einer Liste zu einer leeren Liste hinzufügen.

(defun rot_left (n l) 
    (if (zerop n) 
     '() 
     (append (last l) 
       rot-left ((- n 1) (cdr l))))) 
+1

Was haben Sie bisher versucht:

Dann, vorausgesetzt, dass diese Interpretation korrekt ist, können die Funktionen nur durch primitive Operatoren in Common Lisp, ohne die Verwendung von Iteration oder Rekursion geschrieben werden? In StackOverflow schreiben wir keinen Code für Sie. Wir helfen gerne jedem, der festsitzt, aber Sie sollten es zuerst selbst versuchen. Außerdem waren das meine Hausaufgaben im Alter von 13 Jahren. – SZenC

+0

Ich habe das versucht ... es funktioniert nicht, aber es sollte die letzten n Elemente einer Liste zu einer leeren Liste hinzufügen. (defun rot_left (nl) (if (zerop n) ') (anhängen (last l) rot-links ((- n 1) (cdr l))))) –

+1

Bearbeiten Sie nun Ihre Frage, um diese und alles andere einzubeziehen Sie haben versucht, – SZenC

Antwort

0

werde ich eine Lösung geben, dass unter der Annahme, wenn die Funktion rot-right sollte die Elemente der Liste von rechts nach links drehen, (rot-right 2 '(1 2 3 4 5))(4 5 1 2 3) produzieren sollte und nicht (5 4 1 2 3).

(defun rot-left(n l) 
    (append (nthcdr n l) (butlast l (- (length l) n)))) 

(defun rot-right(n l) 
    (rot-left (- (length l) n) l)) 

(defvar a '(1 2 3 4 5)) 

(rot-left 2 a) ; produces (3 4 5 1 2) 
(rot-right 2 a) ; produces (4 5 1 2 3) 
+0

Die Funktion sollte rekursiv sein. Was macht der Butlast-Betreiber? Ich bin neu auf der Liste, also weiß ich wirklich nicht viel. –

Verwandte Themen