Пролог стекопотока

Мне нужна помощь с какой-нибудь программой TURBO-Prolog.

Есть некоторый список, который содержит только целые числа. Элементы списка должны быть разбиты на 3 списка (X, Y, Z). X-список должен содержать целочисленные значения с (x mod 2 == 0 && x mod 3 == 1), Y-список должен содержать целочисленные значения с (x mod 2 == 1 && x mod 3 == 0), и Z-список должен содержать все другие значения. Значения Z-списка должны быть суммированы.

Я пытаюсь создать программу Prolog, которая выглядит так:

domains
 list=integer*
predicates
 sum(integer, list)
 append(list, list, list)
 split(list, list, list, list, integer)
clauses
 append([], Z, Z).
 append([X|Y], Z, [X|U]):-append(Y, Z, U).

 sum(0, []).
 sum(X, [H|T]):-sum(U, T), X = U + H.

 split([], [], [], [], 0).
 split([H|T], X, Y, Z, Sum):- 
    H mod 2 = 0, 
    H mod 3 = 1,
    append(X, [H], _),
    split(T, X, Y, Z, Sum).
 split([H|T], X, Y, Z, Sum):- 
    H mod 2 = 0, 
    H mod 3 = 0, 
    append(Y, [H], _),
    split(T, X, Y, Z, Sum).
 split([H|T], X, Y, Z, Sum):- 
    H mod 2 = 1, 
    H mod 3 = 1, 
    append(Z, [H], _),
    split(T, X, Y, Z, Sum), 
    sum(Sum, Z).

с запросом: split([4,5,6,7], X, Y, Z, Sum). Я не получаю правильный результат (только ошибка переполнения стека или что-то вроде этого). Я знаю, что это очень редкая версия кода Пролога, но она мне действительно нужна в таком виде. Любые решения, как справиться с моей проблемой?

0 ответов

Другие вопросы по тегам