请帮我!我不明白 SWI-Prolog
从列表 L1 到列表 L2,另一个元素等于列表 L1 中接下来三个项目的算术平均值。如果 L1 元素的数量不能被 3 整除,则列表 L2 中的最后一项通过将一个或两个最近项列表 L1 的总和除以 3 获得。为提示屏幕引入列表 L1。因此,程序应输出输入 L1 和 L2 结果列表。
清单项目可应要求提供。
这个问题几乎逐字翻译成 Prolog。
首先,添加基本情况,即空列表转换为空列表:
by_three([], []).
现在添加主要规则,以三个一组的形式抓取初始项目 、 和 ,并对它们进行H1
平均H2
:H3
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.
就是这样,你完成了!