将整数列表分为两个子列表并且两个子列表的总和为相同值时,查询成功
成功查询的示例为:
split([1,1,1,3])。
或
split([15,1,2,3,4,5])。
失败的话就像
split([1,2,10])。
答案 0 :(得分:2)
处理整数之间的关系时,我经常使用clpfd。
:- use_module(library(clpfd)).
子列表是连续的子序列。
“恰好两个子列表”表示“前缀/后缀”。
使用append/3
和sum/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-toplevel表示Prolog进行了一些回溯搜索的方式。