%% Description: Lambda Calculus for a fragment of English %% %% Writer: Patrick Blackburn & Johan Bos (1997) %% %% °ü·Ã¼º: Á¦ 8 Àå %% %% name: lambdaPL.pl %% :-op(400,yfx,=>). % ¿¬»êÀÚ°¡ ¿ø·¡ ¡®>¡¯ ·Î Á¤ÀǵǾúÀ¸³ª, °¡µ¶¼ºÀ» ³ôÀ̱â À§ÇØ ¹Ù²Ù¾ú´Ù. :-op(300,yfx,&). /*===================================================================== Functional Application (FA) =====================================================================*/ fa(lambda(Argument,Result),Argument,Result). /*===================================================================== DCG rules =====================================================================*/ s(Sem) --> np(SemNP), vp(SemVP), {fa(SemNP,SemVP,Sem)}. np(Sem) --> det(SemDet), noun(SemNoun), {fa(SemDet,SemNoun,Sem)}. np(Sem) --> pn(Sem). vp(Sem) --> iv(Sem). vp(Sem) --> tv(SemTV), np(SemNP), {fa(SemTV,SemNP,Sem)}. vp(Sem) --> [is,a], noun(Sem). vp(Sem) --> dv(SemDV), np(SemNP1), np(SemNP2), {fa(SemDV,SemNP2,SemTV),fa(SemTV,SemNP1,Sem)}. /*===================================================================== Determiners =====================================================================*/ det(lambda(P1,lambda(P2,forall(X,R1 => R2)))) --> [every], {fa(P1,X,R1),fa(P2,X,R2)}. det(lambda(P1,lambda(P2,exists(X,R1 & R2)))) --> [a], {fa(P1,X,R1),fa(P2,X,R2)}. /*===================================================================== Proper Names =====================================================================*/ pn(lambda(P,R)) --> [vincent], {fa(P,vincent,R)}. pn(lambda(P,R)) --> [peter], {fa(P,peter,R)}. % Ãß°¡ pn(lambda(P,R)) --> [mia], {fa(P,mia,R)}. /*===================================================================== Nouns =====================================================================*/ noun(lambda(X,man(X))) --> [man]. noun(lambda(X,boxer(X))) --> [boxer]. noun(lambda(X,woman(X))) --> [woman]. % Ãß°¡ noun(lambda(X,student(X))) --> [student]. % Ãß°¡ noun(lambda(X,program(X))) --> [program]. % Ãß°¡ noun(lambda(X,footmassage(X))) --> [foot,massage]. /*===================================================================== Intransitive Verbs =====================================================================*/ iv(lambda(X,walk(X))) --> [walks]. /*===================================================================== Transitive Verbs =====================================================================*/ tv(lambda(K1,lambda(Y,K2))) --> [loves], {fa(K1,lambda(X,love(Y,X)),K2)}. tv(lambda(K1,lambda(Y,K2))) --> [writes], {fa(K1,lambda(X,write(Y,X)),K2)}. % Ãß°¡ tv(lambda(K1,lambda(Y,K2))) --> [likes], {fa(K1,lambda(X,like(Y,X)),K2)}. tv(lambda(K1,lambda(Y,K2))) --> [is,loved,by], {fa(K1,lambda(X,love(X,Y)),K2)}. /*===================================================================== Ditransitive Verbs =====================================================================*/ dv(lambda(K1,lambda(K2,lambda(X,K4)))) --> [gives], {fa(K1,lambda(Z,give(X,Y,Z)),K3),fa(K2,lambda(Y,K3),K4)}.