2012-10-27 53 views
2

有沒有辦法使用接收另一個函數作爲參數的findall函數?使用find_all接收函數的方法?

我的問題是一樣的東西

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

(然後應該出現一些類型的遞歸)

其中adjacc函數返回從列表中點數的所有相鄰位置(有幾個點在這個列表中,並且我想要這些點的所有相鄰者的聯合)。

有沒有辦法?謝謝!

回答

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] 

再見