用变量替换原子

时间:2012-09-28 10:34:11

标签: prolog

我有一个术语,可能包含也可能不包含原子'这个'。该术语也可能包含变量。 我需要替换这个'变量I.我怎么能这样做? 我试着做这样的事情:

term_to_atom((f(a), g(this, b), ...), A),

tokenize_atom(A, L),

replace(this, I, L, L2)

似乎有效。问题是,我需要回到原来的术语,我不能这样做......

2 个答案:

答案 0 :(得分:0)

SWI-Prolog有atomic_list_concat/2atom_to_term/2,可以帮助您回到原来的期限。

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 .

答案 1 :(得分:0)

看一下这个谓词(替换/ 4):

replace(Term,Term,With,With) :-
    !.
replace(Term,Find,Replacement,Result) :-
    Term =.. [Functor|Args],
    replace_args(Args,Find,Replacement,ReplacedArgs),
    Result =.. [Functor|ReplacedArgs].

replace_args([],_,_,[]).
replace_args([Arg|Rest],Find,Replacement,[ReplacedArg|ReplacedRest]) :-
    replace(Arg,Find,Replacement,ReplacedArg),
    replace_args(Rest,Find,Replacement,ReplacedRest).

您需要的示例:

| ?- replace(f(1,23,h(5,this)),this,Var,Result).                                                                                           

Result = f(1,23,h(5,Var))                                                                                                                  

yes