gpt4 book ai didi

prolog - 计算序言中的方差

转载 作者:行者123 更新时间:2023-12-01 15:13:58 25 4
gpt4 key购买 nike

我在 Prolog 中做了一个函数:-

mean(L, M) :-
sum(L, S),
length(L, N),
M is S/N.

sum([],0).
sum([H|T],Y):-
sum(T,X),
Y is X + H.

variance([],0).
variance([H|T], M, VO):-
variance(T,M,Y),
VO is( Y + ((H-M)*(H-M))).

statsList(L, M, V1) :-
sum(L, S),
length(L, N),
M is S/N,
variance(L, M, VO),
V1 is V0/N.

出于某种原因,当我尝试计算方差时,它总是回复“false”这样:方差([1,2,3],2,VO)或 statsList([1,2,3],M,VO)

但是,如果我只是用它来测试它是否有效:

variance([],0).
variance([H|T], VO):-
variance(T,Y),
VO is( Y + ((H-2)*(H-2))).

谁能告诉我哪里出错了?

最佳答案

variance([],0).
variance([H|T], M, VO):-
variance(T,M,Y),
VO is( Y + ((H-M)*(H-M))).

第一个子句定义谓词 variance/2(两个参数),而第二个子句定义 variance/3。后一个谓词然后递归地调用自身,直到它遇到它无法处理的空列表。

您应该为 variance/3 定义一个合适的基本情况。在 Prolog 中,具有相同谓词名称但不同元数(参数个数)的子句定义不同的谓词。

错误不会出现在您的测试代码中,因为您在其中定义了带有基本情况和递归情况的 variance/2

关于prolog - 计算序言中的方差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5157537/

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