Im Prolog, ist eine Tatsache, die dasselbe wie ein Funktor?
Wenn Sie zum Beispiel nächste Zeile des Prolog-Erklärung:
move(state(middle, onbox, middle, hasnot),
grasp,
state(middle, onbox, middle, has)).
Sind beide bewegen und Staat funktoren?
Ich bin irgendwie verwirrt durch Fakten, funktoren, Begriffe, ...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja,
move
undstate
sind funktoren. Ein Funktor istF
imF(Term1, ...)
. Aber Sie sind keine Fakten: in Ihrem Fall, es ist nur eine Tatsache, die die komplette Linie.state(middle, onbox, middle, hasnot)
,middle
usw. Aber beachten Sie, dassstate
undmove
sind nicht seine subterms.In Prolog funktoren sind syntaktische Elemente, die wir verwenden, um Strukturen zu errichten (compound terms) aus einfacheren.
Denke, der eine Hierarchie von gebunden Prolog Bedingungen, die mit der base mit dem einfachen "atomaren" Fällen, d.h. Atome und zahlen. Fügen Sie diesen Prolog Variablen, die können gebunden sein oder nicht, je nach Kontext. Die Regeln für die Prolog-Funktor Namen (Bezeichner) sind die gleichen wie für Prolog-Atome
Funktoren sind syntaktische Einheiten, die eine endliche Anzahl von Argumenten ("Dimension"), und wenn ein Funktor ist im Lieferumfang Bedingungen für diese Argumente, dann erhalten wir einen zusammengesetzten Begriff. In deinem Beispiel gibt es einen AUFTRAGGEBER Funktor
move
mit drei Argumenten, so ist seine Dimension ist 3. Der Funktor Namen und stelligkeit sind oft kombiniert, da Sie technisch Prolog behandelt die gleichen Funktor Namen mit zwei unterschiedlichen arities als unterschiedliche funktoren, und wir können beziehen sich auf verschieben/3 als die äußeren Funktor von Ihr zusammengesetzten Begriff.Beachten Sie, dass die ersten und Dritten Argumente in Ihrem Beispiel ein Begriff sind, sich zusammengesetzte Bedingungen, gebaut mit Funktor Zustand/4:
Hier entfernt habe ich den Zeitraum vom Ende des Beispiel. Wahrscheinlich in seinem ursprünglichen Kontext, das war ja ein Prolog "Tatsache", obwohl es vielleicht auch ein query. Perioden im Prolog dienen kann, beenden die Eingabe eines Begriffs.
Der entscheidende Punkt ist hier, dass Prolog Prädikate sind spezielle Fälle von funktoren. Wenn verschieben/3 ist ein Prädikat (drei Argumente), dann ist dein Beispiel könnte eine Tatsache (wenn es geltend gemacht wird, irgendwo in der Anwendung) oder eine Abfrage (z.B. wenn er als top-level-Ziel). In übereinstimmung mit dem, was wir oben gesagt haben über einen Funktor Namen mit zwei unterschiedlichen arities, Prolog behandelt ein Prädikat, das dem Namen mit verschiedenen arities als unterschiedliche Prädikate!
Prolog ist die Verwendung von funktoren Ausdrücken Fakten (und Regeln) macht es zu einer ziemlich glatten und leistungsfähigen metaprogramming Umgebung. Prolog hat eine spezielle built-in-Prädikat (Betreiber
=..
) genannt univ, die entpackt eine zusammengesetzte Begriff in einer Liste, deren Kopf ist der AUFTRAGGEBER Funktor Namen und deren restliche Elemente sind die Argumente gegeben, dass der Funktor in der spezifischen Verbindung Begriff. Zum Beispiel:Dieser ermöglicht die Umwandlung zwischen Prolog-Listen und zusammengesetzten Wörter in beide Richtungen, und zum Aufbau von Prolog-Ziele "dynamisch", wenn es sein muss (mit einem Prädikat name für den AUFTRAGGEBER Funktor eines terms).
Funktoren beschreiben, einem Begriff, aber nicht der Begriff selbst (wie Methodensignaturen in imperativen Sprachen) und bestehen aus der Struktur oder Prädikat name und stelligkeit.
In der Sie beispielsweise die funktoren sind
move/3
undstate/4
.Beachten Sie, dass
foo(a)
undfoo(a,b)
haben unterschiedliche funktoren,foo/1
undfoo/2
.