0

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

所以我写了

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]]).

对我来说,主要问题是如何替换 indetifiers “initialstate” 中的列表。

我是序言的新手......请帮助我......如果这是愚蠢的事情,我很抱歉。

4

2 回答 2

1

一旦提供了适当的声明

:- dynamic initialstate/3.

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

?- retract(initialstate(A,B,C)), assertz(initialstate(A,[4|B],C)).
于 2013-10-09T22:09:19.557 回答
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]).
于 2013-10-09T20:52:56.750 回答