lambda 微积分符号语法错误序言

lambda Calculus symbol syntax error prolog

我正在尝试在 Prolog 中实现 beta 缩减、DCG 和词典。 当我尝试编译时,它给了我一个语法错误,即运算符 @。 我该如何解决?

beta(Exp,Exp):-
    原子的(Exp),
    !。

beta(lbd(V,F_body)@Exp,Result):-
    ,
    替换(V,Exp,F_body,Result1),
    测试版(结果 1,结果)。

beta(Exp,结果):-
    Exp=..ExpList,
    地图列表(测试版,ExpList,ResultList),
    结果=..结果列表。

s(SSem) --> np(NPSem), vp(VPSem),{var_replace(NPSem,NPSem1),beta(NPSem1@VPSem,SSem)}。

vp(VPSem) --> v(VSem), np(NPSem),{var_replace(VSem,VSem1),beta(VSem1@NPSem,VPSem)}。

np(lbd(p,p@john)) --> [约翰]。

np(lbd(p,p@mary)) --> [玛丽]。

v(lbd(s,lbd(x,s@lbd(y,likes(x,y))))) --> [likes]。

您可以定义 @作为二元运算符,例如:

 :- op(500, xfy, @).

如果您在程序顶部添加此指令,它会在编译时没有错误和警告,并且您可以从那时起使用 (@)/2 作为中缀运算符。

示例:

?- write_canonical(a@b@c).
@(a,@(b,c))

我将为此运算符选择合适的 关联性 作为练习。