我有这个代码
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]]
只是为了插入我的身体而不被[]包围。