我正在编写一个prolog谓词,用一个给定的原子替换另一个元素。我写的谓词是这样的:
replace_var(Expr0, Var, Val, Expr) :-
Expr0 =.. Chars,
chars_replaced(Chars, Rs),
Expr =.. Rs.
chars_replaced(Chars, Rs) :-
maplist(rep, Chars, Rs).
rep(Var,Val).
rep(C, C) :- dif(C,var).
我希望它返回的结果如下:
-?replace_var(hello, l, w, X).
X = hewwo.
问题在于rep()
谓词。我不知道如何编写它或如何将Val
和Var
传递给谓词。
请给我一些建议。谢谢!
答案 0 :(得分:0)
这是错误的
Expr0 =.. Chars
你需要
atom_chars(Expr0, Chars)
这个让我很困惑
rep(Var,Val).
rep(C, C) :- dif(C,var).
你是什么意思,特别是第二个?
无论如何,整个可以
replace_var(Expr0, Var, Val, Expr) :-
atom_chars(Expr0, Cs),
maplist(rep(Var, Val), Cs, Ts),
atom_chars(Expr, Ts).
rep(C, T, C, T).
rep(_, _, C, C).
免责声明:未经测试的代码