替换prolog中的列表

时间:2013-10-09 18:51:50

标签: prolog

我想在列表中添加一个元素,并将其替换为我的列表。

所以我写了

initialstate(0,[],[[1,0],[2,3],[1,2],[1,3]]).
add(X,L2,[X|L2]).

我想做出类似的东西......

?- initialstate(_,List,_),add(4,List,List)

并将初始状态替换为此

initial_state(0,[4],[[1,0],[2,3],[1,2],[1,3]]).

对我来说问题是如何替换“初始状态”下的整数列表。

我是prolog的新人......请帮助我......如果这是愚蠢的话,我很抱歉。

2 个答案:

答案 0 :(得分:1)

一旦提供了适当的声明

:- dynamic initialstate/3.

你可以用这种方式更新你的数据库

?- retract(initialstate(A,B,C)), assertz(initialstate(A,[4|B],C)).

答案 1 :(得分:0)

如果您想更改列表,则会获得不同的列表。所以你需要一个不同的名字。

Prolog不是一种命令式语言,而是一种描述性语言。这意味着:你不要说这样做。你说这是这样的,当这种情况下,这在文件(知识)中是真/假。然后你开始翻译,咨询知识并提出问题,确实是真的。

写A = B意味着A总是B.

?- initialstate(_,List,_),add(4,List,List)

表示列表的初始状态是列表中添加4是列表本身。 这不是true。如果添加4,则应该有4,之前没有4。

你可以这样做:

append4(List, ListWithFourInside) :- append(List, [4], ListWithFourInside).

当我将4添加到列表中时,我会得到一个包含4个列表的列表。

如果你想在开始时使用4,可以做得更短

add4(List, ListWithFourInside) :- [4 | List] = ListWithFourInside.

甚至更短:

add4(List, [4|List]).