2012-11-14 188 views
1

请帮帮我! 我不明白SWI-Prolog列表在SWI-Prolog

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

清单项目可根据要求提供。

回答

1

这个问题可以翻译成Prolog几乎一字不差。

首先,添加基本情况,他说,一个空列表转换为一个空表:

by_three([], []). 

现在增加的主要规则抓住最初的项目,H1H2H3,在组三,和它们平均:

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

注意递归调用的位置:原单尾T转化为RT在通话在规则的末尾。

最后,添加两个案件的一个元素的列表和两个元素的列表:

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

就是这样,你做!