(relative clause), , "Every man that paints admires Monet" ( , , ).
21. 527
"every man that paints" , "that paints" . , , :
noun phrase --> determiner, noun, rel clause.
rel_clause --> [ that], verb_phrase. _
rel_clause -->{]. I
. "Every man that paints admires Monet" :
,
X - X , X .
Prolog: all(X, man(X) and paints! X) => admires! X, monet)]
, "and" , "=>". , "every man that paints" : all(X, man(X) and paints [ X} => Assn)
all! X, Propl and 2 => Assnl
Propl , Prop2 - , a Assn - . DCG , , .
"tSS-SJA Propl and Prop2) ^> [ t Propl2, Assn, S], Xr Prop2).
noun c [ X, ProplWopl, Propl2 ].
, , : r e l_ c l au s e (X, Propl, Propl) -> [j.
21.1 DCG , , "" "every", . , .
John paints.
Every man that paints admires Monet. Annie admires every man that paints. Every woman that admires a man that paints likes Monet.
21.1. DCG,
:- [ 100, xfy, and).:- (150, Kfy, =>).
sentence! 3) -->
nounj)hrase(X, P, S), verb_phrase(X, P),
nounj)hrase(X, P, S) -->
determiner! X, P12, P, S), noun(X, P1J, rel_clause(X, PI, P12).
nounjhrase [ X, P, pj -> proper_noun(X).
verbjhrase (X, P) ->
528 II, Prolog
trans_verb[ X, Y, PI), noim_phrase (Y, PI, P).
verbjhrase (X, P) -> intrans_verb(x, P).
|
|
rel_clause[ X, PI, PI and P2) -> [that), verb_phrase[ X, P2).
rel_clause[ X, PI, PI) --> [],
determiner) x, PI, P, all[ X, PI => P)) --> [every].
determiner! X, PI, p, existst x, PI and pj} - > [aj.
noun[ X, man(X)) ~> [man].
noun[ X, woman(X)) --> [woman).
proper_rtoun[ John) -> tjohnj.
proper_noun[ annie) --> [annie).
proper_noun(monet) -> [monet].
trans_verb(X, Y, likes (X, Y)) --> [ likes].
trans_verb{ X, Y, admires! X, Y)) -> [admires],
intran5_verb(X, paintS{X>] -> [paints].
%
testl (M>:-
sentence! M, [John,paints],[]).
test2 [ M):-
sentence! M, [a, man, paints!, )
test3{ M):-
sentence! M, [every,man,that,paints,admirea,manet], []).
test4 (M):-
sentence! M, [annie,admires,every,man,that,paints],[]),
test5(Mi:-
..,.sentence(M, [every, woman, that,admires,a,man, that,. paints,likes,monet], []}.
, :
?- sentence(Meaningl, [ every, man, that, paints, admires, monet], []). Meaningl = alii X, man(X) and paints [ X) => admires(X, monet)]
7- sentence! Meaning2, 1 annie, admires, every, man, that, paints], []). Meaning2 = all! X, man(X) and paints! X] => admires(annie, X))
?- sentence (Meaning3, [ every, -woman, that, admires, a, man, that, paints,
likes, monet], []). Meaning3 all (X, woman! X) and exists (Y { man! V) and paints! IT J! and admires(X, Y)) -> likes! X, monet))
, , . , , , : "Does Annie
21. 529
admire anybody who admires Monet?" ( -, ). , . , , . , Prolog. Prolog. , . , Prolog. paints(John).
admires (X, aionet):
admires(annie, X):- man(X), paints[ X),
"Does Annie admire anybody
who admires Monet?" Prolog:
?- admires(annie, X), admires(X, menet). X - John
21.6. :
) Mary knows all important artists (
).
) Every teacher who teaches French and studies music -understands
Chopin ( , ,
).
|
|
) A charming lady from Florida runs a beauty shop in Sydney (
),
21.7. , 21.1,
.
. ,
, tes~5, 21.1, :
?- all (X, woman (X) and exists (Y, (man (Y) and paints (Y)) and
admir kes[X,monet)), sentence(M, S, [] I. Prolog :
and admires C()ac.JMFc;) -> likes(_022C,monet))
. , :
= aU {monet, woman[monet) and exists[ Q364,(man(0364) and paints(0364)) and admires (monet, _0364)) => likes [monet, monetj)
S = [monet,likes, every,woman,that,admiresa,man,that,paints] % % , ,
II. Prolog
, , . : , , (, X all {X,...)), (monet}; . 21.8. , 21.1, "if, "then", "and", "or", "neither", "nor" .. :
John paints and Annie sings. *
If Annie sings then every teacher listens. ,
%
, 21.1, Prolog. , ( ; . 6) Prolog. , , . , .
, BNF, DCG (Definite Clause Grammar - ). , DCG, Prolog, , .
DCG . .
DCG, ,