HA3 7

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

Beitrag von ChRiZz88 »

Insert-everywhere hat keine Positionen... Deswegen heißts doch everywhere Oo oder? =)

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

Beitrag von Stumpf.Alex »

Hmmm, aber insert-everywhere muss insert-at sagen, wo es ein Element einfügen soll. Und das macht halt insert-everywhere für alle möglichen Positionen.

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

Beitrag von ChRiZz88 »

Ja, aber schon in insert-everywhere und nicht in perm, oder?
Och man, ich bräuche einfach mal eine Rekursionszeile von jemandem, ich komm so einfach nicht drauf bei diesem perm(list) ...
Zuletzt geändert von ChRiZz88 am 14. Nov 2007 20:16, insgesamt 1-mal geändert.

Benutzeravatar
Demmi
Kernelcompilierer
Kernelcompilierer
Beiträge: 423
Registriert: 1. Okt 2007 12:56
Wohnort: Darmstadt

Beitrag von Demmi »

Demmi hat geschrieben:Ich hab perm mit dem 1. Ansatz von ChRiZz88 bzw. dem Weg auf dem Arbeitsblatt geschafft. Ich hab mich haber auch arg lange dran aufgehalten.

Ich habs dann so gelöst, dass sich perm unterschiedlich verhält, je nach dem wie lange die Liste ist die reinkommt.
Für Empty, L=1 und L=2 kann man das nämlich ganz gut vordefinieren.
Alles andere löse ich mit map und nem Selbstaufruf von perm.
Anders als auf diese Weise hab ich es leider noch nicht zum laufen bekommen.

Edit: Ach ja, flatten-once spielt auch noch ne Rolle.
Ich habs übrigens jetzt so umgestrickt, dass man L=2 als Cond-Verzweigung bei perm weglassen kann. Sieht auch nicht viel anders aus... aber der Teufel liegt im Detail ;)

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

Beitrag von Stumpf.Alex »

@ChRiZz88

Richtig. In Perm rufst du nur noch insert-everywhere auf und benutzt kein insert-at mehr.

Benutzeravatar
Demmi
Kernelcompilierer
Kernelcompilierer
Beiträge: 423
Registriert: 1. Okt 2007 12:56
Wohnort: Darmstadt

Beitrag von Demmi »

"Die eine Rekursionszeile" ist leider genau dass was die Teilaufgabe mit perm so interessant macht ^^

Überleg doch mal was du reingibst und was rauskommt. Und wenn du es selbst aufrufst, wird dir auch auffallen, dass dir flatten-once weiterhelfen kann.

Tipp: (perm '(1 2 3)) ist das gleiche wie 1 in allen Permutationen von '(2 3).
Guck dir außerdem noch an wie (in welchem "Format") die Permutationen zurückgegeben werden, und wie/wo/ob man da nicht vielleicht map anwenden kann/sollte/muss.

Mehr sag ich nicht. Wenns zu viel sein sollte, bitte löschen.

Benutzeravatar
bearmann
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 121
Registriert: 20. Okt 2006 13:53
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von bearmann »

'n abend die Herren,
hätte mal nen Frägelchen zur Ausgabe. Stehe wohl mal wieder aufm Schlauch...

Geforderte Ausgabe 7.1: '((4 1 2 3) (1 4 2 3) (1 2 4 3) (1 2 3 4))
Meine Ausgabe 7.1: (list (list 4 1 2 3) (list 1 4 2 3) (list 1 2 4 3) (list 1 2 3 4))

Im Prinzip ists ja dasselbe, oder?! Ich weiss nicht, ob sies in den Beispielen und im pdf einfach nur aus Platzgründen abgekürzt hingeschrieben haben, oder ob es wichtig ist, es als '() auszugeben ...

Grüße,
bearmann

PS: insert-everywhere ist bei euch auch nen Dreizeiler?! (also kurz)

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

Beitrag von ChRiZz88 »

@Demmi:
ChRiZz88 hat geschrieben:1. Ansatz (auch auf dem Arbeitsblatt beschrieben):
Ans Ende der Liste gehen, bis die Liste nur noch aus einem Element besteht. Dann das vorhergehende Element mit insert-everywhere überall einfügen. Rekursiv das Element davor in die beiden erhaltenen Listen einfügen. Terminierungsfall, wenn man vorne an der Liste angekommen ist.
Problem: Zugriff auf die erhaltenen Listen? Exakter Zugriff auf ein bestimmtes Element der Liste?
Beispiel: '(1 2 3) --> 3 --> 2 3 ; 3 2 --> 1 2 3 ; 2 1 3; 2 3 1; 1 3 2; 3 1 2; 3 2 1
Da hab' ich das mit der 1 in (perm '(2 3)) einfügen auch schon gesagt ;)
Naja und die Permutationen werden in Unterlisten einer großen Liste zurückgegeben und map ist zumindest für flatten-once sinnvoll...
Fazit: War nicht zu viel, weil ich die Lösung auch nicht habe ;D

