希望您一切都好。我对prolog相当陌生,并且正在编写的代码有问题。代码的目的很简单。它将列表中的每个元素添加到最后一个元素。我可以用Java做的事情:
static void add(double[] array){
double x = .0;
for (int i = 0; i < array.length; ++i)
x += array[i];
System.out.println(x);
}
但是,我一直在摸索如何在序言中做到这一点。我有以下代码
add_list([], X):- write(X).
add_list([Head|Tail],X) :-
Y is Head,
X is 0 + Y, %initialize X and add Y every time it runs.
add_list(Tail, X).
我确实得到的错误是,当代码第二次运行时变量X已被限制,这是有道理的,但我真的不知道如何解决该问题。
任何帮助将不胜感激。
谢谢。
Prolog程序是关系。使用以add_
开头的名称听起来更像是命令式程序。如果要学习Prolog,请尽量避免使用此类名称。在这种情况下,您想要在列表及其元素之和之间建立关系。 list_sum/2
听起来像个好听的名字。
:- use_module(library(clpfd)).
:- op(150, fx, #).
list_sum([], 0).
list_sum([E|Es], S) :-
#S #= #E + #Si,
list_sum(Es, Si).
现在,有了这个定义,就尝试一下!
?- list_sum([1,2,3], N).
N = 6.
?- list_sum([1,2,3], 7).
false.
?- list_sum([1,2,E], 7).
E = 4.
?- list_sum([1,E,E], 7).
E = 3.