【发布时间】:2018-04-07 00:21:18
【问题描述】:
我有以下计算面积的函数。
它接收三个参数,第一个是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(N1, T, A)而不是as(N1-1, T, A)。as/3的第一个参数的目的是什么?似乎您可以只处理列表直到它为空。我认为在这种情况下您可以删除整个第一个子句,因为一旦列表为空,它将不匹配任何内容。 -
第二个参数列表的长度不是数字冗余信息吗?
-
通过在 Stack Exchange (SE) 网络上发帖,您已根据 CC BY-SA 3.0 license 授予 SE 分发该内容的不可撤销的权利(即无论您未来的选择如何)。根据 SE 政策,帖子的非破坏版本是分发的版本。因此,任何破坏行为都将被撤销。请不要通过破坏您的帖子来为人们做更多的工作。如果您想取消此帖子与您的帐户的关联,请参阅What is the proper route for a disassociation request?