@bearmann: Ja, insert-everywhere ist clever gemacht und nicht besonders lang ;) Und das mit den Listen ist glaube ich okay, DrScheme gibt es dir nicht anders aus, die Ausdrücke sind ja äquivalent. Denn wenn du einfach mal '(1 2 3) schreibst, gibt er auch (list 1 2 3) aus ;)

Benutzeravatar
bearmann
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 121
Registriert: 20. Okt 2006 13:53
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von bearmann »

ChRiZz88 hat geschrieben:@bearmann: Ja, insert-everywhere ist clever gemacht und nicht besonders lang ;) Und das mit den Listen ist glaube ich okay, DrScheme gibt es dir nicht anders aus, die Ausdrücke sind ja äquivalent.
Wunderbärchen! Dank dir. :)

Schönen abend uns.

Grüße,
bearmann

Benutzeravatar
Georg
Mausschubser
Mausschubser
Beiträge: 60
Registriert: 15. Okt 2007 19:02

Beitrag von Georg »

bearmann hat geschrieben:Im Prinzip ists ja dasselbe, oder?!
ja
bearmann hat geschrieben: PS: insert-everywhere ist bei euch auch nen Dreizeiler?! (also kurz)
wenn ich die einrückungen rausmache und ein bissal zusammenrücke passts in 3 zeilen, aber dann ists mir zu unübersichtlich... aber soo komplex/lang ist die echt nicht (dank map)

Christian.
Mausschubser
Mausschubser
Beiträge: 56
Registriert: 6. Aug 2007 22:38

Beitrag von Christian. »

weiss jemand ob man einzelne elemente einer liste einfach ausgeben kann?
dachte da vielleicht an map, aber mit welcher funktion?
danke!

Benutzeravatar
bearmann
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 121
Registriert: 20. Okt 2006 13:53
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von bearmann »

Na, also unübersichtlich ists bei mir nicht... und alles auch nach Vorschrift eingerückt und so... Anyway. Funzt - das muss reichen. ;)

EDIT: @Chris, da hänge ich auch gerade dran... mit map sollte es _irgendwie_ gehen, glaube ich.

Good night and good luck.
bearmann

PS: Dein Avatar macht einem zu so später Stunde Angst. O_O

Christian.
Mausschubser
Mausschubser
Beiträge: 56
Registriert: 6. Aug 2007 22:38

Beitrag von Christian. »

@bearmann
falls ich es in diesem jahrtausend noch rausfinden sollte, geb ich dir bescheid :D

Benutzeravatar
Demmi
Kernelcompilierer
Kernelcompilierer
Beiträge: 423
Registriert: 1. Okt 2007 12:56
Wohnort: Darmstadt

Beitrag von Demmi »

Falls ich euch noch nen Tipp geben darf: Haltet euch genau an die definierten Verträge, dann könnt ihr schonmal etliche Fehlerquellen ausschließen.
bearmann hat geschrieben:PS: insert-everywhere ist bei euch auch nen Dreizeiler?! (also kurz)
1 Zeile mit 6x ")" am Ende ^^

Wambolo
Computerversteher
Computerversteher
Beiträge: 381
Registriert: 18. Okt 2007 11:36

Beitrag von Wambolo »

muss unser Programm denn auch alle Permutaionen einer Liste korrekt ausgeben, die identische Elemente erhält?

Wie verhalten sich Eure Prozeduren bei solchen Listen:

(1 1 1 3 4)

werden auch hier alle Permutationen korrekt ausgegeben? Also nicht doppelt Bsp: (1 1 1 3 4) (1 1 1 3 4) usw. oder (1 3 4) usw.

Antworten

Zurück zu „Archiv“