带有Prolog代码的问题求和列表中的元素

问题描述 投票:0回答:1

希望您一切都好。我对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 logic logic-programming
1个回答
0
投票

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.
© www.soinside.com 2019 - 2024. All rights reserved.