gpt4 book ai didi

list - 计算面积切线圆周 - Prolog

转载 作者:行者123 更新时间:2023-12-02 09:16:21 25 4
gpt4 key购买 nike

我有以下计算面积的函数。

它接收三个参数,第一个是 n 代表案例数,第二个代表圆周率,第三个是 l 返回结果。

我遇到的问题是,当第一个输入大于 1 时,它不起作用。

这是我的代码:

as(1, [X], A) :-
A is (sqrt(3.0) * (X*X)) - (3.14 * (X*X))/2.
as(N, [H|_T], A) :-
A is (sqrt(3.0) * (H*H)) - (3.14 * (H*H))/2,
N1 is N-1,
as(N1-1, T, A).

它应该如何工作的一个例子是:

?- as(4, [1,1,1,1], R).
R = 0.162050807568877130000 ;
R = 0.162050807568877130000 ;
R = 0.162050807568877130000 ;
R = 0.162050807568877130000.

如果你能帮助我,我将不胜感激......

最佳答案

此版本不能满足您的需求是否有原因?

as([H|_], A):- 
A is (sqrt(3.0) * (H*H)) - (3.14 * (H*H))/2.
as([_|T], A) :- as(T, A).

或者可能是这个?

area(H, Area) :- 
Area is (sqrt(3.0) * (H*H)) - (3.14 * (H*H))/2.
as(List, Area) :- member(Ratio, List), area(Ratio, Area).
  1. 我完全不明白您为什么需要担心 N
  2. 同时匹配 N[X] 会导致冗余。您不必重复您的公式。
  3. 你有很多单例错误:_T 在头部,然后是 T 在 body 中,这是行不通的。
  4. 您正在将 N1-1 传递给递归调用,这不会导致对其求值——但您已经在前面的表达式中求值过 N-1,所以只需在此处传递 N1 即可。同样,我根本不明白这有什么意义。
  5. 我认为使用 succ(N1, N) 而不是加一或减一是个好主意,因为它在两个方向上都有效(当然这里不相关)。
  6. 对我来说,将列表遍历与计算结合起来感觉有点恶心。我通常会将事情分解,以便在可以完成的范围内将计算与数据结构分开。这是编程的普遍准则。

关于list - 计算面积切线圆周 - Prolog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46940406/

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