我正在尝试在Prolog中编写一个关系分割,它采用整数N,整数列表L和其他参数,列表L是平的。如果列表L可以被分成三个子集,则关系split返回true,使得每个子集中的整数之和严格小于N.否则,该关系返回false。这是迄今为止我走得最远的地方:
split(list, list, list, list)
split([],[],[],[]).
list_sum([],0).
split([X|L], [X|L1], [X|L2], L3):-
list_sum([Head + Tail]),
list_sum>N,
!,
split(N, L,L1, L2, L3).
? - 错误:toplevel:未定义的过程:list_sum / 2(DWIM无法纠正目标) 任何帮助和解释都非常感谢。
答案 0 :(得分:1)
基本上你的问题是你需要去学习Prolog。我不是在开玩笑。如果你认为你可以通过这种水平“没有得到它”并且在S.O上取得其余的水平,那么你将失败。
list_sum/2
定义的中间split/4
做什么?[Head + Tail]
绝对不能达到您想要的效果。list_sum>N
在下一行应该是什么意思? Prolog中只有一个命名空间,而且语言非常非常依赖于获得正确的大写。这种草率并不是好兆头。split/5
时,您的最后一行是定义split/4
。这可能不是你的意思。在我看来,这段代码完全不可挽回。扔掉它然后重新开始。并首先阅读教程。
答案 1 :(得分:1)
对于您确切的问题:您已经不在您显示的“代码”中定义了带有两个参数的谓词list_sum
。这就是错误告诉你的。