תוכן עניינים הקדמה
הכרות עם schemes
תבניות נתונים
תבניות
משפטי בקרה
משתנים לקסיקלים
רקורסיה
קלט/פלט
macros
מבנים
alises and tables ממשק המערכת
מחלקות ואובייקטים
jumps
אי-דטרמיניסטיות
מנועים
shell scripts
אתר ללימוד מקיף> פרק 1 - הכרות עם Scheme

פרק 1 - הכרות עם Scheme


התוכנית הראשונה אותה נכיר היא התוכנית שמדפיסה "!Hello World" בחלון ה-console.
ע"י שימוש בעורך האהוב עליך צור קובץ בעל הסיומת scm כלומר hello.scm ובו התוכן הבא:


;The first program
(begin 
(display "Hello, World!")
(newline))

השורה הראשונה היא הערה, כאשר Scheme רואה נקודה ופסיק (;), היא מתעלמת מהם ומכל השורה הבאה אחריהם.
השימוש ב- begin הוא הדרך של Scheme להציג סדרה של תת תבניות. במקרה שלנו ישנם שתי תת תבניות .הראשונה נקראת הפרוצדורה display, אשר מציגה את הארגומנטים שלה (כלומר את: "!Hello World") ל-console (או למסך). פונקציה זו מלווה ע"י פרוצדורה נוספת והיא newline ,היורדת שורה.

על מנת להריץ את תוכנית ,דבר ראשון עליך להפעיל את Scheme. זה בד"כ נעשה ע"י הקלדת השם של קובץ הריצה של Scheme בשורת הפקודה של מערכת ההפעלה.
לדוגמא, במקרה של MzScheme נקליד mzscheme ב-prompt של מערכת ההפעלה.
פעולה זו קוראת ל-listener של Scheme, אשר קורא את הקלט הדרוש ,מעריך אותו ומדפיס את התוצאה (אם יש) ואח"כ מחכה שוב לקלט מן המשתמש. על כן יש המכנים זאת מעגל : "קריאה-הערכה-הדפסה".
יש לשים לב שה-listener דומה למערכת ההפעלה אשר מונעת ע"י פקודות, קוראת אותן, מריצה ואח"כ מחכה לעוד. כמו למערכת ההפעלה גם ל-listener של Scheme יש prompt משלו בד"כ <, אך הוא יכול להיות גם אחרת.
ב-prompt של ה-listener, נטעין את הקובץ hello.scm ע"י הפקודה:


(load "hello.scm")

Scheme תריץ את תוכן הקובץ תדפיס Hello World ותרד שורה. לאחר מכן יקבל המשתמש שוב את ה-prompt של ה-listener המחכה לקלט נוסף מן המשתמש.
מכיוון שה-listener מאוד "להוט" לקבל קלט, המשתמש לא חייב לכתוב את התוכניות בקובץ ולהטעין אותו. ישנה אפשרות נוספת, פשוטה יותר, במיוחד כאשר המשתמש רוצה להריץ דברים שוב ושוב, והיא להקליד ביטויים ישירות ל-prompt ה-listener ולראות מה מתרחש. לדוגמא לאחר הקשת התבנית:

(begin (display "Hello, World!")
           (newline))

נקבל תוצאה:
!Hello, World

למעשה ניתן להקיש ישירות "!Hello World" ל-listener ונקבל את התוצאה הבאה:

"!Hello, World"

מכיוון שזו תוצאת ההערכה של ה-listener ל-"!Hello World".
בשיטה השניה התוצאה הייתה מעט שונה, מלבד השוני הניכר לעין, ישנו הבדל משמעותי נוסף בין שתי התוכניות.
התוכנית הראשונה (עם הפרוצדורה begin) אינה מבצעת הערכה לדבר ו-"!Hello World" נפלט כתופעת לוואי מהפרוצדורות display ו-newline הכותבות ל-standard output.
בתוכנית השניה התבנית: "!Hello World" מוערכת לתוצאה, שבמקרה שלנו זו אותה מחרוזת כמו התבנית עצמה.

מעתה ואילך נשתמש בסימון <= כדי לציין הערכה.


E => v  
- מייצג שהתבנית E מוערכת לתוצאה v. לדוגמא,

(begin
   (display "Hello, World!")
   (newline))
=>

<= - מוערך לכלום או ל-void, אך יש לו תופעת לוואי והיא הכתיבה לאמצעי הפלט הסטנדרטי של !Hello, World.

מצד שני, "!Hello World" <= "!Hello World" (הביטוי "!Hello World" מוערך לאותו ביטוי ממש).

בכל מקרה אנו עדיין נמצאים ב-listener, על מנת לצאת על המשתמש להקיש:

(exit)

זה יחזיר אותנו חזרה לשורת הפקודה של מערכת ההפעלה (שהיא, סוג מסוים של listener בעצמה).
ה-listener נוח לבדיקת אינטראקטיביות של תוכניות וקטעי תוכנית, אך זה לא תמיד הכרחי.
המשתמש יכול לדבוק בדרך המסורתית של יצירת תוכניות בשלמותן, ולתת ל-Scheme להריץ אותן ללא
"listening" בצורה מפורשת. לדוגמא המשתמש ב-MzScheme יכול להקליד ב-prompt של מערכת ההפעלה:

mzscheme -r hello.scm 

וזה יוצר את ההפניה מבלי לערב את המשתמש עם ה-listener. לאחר ההפניה mzscheme יחזיר את המשתמש שוב ל-prompt של מערכת ההפעלה. למעשה זה כמו לכתוב:
echo Hello, World!

המשתמש יכול לכתוב את הפקודה hello.scm בדומה לפקודה במערכת ההפעלה (shell scriptor או batch file) אך נצטרך להמתין עד לפרק 16 לצורך העניין.