0

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

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

:- dynamic(list/1).

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

我知道代码看起来很奇怪,但我只是在寻找正确的语法来使用。

现在,如果我这样做:

添加(2,LL)。

答案将是:

LL = 2 ;

LL = []。

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

LL = [2]。

它看起来很简单(可能是这样),但我无法让它工作。

非常感谢。

4

1 回答 1

0

如果要添加X到列表的前面:

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

但我同意@jschimpf 的建议。Assert/retract 仅应在某些情况下使用,因为在某些应用程序中可能非常有效。

于 2014-04-08T17:25:25.850 回答