Удалить письмо - PullRequest
       12

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

0 голосов
/ 05 июня 2018

я что-то создаю, но это не сработало. В упражнении говорилось об удалении буквы. Например ([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 Ответ

0 голосов
/ 05 июня 2018

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

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 является де-факто стандартным библиотечным предикатом для списков, который недетерминированно выбираетсяэлемент из списка, возвращающий его и остальную часть списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...