如果一个谓词有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的列表。我想调用这些列表中的每一个作为谓词的第三个参数。我如何才能做到这一点?
我怎样才能使列表中的元素不是函数的最后一个参数,而是第一个或第二个或第三个?
你可以使用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).