|
|
Programmieren in Bäumen: cellfun |
|
Wimme |

Forum-Anfänger
|
 |
Beiträge: 28
|
 |
|
 |
Anmeldedatum: 15.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.09.2012, 09:36
Titel: Programmieren in Bäumen: cellfun
|
 |
Hallo!
Ich habe eine Struktur "tree" angelegt, die Bäume repräsentieren kann:
tree.content: z.B. 2
tree.kids: ein cell array von weiteren 'trees'
Jetzt möchte ich eine Funktion schreiben, die mir eine Liste von allen Knoten gibt, die mehr als einen Nachfolger im Baum haben.
Z.B. würde [2 4 6] bedeuten, dass die Knoten mit dem jeweiligen Content 2, 4 und 6 mehr als einen Nachfolger haben.
Ich habe folgendes versucht:
Was aber leider nicht funktioniert, und ich verstehe nicht warum. Hat jemand eine Idee?
edit:
Gut wäre es eigentlich auch, wenn die Rückgabe nicht ein Array der Form [2 3 4] wäre, sondern ein cell-array mit den entsprechenden Teilbäumen. Also anstatt [2 3 4] ein cell array mit drei Elementen, wobei z.B. das erste Element der Teilbaum mit dem Content 2 ist.
Danke,
Wimme
|
|
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 20.09.2012, 11:01
Titel:
|
 |
Hallo
bitte dazu mehr Info, speziell was nicht funktioniert kommt eine Fehlermeldung?
Du rufst die Funktion ja rekursiv, was sind deine Abbruchkriterien?
Warum unterscheidet sich der Aufruf
zw. length(tree.kind)==1 und length(tree.kind)>1?
|
|
|
Wimme |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 28
|
 |
|
 |
Anmeldedatum: 15.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.09.2012, 11:10
Titel:
|
 |
|
 |
|
Hallo denny,
danke für deine Antwort.
Zitat: |
bitte dazu mehr Info, speziell was nicht funktioniert kommt eine Fehlermeldung? |
Ja, sorry. Die Fehlermeldung ist:
Wenn ich uniformOutput auf "false" setze, bekomme ich ein Ergebnis, das in meinem Beispiel wie folgt aussieht: [2] [] [] {1x6 cell} [] []
Was ja irgendwie keinen Sinn macht.
Zitat: |
Du rufst die Funktion ja rekursiv, was sind deine Abbruchkriterien? |
Nunja, der erste Fall, bei dem der aufgerufene subtree keine Kinder mehr hat ist ein Abbruch. Hier wird als Ergebnis einfach nur [] zurück gegeben.
Zitat: |
Warum unterscheidet sich der Aufruf
zw. length(tree.kind)==1 und length(tree.kind)>1? |
Ich möchte nur Knoten finden, die mehrere Nachfolger haben. Beim Fall length(tree.kind)==1 möchte ich mir also nicht den tree.content merken, beim Fall > 1 jedoch schon.
________
Wie in meinem Edit angemerkt, würde ich aber gerne inzwischen nicht mehr eine Liste der Form [1 2 3] haben, sondern ein cell array von subtrees.
Helfen dir die Bermerkungen weiter?
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 20.09.2012, 14:21
Titel:
|
 |
Hallo
Danke, bin aber noch nicht sicher ob ich dir folgen kann.
Zitat: |
Wenn ich uniformOutput auf "false" setze, bekomme ich ein Ergebnis, das in meinem Beispiel wie folgt aussieht: [2] [] [] {1x6 cell} [] []
Was ja irgendwie keinen Sinn macht.
|
CELLFUN UniformOutput mach hier schon Sinn, da Rückgabeparameter Listen mit unterschiedlicher Anzahl Elementen sind.
Zuletzt bearbeitet von denny am 20.09.2012, 17:13, insgesamt einmal bearbeitet
|
|
|
Wimme |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 28
|
 |
|
 |
Anmeldedatum: 15.09.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 20.09.2012, 15:50
Titel:
|
 |
ich verstehe deinen Beitrag leider nicht recht.
Ich habe das ganze jetzt doch nochmal anders aufgezogen, ohne das schöne cellfun zu verwenden. Nach einigem Hin und Her klappt es jetzt auch:
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 20.09.2012, 17:52
Titel:
|
 |
Hallo Wimme,
Du wolltest Cells als Output.
Gruß, Jan
|
|
|
Sirius3 |

Forum-Guru
|
 |
Beiträge: 441
|
 |
|
 |
Anmeldedatum: 12.11.11
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 21.09.2012, 17:38
Titel:
|
 |
Hallo Wimme,
falls Du doch einen Vektor willst:
Grüße
Sirius
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|