Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пролог.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
498.52 Кб
Скачать

2.7. Пролог – бағдарламаның декларативті мағынасы (мәні)

 

           Сөйлемді қарастырайық:

            P: - Q , R 7

             Декларативті интерпретация:

  1. Р – шындық, егер Q, R шындық

  2. Q мен R- ден P шығады

           Процедуралық интерпретация:

  1. Р есебін шешу үшін, Q ішкі есебін шеш, ал кейін R ішкі есебін шешуге көш.

  2. Р – ға жету үшін, алдымен Q – ге жет, содан кейін R – ге жет.

          Мақсаттар арасындағы үтір мақсаттар конъюнкциясын білдіреді: олардың барлығы шындық болуы тиіс. Бірақ – та Прологта мақсаттар дизъюнкциясы да болуы мүмкін: кем дегенде мақсаттардың біреуі шындық болуы тиіс.

          Дизъюнкция нүктелі үтірмен белгіленеді. Мыс:

  1. Р: – Q; R немесе :

  2. P: - Q.

      P: - R.

  1. < = > 2).

          Үтір мақсаттарды нүктелі үтірге қарағанда күштірек байланыстырады. Осылайша, сөйлем:

             P: - Q, R; S,?, V.

Былайша түсіндіріледі: 1)  P: - (Q, R); (S, T, V). немесе

                         2)    P: - Q, R.

                                 P: - S, T, V.

2.8. Пролог – бағдарламаның құрылымы

 

Бағдарлама құрылысы келесі түрге ие:

/ *  бірнеше жолдарда коментарии  */

%  бір жолда комментарии

CONCTANCTS

% Бұл бөлімде константалар сипатталады.

DOMAINS

% Бұл бөлімде айнымалылар сипатталады.

PREDICATES

% Бұл бөлімде предикаттар анықталады.

CLAUSES

% Бұл бөлімде фактілер мен ережелер анықталады.

DATABASES

% Бұл бөлімде мәліметтердің динамикалық базасының предикаттары анықталады.

GOAL

% Бұл бөлімде сұрақтар, сұраныстар (ішкі) анықталады.

          Домендер қарапайым, құрылымды және стандарт емес болып бөлінеді. Стандартты мәндерге жататындар: symbol, chat, integer, real, string, file.

          Symbol – мәліметтердің символды типі, жазбаның екі формасын иеленеді: 1. Бөлек жолдан басталатын әріптер, цифрлар, сызу белгілерінің тізбегі. 2. Қос тырнақшаларға алынған символдар қатары.

          Chat – бір символ.

          integer –  - 32768 … 32768  диапазонындағы бүтін сандар.

          real – кәдімгі және экспоненциалдық жазба формасында келетін нақты сан.

          string – символдар жолы, екі рет жақшаға алынған кез-келген символдар қатары.

          file – файлдық айнымалы, оның мәні MS DOS – та файлдарға ат беру ережесі бойынша анықталады. Домендерді сипаттау (жариялау) мысалдары:

               DOMAINS

               a = integer

               b = symbol

          Домендердің стандартты типінен басқа, қарапайым және күрделі объектерден тұратын домендер құрылымын қолдануға болады. Бір жарнамада (жариялауда) араларын үтір арқылы бөліп немесе қызметші сөз or арқылы бөліп бірнеше құрылымдарды сипаттауға болады: 

              DOMAINS

              D1, d2, d3 = symbol

              f = fruits (d1, d2, d3); p(d3).

           Предикаттар бөлімінде ереженің сол бөлігі немесе CLAUSES бөлімінен алынған ереже аты жазылады.

           CLAUSES бөлімінде тұжырымдар жазылады. Бір ғана дұрыс предикаты бар фактілер мен ережелер бір блок аумағында жазылады, яғни бірінен соң бірі жазылуы тиіс. Ереже денесінде баспаға шығарылған предикаттардан басқа стандартты предикаттар мен салыстыру операциялары қолданылуы мүмкін. Стандарт предикаттар әртүрлі функцияларды орындайды. Олар: енгізу және шығару, файлдармен жұмыс жүргізу, DOS операциялық жүйесімен жұмыс істеу, жолдарды өңдеу, графикалық режимді қолдап тұру, бағдарламалаудың басқа да жүйелерімен интерфейсті қамтамасыз ету.

         GOAL бөлімі ішкі деп аталатын бағдарламаға сұраныс қоюдан тұрады. Ішкі сұраныс үшін Пролог бірінші лайықты шешімді іздеуге кіріседі, сонымен қатар жүйе, салыстыру кезінде алынған, табылған шешім нәтижелері туралы хабарламайды. Бұл іс - әрекеттер бағдарламалануы тиіс. GOAL сұраныс бөлімі бағдарламада кездеспеуі де мүмкін, онда диалог режимінде бағдарлама қосылған соң сыртқы сұранысты қолдану үшін жүйе шешімінің барлық варианттарын тауып алады, және дәл осы терезеде (окно) айнымалы предикаттар мәндері шығарылады және дұрыс немесе дұрыс емес орындалғаны туралы хабарлайды.

