将整数列表分成两个具有相同总和的子列表Prolog

时间:2019-03-11 17:38:26

标签: list prolog

将整数列表分为两个子列表并且两个子列表的总和为相同值时,查询成功

成功查询的示例为:

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

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

失败的话就像

split([1,2,10])。

1 个答案:

答案 0 :(得分:2)

处理整数之间的关系时,我经常使用

:- use_module(library(clpfd)).

子列表是连续的子序列。

“恰好两个子列表”表示“前缀/后缀”。

使用append/3sum/3定义split/1

split(Xs) :-
   append(Prefix, Suffix, Xs),
   sum(Prefix, #=, Sum),
   sum(Suffix, #=, Sum).

使用SWI-Prolog 8.0.0进行示例查询:

?- split([1,1,1,3]).
true ;
false.

?- split([15,1,2,3,4,5]).
true ;
false.

?- split([1,2,10]).
false

两个查询成功 1 ,一个查询失败。就像你说的那样。


脚注1 :不用担心得到true ; false.之类的答案,这就是表示Prolog进行了一些回溯搜索的方式。

相关问题