2-Мысал. Пролог-Д жүйесiнде қабырғаларының ұзындығы a және b болатын табаны төртбұрыш және биiктiгi һ болатын параллепипедтiң көлемiн есептейтiн программа құру қажет. Параллелепипедтiң көлемiн келесi формуламен анықтауға болады: Vпар=a*b*h. Егер параллелпипедтiң көлемiн анықтау қажет болса, онда қырларының ұзындығы a және b, биiктiгi һ және көлем шамасы болатын төрт аргументтен тұратын предикат болу қажет. Предикаттың аты осыған негiзделген болу қажет, яғни объем аты критерийдi толығымен қанағаттандырады:
УМНОЖЕНИЕ(X,Y,Z)<-УМНОЖЕНИЕ(X,Y,0,Z);
объем(a,b,h,V)<-УМНОЖЕНИЕ(a,b,S), УМНОЖЕНИЕ (S, h, V);
Осы жазуды қолдана отырып, берiлгендерге байланысты тек қана көлемiн анықтап қана қоймай, сонымен қатар кез-келген қыры мен биiктiгiн анықтауға болады. Басқа альтернативтi түрде көлемнiң формуласын басқаша мына түрде жазуға болады:
Vпар=Sосн*h.
Бұл бiлiм қорын өз бетiнше жазу қажет. Ол үшiн бiлiм қорына келесi сұрақты қоюға болады:
?объем(10,20,5,V);
Пролог-Д жүйесiнiң жауабы: V=200.
Арифметикалық предикатпен басқа да екi БОЛЬШЕ және НЕ екi предикат қолданылады. БОЛЬШЕ(Арг1,Арг2) предикаты екi бүтiн немесе айнымалыларды теңестiру үшiн сипатталған. Ол бүтiн немесе нақты бүтiн айнымалыдан тұратын екi аргументтен тұрады. Екi аргументте дәл сол кезде анықталған болу керек. Егер осы қажеттiлiк орындалмаса, онда “Функция орындалмайды“ деген қате көрсетiледi. Предикат орындалады, егер Арг1 > Арг2, ал басқаша орындалмайды. БОЛЬШЕ предикаты бiреу болғанымен, оны сандық ақпаратты теңестiруде барлық предикаттар үшiн сипаттау тиiмдi: тең-РАВНО; кiшi- МЕНЬШЕ; кiшi не тең-МИР және басқа да. Бұл төменде көрсетiлген бiлiм қорын көрсетедi:
РАВНО(X,X);
МЕНЬШЕ(X,Y)<-БОЛЬШЕ(Y,X);
МИР(X,Y)<-НЕ(БОЛЬШЕ(X,Y);
Соңғы сөйлемде НЕ предикаты қолданған, оның синтаксисi НЕ(Арг1). Бұл тұрақты предикат бiр ғана аргументтен тұрады, ол әрқашанда предикат болу қажет. НЕ предикаты тек предикат-аргументi орындалмағанда ғана орындалады.
3-мысал. Хевисайд функциясын анықтайтын Пролог-Д тiлiнде программа құрыңыз. Хевисайд формуласы:
0, если x<0;
h(x) = 0, если x=0;
Хевисайд функциясын есептеу үшiн бiлiм қоры меньше және тең деген предикаттарын қолданатын, Хевисайд аталатын предикат құрамыз. Бұл предикат екi аргументтен, бiрiншi аргумент функция, ал екiншi оның мәнi. Хевисайд предикаты барлық х үшiн 2 альтернативтi жазулар арқылы сипатталады.
МИР(X,Y)<-НЕ(БОЛЬШЕ(X,Y);
ХЕВИСАЙД(X,0)<-МИР(X,0);
ХЕВИСАЙД(X,1)<-БОЛЬШЕ(X,0);
Бұл бiлiм қорына кез-келген сұрақтар қоюға болады.
?ХЕВИСАЙД(20,X);
Пролог-Д жүйесiнiң жауабы: x=1.
Тапсырмалар
Пролог-Д тiлiнде геометриялық фигуралар: трапеция, үшбұрыш, параллелограмм аудандарын есептейтiн программа құрыңыз.
Пролог-Д жүйсiнде тiзбектей және параллель қосылатын екi байланысқан резисторлармен, конденсаторларды құрыңыз.
Дөңгелектiң ауданын және шеңбер ұзындығын есептейтiн есептеу құрыңыз. Бұл шамалардың есептеулерi қаншалықты дәл? Шеңбер ұзындығы арқылы дөңгелектiң радиусын есептеуге бола ма?
Келесi функциямен анықталатын Пролог-Д тiлiнде бiлiм қорын құрыңыз:
x, если x <-1,
F(x)= x+1, если -1x, если x >1.
5. Пролог-Д тiлiнде программа берiлген:
ff(xx);
ff(x)<-pp(x),ff(x);
көп шешiмнiң iшiнен жүйе бiр ғана шешiмдi табатын рр(х) предикаты қандай болу қажет?
Достарыңызбен бөлісу: |