首页 > 解决方案 > 是否有一个谓词用数字 1 替换每个匿名变量?在只有零和一以及匿名变量的列表上

问题描述

我有一个名为 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).

例如,输入的输出unify([_,_,1,0,0,_,_],L).应该是L=[1,1,1,0,0,1,1].

标签: listrecursionreplaceprolog

解决方案


该名称unify/2通常用于实际的一般统一。请注意,此谓词不是纯粹的关系谓词。

binlist_oneified(Bs, Os) :-
   must_be(list, Bs),
   copy_term(Bs, Os),
   term_variables(Os, Ws),
   maplist(=(1), Ws).

推荐阅读