Holen Sie das Letzte Element jeder Liste
Lassen Sie uns sagen, ich habe eine Liste ((3 4 5) (d e f) (h i j) (5 5 5 5))
Wie kann ich das Letzte element jeder Liste in einer Weise, dass die Ausgabe würde wie folgt Aussehen (5 f j 5)?
sieht aus wie Hausaufgaben..
InformationsquelleAutor | 2009-09-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorausgesetzt dieser ist über Common Lisp gibt es eine Funktion Letzte gibt eine Liste, die das Letzte Element einer Liste. Wenn Sie diese Funktion verwenden mit mapcan, die für eine gegebene Funktion auf jedes element einer Liste und gibt das verkettete Ergebnisse werden Sie bekommen, was Sie wollen.
Beachten Sie aber, dass der Zugriff auf das Letzte element einer Liste ist ein
O(N)
Betrieb, also wenn dies ist nicht nur Hausaufgaben, nachdem alle, die Sie berücksichtigen sollten, wenn Sie nicht lösen können, das eigentliche problem ist effizienter, als sich das Letzte Element jeder Liste (vielleicht mit einem anderen datastructure statt).Ich habe die links zu der Dokumentation, die für die genannten Funktionen. Diese enthalten Beispiele.
Hi! ich war in der Lage, die Arbeit, wie einige, wie ich will.das ist mein code (defun lastelements(L) (wenn L (append (letzten (first L)) (lastelements(rest L))) ) ) Aber ich habe kleines problem..Wenn ich input " ((4) (hello (world))) die Ausgabe ist so etwas wie das ((4) ((weltweit))) aber von dem Beispiel-Ausgabe geben, in unserer übung sollte es wie folgt Aussehen (4 (Welt))..vielen Dank im Voraus!
Nicht anfügen, verketten (
last
gibt eine Liste).Mit
mapcan
ist eine sehr schlechte Idee, vor allem für Neulinge.InformationsquelleAutor sepp2k
Diese, wie die meisten frühen LISPy Hausaufgaben Probleme ist eine übung im denken, die rekursiv und/oder denken in Bezug auf die Induktion. Der Weg zu beginnen, sich zu Fragen, einfache Fragen, die Sie beantworten kann leicht.
Zum Beispiel, wenn Sie gebeten wurden, etwas zu schreiben, gab Sie das erste element in jeder Liste, würde ich die Sache so:
Gegeben eine Liste von Listen:
'()
? (easy -null
)'(a)
? (easy -a
oder vielleicht ein Fehler)'((a))
? (easy -(a)
)'(anything)
, wo alles, was ist eine Liste? (easy -(first anything)
)'(anything morestuff)
? (easy -(cons (first anything) (first-element morestuff))
)nil
.(car list)
Von hier aus können wir anfangen, code zu schreiben:
Nun ist dies nicht Ihre Hausaufgaben machen, (absichtlich). Sie sollten play mit dieser und verstehen, wie es funktioniert. Ihr Nächstes Ziel sollte es sein, herauszufinden, wie diese unterscheidet sich von Ihrer Zuordnung und den Weg dorthin.
Bezug auf MAPCAR? Mach dir keine sorgen. Sie müssen lernen, wie man zur Lösung rekursiver Probleme ersten. Dann können Sie sich sorgen über MAPCAR. Was ist der Sinn dieser Aufgabe? Helfen Sie lernen zu denken, in diesem Modus. Dang in der Nähe von alles in LISP/Scheme wird gelöst durch das denken auf diese Weise.
Der Grund, warum ich ging mit all den Fragen, um es zu brechen in den teilen, die ich bin besorgt. Wenn ich die Aufgabe "wie mache ich foo auf jedes Element in einer Liste?" Ich sollte die Fragen beantworten: Wie mache ich handle null? Wie behandeln ein atom? Wie mache ich den Griff das erste element auf der Liste? Wie gehe ich mit alles andere? Einmal habe ich geantwortet, dass ich dann herausfinden, wie man eigentlich tun, foo. Wie mache ich foo auf null? Wie mache ich foo auf ein atom? Wie mache ich foo auf eine Liste?
InformationsquelleAutor plinth
Schreiben Sie eine Prozedur, gibt das Letzte element einer Liste, dann erfahren Sie ein wenig über die integrierte
MAP
(ein.k.ein.MAPCAR
) Verfahren und sehen, ob alle Glühbirnen gehen.InformationsquelleAutor Nietzche-jou
wahrscheinlich ist es schon gelöst, aber ich dachte mir, diese
Nun, das funktioniert für legit Liste...also, wenn Sie rufen Sie die Funktion SFIL mit der richtigen Liste.... wenn nicht, wird es wieder NULL
hoffentlich ist dies hilfreich sein, für wer Sie findet es
SELECT-FROM-INNER-LIST :: [[a]] -> [a]
; der Rückgabewert ist nicht unbedingt gehen, um eine Liste von Listen.InformationsquelleAutor Myho
als Anfänger von lisp, poste ich meine Lösung.
Ich würde gerne sehen, Ihre Verbesserung, oder andere. 🙂
Ich würde es tun, ohne Nebenwirkungen, und eigentlich ist das Ergebnis eher, als nur zu drucken. So etwas wie
(defun lasts (list-of-lists) (loop for l in list-of-lists appending (last l)))
Ich habe keine Idee für die Seite -Effekte....
InformationsquelleAutor Victor.Li