2016-11-22 43 views
0

我試圖在Prolog中實現beta縮減,DCG和詞典。 當我試圖編譯時,它給了我一個語法錯誤,它是運算符@。 我該如何解決它?lambda微積分符號語法錯誤序言

 
beta(Exp,Exp):- 
    atomic(Exp), 
    !. 

beta(lbd(V,F_body)@Exp,Result):- 
    !, 
    substitute(V,Exp,F_body,Result1), 
    beta(Result1,Result). 

beta(Exp,Result):- 
    Exp=..ExpList, 
    maplist(beta,ExpList,ResultList), 
    Result=..ResultList. 

s(SSem) --> np(NPSem), vp(VPSem),{var_replace(NPSem,NPSem1),beta([email protected],SSem)}. 

vp(VPSem) --> v(VSem), np(NPSem),{var_replace(VSem,VSem1),beta([email protected],VPSem)}. 

np(lbd(p,[email protected])) --> [john]. 

np(lbd(p,[email protected])) --> [mary]. 

v(lbd(s,lbd(x,[email protected](y,likes(x,y))))) --> [likes]. 

回答

1

可以定義@二元運算符,使用,例如:

:- op(500, xfy, @). 

如果你在程序的頂部添加此指令,它編譯沒有錯誤和警告,您可以使用(@)/2作爲從 開始的中綴運算符。

例子:

 
?- write_canonical([email protected]@c). 
@(a,@(b,c)) 

我離開選擇適合關聯此操作練習。

+0

明白了。謝謝!! ;) – Britishgoat