Жұмыстың орындалу реті мен мазмұнын әдістемелік сипаттау
Тізімдер – Пролог жиі қолданылатын құрылымдардың бірі. Тізімді жазу кезінде оны квадрат жақшаға алып жазады, ам оның элементтері үтірмен ажыратылады, мысалы,
[піл, жылқы, маймыл, ит]
бұл тізім төрт атомнан тұрады – піл, жылқы, маймыл, ит.
Прологтың кез келген термы тізімнің элементі болуы мүмкін, яғни, атомдар, сандар, айнымалылар және құрама термдер.
Бос тізім [ ] түрінде жазылады.
Төменде күрделі құрылымды тізім келтірілген:
[піл, [ ], X, атаана(Х, том), [a,b,c], f(22)]
Бос емес тізімнің бірінші элементі басы деп аталады, ал қалған бөлігі аяғы (хвост).
Бір ғана элементтен тұратын тізімнің басы сол жалғыз ғана элемент болып табылады, ал аяғы – бос тізім. [H|T] белгілеуі Н басы және Т аяғы бар тізімді көрсету үшін қолданылады.
Егер | символы тізімдегі соңғы термінің алында орналасқан болса, онда бұл соңғы терм басқа тізімді анықтайды.
Келесі мысалда, 1 – тізімнің басы, ал [2, 3, 4, 5] – аяғы.
?- [1, 2, 3, 4, 5] = [Head | Tail].
Head = 1
Tail = [2, 3, 4, 5]
Yes
Мұндағы, Head и Tail – тек айнымалылардың аты. Бұдан басқа айнымалыларды да қолдануға болады, нәтижесі сәтті аяқталады.
Мысал
Егер бізге тізімнің 2-ші элементі қажет болса, онда басы және тізім үшін анонимді айнымалыларды қолданамыз:
?- [піл, жылқы, есек, ит] = [_, X | _ ].
X = жылқы
Yes
Тізімді өңдеуге бірқатар процедураларды қолданайық.
Мысал:
Сандық тізімнің барлық элементтердің қосындысын есептейтін предикатты жазайық.
тізім_қосындысы([],0).
тізім_қосындысы([H|T],S):- number(H), тізім_қосындысы(T,S1), S is S1+H.
Мысал
Орын/3 предикаты сәтті, егер екінші аргумент болып табылатын тізімнің кез келген орнына бірінші элементті қою арқылы алынған 3-ші аргумент тізім болса.
орын(E, L, [E|L]).
орын(E, [H|L], [H|Y]):- орын(E, L,Y).
Бұл предикатты қолданатын кейбір сұраныс мысалдары:
?- орын(1,[2,3],X).
X=[1,2,3];
X=[2,1,3];
X=[2,3,1];
No
?- орын(1,L,[2,1,3]).
L=[2,3];
No
?- орын(X,[2,3],[2,1,3]).
X=1;
No
Достарыңызбен бөлісу: |