2

p/1たとえば、次のように述語を定義します。

p(2).
p(3).
p(5).
p(7).

バックトラック順序で(上記の場合 - )p_list/1のすべての可能な値のリストに当てはまる述語を定義するにはどうすればよいですか?p/1[2, 3, 5, 7]

値の単純な列挙は、保守がより困難になるため、受け入れられません。さらに、値は暗黙的に定義できます。

4

2 に答える 2

3

bagof(X, p(X), L)L = [2,3,5,7] を与えるものを使用できます。「暗黙的に定義された」とはどういう意味ですか? 例を挙げていただけますか。

于 2012-11-17T15:33:25.043 に答える
2

maplist /2 はチェックに適していますが、findall /3 は Prolog の基本的なリスト コンストラクターです。

試す

?- findall(X, p(X), L), maplist(p, L).
于 2012-11-17T18:45:11.467 に答える