我想在列表中添加一个元素,并将其替换为我的列表。
所以我写了
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的新人......请帮助我......如果这是愚蠢的话,我很抱歉。
答案 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]).