Разбиение списка целых чисел на два подсписка с одинаковой суммой, Пролог - PullRequest
0 голосов
/ 11 марта 2019

запрос считается успешным, когда список целых чисел разбивается на два подсписка, и оба подсписка суммируются с одинаковым значением

. Примером успешного запроса будет:

split ([1,1,1,3]).

или

split ([15,1,2,3,4,5]).

неудачным будетчто-то вроде

split ([1,2,10]).

1 Ответ

2 голосов
/ 11 марта 2019

Когда я работаю над отношениями между целыми числами, я часто использую .

:- 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; именно так указывает, что Пролог выполнил некоторый поиск в обратном направлении.

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