מילים

עריכה

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

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

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

מרגע שהמחשב זיהה "מילה", עליו לסווג אותה לאחד מכמה סוגים אפשריים. המילה יכולה להיות פקודה (print, forward, repeat), שם של הליך שכתבנו (square, triangle, house), שם משתנה (size), או אולי דווקא שם של עיר (tel-aviv) או של אדם (ohad) שאנו רוצים להעביר לתכנית המחשב שלנו כקלט. ה"מילה" עשויה להיות אפילו ביטוי חשבוני (למשל, "1+2") - הרי אמרנו שהמחשב פשוט מחלק את הטקסט שלפניו בעזרת תווים מסויימים, והוא אינו בודק אם ה"מילים" שהוא מוצא מורכבות מאותיות דווקא.

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

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

אבל כיצד נוכל להבהיר למחשב שרצף אותיות מסויים הוא "סתם" מילה? רצף תוים שאין צורך לעבד אותו כלל? לשם כך ניעזר בסימן ".

יצירת מילים בעזרת תו הגרשיים

עריכה
  • הסימן " (גרשיים) הוא הכלי החשוב ביותר שלנו בטיפול במילים. סימן זה מבהיר למחשב כי הוא אינו צריך לעשות פעולת עיבוד כלשהי בנוגע למילה הבאה אחריו. נדגים:
הקלידו בחלון הפקודה 1+2. המחשב עונה "You don't say what to do with 3" - "לא אמרתם מה לעשות עם 3". אנחנו לא הקלדנו את המספר 3, אלא 1+2, אבל המחשב קיבל את רצף התוים הזה, זיהה אותו כביטוי חשבוני, חישב את תוצאת הביטוי (3) וכעת הוא מבקש לדעת מה ברצוננו לעשות בה (להדפיס? לשמור במשתנה? להשתמש בה כקלט להליך, וכו').
כעת הקלידו בחלון הפקודה 1+2". כעת המחשב עונה "You don't say what to do with 1+2" - "לא אמרתם מה לעשות עם 1+2". המחשב קיבל את הרצף 1+2", מצא שהתו הראשון בו הוא תו הגרשיים, השמיט אותו ושמר את רצף התוים 1+2 כ"מחרוזת": רצף תוים לא מעובד.
כעת הקלידו clearscreen. לוגו קיבלה את פקודת ניקוי המסך וביצעה אותה.
מה יקרה כשתקלידו clearscreen"? המחשב עונה "You don't say what to do with clearscreen" - "לא אמרתם מה לעשות עם clearscreen". המילה clearscreen נראית בדיוק כמו הפקודה clearscreen, אבל המחשב זיהה את תו הגרשיים ו"הבין" שאין מדובר בפקודה אלא במחרוזת.

בעזרת תו הגרשיים אנו יכולים להגדיר רצף תוים מסויים כ"מילה". כדאי להבהיר שגם אות בודדת עשויה להיחשב "מילה" בלוגו. כעת נראה מה אנו יכולים לעשות בעזרת מילות-לוגו.

פקודות לטיפול במילים

עריכה
  • הפקודה first מחזירה את התו הראשון במילה (הראשון משמאל, שהרי מדובר באנגלית!).
הפקודה print first "Shalom תדפיס את האות S.
  • הפקודה last מחזירה את התו האחרון במילה (הראשון מימין).
הפקודה print last "Shalom תדפיס את האות m, כמובן.
  • הפקודה butlast מחזירה את המילה בלא התו האחרון. הפקודה butfirst משמיטה את התו הראשון.
הפקודה print butlast "Shalom תדפיס Shalo.
  • הפקודה item מאפשרת לנו לגשת לתו ספציפי במילה.
item 3 "Shalom ידפיס את התו השלישי במילה - a.
  • הפקודה reverse מחזירה תמונת ראי של המילה:
נסו את הפקודה reverse "Shalom.
  • pick היא פקודה המחזירה אות אחת, שנבחרה אקראית, מתוך המילה.
נסו את הפקודה pick "Shalom. אתם מוזמנים לנסות אותה מספר פעמים.
  • הפקודה word מאפשרת לנו ליצור מילה חדשה על-ידי צירוף שתי מילים או יותר. בצורתה הפשוטה ביותר פקודה זו מקבלת כקלט שני פריטים ויוצרת מהם "מילה".
אם נכתוב בחלון הפקודות: print word 1 2, התוצאה תהיה הדפסת הרצף 12. (שימו לב, גם 1, גם 2 וגם 12 הן "מילים" בלוגו!)
הפקודה word מאפשרת לנו ליצור מילה גם מצירוף של שלושה פריטים ומעלה, אך כדי שלוגו תדע בכמה פריטים בדיוק מדובר, יש לתחום את הפקודה ואת הקלט שלה בתוך סוגריים רגילים.
נסו את הפקודה (!!" print (word "Sh "al "om.
  • הפקודה remove מאפשרת לנו להשמיט אות אחת מתוך המילה. הפקודה אינה משנה את המילה עצמה, אלא מחזירה העתק שלה, ללא האות שהורדה.
נסו את הפקודה print remove "a "Shalom. מה קרה?
  • הפקודה remdup מחזירה מחרוזת לאחר השמטת כל הופעה חוזרת של אחת האותיות.
נסו לכתוב print remdup "SSSSssshhaalllaaaoooommmm. מה קרה? האם לוגו מבחינה בין אותיות גדולות וקטנות?
  • הפקודה wordp עוזרת לנו להחליט האם אוסף תוים מסוים הוא מילה או לא.
אם נכתוב print wordp "Shalom, המחשב ידפיס "True". מבחינתו, הרצף Shalom" אכן מייצג מילה. אתם מוזמנים לנסות רצפים אחרים ולגלות מהם גבולות המושג "מילה" בשפת הלוגו.
  • הפקודה memberp מאפשרת לנו לבדוק האם תו או מילה מסויימים הם חלק ממילה מסויימת.
אם נכתוב print memberp "halo "Shalom, לוגו תדפיס "TRUE", שכן הרצף halo כלול בתוך המילה Shalom.


הפרק הקודם:
לולאות
מילים הפרק הבא:
משפטים ורשימות