HA3 7

Benutzeravatar
s!mon
Computerversteher
Computerversteher
Beiträge: 373
Registriert: 20. Okt 2007 18:24
Wohnort: Höchst i. Odw

HA3 7

Beitrag von s!mon »

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..

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

Beitrag von Stumpf.Alex »

Map kannst du erst in insert-everywhere benutzen. Du kannst das aber auch ohne (und es ist wesentlich einfacher) map erstmal implementieren. Denn map erfordert igendwie eine super-abstrakte Idee für de Umsetzung. Ich arbeite noch daran.

Benutzeravatar
s!mon
Computerversteher
Computerversteher
Beiträge: 373
Registriert: 20. Okt 2007 18:24
Wohnort: Höchst i. Odw

Beitrag von s!mon »

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..

Benutzeravatar
giftnudel
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 112
Registriert: 3. Mai 2005 11:26

Beitrag von giftnudel »

In der Aufgabe werden Mengen erwähnt, diese zeichnen sich vor allem dadurch aus, dass sie jedes Element nur einmal enthalten: Also {1,1,2} = {1,2}.

Benutzeravatar
s!mon
Computerversteher
Computerversteher
Beiträge: 373
Registriert: 20. Okt 2007 18:24
Wohnort: Höchst i. Odw

Beitrag von s!mon »

Was ja heißt ich könnte es mit filter lösen oder? Habs nämlich grad mal kurz probiert und irgendwie nicht hinbekommen :) werde am samstag weiterschauen..

Schalli
Mausschubser
Mausschubser
Beiträge: 97
Registriert: 24. Okt 2006 21:50
Wohnort: Bayern

Beitrag von Schalli »

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?

Benutzeravatar
s!mon
Computerversteher
Computerversteher
Beiträge: 373
Registriert: 20. Okt 2007 18:24
Wohnort: Höchst i. Odw

Beitrag von s!mon »

Führst du vielleicht insert einmal zu oft aus?

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Beitrag von Krümelmonster »

Ich steh grad bei der insert-everywhere
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))
Das ergibt folgende Ausgabe:

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))
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.
Stell deinen Fuß auf einen hohen Sockel
Mach dir ein Haar aus tausend Locken
Du bleibst doch immer, was du bist!

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

Beitrag von Stumpf.Alex »

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!

raistlin
Mausschubser
Mausschubser
Beiträge: 50
Registriert: 1. Okt 2007 18:55

Beitrag von raistlin »

@schalli hatte das selbe problem auch, habs jetzt gelöst.
wenn du den selben fehler gemacht hast wie ich dann les die aufgabe nochmal durch. Dein perm algorithmus is vermutlich falsch.
Einfach überall insert everywhere machen und zusammenschmeisen funktioniert nicht ^^

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

Beitrag von Nephilim »

würde man in diesem Post eine Antwort darauf bekommen, ob es tragisch ist, wenn man 'insert-everywhere' zwar mit 'insert-at' gelöst hat, aber 'generate-all-pos' nicht zur Erstellung der Funktion verwendet hat? :) passt ja irgendwie zu den anderen Fragen hier...

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

Beitrag von Stumpf.Alex »

generate-all gibt irgendwie keinen Sinn in eine Funktion einzubauen, die mit allen möglichen Listen klar kommen soll. :lol:

heiko_s
Erstie
Erstie
Beiträge: 20
Registriert: 8. Nov 2007 22:14
Kontaktdaten:

Beitrag von heiko_s »

Stumpf.Alex hat geschrieben:generate-all gibt irgendwie keinen Sinn in eine Funktion einzubauen, die mit allen möglichen Listen klar kommen soll. :lol:
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.

Benutzeravatar
Krümelmonster
Geek
Geek
Beiträge: 767
Registriert: 17. Okt 2007 13:58
Wohnort: Jossgrund

Beitrag von Krümelmonster »

Ich habe deshalb mal meinem
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!

ChRiZz88
Mausschubser
Mausschubser
Beiträge: 87
Registriert: 7. Nov 2007 18:09
Kontaktdaten:

Beitrag von ChRiZz88 »

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...

Antworten

Zurück zu „Archiv“