Существует Pure Prolog Prolog mashinasining asosiy mexanizmlarini o'rganish uchun qulay bo'lgan tilning semantik asosi sifatida Pure Prolog mavjud Prolog-.
Iterativ algoritmlarni rekursiv funktsiyalar sifatida dasturlash mumkin.
Prolog-mashina mavjud munosabatlar tizimidagi so'rovga javob izlaydi va agar topsa, uni xabar qiladi.
Опубликованы алгоритмы мета-Pure Prolog tili uchun meta-tarjimon algoritmlari nashr Pure Prolog, etilgan bo'lib, uning o'z-o'zidan qo'llanilishi va kengayishini ko'rsatadi.
Ta'rif
|
Eslatma
|
|
faktorial (N, F)
|
funktsiya ikkita tugma bilan amalga oshiriladi:
|
|
faktorial (0, 1)
|
– 0 dan 1 qiymati;
|
|
faktorial (x+1, F) ← F:
|
\ u003d- qiymatlar o'rtasidagi munosabatlar deklaratsiyasi
|
|
faktorial (x, y) * (x + 1)qiymatlari o'rtasidagi munosabatlar deklaratsiyasi
|
. qo'shni raqamlar
|
|
|
|
|
|
|
Пример34-misol.
|
Faktorialni hisoblash
|
|
|
|
|
|
|
|
|
|
ta'rif
|
|
|
|
Eslatma
|
|
qismi([], _, [], []).
|
|
|
|
Разбиение на участки
|
|
partition([X|Xs], Pivot, Smalls, Bigs) :-
|
|
|
(
|
X @< Pivot ->
|
|
|
|
|
|
|
Smalls = [X|Rest],
|
|
|
|
|
|
|
partition(Xs, Pivot, Rest, Bigs)
|
|
|
|
;
|
Bigs = [X|Rest],
|
|
|
|
|
|
|
partition(Xs, Pivot, Smalls, Rest)
|
|
|
|
).
|
|
|
|
|
QuickSort saralashni
|
|
|
|
|
|
|
|
ishga tushirish ([]) -- > [].
|
|
|
|
|
|
quicksort([X|Xs]) -->
|
|
|
|
|
|
{ partition(Xs, X, Smaller, Bigger) },
|
|
|
|
quicksort(Smaller), [X], quicksort(Bigger).
|
|
|
|
Пример35-misol. Tez saralash
|
|
|
|
|
|
|
|
|
|
ta'rif
|
|
|
|
eslatma
|
|
maplist (_P, [], []).
|
|
Ko'rsatish uchun hech narsa yo'q
|
|
maplist(P, [X1|X1s], [X2|X2s]) :-
|
|
Boshlanishini ajratib ko'rsatish mumkin
|
|
|
siz Call(P, X1, X2) boshlanishini
|
|
,birinchi
|
|
|
maplist(P, X1s, X2s) dan qo'ng'iroqni tanlashingiz mumkin.
|
|
Qolganlarini ko'rsatish
|
|
|
|
|
|
|
|
3-misol6. Displey
|
|
|
|
|
|
|
|
|
|
ta'rifi
|
|
|
|
Eslatma
|
|
|
mi1(haqiqiy) Eslatma.
|
|
|
|
|
|
|
mi1((A,B)) :-
|
|
|
|
|
|
|
mi1(a),
|
|
|
variantlarning tengligi.
|
|
|
mi1(B).
|
|
|
|
|
mi1 (Goal): -
|
|
|
|
|
|
|
Goal \ \ = true,
|
|
|
|
|
|
|
Goal \ \ \ = (_,_),
|
|
|
Maqsadga erishish
|
|
|
clause(Goal, Body),
|
|
|
|
|
mi1(Body) maqsadiga erishish.
|
|
|
|
|
|
|
|
|
|
|
|
37-misol. Расширяемый скелет Prologtarjimonining kengaytiriladigan skeleti.
Ta'rif
|
|
Eslatma
|
ishonchli Eslatma(haqiqiy,_): -!.
|
|
Isbot
|
|
|
|
provable((G1,G2), Defs) :- !,
|
Variantlar.
|
provable(G1, Defs),
|
provable(G2, Defs).
|
|
provable (BI, _) :-
|
o'rnatilgan xususiyatlar.
|
predicate_property(BI, built_in),
|
!,
|
|
call(BI).
|
Maqsad sari harakat.
|
provable(Goal, Defs) :-
|
member(Def, Defs),
|
|
copy_term(Def, Goal-Body),
|
|
provable(Body, Defs).
|
|
38-misol. Maqsadning chiqishi. Tarjimonni umumlashtirish
определении функцииprovable(Goal, Defs) funktsiyasining ta'rifi, Agar Goal выводима по отношению к DEFSmaqsadi Bosh tanasi shaklida klauzlar ro'yxati bilan ifodalangan DEFSGA nisbatan chiqarilsa, haqiqat Head-Bodyishlab chiqiladi. Bektrekingni to'liq amalga oshirish natijalarning deterministik to'planishini talab qiladi. Alohida alternativa alternativalar ro'yxati sifatida ishlatilishi mumkin bo'lgan maqsadlar va filiallar ro'yxati sifatida taqdim etiladi.
Ta'rif
|
Eslatma
|
mi_backtrack_([[]-G|_], G).
|
Boshqa variantlar yo'q.
|
mi_backtrack_ (Alts0, G) :-
|
boshqa variantlarni saralash.
|
resstep_(Alts0, Alts1),
|
mi_backtrack_(Alts1, G).
|
|
39-misol. Orqa trek. Muvaffaqiyatsiz klauzani tanlash bilan qaytish
Agar biron bir maqsad isbotlanmagan bo'lsa, unda ichki navbatdan echim tanlanadi. Ikkinchi klauza hisoblashni tavsiflaydi.
Tilning yuqori darajadagi funktsiyalar (HiLog, λProlog) va modullar bilan ishlashga moslashtirilgan versiyalari mavjud) .
Стандарт ISO Prolog Iso standarti kompilyatsiya, quyruq rekursiyasi, atamalarni indeksatsiya qilish, xeshlash, jadvallarni qayta ishlashni qo'llab-quvvatlaydi.
Yaponiya kompyuter tizimlari loyihasi doirasida dori vositalarining yorqin reklamasi 5-
birinchi avlod elementlar bazasi rivojlanib borgan sari pasayib ketdi. Ilmiy tadqiqotlar va ta'limda tildan keng foydalanilganiga qaramay, mantiqiy dasturlash hali kompyuter sanoatiga katta hissa qo'sha olmadi. Buning sababi shundaki, har qanday ishlab chiqarish etarlicha o'rganilgan vazifalarni afzal ko'radi va LP ning kuchli tomoni aniqlanmagan vazifalar sinfida namoyon bo'ladi.
Yaxshi tashkil etilgan tuzilmalar va tartibli ma'lumotlar bo'yicha aniq algoritm shaklida muammoni aniq hal qilish aniq, puxta ish, vazifalar sinfini va ularni hal qilish talablarini sinchkovlik bilan va puxta o'rganish natijasidir, deb ishoniladi. Bunday hollarda samarali va ishonchli dasturlar tabiiy mukofotdir. Biroq, ba'zi hollarda, vazifalarning tabiati variantlardan birini bepultanlashni talab qiladi-to'plamning ixtiyoriy elementini tanlash, ma'lum naqshlar bo'lmagan taqdirda voqea ehtimoli, o'yin muhiti va stsenariylarida psevdo-tasodifiy o'zgarishlar, xotirada ma'lumotlar blokini joylashtirish uchun birinchi mos manzilni qidirish, hujjatlar va badiiy matnlarni tarjima qilishda lingvistik tahlil va boshqalar. variantlar tengdir, shuning uchun ularni disk raskadrovka va qayta ishlash texnologiyasi bunday variantlarni hisoblash uchun rasmiy ravishda teng imkoniyatni ta'minlashi kerak (shunga o'xshash muammo tarmoqlarda xizmatni tashkil qilish va operatsion tizimlar tomonidan vazifalarni bajarish uchun xosdir. Tarmoqning barcha tugunlari va vazifalariga, agar ular bilan ishlashga rasmiy taqiq bo'lmasa, erishish mumkin bo'lishi kerak.).
|