Prolog 用变量替换原子
我有一个术语,它可能包含也可能不包含原子“this”。该术语也可能包含变量。 我需要用一个变量I替换“this”。我该怎么做? 我试着这样做:Prolog 用变量替换原子,prolog,Prolog,我有一个术语,它可能包含也可能不包含原子“this”。该术语也可能包含变量。 我需要用一个变量I替换“this”。我该怎么做? 我试着这样做: term_to_atom((f(a), g(this, b), ...), A), tokenize_atom(A, L), replace(this, I, L, L2) 这似乎奏效了。问题是,我需要回到原来的术语,但我做不到…SWI Prolog有,这应该可以帮助你回到原来的术语 main :- term_to_atom((f(a),
term_to_atom((f(a), g(this, b), ...), A),
tokenize_atom(A, L),
replace(this, I, L, L2)
这似乎奏效了。问题是,我需要回到原来的术语,但我做不到…SWI Prolog有,这应该可以帮助你回到原来的术语
main :-
term_to_atom((f(a), g(this, b)), A),
tokenize_atom(A, L),
replace(this, 'I', L, L2),
atomic_list_concat(L2, A2),
atom_to_term(A2, T, []),
writeln(T).
?- main.
f(a),g(_G69,b)
true .
看看这个谓词(replace/4): 您需要什么的示例:
| ?- replace(f(1,23,h(5,this)),this,Var,Result).
Result = f(1,23,h(5,Var))
yes
原子列表不起作用。我认为这是因为这个术语可能也包含变量,而原子列表需要一个原子列表。你可能想要
替换(这个'I',L,L2)
,这样你的原子列表就包含了原子'I'。那么原子列表\u concat
应该可以工作了。我已经更新了我的答案,以显示一个完整的示例。它是有效的,但当我将术语作为规则体断言时,它会将变量设置为u,我需要它来保留名称。您还可以使用类似的谓词替换子项。
| ?- replace(f(1,23,h(5,this)),this,Var,Result).
Result = f(1,23,h(5,Var))
yes