פרולוג (שפת תכנות)

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש

פרולוגאנגלית: Prolog) היא שפת תכנות לוגית שפותחה במקור לכתיבת יישומי בינה מלאכותית. השפה היא שלמה טיורינג (Turing-Complete), כלומר ניתן לממש באמצעותה כל מה שאפשר לממש בשפות התכנות הנפוצות. שמה נגזר מצירוף המילים "תכנות בלוגיקה" (באנגלית: PROgramming LOGic).

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

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

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

.summer

שאפשר להתייחס אליו כאל הטענה "עכשיו קיץ". עובדות יכולות גם להגדיר יחס על איבר בודד (פרדיקט), כגון

.(male(orel
.(tall(orel

שמגדירים את המשתנה orel להיות "זכר" ו"גבוה". או על מספר איברים ואז תגדיר יחסים, כגון:

.(love(yoni, rotem

שמגדיר שיוני "אוהב את" רותם. יש לשים לב שאף אחת מהמילים tall, love, yoni, rotem, איננה מוגדרת בשפה עצמה, ומשמעות מתקבלת מהמשך השימוש במשתנים אלו.

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

.(love(rotem, X) :- male(X), love(X, rotem

שמגדירה שרותם אוהבת מישהו (X כאן הוא משתנה, כמו כל מילה שמתחילה באות גדולה) אם X אוהב את רותם. נגדיר כעת כלל נוסף:

.(married(X,Y) :- summer, love(X,Y), love(Y,X

כלל זה אומר ש-X ו-Y "נשואים" אם "עכשיו קיץ" וגם X "אוהב את" Y וגם Y "אוהב את" X.

לאחר שמגדירים עובדות וכללים, ניתן לשאול שאלות על מאגר הנתונים שבנינו. מי נשואים?

.(married(X,Y -?

והמפרש יגיב

X = yoni
Y = rotem

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

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

כל תוכנית פרולוג היא למעשה אוסף של פסוקים לוגיים הידועים כפסוקי הורן (Horn Clauses).

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

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

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

למחשבים אישיים התפרסם Turbo Prolog ו Amzi! פרולוג. כמו כן קיימת הרחבה גרפית ותמיכה בשפה העברית לאמזי פרולוג OW Prolog.

ראו גם[עריכת קוד מקור | עריכה]

לקריאה נוספת[עריכת קוד מקור | עריכה]

  • קלוקסין ומליש, תכנות בשפת פרולוג, הוצאת אופוס, 1988.
  • Leon Sterling and Ehud Shapiro, The Art of Prolog: Advanced Programming Techniques, 1994
  • Ivan Bratko, Prolog - Programming for Artificial Intelligence, 1990
  • Patrick Blackburn, Johan Bos, Kristina Striegnitz: Learn Prolog Now! College Publications, 2006

קישורים חיצוניים[עריכת קוד מקור | עריכה]