2010-11-22 18 views
4

Gegeben eine Liste/Baum der Form: (node1 (node2) (node3 (node4) (node5)) (node6)) Ich sollte in der Lage sein, die Tiefe, bei der ein gesuchter Knoten wohnt.Ermitteln der Ebene des gesuchten Elements

Das ist, was ich bisher getan habe:

(defun search-it (lst level n) 
    (cond ((null lst) nil) 
     ((and (atom (car lst)) (equal (car lst) n)) level) 
     ((atom (car lst)) (search-it (cdr lst) level n)) 
     (t (cons (search-it (car lst) (+ 1 level) n) 
        (search-it (cdr lst) level  n))))) 

(defun search-node (l n) 
    (search-it l 0 n)) 

Für diese spezielle Anwendung eine korrekte Lösung, die ich habe, aber was mich stört, ist, dass ich nicht von einigen nil Listen loswerden können. Zum Beispiel:

(search-node '(1 (2) (3 (4) (6) (7) (8 (9) (10)))) 6) 
(NIL (NIL 2 NIL (NIL NIL))) 

Die Lösung ist richtig, wenn wir den Wurzelknoten in der Tiefen 0. Jetzt natürlich in Erwägung ziehen könnte ich einige Codes den Such-Knoten Funktion hinzufügen, alles außer den Lösungen zu entfernen, kann ich Es hilft nicht, aber ich fühle, dass es nicht der eleganteste Weg ist, dies zu tun.

LE: Das erwartete Ergebnis sollte die Tiefe oder eine Liste von Tiefen sein, falls die Zahl mehr als einmal erscheint.

Einige Hinweise irgendjemand? PS: Lisp Neuling

+0

Welche Art von Ergebnis möchten Sie? Eine Liste von Tiefen? Eine einzige Tiefe? Was, wenn der Gegenstand an mehr als einem Ort gefunden wird? –

+0

In Lisp können Sie 'list' anstelle von 'lst' schreiben. –

+0

Liste der Tiefen, wenn der Artikel einmal erscheint. @Rainer Joswig: Ich weiß, aber ich oder ich neige dazu, mich weniger zu verwirren –

Antwort

2

Im Allgemeinen eine Liste der Tiefen zurückgeben. Wenn also ein Element gefunden wird, geben Sie die Liste der einzelnen Tiefe zurück. Wenn Sie zum ersten und zum Rest der Liste verzweigen, dann machen Sie keine "Nachteile", sondern "anhängen".

Beachten Sie auch, dass Ihr Code nicht alle Tiefen findet.

CL-USER 6 > (search-node '(6 (6)) 6) 
0 
+0

Danke funktioniert wie ein Charme –

Verwandte Themen