Prolog - 使用动态与断言

时间:2014-04-08 16:48:04

标签: dynamic prolog prolog-assert

我是Prolog的新手,我很难使用动态谓词。

首先,这是我正在执行的代码

:- dynamic(list/1).

add(X, LL) :- asserta(list([])), asserta(list(X)), retract(list(LL)).

我知道代码看起来很奇怪,但我只是在寻找合适的语法。

现在,如果我这样做:

add(2,LL)。

答案是:

LL = 2;

LL = []。

但我想要做的是将X(2)添加到数组([])中。所以..

LL = [2]。

它看起来很简单(可能是),但我无法让它发挥作用。

非常感谢。

1 个答案:

答案 0 :(得分:0)

如果您想将X添加到列表的前面:

add(X, LL) :-
    (   retract(list(Prev))
    ->  LL = [X|Prev]
    ;   LL = [X]
    ),
    asserta(list(LL)).

但我同意@ jschimpf的建议。断言/收回只应在某些情况下使用,因为在某些应用中可能非常有效。