Пролог добавить элементы - PullRequest
0 голосов
/ 10 июня 2018

Моя проблема:

Напишите программу Prolog, которая, учитывая два списка L1 и L2, выводит два новых списка L3 и L4, так что L3 содержит элементы L1, которые также принадлежат L2,в то время как L4 содержит элементы L1, которые не принадлежат L2.Вы можете использовать встроенный элемент предиката.Например, элемент списка запросов ([a, r, t], [t, s, m, n, a], L3, L4) выдает L3 = [a, t] и L4 = [r].

И мое решение теперь:

memberOf([], [], _).
memberOf([H|T], L2, [X|Xs]) :-
   X is H,
   member(X, L2),
   memberOf(T, L2, Xs).

Но когда я проверяю на следующем входе, он возвращает нет ..

memberOf ([1,2, 3], [2,3,4], L3).

Что я делаю не так?

1 Ответ

0 голосов
/ 14 июня 2018
listmem(L1,[],[],L1).
listmem([],_,[],[]).
listmem([H1|T1],L2,[H1|L3],L4):-
    member(H1,L2), !,
    listmem(T1,L2,L3,L4). 
listmem([H1|T1],L2,L3,[H1|L4]):-
    listmem(T1,L2,L3,L4).    

Я добавил разрез в третий случай вместо \+ member(H1,L2) к последнему, чтобы вы могли использовать listmem «наоборот», например, вместо:

?- listmem([a, r, t], [t, s, m, n, a], L3, L4).
L3 = [a, t],
L4 = [r].

Вы также можете:

?- listmem([a, r, t], L2, [a,t], L4).
L2 = [a, t|_G10554000],
L4 = [r].
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...