0

わかりました、これら2つの事実があるとしましょう:

data1([50, 20, 15, 20, 25, 20, 84])。data2([50, 30, 15, 5, 10, 18, 60])。

それらのファクトの一部として定義されたリストの N 番目の要素が何らかの値であるかどうかを尋ねるクエリを作成したいと考えています。

query ([L1|Tail]) :- L1 は50です.

4

2 に答える 2

1

nth1 /3 を使用して、インデックスでリスト要素にアクセスできます。

として宣言されていることに注意してくださいnth1(?Index, ?List, ?Elem)。パラメータのクエスチョン マークは、その引数バインドされていない可能性があることを示します。つまり、nth1/3 はいくつかの方法で機能します。

インデックスの要素を取得するには (1 ベース):

?- data1(L), nth1(2, L, V).
L = [50, 20, 15, 20, 25, 20, 84],
V = 20.

または、要素が存在する位置を検索するには:

?- data1(L), nth1(P, L, 20).
L = [50, 20, 15, 20, 25, 20, 84],
P = 2 ;
L = [50, 20, 15, 20, 25, 20, 84],
P = 4 ;
L = [50, 20, 15, 20, 25, 20, 84],
P = 6 ;
false.

関数ではなく関係がある Prolog モデルに忠実に、可能な限り一般的に機能します。

nth1/3 リストの要素とインデックスの関係です。

于 2013-06-13T22:16:39.573 に答える