HA4.7

saba
Windoof-User
Windoof-User
Beiträge: 36
Registriert: 17. Jan 2007 19:58

HA4.7

Beitrag von saba »

hallo

ich wollte fragen ob man flatten-expansion mit append machen kann
weil ich denke wenn die liste die diese funktion bekommt um ein grad geschachtelt ist (so stelle ich mir bei diese aufgabe vor) ,dan kann man einfach append verwenden ,so:
wenn die liste so aussehen würde: ( '( a s) '(f t ) )
dann kann man append einfach auf die elemente diese liste anwenden und bekommt man einfach '( a s f t)

oder mit geschachtelte liste ist etwas kompliziertes gemeint?

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex »

Na klar kannst du append benutzen. Wird ja nicht eingeschränkt. Du darfst alles benutzen, was in dem gegebenen Sprachlevel zur Verfügung steht.

Du musst aber aufpassen, da du davon ausgehen muss, dass die Unterlisten nicht unbedingt gleichstark geschachtelt sein müssen. Also du auch sowas bekommen kannst: '( (a b) H ( (1 2 3) (c d) ) )

saba
Windoof-User
Windoof-User
Beiträge: 36
Registriert: 17. Jan 2007 19:58

Beitrag von saba »

ja aber wie kann man so was '( (a b) H ( (1 2 3) (c d) ) ) bekommen

weil ich glaube dass flatten-expansion fnktioniert auf das ergebnis von expand-symbol.
und weil das ergebnis von expand-symbol höchstens eine liste von "liste von symbolen" sein kann {zb ,so:( '( a s) '(f t ) ) }, dann man so was nicht bekommen kann oder verstehe ich falsch????

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex »

Jipp da hast du recht. In der Aufgabe dürfte sowas nicht vorkommen.

Guck dir das aber Beispiel der Aufgabe an:
'( (F (G +)) (G (+ F)) ) )
Du wirst auf das Problem stoßen, dass first nicht immer eine Liste zurück liefert, obwohl second eine Liste ist und dann streikt append. Also append auf jedem Fall, aber nur mit Fallunterscheidung. Hab ich zumindest so implementiert.

saba
Windoof-User
Windoof-User
Beiträge: 36
Registriert: 17. Jan 2007 19:58

Beitrag von saba »

was meinst du bitte
kannst du ein beispiel sagen
bist du auch der meinung ,dass flatten-expansion auf das ergebnis von expand-symbol arbeiten soll ?,
wenn ja , dann kannst du bitte ein beispiel von verwendung von expand-symbol sagen ,sodass eine komplizierter liste wie du meinst ,ausgibt
Zuletzt geändert von saba am 22. Nov 2007 23:19, insgesamt 1-mal geändert.

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex »

Gegeben ist das Beispiel:
'( (F (G +)) (G (+ F)) )
Wir führen immer (append (first list) (rest list)) aus:

Also würde das so aussehen:
(append '(F (G +)) '(G (+ F)) ) -> '(F (G +) G (+ F))
Wenn du jetzt wieder das gleiche Schema machst erhälst du aber aus dieser neuen Liste als first 'F. Und da meckert dann append rum. Also brauchst du eine Fallunterscheidung. Selbst wenn du den Vorgang rekursiv gestaltest, kommst du zu diesem Problem.

saba
Windoof-User
Windoof-User
Beiträge: 36
Registriert: 17. Jan 2007 19:58

Beitrag von saba »

saba hat geschrieben:was meinst du bitte
kannst du ein beispiel sagen
bist du auch der meinung ,dass flatten-expansion auf das ergebnis von expand-symbol arbeiten soll ?,
wenn ja , dann kannst du bitte ein beispiel von verwendung von expand-symbol sagen ,sodass eine komplizierter liste wie du meinst ,ausgibt
ich soll es korrigiren, ich glaube flatten-expansion auf der map-funktion ,die in der expand-once vorkommt ,arbeiten sollte

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex »

Wenn ich dich richtig verstanden habe, möchtest du es mit map machen? Hmmm...ich glaube das geht nicht, weil du in map keine Elemente zusammenführen kannst, da du immer nur ein Element aus deiner Liste betrachtest. map ist dazu gedacht auf allen Elementen einer Liste eine Operation durchzuführen.
Wenn dann sollte das mit fold funktionieren, weil fold eine Liste zu einem Element (was durchaus eine große Liste sein kann) zusammenfaltet.

saba
Windoof-User
Windoof-User
Beiträge: 36
Registriert: 17. Jan 2007 19:58

Beitrag von saba »

ich wollte auch mit map machen, und habe ich so vorgestellt

flatt-expansion von (map my-funk los)
und my-funk muss auf jede element von los arbeiten und dann wenn es für vorkommende symbole in los ein regel gäbe ,dann wird diese symbol durch eine liste von symbolen ersetzt und sonst wird diese symbol durch eine liste ,die nur aus diesem symbol besteht ,ersetzt , sodass jedes element in der los durch eine liste ,die aus ein symbol oder mehrere besteht,ersetzt wird , und dann diese ergebnis will ich die funktion faltt-expansion übergeben

Stumpf.Alex
Nerd
Nerd
Beiträge: 643
Registriert: 1. Okt 2007 12:40
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von Stumpf.Alex »

Achso. Ja das geht. Aber wie gesagt. Bei flat-expansion brauchst du eine Fallunterscheidung, ob dein first der Liste eine weitere Liste ist.

Benutzeravatar
Dominik
Windoof-User
Windoof-User
Beiträge: 26
Registriert: 4. Okt 2007 09:40
Wohnort: Wiesbaden

Beitrag von Dominik »

mhh... ich habs ganz einfach so gelöst, das ich mein flatten-once aus Übung 3 an zwei Stellen benutzt hab... nicht besonders schön, aber wunderbar einfach

Nephilim
Mausschubser
Mausschubser
Beiträge: 69
Registriert: 31. Mai 2005 23:36
Wohnort: Griesheim

Beitrag von Nephilim »

hm, man kann die Fallunterscheidung bei flatten-expansion auch umgehen, indem man bei der anderen Funktion für "nicht-expandierende-symbole" einfach (list symbol) und nicht nur symbol zurückgibt...

Antworten

Zurück zu „Archiv“