hat vielleicht jemand der zum ersten termin die klausur geschrieben hat die probeklausur gelöst und kann mir erklären wie das prädikat p/2 funktioniert: es soll die liste umdrehen, wie genau verstehe ich nicht:
p(X,Y):- pp(X,[],Y).
pp([],X,X).
pp([A│X],Y,Z):- pp(X,[A│Y],Z).
p(X,Y):- pp(X,[],Y).
Nun, zunächst mal wird das "Unterprogramm" pp aufgerufen, und zwar mit den Originallisten und einer leeren Liste.
pp([],X,X).
Ist die erste Liste in pp leer, so ist das Ergebnis (das was ganz rechts in pp steht) genau das, was in der Mitte steht. Dann ist man nämlich fertig. Quasi eine Abbruchbedingung.
pp([A | X],Y,Z):- pp(X,[A | Y],Z).
Man nimmt Den Kopf der Liste X weg und fügt ihn in die Ergebnisliste vorne an. Dadurch wird schrittweise das Ergebnis aufgebaut. Illustration:
abcd, [], []
bcd, a, []
cd, ba, []
d, cba, []
[], dcba, [] <-- nun ist die mittlere Bedingung erfüllt: fertig.
danke,
habs jetzt verstanden.
in der musterlösung steht, dass dieses prädikat 1:m und m:1 funktional sein soll.
ist das ein tippfehler
meiner ansicht ist dieses prädikat weder 1:m noch m:1
Das Prädikat ist auf jeden Fall funktional. Du kannst doch jeder Liste nur eine eindeutig bestimmte umgedrehte Liste zuordnen.
Du kannst doch jeder Liste nur eine eindeutig bestimmte umgedrehte Liste zuordnen.
Damit ist es dann aber doch 1:1, und nicht 1:m (oder impliziert 1:1 1:m?)
meiner meinung ist es dann auch nur 1:1 funktional
eine liste hat genau nur eine umgedrehte liste
[a b c]= [c b a] wie kann es dann da 1:m funktional sein
das würde bedeuten die liste [a b c] hätte mehr als nur eine umgedrehte liste
wie kann es dann da 1:m funktional sein
das würde bedeuten die liste [a b c] hätte mehr als nur eine umgedrehte liste
Also wenn ich mir einfach nur die Definition im Skript für 1:m und m:1 angucke, dann haut es hin. 1:m interpretiere ich z.B. danach so, dass bei einem zweistelligen Prädikat jeder Wert auf der zweiten Argumentenposition nur mit genau einem eindeutigen Wert auf der ersten Position in Relation steht. Das ist hier der Fall.
@UncleOwen:
Ich würde ja auch 1:1 sagen, aber das steht ja nicht als Ankreuzmöglichkeit zur Verfügung.
1:m und m:1 ergibt 1:1
also beides ankreuzen
Ich wollte es auch nicht einsehen, aber 1:1 ergibt 1:m ^ m:1.
Ansonsten ist das aber auch nur ein Punkt wenn man das falsch ankreuzt, entweder weiß mans oder nicht, groß zu überlegen wär IMO Zeitverschwendung…