我需要一些 TURBO-Prolog 程序的帮助。
有一些列表,其中仅包含整数。列表元素应拆分为 3 个列表(X、Y、Z)。X-list 应该包含整数值 (x mod 2 == 0 && x mod 3 == 1),Y-list 应该包含整数值 (x mod 2 == 1 && x mod 3 == 0), Z-list 应该包含所有其他值。Z-list 的值应该相加。
我正在尝试创建一个 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).
我没有得到正确的结果(只有堆栈溢出错误或类似的东西)。我知道,这是一个非常罕见的 Prolog 代码版本,但我真的需要这种形式。任何解决方案如何管理我的问题?