Укажите длину списка в качестве цели в Прологе - PullRequest
0 голосов
/ 10 октября 2018

Я хочу использовать встроенный предикат include / 3, чтобы получить все списки в списке списков, длина которых превышает N.

Я пробовал это:

% S is the size I'm checking for
include((length(_, N), N = S), List1, List2).

но это не сработало.Я не уверен, как правильно указать цель длины.Я особенно не уверен в том, что поставить вместо «_».

1 Ответ

0 голосов
/ 10 октября 2018

Более простой способ: предоставить предикат с соответствующими аргументами (скажем, схема адаптер):

length_list(Len,List) :- length(List,Len).

, а затем

...,
include(length_list(S), List1, List2).

В зависимости отсистема, которую вы используете, библиотеки yall и lambda - это хороший выбор, который стоит изучить.

Использование yall:

?- L1=[[a],[a,b]],S=2,include({S}/[L]>>length(L,S),L1,R).
L1 = [[a], [a, b]],
S = 2,
R = [[a, b]].
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...