2012-11-14 185 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. 

就是這樣,你做!