Seite 4 von 7

Verfasst: 14. Nov 2007 19:44
von ChRiZz88
Insert-everywhere hat keine Positionen... Deswegen heißts doch everywhere Oo oder? =)

Verfasst: 14. Nov 2007 19:48
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.

Verfasst: 14. Nov 2007 20:12
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) ...

Verfasst: 14. Nov 2007 20:15
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 ;)

Verfasst: 14. Nov 2007 20:18
von Stumpf.Alex
@ChRiZz88

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

Verfasst: 14. Nov 2007 21:20
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.

Verfasst: 14. Nov 2007 21:50
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)

Verfasst: 14. Nov 2007 21:50
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 ;)

Verfasst: 14. Nov 2007 21:57
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

Verfasst: 14. Nov 2007 22:19
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)

Verfasst: 14. Nov 2007 22:49
von Christian.
weiss jemand ob man einzelne elemente einer liste einfach ausgeben kann?
dachte da vielleicht an map, aber mit welcher funktion?
danke!

Verfasst: 14. Nov 2007 22:51
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

Verfasst: 14. Nov 2007 23:01
von Christian.
@bearmann
falls ich es in diesem jahrtausend noch rausfinden sollte, geb ich dir bescheid :D

Verfasst: 14. Nov 2007 23:26
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 ^^

Verfasst: 15. Nov 2007 11:56
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.