LISP

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

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

LISP שייכת למשפחת שפות התכנות הפונקציונליות.

שמה נגזר מעיבוד רשימות ("List Processing" באנגלית) שהיה הייעוד המקורי של השפה כאשר היא הומצאה ב־1958. כיום LISP היא אחת משפות התכנות הנפוצות והוותיקות ביותר ובתור שכזו יש לה מספר ניבים שהנפוצים ביניהם הם: Common Lisp ו־Scheme ובנוסף עוד עשרות ניבים שחלקן משמשים כשפות מקרו של יישומים מסוימים (למשל, AutoCad, GIMP ו־Emacs).

בניגוד לשפות תכנות אחרות, המבנה של כל הפקודות ב־LISP הוא אחיד ונקרא S-expressions. במבנה זה כל ביטוי כתוב בהצגה פולנית, כלומר האופרטור תחילה ואחר כך הפרמטרים וזאת במבנה של רשימה. לדוגמא, סכום של שלושה מספרים יבוצע כך:

(+ 1 2 3)

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

בהתאם לייעודה המקורי כשפת עיבוד רשימות, עושה שפת LISP שימוש רב ברקורסיות.

תוכנית דוגמה לחישוב עצרת:

(defun factorial (n)
  (if (<= n 1)
      1
      (* n (factorial (- n 1)))))

שתי פקודות חשובות ב- LISP הפועלות על רשימות מכל סוג הן car ו- cdr. הפקודה car מחזירה את האיבר הראשון ברשימה, והפקודה cdr מחזירה את הרשימה ללא האיבר הראשון.

ניתן לשכפל את האות האמצעית בפקודות אלו על מנת לבצע הפקודה בצורה רקורסיבית מספר פעמים: אם למשל נכתוב caaar, נקבל את האיבר הראשון של האיבר הראשון של האיבר הראשון (3 פעמים) של הרשימה המקורית (יש לזכור כי איבר ברשימה יכול להיות גם הוא רשימה!). בדומה, אם נרשום cddr, נקבל את הרשימה המקורית ללא שני האיברים הראשונים שלה (שגם הם יכולים להיות רשימות). ניתן גם לערבב: אם נרשום למשל cadaadr, נקבל את האיבר הראשון של שאר הרשימה של האיבר הראשון של האיבר הראשון של שאר הרשימה של הרשימה המקורית, וכן הלאה.


ריבוי הסוגריים הביא לבדיחה לפיה פירוש ראשי התיבות LISP הוא: Lots of Irritating Superfluous Parentheses (בתרגום חופשי: המון סוגריים מעצבנים ומיותרים).