替换Prolog中的一个子句



我有这个代码

clause2( monopati1(X,X,Monopati,Monopati), true).
clause2( monopati1(X,Z,Monopati,Teliko_monopati),
(  akme(X,Y),
+(member(Y,Monopati)),
append(Monopati,[Y],Neo_monopati),
monopati1(Y,Z,Neo_monopati,Teliko_monopati))).    
clause2(monopati(X, Y, Monopati),
(  monopati1(X, Y, [X], Monopati),
write(Monopati))).

我需要把这句话替换为:"monopati1(X,X,Monopati,Monopaati(。"用等价的句子"monopati1(X,X,Monopati,Teliko_mopati(:-Monopati=Teliko_nopati。"但我必须从键盘上读。

所以我做了

write('Give clause to replace'),nl,
read(Old_clause),nl,
write('Give new clause'),nl,
read(New_clause),nl,
retract(clause2(Old_clause , _)),
assert(clause2(New_clause))

但结果是:

clause2((monopati1(A,A,B,C),B=C)).

我如何去掉第2条中的额外括号((monopati1(A,A,B,C(,B=C((,使其成为第2条(monopati 1(A、A、B、C(,B:C(。

如果New_clause是一对,那么您所需要做的就是在assert之前添加(Part1,Part2) = New_clause,然后只添加assert(clause2(Part1,Part2))

好吧!我终于成功了!我只是把New_clause作为一个列表来阅读,然后把头部和身体分开!

choice1_1(a):- 
write('Give clause to replace'),nl,
read(Old_clause),nl,
write('Give new clause like : [Goal , Body]'),nl,
read(New_clause),nl,
retract(clause2(Old_clause , _)),
assert_new(New_clause).
assert_new([H|[H1|T]]) :- asserta(clause2(H,H1)).

使用[H|[H1|T]]只是为了插入我的身体而不被[]包围。

最新更新