Пролог: разбить список размера N на два списка известных размеров K и NK - PullRequest
0 голосов
/ 13 июня 2018

У меня есть список целых чисел, ключей, и я хочу разделить его на два списка ListOfReqKeys и ListOfRewKeys, как описано в заголовке.

Keys =[1, 1, 3, 9, 1, 15]
ReqK = 3
ListOfReqKeys = [1, 1, 3], ListOfRewKeys = [9, 1, 15]

Длина этих двух списков известна, это ReqK иRewK соответственно.

append(ListOfReqKeys, ListOfRewKeys, Keys),
atom_codes(At, ListOfReqKeys),
atom_number(At, ReqK).

Есть ли встроенный предикат или более быстрый способ сделать это?

1 Ответ

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

Нет разделения.Существует только добавление.

Разделение списка длины N на префикс длины K обязательно оставит суффикс длины N-K - нет необходимости измерять / create 1 это так.Это будет просто будет , так что по построению.

Таким образом,

split( K, L, A, B):-
   append( A, B, L),
   length(A, K).

Просто, не правда ли.Но подождите, это может быть улучшено?Без добавления или удаления чего-либо из этого?Что еще мы можем с этим сделать?

1 подсказка: вы когда-нибудь пробовали length(X, 2)?length(X, N)

...