1. Мысал. Пролог тілінде вертикальдық кесінді қатынасының бағдарламасын жазу.

 

DOMAINS

 X=integer

PREDICATES

 point(X,X)

 otr(X,X,X,X)

 vert_otr(X,X,X,X)

CLAUSES

 point(1,4).

 point(1,7).

 point(5,7).

 point(5,4).

 otr(X,Y,X1,Y1):-point(X,Y), point(X1,Y1).

 vert_otr(X,Y,X1,Y1):-otr(X,Y,X1,Y1), X=X1, Y<>Y1.

GOAL

 clearwindow, vert_otr(X,Y,X1,Y1), write(X,Y," ",X1,Y1).

 

2. Мысал. Егер координаттары берілген болса, тең кесінділер қатынасын анықтау.

 

DOMAINS

 X=integer

PREDICATES

 dl(X,X,X,X,X)

 ravn(X,X,X,X,X,X,X,X)

CLAUSES

 dl(X1,Y1,X2,Y2,Z):- Z=sqrt((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1)).

 ravn(X1,Y1,X2,Y2,X3,Y3,X4,Y4):-dl(X1,Y1,X2,Y2,Z1),

 dl(X3,Y3,X4,Y4,Z2), Z1=Z2,  write("Кесінділер тең");

 write("Кесінділер тең емес").

GOAL

 clearwindow,  ravn(1,1,1,3,2,1,2,3)

 

3. Мысал. Егер координаттары берілген болса, кесінді ортасы қатынасын анықтау.

 

DOMAINS

 X=integer

PREDICATES

 ravn(X,X,X,X)

CLAUSES

 ravn(X1,Y1,X2,Y2):- X=(X2-X1)/2, Y=(Y2-Y1)/2,

write("Кесінді ортасы: X=",X," Y=",Y);  write("Кесінді ортасы жоқ").

GOAL

 clearwindow,

 ravn(1,5,3,4)

 

 4. Мысал. Үшбұрыш шыңдары берілген болса, медиана координаттарын анықтау.

 

DOMAINS

 X=integer

PREDICATES

 med(X,X,X,X,X,X)

CLAUSES

 med(X1,Y1,X2,Y2,XV,YV):- X=(X2-X1)/2, Y=(Y2-Y1)/2,

 write("Медиана координаттары: X1=", X," Y1=",Y," X2=",XV," Y2=",YV).

GOAL

 clearwindow,  med(1,2,3,4,3,5).

 

Тапсырмалар

 

  1. Келесі салыстыру операциялары дұрыс болады ма, не дұрыс емес болады ма?

а) нүкте (А, В) = нүкте (1, 2).

б) нүкте (А, В) = нүкте (X, Y, Z).

с) қосу (2, 2) = 4.

е) үшбұрыш (нүкте (-1, 0), Р2, Р3) = үшбұрыш (Р1, нүкте (1, 0), нүкте (0, Y)).

         Тұжырымдарды тексеру үшін, бағдарлама жазыңыз. Осы бөлімде қолданған кесінділер көрінісін қолдана, тең қабырғалы үшбұрыш үшін терм жазыңыз.

  1. Осы бөлімде қолданған кесінділер көрінісін қолданып, вертикальды тура Х = 5, горизонталды тура Х = 10 - да кез – келген кесіндіге, сәйкес келетін, терм жазыңыз.

  1. Былай деп ұйғарайық, тікбұрыш (Р1, Р2, Р3, Р4) терм тікбұрышымен көрсетілген, мұнда: Р – тура (оңды) жөнделген тікбұрыш шыңдары. Егер R – тікбұрыш вертикальды және горизонталды жақтарымен болатын болса ғана, орын алатын, регулярлы (R) қатынасын анықтаңыз.

  1. Терм квадрат жазыңыз.

  1. Терм төртбұрыш жазыңыз.

  1. Терм тік бұрышты үшбұрыш жазыңыз.

  1. Келесі бағдарламаны қарастырайық.

