FB18 - Das Forum für Informatik

fb18.de / Bachelorstudieng / PM Praktische Informatik

SE3 FP- PrologInScheme - Unify

SE3 FP- PrologInScheme - Unify 2010-02-06 16:03
Anonymer User
Hey,
Kann bitte nochmal wer die Unifikation in Scheme mit Prolog erklären? Irgendwie versteh ich das im Skript so ganz und gar nicht, nach welchem Kriterien die Paare zusammengestellt werden :|
Beispiele im Skript:
> ( unify '( ?a + ?a = 0 )
'( ?x + ?y = ?y ) no-bindings )
−→ (( ?y . 0) (?x . ?y) (?a . ?x))
> (unifier '(?a + ?a = 0)
'(?x + ?y = ?y))
−→ (0 + 0 = 0)

Die Ersetzung ist rein lexikalisch – es erfolgt keine Auswertung der Terme.
> (unify '(?a + ?a = 2) '(?x + ?y = ?y) . . . . )
−→ ((?y . 2) (?x . ?y) (?a . ?x))
> (unifier '(?a + ?a = 2) '(?x + ?y = ?y))
−→ (2 + 2 = 2)

Vielen Dank und Liebe Grüße :)

RE: SE3 FP- PrologInScheme - Unify 2010-02-06 20:27
Anonymer User
Mich würde die Frage aus dem ersten Post auch interessieren.
Hab noch eine eigene und hoffe es ist okay wenn ich die hier auch reinschmeiße (:.
Bei der Probeklausur ist mir nicht ganz klar geworden wie man
d) Welche Medikamente sind als Kombinationspraparate bedenklich, da sie mehr
als einen Wirksto enthalten?

lösen kann.
Ich hoffe mir kann wer helfen (:

RE: SE3 FP- PrologInScheme - Unify 2010-02-07 10:01
marius
also zur unifikation kann man quasi sagen, dass die funktion sich das muster der ausdrücke anschaut und wenn dieses passt, bindet er die variablen, ohne darauf zu achten, ob der ausdruck, wenn er z.b. arithmetisch ausgewertet werden würde zu einem richtigen ergebnis kommt.

im ersten beispiel:
muster: (? + ? = ?)
dieses passt, da es beide ausdrücke erfüllen.

dann werden variablen gebunden, wie du es mit unify angezeigt bekommst.
zu der frage, warum gerade diese variablen den bestimmten wert bekommen muss man sich nur die ausdrücke anschauen, im ersten steht rechts vom = eine 0 und im zweiten eine variable, also ist bekannt welcher wert dieser variablen zugeordnet wird.
würde unify als ergebnis #f liefern, würde eine variable an unterschiedliche werte gebunden, so dass die bedingung der unifikation verletzt würde.

und zu dem anfrage d) sieht mein lösungsvorschlag so aus:
(<- (bedenklich ?medikament) :-       ;alle medikamente ermitteln       (wirkstoff ?medikament ?)       ;zu jedem medikament die liste seiner wirkstoffe ermitteln       (findall ?wirkstoff (wirkstoff ?medikament ?wirkstoff) ?wirkstoffe)       ;nur medikamente mit mehr als einem wirkstoff in die relation aufnehmen       (length ?wirkstoffe ?len)       (test (< 1 ?len))) ;neue relation abfragen (?- (bedenklich ?medikament))
(length ?list ?length) ist aus der se3 bibliothek und wurde im skript vorgestellt.

es werden zwar alle medikamente so oft ausgegeben, wie sie in der wirkstoff relation vorkommen, aber das könnte man auch noch mit entsprechenden anfragen beheben.

hoffe das hilft euch weiter :)

RE: SE3 FP- PrologInScheme - Unify 2010-02-07 11:29
Anonymer User
Also mir (Threadersteller) Hat das nur bedingt geholfen…
Aber ich habe jetzt eine konkretere Frage :)
Also:
Im ersten Beispiel wird (?y . 0) gebunden, soweit ok und dann machter für mich komische Sachen…
logisch wäre für mich er geht weiter nach dem Schema: (?x . ?a) und (?y . ?a) oder er bindet die linke Seite aneinander: (?x . ?y) und (?a . ?a)
Aber wie das (?a . ?x) und (?x . ?y) zustande kommt versteh ich gar nicht.
vielen dank schonmal marius :)

RE: SE3 FP- PrologInScheme - Unify 2010-02-07 12:39
marius
bei der unifikation kommt es ja nicht auf die reihenfolge an, wie er einer variablen einen wert oder eine variable zuweist, am schluss müssen nur alle bindungen übereinstimmen.
in diesem fall wurde zuerst ?x an ?a gebunden, weil die beiden variablen in der struktur der ausdrücke zusammen passen. dann bindet er transitiv ?y an ?x, da (?x . ?a) ja schon bekannt ist und ?a und ?y wieder strukturell zusammen passen. danach wird noch 0 an ?y gebunden. dies ist möglich, weil es zu keiner vorherigen bindung im widerspruch steht, da bisher nur variablen an variablen gebunden wurden.

so habe ich es verstanden. dafür, dass es genau so korrekt ist gebe ich natürlich keine garantie ;)

RE: SE3 FP- PrologInScheme - Unify 2010-02-07 12:44
marius
ach ja, zu der reihenfolge der bindungen:
das ist eine liste die durch extend-bindings (skript s. 355) erzeugt wird. deswegen steht die erste bindung ganz rechts und das was zuletzt gebunden wurde als erstes.

RE: SE3 FP- PrologInScheme - Unify 2010-02-07 14:44
Anonymer User
Ok, ich glaube, wie die Unifikation zu stande kommt, hab ich einigermaßen verstanden, danke!
Was ein wirres zeug… *gg*

RE: SE3 FP- PrologInScheme - Unify 2010-02-08 16:02
Anonymer User
Hey Leute. Meint ihr (oder weiss jemand) ob es etwas ausmacht, wenn man in der Klausur statt den in der se3 bib neu definierten Funktionen die Standartfunktionen verwendet? Z.b komme ich immer mit dem blöden reduce durcheinander und würde viel lieber fold nutzen.

RE: SE3 FP- PrologInScheme - Unify 2010-02-08 17:37
Anonymer User
Alle Scheme-Standardfunktionen können gerne in der Klausur verwendet werden.

RE: SE3 FP- PrologInScheme - Unify 2010-02-08 17:51
Anonymer User
Ah, sehr schön. Danke!

RE: SE3 FP- PrologInScheme - Unify 2010-02-08 18:21
Anonymer User
Da hier scheinbar einpaar Klausurbeteiligte Menschen mitlesen, noch eine Frage:

Ich weiss, dass man kein extra Papier zur Klausur hinzufügen darf, aber ist es zulässig, einen Schmierzettel zu benutzen? Ich gehe davon aus, dass wir auf Papier programmieren müssen, ich persönlich verschreibe mich da so oft und muss hin und her streichen, dass schonmal ein DinA4 Blatt vollgekritzelt ist und am Ende weiss keiner mehr, wo der Gedanke anfängt und wo er aufhört. Wäre gut wenn ich das auf einem seperaten Zettel ausprobieren dürfte und dann in "Reinform" in die Klausur schreiben könnte. Die Lücken in der Probeklausur waren doch arg eng.