domains
Z, V=read
predicates
koef 1 (Z,Z,Z)
koef 1 (V,V,V)
clauses
koef 1 (A,B,C):- D=B*B-4*A*C
koef 2 (_,_,D):- D0, write (“шешімі жоқ:”).
koef 2 (A,B,D):-D=0, X=B/(2*A), write (“X=X:”).
koef 2 (A,B,D):-D0,
X1=(-B+sqrt (D))/(2*A), X2=(-B- sqrt(D))/(2*A),nl, write(“X1=”, X1,”X2=”,
X2:”), nl.
Цель:А2, В-5, С3, ДВ*В4*А*С, koef 2 (А,В,Д) Х11.5, Х21:
А2, В-5, С3, Д1.
Мысал: Екі бүтін санның ең үлкенін табу керек.
domains
X,Y,Z=integer
predicates
max (X,Y,X)
max (X,Y,Y)
Clouses
max (X,Y,X): -XY, X=Z
max (X,Y,Z):-XY, X=Z
Цель: max (5,3,Z) Z=5.
Мысал: n! мәнін есептеу керек (n=5).
Рекурсиялы түрде n! мәнін табу мынадай термдерді ретімен табу арқылы орындалатыны математика курсынан белгілі: 1) 1*1, 2) 12, 3) 23,, n) (n- 1)!*n. Оның рекурсия болу себебі: n- термді табу үшін оның алдындағы n-1 термдерді тауып, нәтижесі n-ге көбейтідеді.
Тізбектің n-мүшесі болатын фактіні арқылы белгілеп, fakt (N,Z) мәнін рекурсиялы есептеу программасын Прологта мынадай түрде жазуға болады:
domains
N, Z = integer
predicates
fakt(N,Z)
clauses
fakt (1, 1). /*
fakt (N, Z) :- Algash = N-1
fakt (Algash, T), Z=T*N.
Goal fakt (5,Z), write(“5!=”, Z).
Тақырып №8: Турбо Пролог программалау тілі. Программа құрылымы. Стандарт предикаттар.
Тұрақтылар. Арифметикалық және логикалық амалдар.
Пролог декларативтік тіл. Декларативті тілмен жазылған программа, программаның мақсатын анықтайтын өзара байланысты сипаттаманың логикалық жиынын көрсетеді. Прологта қолданылатын өзара байланысты логикалық өрнектердің белгілеулері предикаттар логикасынан шығады. Мысалы, Бейсик, Паскаль, Си тілдері процедуралық тілдер. Мұнда программаның жүзеге асырылуына қажет қадамдарды анықтайтын командалар болады. Пролог программа құрушы және программисті әрекеттер қадамдары түріндегі программа құрудан босатады. Яғни, Пролог обьектілер мен олардың арасындағы қатыстардың міндеттерін анықтайтын программалу тілі. Пролог программасы 4 программалық бөлімнен тұрады:
Clauses (сөйлемдер);
predicates (предикаттар);
domains (домендер);
goal (мақсат).
Clauses бөлімінде Пролог программасының фактілер мен ержелері жазылады. Программада обьектілер (objects) мен қатынастар (relations) сипатталады, одан кенйін осы қатынастар арқылы ақиқат болатын ережелерді (rules) сипаттайды.
Мысалы,
Roditel (aisha, arman).
Roditel (tlemis, arman).
Roditel (tlemis, aigul).
Roditel (tlemis, arman).
Roditel (arman, ainur).
Roditel (kamshat, ainur).
Roditel (ainur, jhanna).
мұндағы Roditel (tlemis, arman) – факт, Roditel қатынас аты, tlemis, arman оның аргументтері.
Пролог тілінде бірқатар фактілерді бере отырып, олардың арасындағы қатыстарға сәйкес сұрақтар бере аламыз. Бұл Пролог жүйесінің сұранысы (Query) деп аталады. Мысалы, «Арман Айшаны жақсы көреді ме?» деген сұрақ Пролог тілінде:
Like (arman, aisha)
Жүйенің жауабы программадағы фактілердің бар болуы не болмауына орай «иә», «жоқ» түрінде болады. Арман нені (кімді) жақсы көреді сұрағы мына түрде жазылады:
Like (arman, What)
Мұнда Арман кіші әріппен жазылған себебі факті, нақты шама, обьект, ал what – айнымалы. Айнымалылар әрқашан бас әріппен басталады немесе астын сызу (_what) символдан басталады.
Predicates (предикаттар) бөлімі предикаттар мен домендерді және олардың аргументін хабарлау мақсатында қолданылады. Пролог тіліне кірістірілген стандарт предикаттарды хабарлап, сипаттау қажет емес. Егер өз предикаттарын енгізу қажет болса, онда оны осы бөлімде міндетті түрде сипаттау керек, кері жағдайда Пролог оларды түсінбейді. Предикатты хабарлау осы предикат атымен басталады. Содан соң жай жақша ішінде предикаттар аргументінің 0 не одан да көп домендері (типтері) орналасады. Предикат атауына пробел, «-», «*» және басқа да символдық алмастыруларды қолдануға болмайды. Предикат аргументтері Пролог тілінде белгілі домендерге тиісті болады. Бұл доменде не стандартты домен, не пайдаланушы домендер бөлімінде хабарланған домендік типтің біреуі болуы мүмкін. Мысалы,
Predicates – бөлімі
My predicates (symbol, integer)
Егер бұл предикатты
predicates
my_ predicates
(name, number)
хабарлайтын болсақ, онда name, number аргументтерінің symbol, integer доменге тиісті екенін хабарлау керек.Ол доменде хабарланады:
domains
name=symbol
number=integer
predicates
my_predicates
(name, number)
Құрамдас предикаттар. Енгізу предикаты
readln(stringvariable) – жолды, қатаржы оқу;
readln(intgvariable) – бүтін санды оқу;
readchar(charvariable) – символды оқу;
file_str(FileName, Stringvariable) – файлдың ішінен жолдық қатарды оқу;
write(variable, constant) – шығару предткаты. Ағымдағы құрылылымдағы қатарды көрсетеді не шығарады;
n1 – жолдық қатарды шығару
Файлдармен жұмыс ұйымдастыруға арналған пердикаттары
Openread(SymbolicFileName, FileName) – файлды оқу үшін ашу;
Openwrite(SymbolicFileName, FileName) – жазу үшін ашу;
Openappend(SymbolicFileName, FileName) – файлды қосу үшін ашу;
Filemode(SymbolicFileName, FileMode) – файл типін оқу немесе өзгерту;
Closefile (SymbolicFileName) – файлды жабу.
Арифметикалық операциялар: +, -, /, mod, div;
Қатынасы операциялар: >, <, =, >=, <=, <>, ><;
Логикалық операциялар: not – терістеу, and, or, cos, sin, tan, arctan, ln, exp, sqrt, round, abc, trunc
Domains (домендер) бөлімі Пролог тілінің стандартты домендері болып табылмайтын пайдаланушы қолданатын барлық домендерді қолдану үшін пайдаланылады. Стандартты домендерді сипаттау қажет етілмейді. Visual Пролог тілінде предикат аргументтерінің барлық домендерін хабарлау керек. Домендер деректердің әр түрлі түрлеріне, кері жағдайда абсолютті түрде бірдей болатын әр түрлі атауларды беруге мүмкіндік береді. Visual Пролог программаларында қатынастағы объектілер стандартты, сондай-ақ пайдаланушы құрған домендерге де тиісті бола алады. Domains (домендер) бөлімі екі пайдалы мақсатқа қызмет етеді. Біріншіден, бұл домендер қолданыста бар стандартты домендерге ұқсас болса да, пайдаланушы бұл домендерге мағыналық атаулар бере алады. Екіншіден, арнайы домендерді хабарлау стандартты доменде жоқ деректер құрылымын сипаттау үшін қолданылады.
Егер predicates бөлімінің жекелеген бөліктерінің айқындығын білу керек болса, жаңа домен жазу ыңғайлы.
Мысал,
Domains
proizved, sum=integer
Predicates
Add_em_up (sum, sum, sum)
Multiply_em(proizved, proizved)
Clauses
Add_em_up (x,y,Sum)
Sum=x+y.
Multiply_em(x,y, Proizved):-
Proizved=x*y.
Бұл программада екі операция орындалады: қосу және көбейту. Мына мақсатты енгізсек:
Add_em_up (32,54,Sum)
нәтижесі мынадай болады: Sum=86.
Егер екі санның көбейтіндісін алу қажет болса, төмендегі мақсатты енгізейік:
Multiply_em(13,31, Proizved)
Жауап: Proizved=403 түрінде болады.
Негізгі стандартты домендер
Достарыңызбен бөлісу: |