HA3 7
-
- Nerd
- Beiträge: 647
- Registriert: 1. Okt 2007 12:40
- Wohnort: Darmstadt
- Kontaktdaten:
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) ...
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.
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 DetailDemmi 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.

-
- Nerd
- Beiträge: 647
- Registriert: 1. Okt 2007 12:40
- Wohnort: Darmstadt
- Kontaktdaten:
"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.
Ü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.
- bearmann
- BASIC-Programmierer
- Beiträge: 121
- Registriert: 20. Okt 2006 13:53
- Wohnort: Darmstadt
- Kontaktdaten:
'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)
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)
@Demmi:

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 
Da hab' ich das mit der 1 in (perm '(2 3)) einfügen auch schon gesagtChRiZz88 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

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


jabearmann hat geschrieben:Im Prinzip ists ja dasselbe, oder?!
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)bearmann hat geschrieben: PS: insert-everywhere ist bei euch auch nen Dreizeiler?! (also kurz)
-
- Mausschubser
- Beiträge: 56
- Registriert: 6. Aug 2007 22:38
- bearmann
- BASIC-Programmierer
- Beiträge: 121
- Registriert: 20. Okt 2006 13:53
- Wohnort: Darmstadt
- Kontaktdaten:
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

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
-
- Mausschubser
- Beiträge: 56
- Registriert: 6. Aug 2007 22:38
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.
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.