用于查找列表最后一个元素的 Prolog 规则



我应该在Prolog上写一个规则,它找到列表的最后一个元素并向其添加1。这是我到目前为止想出的。它有效,但我的问题是这个规则可以写成其他方式吗:

element(D ,[_|B]):- element(D, B).
element(D, [X]):- D is X+1.

(1(我将谓词重命名为类似last_element_incremented的内容,这将比仅仅element更具描述性,后者没有说太多。

(2( 要使规则不重叠,请更改递归规则:

last_element_incremented(Xinc, [_,X|T]) :- last_element_incremented(Xinc, [X|T]).

(3(如果您使用CLP(FD(,则可以使解决方案更加通用。此外,交换子句的顺序,以便您不会遇到更一般查询的非终止问题:

last_element_incremented(Xinc, [X]) :- Xinc #= X + 1.
last_element_incremented(Xinc, [_,X|T]) :- last_element_incremented(D, [X|T]).

然后,您可以查询,例如:

| ?- last_element_incremented(3, L).
L = [2] ? ;
L = [_,2] ? ;
L = [_,_,2] ? ;
L = [_,_,_,2] ? ;

(4(最后,你可以只使用append/3

last_element_incremented(Xinc, L) :- append(_, [X], L), Xinc #= X + 1.

相关内容

  • 没有找到相关文章

最新更新