Пролог запроса с использованием условного разреза - PullRequest
2 голосов
/ 12 января 2020

У меня возникли проблемы с прологическим запросом, который на первый взгляд имеет некоторые трудности, которые трудно понять.

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

Заранее спасибо за большую помощь.

1 Ответ

3 голосов
/ 12 января 2020

Здесь нет необходимости в каких-либо сокращениях, вместо этого:

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.

Обратите внимание, что исходное определение не выполнено для последнего заданного вами случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...