1 recursion replace list prolog
我有一个称为unify的谓词,该谓词应将列表中的所有匿名变量(列表包含零,一和匿名变量)替换为一。但是我认为我做错了递归,因为输出不是完整的列表。这是代码:´
unify([P|T], [1|L]):-
P\==0, P\==1, !, unify(T,L).
unify([P|T],[P|L]):-
P==0; P==1,!, unify(T,L).
Run Code Online (Sandbox Code Playgroud)
例如,输入的输出unify([_,_,1,0,0,_,_],L).应为L=[1,1,1,0,0,1,1].
该名称unify/2通常用于实际的通用统一。请注意,该谓词不是纯粹的关系谓词。
binlist_oneified(Bs, Os) :-
must_be(list, Bs),
copy_term(Bs, Os),
term_variables(Os, Ws),
maplist(=(1), Ws).
Run Code Online (Sandbox Code Playgroud)