f (1, бір).

      f (S (1), екі).     

      f (S(S(1)), үш).

      f (S(S(S(X))),N) : -  f (X, N).

         Пролог – жүйе келесі сұрақтарға қалай жауап береді:

      a)  f (S (1), A).

      b)  f (S(S(1)), екі).

      c)  f (S(S(S(S(S(S(S(1))))))), C).

  1. f (D, үш).

  1. Келесі бағдарламада айтылады, екі адам бір – бірінен туысқан, егер:

а)  біреуі екіншісінің ата – тегі болып табылады, немесе

б)  екеуіне де ортақ ата – тегі бар, немесе

с)  екеуіне де ортақ ұрпағы бар.

     туыстар(Х, Y): - ата-тегі(Х, Y).

     туыстар(Х,Y): - ата-тегі(Y, Х).

          туыстар(Х,Y): - ата-тегі(Z, X), ата-тегі(Z, Y).

          туыстар(Х,Y): - ата-тегі(X, Z), ата-тегі(Y, Z).

          Нүктемен үтірді қолданбай – ақ, сіз мына бағдарламаны қысқарта аласыз ба?

          Келесі бағдарламаны нүкте мен үтірді қолданбай, көшіріп жазыңыз.

              Қайта құру   (Сан, Сөз): -

                         Сан = 1, Сөз = бір;

                         Сан = 2, Сөз = екі;

                         Сан = 3, Сөз = үш.

  1. Бағдарлама берілген:

Үлкен (аю).

Үлкен (піл).

Кішкентай (мышық).

Қоңыр (аю).

Қара (мышық).

Сұр (піл).

Күңгірт (Z): - қара  (Z).

Күңгірт (Z): - қоңыр (Z).

Сұраққа қатысты жауап қалай ізделеді:

? – күңгірт (Х), үлкен (Х). % кім бір мезгілде күңгіртте және үлкен?

? – үлкен (Х), күңгірт (Х). % кім бір мезгілде үлкен және күңгірт?

Осы екі сұрақтың қайсысына қатысты жүйе көбірек жұмыс атқарады? Экранға барлық үлкен, орташа, кішкентай жануарларды, құстарды шығару. Жануарлар мен құстар үлкендігі қатынасын анықтау қажет.

  1.  Ромб қатынасын жазу.

  1.  Жартышеңбер қатынасын жазу.

  1.  Параллелограмм үшін терм жазу.

  1.  Параллельді түзулер қатынасын жазыңыз.

  1.  Қиылысатын түзулер қатынасын жазыңыз.

  1.  Мына қатынастарды анықтаңыз: логикалық операция және, логикалық операция НЕМЕСЕ.

  1.  Мына қатынастарды анықтаңыз: логикалық операция НЕ, логикалық  операция НЕМЕСЕ – ҚОСПАҒАНДА (Исключающее - Или) (Егер сандар сәйкес келмесе, операция нәтижесі 1 – ге тең).

  1.  Мына қатынастарды анықтаңыз: логикалық операция ЭКВИВАЛЕНТТІЛІК (егер сандар бірдей шықса, операция нәтижесі 1 – ге тең), логикалық операция ИМПЛИКАЦИЯ (егер А = 1, В = 0 болса, операция нәтижесі 1 – ге тең).

  1.  0 – ден  9 – ға дейінгі сандарды анықтау үшін қатынастарын анықтаңыз, бірақ клавиатурадан енгізілген әрбір сан экранға жазбаша түрінде түссін.

  1.  Жылды (жазбаша) анықтау үшін қатынасын анықтаңыз.

  1.  Ай қатынасын анықтаңыз, бірақ клавиатурадан енгізілген әрбір ай нөмірі ай атымен жазылсын.

  1.  Оң сандар, теріс сандар қатынастарын анықтаңыз.

  1.  Реттік, ретсіз сандар қатынастарын анықтаңыз.

  1.  Сандар, 3 және 9 еселі қатынастарын анықтаңыз.

  1.  Адам жасын туған жылы бойынша, сонымен қатар жыл аты бойынша анықтау (мыс.: жылан жылы).

  1.  Туылған датасы бойынша жұлдызнама тобын анықтау.