2015-12-30 62 views
3

首先,我是一個總Prolog新手,對於一個愚蠢的問題我表示歉意!序言列表 - 在元素前後打印列表

我需要編寫一個分解月份列表的規則,並在may之前和may之後幾個月打印。

到目前爲止,我寫了下面:

append_lists([], L, L). 
append_lists([H|L1], [L2], [H|L3]) :- 
    append_lists(L1, L2, L3). 

這個偉大的工程,如果我手動查詢以下:

| ?- append_lists(Before, [may|After], [jan, feb, july, may, dec, oct, nov]). 
    Before = [jan,feb,july], 
    After = [dec,oct,nov] ? ; 
    no 

我怎麼能現在重寫我的規則,以便[may|After]到位規則中的L1,它可以接受任何月份?我嘗試了以下方法,但沒有奏效:

append_lists([], L, L). 
append_lists([Month|Before], After, [Month|Result]) :- 
    append_lists(Before, After, Result). 

回答

4

您可以使用append/3這樣做。

after_and_before(Month, ListOfMonths, Before, After):- 
    append(Before, [Month|After], ListOfMonths). 

測試用例:

?- after_and_before(may, [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec], Before, After). 
Before = [jan, feb, mar, apr], 
After = [jun, jul, aug, sep, oct, nov, dec] 
+0

謝謝gusbro!這非常有幫助:) – qwerty