logo

תוכניות פרולוג

שימוש בפרדיקטים המובנים, רצף היעדים, או ציון יעד בהנחיית המערכת יהיה בעל ערך מועט בפני עצמו. כדי לכתוב תוכנית פרולוג, ראשית, המשתמש צריך לכתוב תוכנית שכתובה בשפת פרולוג, לטעון את התוכנית, ולאחר מכן לציין רצף של יעד אחד או יותר בהנחיה.

כדי ליצור תוכנית ב-Prolog, הדרך הפשוטה היא להקליד אותה בעורך הטקסט ולאחר מכן לשמור אותה כקובץ טקסט כמו prolog1.pl .

הדוגמה הבאה מציגה תוכנית פשוטה של ​​Prolog. התוכנית מכילה שלושה רכיבים, הידועים כסעיפים. כל סעיף מסתיים באמצעות נקודה.

 dog(rottweiler). cat(munchkin). animal(A) :- cat(A). 

שימוש בפרדיקט המובנה ' לְהִתְיַעֵץ' , ניתן לטעון את התוכנית לעיל במערכת Prolog.

?-consult('prolog1.pl').

זה מראה שקובץ prolog1.pl קיים, ותוכנית prolog נכונה מערכתית, כלומר יש לה סעיפים חוקיים, המטרה תצליח, וכדי לאשר שהתוכנית נקראה כהלכה, היא מייצרת שורה אחת או יותר של פלט. לְמָשָׁל.,

?-
# 0.00 שניות להתייעץ עם prolog1.pl
?-

מחרוזת Java indexof

החלופה של 'התייעצות' היא 'טען', שתתקיים באפשרות התפריט אם למערכת פרולוג יש ממשק משתמש גרפי.

כאשר התוכנית נטענת, הסעיף ימוקם באזור אחסון, ואזור האחסון הזה ידוע בתור מסד הנתונים של Prolog. בתגובה להנחיית המערכת, ציין רצף של יעדים, וזה יגרום ל-Prolog לחפש ולהשתמש בסעיפים הדרושים להערכת היעדים.

טרמינולוגיה

בתוכנית הבאה, שלוש שורות מציגות את הסעיפים.

 dog(rottweiler). cat(munchkin). animal(A) :- cat(A). 

תוך שימוש בנקודה, כל סעיף יסתיים. לתוכניות פרולוג יש רצף של סעיפים. עובדות או כללים מתוארים בסעיפים אלה.

