1

findallパラメータとして別の関数を受け取る関数を使用する方法はありますか?

私の問題は次のようなものです

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

(そして、ある種の再帰が来るはずです)

関数は、リストからポイントのすべての隣接位置を返す必要がありadjaccます(このリストにはいくつかのポイントがあり、これらのポイントのすべての隣接位置の結合が必要です)。

方法はありますか?ありがとうございました!

4

1 に答える 1

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]

さよなら

于 2013-03-31T16:49:16.430 に答える