HA3 7
HA3 7
Hi,
bräuchte mal einen Denkanstoß: Bei welcher Funktion von 7.1 kann ich map benutzen? Habe jetzt erstmal, generate-all-pos implementiert. Das ohne Map, weil ich ja erst eine Liste erstelle. Map bearbeitet doch einfach jedes Element einer Liste oder nicht? Daher wüsste ich auch nicht wie mir das bei insert-at helfen sollte..
bräuchte mal einen Denkanstoß: Bei welcher Funktion von 7.1 kann ich map benutzen? Habe jetzt erstmal, generate-all-pos implementiert. Das ohne Map, weil ich ja erst eine Liste erstelle. Map bearbeitet doch einfach jedes Element einer Liste oder nicht? Daher wüsste ich auch nicht wie mir das bei insert-at helfen sollte..
-
- Nerd
- Beiträge: 647
- Registriert: 1. Okt 2007 12:40
- Wohnort: Darmstadt
- Kontaktdaten:
Ok danke, habe jetzt insert-everywhere mit map implementiert. Hänge jetzt an der letzten Aufgabe. Die anderen Prozeduren funktionieren einwandfrei. Alle Examples liefern mir das Gesuchte zurück.
Dürfen in der Liste gleiche Elemente enthalten sein? Mein Problem ist jetzt, dass ich in perm immer map ausführe und dann beispielsweise so etwas erhalte:
(perm '(1 2)) -> (list (list (list 1 1 2) (list 1 1 2) (list 1 2 1)) (list (list 2 1 2) (list 1 2 2) (list 1 2 2)))
Das Problem ist also, dass er sich das erste Element nimmt und es neu in die Liste 1 2 einordnet. Er nimmt sich also die 1 und ordnet sie in 1 2 an, wodurch 1 1 2, 1 1 2 und 1 2 1 entstehen.
Wie löse ich das am Besten? Mir sind nur folgende eingefallen:
(insert-everywhere element alox)
1. Ich muss alox zunächst bearbeiten und element entfernen (mit filter?). Nachteil: falls das element doppelt enthalten ist, wird es auch 2x rausgeschmissen. Also wenn ich eine Liste 1 2 1 habe, wird er nach dem filtern versuchen, die 1 in die liste 2 einzuordnen, liefert mir also nur '(1 2) und '(2 1)
2. Da wollte ich irgendwas mit dem Element machen, glaub ich. Die Idee ist mir grad entfallen
. Werde sie nachreichen..
Dürfen in der Liste gleiche Elemente enthalten sein? Mein Problem ist jetzt, dass ich in perm immer map ausführe und dann beispielsweise so etwas erhalte:
(perm '(1 2)) -> (list (list (list 1 1 2) (list 1 1 2) (list 1 2 1)) (list (list 2 1 2) (list 1 2 2) (list 1 2 2)))
Das Problem ist also, dass er sich das erste Element nimmt und es neu in die Liste 1 2 einordnet. Er nimmt sich also die 1 und ordnet sie in 1 2 an, wodurch 1 1 2, 1 1 2 und 1 2 1 entstehen.
Wie löse ich das am Besten? Mir sind nur folgende eingefallen:
(insert-everywhere element alox)
1. Ich muss alox zunächst bearbeiten und element entfernen (mit filter?). Nachteil: falls das element doppelt enthalten ist, wird es auch 2x rausgeschmissen. Also wenn ich eine Liste 1 2 1 habe, wird er nach dem filtern versuchen, die 1 in die liste 2 einzuordnen, liefert mir also nur '(1 2) und '(2 1)
2. Da wollte ich irgendwas mit dem Element machen, glaub ich. Die Idee ist mir grad entfallen

Das Problem von s!mon hatte ich auch, habs aber mit filter lösen können 
Jetzt steh ich nur vor dem Problem das ich am Ende (auch nach flatten-once) einige listen doppelt in der liste stehn hab, warum auch immer-.-
Bsp:
(perm '(1 2))
--> (list (list 1 2) (list 2 1) (list 2 1) (list 1 2))
Jemand ne Idee woran das liegen kann?

Jetzt steh ich nur vor dem Problem das ich am Ende (auch nach flatten-once) einige listen doppelt in der liste stehn hab, warum auch immer-.-
Bsp:
(perm '(1 2))
--> (list (list 1 2) (list 2 1) (list 2 1) (list 1 2))
Jemand ne Idee woran das liegen kann?
- Krümelmonster
- Geek
- Beiträge: 767
- Registriert: 17. Okt 2007 13:58
- Wohnort: Jossgrund
Ich steh grad bei der insert-everywhere
Methode ganz schön auf dem Schlauch.
Das ergibt folgende Ausgabe:
Ich müsste also den Anfang der Liste bis zu
der Stelle an der ich das Element rein setze
einfügen.
Ich habe mir gedacht, dass mir die generate-all-pos
Methode dabei helfen könnte, aber die kann ja nur mit
Zahlen umgehen, insert-everywhere soll aber eine
abstrakte Funktion sein, die mit allen Listen umgehen
können soll.
Ich habe auch noch kein map benutzt, da ich nicht weiß
welche Funktion ich übergeben soll.
Habe mir nur eine lokale Hilfsprozedur in insert-everywhere
geschrieben.
Kann mir evtl. jemand, der es schon hinbekommen hat,
einen kleinen Denkanstoß geben?
Ich habe das Gefühl, ich habe einen ganz falschen
Ansatz.
Methode ganz schön auf dem Schlauch.
Code: Alles auswählen
(insert-everywhere 4 '(1 2 3))
;; should be
'((4 1 2 3) (1 4 2 3) (1 2 4 3) (1 2 3 4))
Code: Alles auswählen
(list (list 4 1 2 3) (list (list 4 2 3) (list (list 4 3) (list 4))))
(list (list 4 1 2 3) (list 1 4 2 3) (list 1 2 4 3) (list 1 2 3 4))
der Stelle an der ich das Element rein setze
einfügen.
Ich habe mir gedacht, dass mir die generate-all-pos
Methode dabei helfen könnte, aber die kann ja nur mit
Zahlen umgehen, insert-everywhere soll aber eine
abstrakte Funktion sein, die mit allen Listen umgehen
können soll.
Ich habe auch noch kein map benutzt, da ich nicht weiß
welche Funktion ich übergeben soll.
Habe mir nur eine lokale Hilfsprozedur in insert-everywhere
geschrieben.
Kann mir evtl. jemand, der es schon hinbekommen hat,
einen kleinen Denkanstoß geben?
Ich habe das Gefühl, ich habe einen ganz falschen
Ansatz.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!
-
- Nerd
- Beiträge: 647
- Registriert: 1. Okt 2007 12:40
- Wohnort: Darmstadt
- Kontaktdaten:
Genau das Problem habe ich auch irgendwie. Hab da zwar was mit map hinbekommen, aber meiner Meinung ist das auch nicht sauber. (Das einzige was bei mir mpa macht, ist die Liste als Unterlisten einzufügen.) Hab genau das gleiche Denkproblem, dass ich einfach keinen Ansatz finde, das Problem zu Umgehen, dass man mit map nicht weiß wo man sich in der Liste befindet oder man einfach nicht die Liste erhalten kann, die man bereits abgearbeitet ab.
Hoffe jemand kann uns da mal einen Denkanstoß geben. Also möglich muss es sein!
Hoffe jemand kann uns da mal einen Denkanstoß geben. Also möglich muss es sein!
-
- Nerd
- Beiträge: 647
- Registriert: 1. Okt 2007 12:40
- Wohnort: Darmstadt
- Kontaktdaten:
Beim Implementieren von insert-everywhere musst du doch insert-at mitteilen, an welche Stelle es X einfügen soll. Es geht (imo) zwar genausogut ohne, aber man soll die Prozedur halt verwenden.Stumpf.Alex hat geschrieben:generate-all gibt irgendwie keinen Sinn in eine Funktion einzubauen, die mit allen möglichen Listen klar kommen soll.
- Krümelmonster
- Geek
- Beiträge: 767
- Registriert: 17. Okt 2007 13:58
- Wohnort: Jossgrund
Ich habe deshalb mal meinem
Tutor ne eMail geschrieben.
//edit
Antwort vom Tutor:
Tutor ne eMail geschrieben.
//edit
Antwort vom Tutor:
Hallo,
das ist richtig so. Überleg dir mal folgendes:
(generate-all-pos n m) gibt eine Liste der Zahlen n bis m zurück.
(insert-at k x lst) fügt x an der k-ten Stelle ein.
Nun soll die Hauptprozedur x aber nicht nur an der k-ten Stelle einfügen,
sondern an allen möglichen Stellen der Liste. Könnte dafür eine Liste mit
Zahlen n bis m nicht irgendwo hilfreich sein?
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!
Mein Problem ist, dass ich bisher einfach keine Ahnung habe, welche Funktion ich über die Liste drüber laufen lassen soll.
Ich kann ja bei Scheme nicht mehrere Funktionen nacheinander ausführen, was mich immer wieder erneut Schwierigkeiten bereitet.
Irgendwie fehlt mir komplett der Ansatz bei insert-everywhere...
Ich kann ja bei Scheme nicht mehrere Funktionen nacheinander ausführen, was mich immer wieder erneut Schwierigkeiten bereitet.
Irgendwie fehlt mir komplett der Ansatz bei insert-everywhere...