Functional Programming

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

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

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

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

ישנם כמה מונחים בסיסיים שחשוב להכיר בתכנות פונקציונלי:

  1. ביטוי למבדא הוא ביטוי שערכו הוא פונקציה (על פי רוב, כחלק מביטוי אחר).
  2. פרדיקט היא פונקציה המחזירה ערך המשמש לבדיקה בינארית של חיוב או שלילה.
  3. אופרטור היא פונקציה שניתן להשתמש בה בתחביר שונה מהרגיל. על פי רוב ניתן להשתמש בתווים שאינם קבילים לצורך מתן שם לפונקציה רגילה, כגון הסימן '+' בשפות רבות.
  4. רשימה היא מבנה נתונים סדרתי שניתן להתייחס אליו כמורכב משני איברים: ראש וזנב. עובדה זו הופכת אותו לשימושי מאוד ברקורסיה, ועל כן הוא מבנה הנתונים העיקרי בשפות פונקציונליות רבות.