Необходимо создать кластер (L, A, B), который возвращает подсписки L на A и B соответственно, основываясь на условии - PullRequest
0 голосов
/ 20 января 2019

Допустим, у нас есть список L = [1, 5, 32, 5, 7, 8] Мне нужно создать кластер (L, A, B), который делит L на 2 подсписка (A, B). Предполагается, что A содержит все значения, которые появляются в списке L ДО значения 32. Предполагается, что B содержит все значения, которые появляются в списке L ПОСЛЕ значения 32. 32 предполагается исключить из обоих списков.

?- cluster([11 , 18 , 9 , 32 , 13 , 12 ] , A , B).
A = [11 , 18 , 9], B = [13 ,12].

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Почему бы не

cluster(L, Break, A,B) :-
    append(A, [Break|B], L).

Например

? cluster([11 , 18 , 9 , 32 , 13 , 12 ] , 32, A , B).
A = [11, 18, 9],
B = [13, 12] ;
false.
0 голосов
/ 20 января 2019

Вот код для требуемой операции:

cluster([L|Rest],[L|A],B) :-
   L \= 32,
   cluster(Rest,A,B).

cluster([L|Rest],[],Rest):-
   L == 32.

Что делает этот код, он перебирает список и добавляет значения в A, пока не достигнет первого значения 32 , а затем присваивает оставшуюся часть списка напрямую B.

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