1
請幫幫我! 我不明白SWI-Prolog列表在SWI-Prolog
從列表L1到列表L2,另一個元素,它等於列表L1中下三個項目的算術平均值。如果L1元素的數目不能被3整除,則列表L2中的最後一個項目是通過將一個或兩個近期項目列表L1的總和除以3而獲得的。引入列表L1用於提示屏幕。結果,程序應輸出輸入的L1和L2結果列表。
清單項目可根據要求提供。
請幫幫我! 我不明白SWI-Prolog列表在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([H],[A]) :- A is H/3.
by_three([H1,H2],[A]) :- A is (H1+H2)/3.
就是這樣,你做!