Когда я работаю над отношениями между целыми числами, я часто использую clpfd .
:- use_module(library(clpfd)).
Подсписки являются смежными подпоследовательностями.
«Ровно два подсписка» подразумевают «префикс / суффикс».
Использование append/3
и sum/3
define split/1
:
split(Xs) :-
append(Prefix, Suffix, Xs),
sum(Prefix, #=, Sum),
sum(Suffix, #=, Sum).
Примеры запросов с SWI-Prolog 8.0.0:
?- split([1,1,1,3]).
<b>true</b> ;
false.
?- split([15,1,2,3,4,5]).
<b>true</b> ;
false.
?- split([1,2,10]).
<b>false</b>
Два запроса завершаются успешно 1 , один не выполняется. Как ты и сказал, они должны.
Сноска 1 : не беспокойтесь о получении ответов типа true ; false.
& mdash; именно так prolog-toplevel указывает, что Пролог выполнил некоторый поиск в обратном направлении.