在 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()
谓词有关。我不知道如何写它或如何将 Val
和 Var
传递给谓词。
请给我一些建议。谢谢!
这是错误的
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).
免责声明:未经测试的代码
我正在编写一个序言谓词,它用给定原子中的一个元素替换另一个元素。我写的谓词是这样的:
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()
谓词有关。我不知道如何写它或如何将 Val
和 Var
传递给谓词。
请给我一些建议。谢谢!
这是错误的
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).
免责声明:未经测试的代码