多个Ifs上的Prolog操作员优先级冲突

时间:2016-05-14 22:50:03

标签: prolog

我对prolog有点新意,无法弄清楚这有什么问题。

ecoZona(Z):-
zona(Z, L1),
(L1 = [] -> 
    write('Zona nao encontrada'), nl,nl ;
    write('cenas\n'),
    listaEcos(L1,A,B,C,D),
    format('Ha ~w de Lixo Organico\n ~w de Papel\n ~w de Metal\n ~w de Vidro', [A, B, C, D]),
    max([A, B, C, D], X),
    F is div(700,X),
    M is mod(700,X),
    ( M <0 -> F is F+1; F is F+0),
    format('Sao Precisos ~w camioes', [F])).


listaEcos([],A,B,C,D).
listaEcos([L|R],A,B,C,D):-
findall([I,T,_,P], ecoponto(I, T, _, P), L2),
(L2 = [] ->
    write('---------\n');
    somaMais(L2,A,B,C,D)),
listaEcos(R,A,B,C,D).

somaMais([],A,B,C,D).
somaMais([L3|R3],A,B,C,D):-
nth0(1, L3, ElemType),
nth0(3, L3, ElemPerc),
( ElemPerc >= 90 ->
    (ElemType = 'Organico'
        -> soma(A,ElemPerc,F);
            (ElemType = 'Papel'
                -> soma(B,ElemPerc,G);
                    (ElemType = 'Metal'
                        -> soma(C,ElemPerc,H);
                        soma(D,ElemPerc,I),
                    )
            )
    )
somaMais(R3,F,G,H,I)).


soma(A,Elem, H):-
H is A+Elem.    

SWI-Prolog告诉我,该行上有Syntax error: Operator priority clash对应soma(D,ElemPerc,I),,我错过了什么?所有这些ifs都有问题吗?

我有一套垃圾桶(有名称,类型,位置,容量)。 我们的想法是,给定一个区域(有几个位置),我可以从该区域的垃圾桶获得超过90的所有容量的总和。

所以ecoZona会抓住这个区域并且发送它&#34;对于listaEcos,这个将垃圾桶列表(及其属性)分成单个垃圾桶。然后somaMais将能力总和(分裂纸张,玻璃,金属和有机物)

0 个答案:

没有答案