FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

P1 - Blatt 12 - Aufgabe 5

P1 - Blatt 12 - Aufgabe 5 2003-01-26 02:59
Ranseyer
Hi!

Nachdem ich Aufgabe 1-4 ziemlich easy gelöst habe, komme ich bei 5 gar nicht mehr weiter!

Problem ist schon das Prädikat "symmetrisch":

(define (symmetrisch? liste)
(for-all (rcurry member? (map umdrehen liste)) liste))

( (map umdrehen liste) dreht alle tupel der Liste um, damit man sie einfach 1:1 vergleichen kann)

Diese Lösung verwendet ja nicht there-is. Ich kann zwar there-is so verwenden, dass es so wie member? (Skript S. 116) funktioniert:

(there-is (curry equal? '(Eva . Kain)) '((Eva . Kain) (Adam . Abel)))

Aber wie kann statt member? there-is in der o.g. Funktion verwenden? Problem ist ja folgendes: (Achtung, jetzt wird es kompliziert….) Ich will jedes Element der Liste mit dem Prädikat for-all überprüfen, ob es in der "umgedrehten" Liste enthalten ist. Wenn ja, ist die Symmetrie gegeben.

Oder bin ich völlig auf dem holzweg?

gruss
Karl

Edit: Bitte immer den Zyklus (hier P1) im Titel angeben.


Re: P1 - Blatt 12 - Aufgabe 5 2003-01-26 08:13
Zaphod
Könntest du mal die Aufgabenstellung posten? Ich verstehe im Momenet nicht, was da eigentlich gemacht werden soll [img]http://www.fb18.de/gfx/25.gif[/img]

Re: P1 - Blatt 12 - Aufgabe 5 2003-01-26 08:53
Slater
Problem ist ja folgendes: (Achtung, jetzt wird es kompliziert….) Ich will jedes Element der Liste mit dem Prädikat for-all überprüfen, ob es in der "umgedrehten" Liste enthalten ist. Wenn ja, ist die Symmetrie gegeben.
is es nicht eher angedacht zu schauen, ob das umgedrehte elemente in der liste enthalten ist?,
also ob ein element 'there is't, das zum gegebenen element symmetrisch ist




Re: P1 - Blatt 12 - Aufgabe 5 2003-01-26 09:01
Azure
Hi Ranseyer.

Ich hab's immer so gemacht, dass ich die (sprachliche) mathematische Bedeutung "einfach" in Scheme "uebersetzt" habe. Bei symmetrisch also z.B.:

"Fuer jedes Element (x1 . x2) der Liste xs gibt es ein Element (x2 . x1) in der Liste."

Implementation (z.B.):

(define (symmetrisch? xs)
(for-all (lambda (x)
(there-is (curry equal? (switch-pair x))
xs))
xs))

Da benutz ich noch das Hilfspraedikat 'switch-pair' das folgendes tut:

;; Macht aus (a . b) (b . a)
(define (switch-pair xp)
(cons (cdr xp) (car xp)))

Das war's. Anmerkungen: i) Die leere Liste ist bei dieser Implementation symmetrisch. ii) Hat einen Overhead, da fuer jedes Element das passende symmetrische Element gesucht wird. Wenn du also ein Element (a . b) hast und findest in der
Liste dazu (b . a), dann wird trotzdem spaeter auch fuer das Element (b . a) der symmetrische Partner (also (a . b)) gesucht. Das ist ja eigentlich unnoetig.

Cheers,
Frank

[Er will hier wohl nicht meine Zeileneinschuebe beim Sourcecode haben, macht das dann der besseren Lesbarkeit wegen kurz selber!]

Re: P1 - Blatt 12 - Aufgabe 5 2003-01-26 10:10
Anonymer User
Ist die leere Liste nicht auch nach Definition symmetrisch?
"..symmetrisch gdw. für alle (x,y) E L => (y,x) E L"
Ist bei der leeren Liste gegeben, finde ich.

-Felix

Re: P1 - Blatt 12 - Aufgabe 5 2003-01-26 10:33
TriPhoenix
Ist die leere Liste nicht auch nach Definition symmetrisch?
"..symmetrisch gdw. für alle (x,y) E L => (y,x) E L"
Ist bei der leeren Liste gegeben, finde ich.

Jop, die leere Liste ist symmetrisch, reflexiv, transitiv, antisymmetrisch, alles was man will, da die Prämisse in der Bedingung nie erfüllt wird



Re: P1 - Blatt 12 - Aufgabe 5 2003-01-26 16:16
Azure
Ich wollt' ja nur darauf hinweisen, dass sie es in diesem Fall auch ist [img]http://www.fb18.de/gfx/23.gif[/img]
Bei einigen Sachen kann man das z.B. besser implementieren ohne auf den *genauen* Mathematischen Wortlaut zu achten (Reflexivitaet z.B., da ist es imo besser es so zu implementieren, dass fuer jedes Elemente a, dass in der Liste entweder in der Form (a . b) bzw. (b . a) auftritt auch in der Form (a . a) auftretten muss. Eigentlich heisst Relexivitaet ja noch ein bisschen was anderes (alle Elemente die in der "Ober-"Menge enthalten sind muessen ja in der Form (a . a) vorhanden sein, aber das ist hier nicht (immer) moeglich, da (meist) nicht bekannt ist, was die "Ober"-Menge ist.)

Cheers,
Frank

Re: P1 - Blatt 12 - Aufgabe 5 2003-01-26 23:24
Ranseyer
Jau jetzt habe ich es gerafft. Die lamda Funktion war das, was mir fehlte. Ich dachte, man kriegt das mit rcurry hin, aber dem war nicht so.

Die leere Liste habe ich schon durch das for-all Prädikat abgedeckt:

(define (for-all prädikat liste)
(cond
((null? liste) #t)
((prädikat (car liste)) (for-all prädikat (cdr liste)))
(else #f)))

gruss
MK