1

请帮我!我不明白 SWI-Prolog

从列表 L1 到列表 L2,另一个元素等于列表 L1 中接下来三个项目的算术平均值。如果 L1 元素的数量不能被 3 整除,则列表 L2 中的最后一项通过将一个或两个最近项列表 L1 的总和除以 3 获得。为提示屏幕引入列表 L1。因此,程序应输出输入 L1 和 L2 结果列表。

清单项目可应要求提供。

4

1 回答 1

1

这个问题几乎逐字翻译成 Prolog。

首先,添加基本情况,即空列表转换为空列表:

by_three([], []).

现在添加主要规则,以三个一组的形式抓取初始项目 、 和 ,并对它们进行H1平均H2H3

by_three([H1,H2,H3|T],[A|RT]) :- A is (H1+H2+H3) / 3, by_three(T, RT).

注意这里的递归调用:T原始列表的尾部在规则末尾的RT调用中转换为。by_three/2

最后,为一元素列表和二元素列表添加两个案例:

by_three([H],[A]) :- A is H / 3.
by_three([H1,H2],[A]) :- A is (H1+H2) / 3.

就是这样,你完成了!

于 2012-11-14T21:17:31.890 回答