Есть ли предикат, который заменяет каждую анонимную переменную числом 1?В списке только нули и единицы и анонимные переменные - PullRequest
1 голос
/ 24 апреля 2019

У меня есть предикат под названием 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].

1 Ответ

5 голосов
/ 24 апреля 2019

Имя unify/2 обычно используется для фактического общего объединения. Обратите внимание, что этот предикат не является чисто реляционным.

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