替换Prolog中原子中的元素

时间:2015-10-02 10:15:52

标签: dictionary replace prolog

我正在编写一个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()谓词。我不知道如何编写它或如何将ValVar传递给谓词。

请给我一些建议。谢谢!

1 个答案:

答案 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).

免责声明:未经测试的代码