リストは順序づけられた要素の並びで、その長さは任意です。リストの要素(引数)は、アトムや複合項、その他のどんな項であってもよく、他のリストも含みます。
リストは空リストか、あるいは関数子がドット'.'で2つの引数、先頭と末尾を持つ複合項です。リストの末尾は、/ClocMel/のリストです。リストの末尾は、通常は空リストによって示され、以下のように'[]'で表します。
'.'(d,[])
リストに対して通常行なう操作は、それを先頭と末尾に分割することなので、IF/Prologには"先頭としてX、末尾としてYを持つリスト"を表現するための特別な表記法があります。これは[X|Y]と表され、XとYを分けている記号は縦棒です。このパタ−ンでは、以下に示すようにリストの先頭をXの値とし、リストの末尾をYの値とします。
?- [user]. | b([a,b,c]). | b([11]). | b([early, to, bed, and, [early, to, rise]]). | end_of_file. yes ?- b([X|Y]). X = a Y = [b,c] ; X = 11 Y = [ ]; X = early Y = [to, bed, and, [early, to, rise]] yes ?- _
ダブルクオ−ト"..."で囲まれている文字列は、以下のようにASCII文字コ−ドのリストであることを示しています。
?- "abc" == [97,98,99]. yes
以下のようなリストを扱う組み込み述語があります。
#append(?リスト1,?リスト2,?リスト3) リスト3は、リスト1にリスト2をつけ加えたものです。
concat(+コンカットリスト,-アトム) concat(+コンカットリスト,+分離記号,-アトム) 「アトム」は、「コンカットリスト」の要素の結合したもので、concat/3では各要素の間に「分離記号」が入ります。
decompcons(+文字列_式,-文字リスト) 「文字リスト」は、「文字列_式」の文字のリストです。 # member(?要素,?リスト) 要素が「リスト」の「要素」の場合に成功します。 sort(+非順リスト,-順リスト) 項のリストをソ−トします。 reverse(+入力リスト,+出力リスト) 与えられたリストを逆順にします。 length(+リスト,-長さ) リストの長さを計算します。
以下の述語は、ユ−ザによって定義されなければなりません。
perm(?リスト,?置換リスト) リストを置換によって並び換えます。最初の結果は、元のリストになります。それ以後は順に1要素ずつ置換されます。 perm([],[]). perm(L,[H|T]) :- delete(H,L,L1), perm(L1,T).
delete(?要素,?リスト,?新リスト) 「リスト」のひとつの「要素」を削除します。 delete(X,[X|T],T). delete(X,[H|T],[H|T1]) :- delete(X,T,T1).
| scroll to top |
|