わかりました、これら2つの事実があるとしましょう:
data1([50, 20, 15, 20, 25, 20, 84])。data2([50, 30, 15, 5, 10, 18, 60])。
それらのファクトの一部として定義されたリストの N 番目の要素が何らかの値であるかどうかを尋ねるクエリを作成したいと考えています。
query ([L1|Tail]) :- L1 は50です.
わかりました、これら2つの事実があるとしましょう:
data1([50, 20, 15, 20, 25, 20, 84])。data2([50, 30, 15, 5, 10, 18, 60])。
それらのファクトの一部として定義されたリストの N 番目の要素が何らかの値であるかどうかを尋ねるクエリを作成したいと考えています。
query ([L1|Tail]) :- L1 は50です.
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 リストの要素とインデックスの関係です。