Удалить письмо

q.a спросил: 12 мая 2018 в 04:55 в: prolog

Я создаю что-то, но это не сработало. В упражнении говорилось, что нужно удалить письмо. Пример ([c, o, m, k, p, u, t, e, r]) k должен быть устранен.

den([c,o,m,p,u,t,e,r]).
den([n,e,t,w,o,r,k]).
den([p,r,o,g,r,a,m]). % (c) delete(X,L1,L2):-
%       append(A,[X,T],L1),
%       append(A,T,L2).%   <------------------ L -------------------->
%   +-----------------------------------------+
%   |<-> A <-> | X | <-> B <-> | Y | <-> C <->|
%   +-----------------------------------------+
%   <--------- F --------->
%   +-------------------------------------+
%   |<-> A <-> | <-> B <-> | Y | <-> C <->|
%   +-------------------------------------+
%   <-------------- CL --------------->
%   +---------------------------------+
%   |<-> A <-> | <-> B <-> | <-> C <->|
%   +---------------------------------+delete_extra(Word, CorrectWord) :-
    append(Begin, [Letter1|Ypoloipo], Word),
    append(Middle, [Letter2|End], Ypoloipo),
    word(CorrectWord),
    append(Begin, YpoloipoCW, CorrectWord),
    append(Middle, End, YpoloipoCW),
    Letter1 \= Letter2.

1 ответ

Есть решение
Paulo Moura ответил: 12 мая 2018 в 05:17

Может ли быть так просто, как:

delete_extra(Word, CorrectWord) :-
    select(_, Word, CorrectWord),
    den(CorrectWord).

Пример вызова:

?- delete_extra([c,o,m,k,p,u,t,e,r], CorrectWord).
CorrectWord = [c, o, m, p, u, t, e, r] ;
false.

Предикат select/3 является фактическим стандартным предикатом библиотеки над списками, которые не детерминистически выбирают элемент из списка, возвращая его и остальную часть списка.

q.a ответил: 12 мая 2018 в 05:24
я слишком ошибался?
Paulo Moura ответил: 12 мая 2018 в 05:39
Не уверен, почему вы предполагали, что первое письмо всегда было правильным, но идея поиска буквы где-то в слове, что было бы неправильно, шла в правильном направлении.
q.a ответил: 12 мая 2018 в 05:50
этот ответ можно использовать в любом случае? Например, его можно использовать для удаления с одинаковыми буквами, если есть письмо больше computerm.There m.So можно ли использовать?
Paulo Moura ответил: 12 мая 2018 в 06:06
Его можно использовать, когда в слове есть одиночная дополнительная буква, независимо от ее положения.
q.a ответил: 12 мая 2018 в 06:07
большое спасибо человеку: D