דוגמא של עובדות הוא כלב (רוטוויילר) ו חתול (מונצ'קין) . הם מתכוונים ש' רוטוויילר הוא כלב' ו' מנצ'קין הוא חתול'.

כלב נקרא פרדיקט. הכלב מכיל טיעון אחד. מילה ' רוטוויילר' מוקף בסוגריים( ). רוטוויילר נקרא אטום.

הדוגמה של הכלל היא השורה האחרונה של התוכנית.

 animal(A) :- dog(A). 

תו הנקודתיים(:-) ייקרא כ'אם'. כאן A הוא משתנה, והוא מייצג כל ערך. באופן טבעי, ניתן לקרוא את הכלל כ'אם A היא חיה, אז A היא כלב'.

הסעיף לעיל מראה כי רוטוויילר היא חיה. ניכוי כזה יכול לבצע גם על ידי פרולוג:

?- חיה (רוטוויילר).
כן

לרמוז על כך מנצ'קין הוא בעל חיים, אין לכך עדות.

?- חיה (מונצ'קין).
לא

עוד טרמינולוגיה

הערכת מונח יעד קובעת אם הוא מרוצה או לא. זה גם אומר שהיעד מוערך כנכון או לא נכון.

שימו לב שכאשר משתמש מזין יעד, אז לפעמים זה יכול להתפרש כפקודה. לדוגמה,

?- לעצור. 'הוא משמש ליציאה ממערכת פרולוג'.

לפעמים אפשר להתייחס לזה כשאלה כמו,

?- חיה (רוטוויילר). & 'האם רוטוויילר היא חיה?'

התוכנית הבאה מציגה דוגמה נוספת על בעלי חיים. הוא כולל שמונה סעיפים. ההערה מוצגת על ידי כל הטקסט בין /* ל-*/.

 /* Another Program of Animal */ Dog(rottweiler). cat(sphynx). dog(poodle). dog(bulldog). cat(bengal). dog(dobermann). cat(himalayan). cat(singapura). /* This Prolog program consists of various clauses. It is always terminated using the full stop.*/ 

למושג כלב ולחתול למושג יש ארבעה סעיפים. נניח שבקובץ טקסט 'animal.pl', התוכנית נשמרה, והפלט נוצר על ידי טעינת התוכנית ובהנחיית המערכת, אנו מכניסים רצף של יעדים כדלקמן:

?- consult('animals1.pl'). הודעת מערכת
# 0.01 שניות להתייעץ עם animals.pl animals.pl נטען באמצעות הייעוץ

?- כלב (רוטוויילר).
כן

?- כלב(בוקסר).
לא

?- כלב(א).
A = הפסקות רוטוויילר- מקש החזרה נלחץ על ידי המשתמש

?- כלב(ב).
B = רוטוויילר; הפסקות? משתמש לוחץ ;
B = פודל; הפסקות? משתמש לוחץ ;
B = בולדוג; הפסקות? משתמש לוחץ ;
B = דוברמן אין הפסקה? זה יעבור לשורה הבאה

?- חתול(א). A = ספינקס; להשהות? לחיצות משתמש;
א = הפסקות בנגל? המשתמש לוחץ על חזרה

?- הקשבה (כלב). זה יפרט את כל הסעיפים המגדירים את כלב הבסיס

/* כלב/1 */

כלב (רוטוויילר).
כלב (פודל).
כלב (בולדוג).
כלב (דוברמן).
כן
?-

בדוגמה זו מוצגות תכונות חדשות שונות של Prolog. השאילתה היא כדלקמן:

?- כלב(א).

זה אומר למצוא את הערך של A, וזה יהיה שם הכלב. התשובה של פרולוג היא כדלקמן:

A = רוטוויילר

תשובות אפשריות נוספות של A הן כדלקמן, פודל, בולדוג, דוברמן. זה יגרום להשהיית Prolog, ובגלל זה, אנחנו צריכים לחכות שהמשתמש ילחץ על מקש ה'חזרה' לפני שהוא יוציא את ההנחיה של המערכת ?-.

אנו יכולים להזין את השאילתה הבאה באופן הבא:

?- כלב(ב).

שאילתה זו זהה לקודם. השאילתה לעיל פירושה ש'מצא את הערך של ה-B, וזה יהיה שם של כלב'. התשובה של פרולוג היא כדלקמן:

B = רוטוויילר

btree ו-b tree

פרולוג שוב יושהה. הפעם מקש נקודה-פסיק (;) נלחץ על ידי המשתמש. כעת פרולוג ימצא עבור ערך חלופי של B שמספק את כלב המטרה(B). זה יענה באופן הבא:

B = פודל

פרולוג שוב יושהה. מקש נקודה-פסיק (;) נלחץ שוב על ידי המשתמש. פרולוג מייצר פתרון נוסף כדלקמן:

B = בולדוג

הגדרת נתיב פיתון

פרולוג שוב יושהה. מקש נקודה-פסיק (;) נלחץ שוב על ידי המשתמש. פרולוג מייצר פתרון נוסף כדלקמן:

B = דוברמן

Prolog מזהה שאין יותר פתרון זמין על ידי אי השהייה, אבל המערכת מבקשת ?- על ידי מעבר מיד לפלט.

פרדיקט מובנה חדש מוצג בדוגמה זו. ציון המטרה

?- רישום (כלב)

במטרה לעיל, פרולוג יפרט את כל ארבעת הסעיפים המגדירים את הכלב הבסיסי. הם יגדירו באותו סדר כפי שהם נטענו למסד הנתונים.

השימוש במשתנים בשאילתה מוצג בדוגמה הבאה. רצף המטרה הוא כדלקמן:

?-חתול(א),כלב(ב).

זה ייתן לנו את כל השילובים האפשריים של חתול וכלב.

?-חתול(א),כלב(ב).
A = ספינקס,
B = רוטוויילר;

A = ספינקס,
B = פודל;

A = ספינקס,
B = בולדוג;

A = ספינקס,
B = דוברמן;

וכו '

לעומת זאת, רצף המטרה הוא כדלקמן:

?-חתול(א), כלב(א).

זה ייתן לכל בעלי החיים שהם גם חתול וגם כלב (בבסיס הנתונים, אין חיה כזו). כאן A הוא 'כל ערך' גם בחתול (A) וגם בכלב (A), אבל לשניהם חייב להיות אותו ערך.

?-חתול(א),כלב(א).
לא