gpt4 book ai didi

prolog - Prolog 代码对列表中的元素求和时出现问题

转载 作者:行者123 更新时间:2023-12-05 02:08:56 28 4
gpt4 key购买 nike

希望你一切都好。我是 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 已经有界,这是有道理的,但我真的不知道如何解决这个问题。

任何帮助将不胜感激。

谢谢。

最佳答案

序言程序是关系。使用以 add_ 开头的名称听起来更像是命令式程序。如果您想学习 Prolog,请尽可能避免使用此类名称。在本例中,您希望在列表与其元素总和之间建立关系。 list_sum/2 听起来是个好得多的名字。

:- use_module(library(clpz)). % or 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.

关于prolog - Prolog 代码对列表中的元素求和时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60338693/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com