我对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将能力总和(分裂纸张,玻璃,金属和有机物)