wie Sie arbeiten mit Phrasenstrukturbäumen, welche selbst Grammatikregeln darstellen, könnten Sie die Verwendung von DCGs für Ihre Aufgabe erwägen. Denken Sie zuerst darüber nach, was Ihr Prädikat beschreiben soll: eine Beziehung zwischen einem Phrasenstrukturbaum und einer Liste, die aus den Wörtern dieses Baumes besteht. Du könntest es pstree_words/2 nennen. Betrachten wir die minimale Beispiel unten:
pstree_words(Phrase,List) :-
phrase(Phrase,List).
phrase(det(A),np2(NP)) --> % a phrase is
det(A), % a det followed
np2(NP). % by a np2
det(a) --> % a is a determiner
[a]. % hence in the list
np2(adj(A)) --> % a np2 is
adj(A). % an adj
adj(large) --> % large is an adjective
[large]. % hence in the list
Beachten Sie, dass das erste Ziel von pstree_words/2 nicht Ihre Struktur Phrase ist, sondern die eingebaute Prädikat Satz/2 für DCGs Handhabung. Sie können dies bereits für die Worte in dem Phrasenstrukturbaum Abfrage verwenden:
?- pstree_words(phrase(det(a),np2(adj(large))),L).
L = [a,large]
Wenn Sie Worte hinzufügen, die Sie nur nach Regeln hinzufügen müssen. Zum Beispiel die Bestimmer „die“ hinzufügen hinzufügen Sie gerade:
det(the) -->
[the].
neue Phrase Strukturen hinzuzufügen können, fügen Sie einfach neue Regeln Begriff // 2. Wenn Sie jedoch versuchen, pstree_words anders herum abzufragen, also zu fragen, ob eine Wortfolge mit einer bekannten Phrasenstruktur übereinstimmt oder nicht, funktioniert sie nicht. Um dem abzuhelfen, dass Sie die Definition von pstree_words verändern kann/2:
pstree_words(Phrase,List) :-
is_phrase(Phrase),
phrase(Phrase,List).
is_phrase(phrase(_,_)).
Die Tatsache, is_phrase/1 einfach Phrase
auf eine zweistellige Struktur beschränkt. Wenn Sie Grammatikregeln hinzufügen, um z. 3-Platz-Strukturen für Phrase Sie fügen auch entsprechende Fakten für is_phrase/1: is_phrase(phrase(_,_,_))
hinzu. Mit diesen Änderungen nun das Prädikat in der anderen Richtung funktioniert auch:
?- pstree_words(PST,[a,large]).
PST = phrase(det(a),np2(adj(large)))
Andere möglicherweise interessante Anwendungen: die mit den Worten Sätze [D,large]
gibt es?
?- pstree_words(PST,[D,large]).
D = a,
PST = phrase(det(a),np2(adj(large))) ? ;
D = the,
PST = phrase(det(the),np2(adj(large)))
Welche Phrasen der gegebenen Struktur gibt es?
?- pstree_words(phrase(det(D),np2(adj(A))),L).
A = large,
D = a,
L = [a,large] ? ;
A = large,
D = the,
L = [the,large] ? ;
'neue Liste ([Det, Adj]): - Ausdruck_ (det (Det), np2 (adj (Adj))).' –