2016-11-06 7 views
-2

in Lisp, ich Anfügen Listen als: (setq newlist (append (Seite ab) (dies ab) (das ab)))Anfügen Liste in Lisp

Diese anhängt alle erforderlichen Liste als: (1 0 0 0 2 0 4 0 6 0) aber was ich will ist so etwas wie: ((1 0) (0 0) (2 0) (4 0) (6 0))

Was soll ich tun um das gewünschte Format zu erhalten. Bitte geben Sie Codebeispiele in Lisp ein.

+0

was sind 'side',' this', 'that'? – sds

+0

Es scheint nicht, dass es Append Sie suchen. Vielleicht "(Liste '(Seite a b)' (diese a b) '(dass a b)))"? – Sylwester

+0

@sds Seite, dies und das sind andere drei Funktionen, die Listen in ihnen haben. Wie die Seite enthält: (1 0 0 0), enthält dies: (0 0 2 0) und das enthält: (4 0 6 0). Wenn ich sie anhefte, bekomme ich (1 0 0 0 0 0 2 0 4 0 6 0) aber was ich brauche ist ((1 0) (0 0) (0 0) (2 0) (4 0) (6 0)) –

Antwort

1

Also in der Tat brauchen Sie nur die Elemente restrukturieren, nachdem Sie angehängt haben:

(loop :for (e1 e2) 
     :on '(1 0 0 0 2 0 4 0 6 0) 
     :by #'cddr 
     :collect (list e1 e2)) 

; ==> ((1 0) (0 0) (2 0) (4 0) (6 0)) 

nachlesen ist LOOP for black belts, der Abschnitt, den Sie achten sollten, auf die ich verwendet habe, ist hier „Looping über Sammlungen und Pakete "und" Strukturierungsvariablen ". Dies ist wahrscheinlich das Kapitel von Practical Common Lisp Ich lese am meisten. Das ganze Buch ist sehr gut, also sollte jeder Lisper davon wissen.

+0

Vielen Dank für die Antwort. :) –