как использовать maplist и предикаты - PullRequest
0 голосов
/ 03 мая 2020

Если предикат имеет 2 аргумента, его можно назвать так:

maplist(member(#),List_of_lists,New).

Но что, если бы я хотел назвать его наоборот, перебирая список значений, чтобы увидеть, есть ли какие-либо из них? принадлежал к списку, который у меня уже был? Как сделать так, чтобы элементы списка были не последним аргументом функции, а первым, вторым или третьим? .

pal_pos_esps(Letras, Pals_Possiveis, Espacos):-
   maplist(palavras_possiveis_esp(Letras,Espacos,_,Pals_Possiveis),Espacos,Pals_Possiveis).

Espacos - это список списков: я хочу назвать каждый из этих списков третьим аргументом предиката. Как я могу это сделать?

1 Ответ

1 голос
/ 03 мая 2020

Как сделать так, чтобы элементы списка были не последним аргументом функции, а первым, вторым или третьим?

Вы можете использовать лямбда-конструкция В SWi-Prolog есть либо библиотека (yall), либо библиотека (лямбда) (доступная после установки ее с ?- pack_install(lambda).).

Давайте рассмотрим базовое использование c, выделение матрицы NxN, для которой требуется поменять местами аргументы длины / 2.

С автозагрузкой библиотеки (yall):

matrix(N,M) :- length(M,N), maplist([Row]>>length(Row,N),M).

Использование библиотеки (лямбда):

:- use_module(library(lambda)).
matrix(N,M) :- length(M,N), maplist(\Row^length(Row,N),M).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...