2016-11-22 6 views
0

Prologでベータ版、DCG、レキシコンを実装しようとしています。 私はコンパイルしようとしたときに、オペレータ@という構文エラーが出されました。 どうすれば修正できますか?ラムダ微積分シンタックスエラープロローグ

 
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, @). 

、あなたのプログラムの先頭にこのディレクティブを追加した場合、それはエラーと警告なしでコンパイルし、あなたは のonIX演算子として(@)/2を使うことができます。

例:

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

私は練習として、この演算子に適しアソシエを選択しておきます。

+0

ありがとうございました! ;) – Britishgoat