首页 > 解决方案 > 使用条件切割的 Prolog 查询

问题描述

我一直在使用 prolog 查询时遇到问题,该查询有一些乍一看难以理解的条件。

sameSum([L], V) :- !, sumlist(L,V). 
sameSum([L|R], V) :- sumlist(L,V),sameSum(R,V). 
sumlist([H],H) :- !.
sumlist([X|R],V) :- sumlist(R,Z), V is X+Z.

要求评估的查询是:

?-sameSum([[6,7,2], [1,5,9], [8,3,4]], V). 
?-sameSum([[6,4,1,2], [1,12], [8,5]], V). 
?-sameSum([[6,7], [1,12], [8,5]], 13). 
?-sameSum([],V).

提前感谢您的大力帮助。

标签: prolog

解决方案


这里不需要任何削减,而是:

sameSum([], _V). 
sameSum([L|R], V) :-
   % L = [_|_],     % maybe 
   sumlist(L,V),
   sameSum(R,V). 

sumlist([],0).
sumlist([X|R],V) :-
   sumlist(R,Z),
   V is X+Z.

请注意,您给出的最后一个案例的原始定义失败。


推荐阅读