如何使用maplist和谓词

问题描述 投票:0回答:1

如果一个谓词有2个参数,可以这样调用。

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

但是如果我想反过来调用它呢? 遍历一个值的列表,看看它们中是否有属于我已经有的列表的?我怎样才能让列表中的元素不是函数的最后一个参数,而是第一个或第二个或第三个?

EDIT: 上面的代码是一个例子,而不是我真正想要的。

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

Espacos是一个list的列表。我想调用这些列表中的每一个作为谓词的第三个参数。我如何才能做到这一点?

prolog swi-prolog
1个回答
1
投票

我怎样才能使列表中的元素不是函数的最后一个参数,而是第一个或第二个或第三个?

你可以使用lambda结构。在 SWi-Prolog 中,有 library(yall) 或 library(lambda) (在你安装后用 ?- pack_install(lambda).).

我们来看一个基本的用法,分配一个矩阵NxN,需要交换参数顺序,长度为2。

用自动加载的library(yall)。

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

使用 library(lambda):

:- use_module(library(lambda)).
matrix(N,M) :- length(M,N), maplist(\Row^length(Row,N),M).
© www.soinside.com 2019 - 2024. All rights reserved.