Scheme

Scheme היא שפת תכנות וניב מזערי ממשפחת שפות ה־Lisp. היא נבדלת משאר ניבי Lisp התעשייתיים בכך שהיא מצוידת בספריית ליבה קטנה בלבד. בדומה לשאר הניבים, Scheme מצטיינת ביכולת ההרחבה העצמית שלה למרות זעירותה.<ref></ref>

== היסטוריה ==
השפה פותחה בשנות ה־70 של המאה ה־20 במעבדת CSAIL של MIT לבינה מלאכותית על ידי גיא לוּאִיס סְטִיל וגֶ'רָלְד גֵ'יי סאַסְמן שאף כתבו אודותיה בסדרת מאמרים שנודעו אחר כך בשם "מאמרי הלַמְדָּא" ("Lambda Papers").<ref name=":0"></ref> Scheme קיבלה השראה משפת התכנות ALGOL והשאילה ממנה את תחום ההכרה הלקסיקלי (lexical scope), והייתה לניב הראשון מבין משפחת שפות ה־Lisp עם תחום הכרה לקסיקלי.<ref></ref>

בין השנים 1975–1980 סאסמן ו־סטיל פיתחו את החידושים שלהם מסביב לשימוש בתחשיב הלמדא בתכנות, ועוד חידושים מתקדמים נוספים כגון מיטוב רקורסיית זנב בשפות תכנות, ופרסמו אותם בסדרת מאמרים שלעת ימים נודעו בשם ”מאמרי הלמדא.“<ref name=":0" />

== עיצוב ==
Scheme הייתה הניב הראשון מבין ניבי ה־Lisp לבחור בהיקף משתנים לקסיקלי, כלומר היקף המשתנים שפונקציות יכלו לראות ולגשת אליהם היה לפי מבנה התכנה בקוד המקור (כפי שנהוג ברוב שפות התכנות העכשוויות), ולא חיפוש משתנים בעזרת המחסנית בזיכרון (ה־Call stack) בזמן הריצה כפי שהיה נהוג בשפות Lisp קודם לכן.

Scheme הייתה מבין השפות הראשונות שאימצו את העיקרון שכל מבנה בשפה הוא מדרגה ראשונה, כלומר התייחסות שווה לפונקציות, מחלקות, משתנים, ותהליכונים כערכים נגישים בזיכרון מתוך השפה עצמה והשימוש בהם כערכים שאפשר לקלוט למשתנים, לשנות, ולהעביר בין פונקציות. תכונה שאפשר למצוא בשפת התכנות Lua<ref></ref> שאינה ניב Lisp, אבל תפסה השראה חזקה מ־Scheme.

Scheme תרמה רבות בחזרה לשפות האחיות שלה ממשפחת השפות של Lisp, ובמיוחד ל־Common Lisp, עבורה גיא סטיל בעצמו השתתף במאמץ הפיתוח והעיצוב.<ref></ref>

== תחביר ==
כללי התחביר של השפה מעטים ולכן היא קלה יחסית ללימוד. Scheme נלמדת בעיקר באוניברסיטאות ומוסדות חינוך, מכיוון שבעזרתה נוח להמחיש עקרונות יסודיים מתחום מדעי המחשב וכן להדגים מודלים שונים לפיהם פועלים מהדרים ומפרשים. עם זאת, החל מתחילת המאה ה־21 היא מוחלפת באטיות בשפות אחרות דוגמת Python.<ref></ref>

קל לזהות את תחבירה של שפה זו, אשר בדומה לרוב הניבים של Lisp, מורכב מביטויים עטופים בסוגריים הנקראים ביטויי־S. התחביר מודגם בתוכנית הבאה, המחשבת עצרת:
<syntaxhighlight lang="scheme">
(define (factorial n)
 (if (= n 0)
 1
 (* n (factorial (- n 1)))))
</syntaxhighlight>

== תקינה ==
Scheme עברה מספר תקינות וביניהן:<ref></ref>
* שנת 1990, תקן 1178-1990 (R1995) של ה־IEEE. התקן אינו נגיש באופן חופשי ברשת.
* שנת 1991, תקן R4RS.<ref></ref>
* שנת 1998, תקן R5RS.<ref></ref> התקן הכי נפוץ ביישומי השפה.
* שנת 2007, תקן R6RS.<ref>|</ref> התקן הביא חידושים ושכלל את השפה לשימוש תעשייתי ומסחרי. עם זאת, התקן שנוי במחלקות בקרב מתכנתיה כיוון שהרוח התעשייתית שלו חורגת מהפילוסופיה המינימליסטית המקורית של שפת התכנות.<ref></ref>
* שנת 2013, תקן R7RS.<ref></ref> התקן נוצר כתוצאה מהמחלוקת שאפפה את התקן הקודם. הוא נועד לפצל את השפה לתקן "זעיר", שנועד בעיקר למטרות חינוך ומחקר, במקביל לתקן הקודם שמשמש צרכים תעשייתיים ומסחריים.<ref></ref> מכיוון שהתקן זעיר מקודמו, הוא לא שומר בהכרח על תאימות מלאה מולו, אלא מפצל את שימוש השפה לזרם נפרד ברוח המקורית של השפה.

== ראו גם ==
* שפת תכנות
* תכנות מחשבים

== לקריאה נוספת ==
=== מאמרי הלמדא ===

==קישורים חיצוניים==

* 

== ביאורים ==

== הערות שוליים ==

קטגוריה:שפות תכנות
קטגוריה:שפות תכנות פונקציונליות
קטגוריה:ניבי Lisp