Prolog列表 - 在元素之前和之后打印列表

时间:2015-12-30 15:07:21

标签: list prolog

首先,我是一个完整的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).

1 个答案:

答案 0 :(得分: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]