在 Prolog 中替换原子中的元素

replacing elements in atoms in 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).

我想要它 return 的结果是这样的:

-?replace_var(hello, l, w, X).
X = hewwo.

问题与 rep() 谓词有关。我不知道如何写它或如何将 ValVar 传递给谓词。

请给我一些建议。谢谢!

这是错误的

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

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