使用find_all接收函数的方法?

时间:2012-10-27 15:00:53

标签: prolog

有没有办法使用findall函数接收另一个函数作为参数?

我的问题就像是

enemy_area(Enemys,[X|Tail],Area) :-
   findall(A,(member(A,Enemys),adjacc(X,A)),Area).

(然后应该来某种类型的递归)

其中adjacc函数应返回List中Points的所有相邻位置(此列表中有几个点,我想要这些点的所有邻接的并集)。

有办法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

如果你想要一个联盟,你可以在findall / 3之后尝试sort / 2。

这是一个例子:

adjacc(a,b).
adjacc(a,c).
adjacc(b,c).
adjacc(b,d).

现在,如果你尝试:

?- findall(Y, (member(X,[a,b]),adjacc(X,Y)), L), sort(L, S).

你应该得到:

L = [b,c,c,d],
S = [b,c,d]

再见