Ответ в теме: Расщепление списка на Prolog

      Комментарии к записи Ответ в теме: Расщепление списка на Prolog отключены
#2166

Предикат генерирует все варианты разбиения списка на две части. При этом первая часть является префиксом списка, а вторая – постфиксом.
В первом правиле записано что пустой список является префиксом любого списка.
Второе правило отделяет первый элемент списка и добавляет его к префиксу, хвост списка обрабатывается рекурсивно.

На каждом шаге сработает первое правило, которое и вернет очередное найденное решение (из пустого списка и остальных элементов). Второе правило служит для генерации новых решений, уменьшения исходного спсика, а также переписывания элементов из него в префикс.

Последнее решение функция вернет когда префикс будет содержать все элементы исходного списка. Следующее за этим обращение ко второму правилу не увенчается успехом, т.к. исходный список окажется пуст, поэтому не получится выделить из него первый элемент для перемещения в область префикса.