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))
我将为此运算符选择合适的 关联性 作为练习。
我正在尝试在 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))
我将为此运算符选择合适的 关联性 作为练习。