תנאים עריכה

הפקודה if עריכה

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

  • הפקודה הבסיסית לטיפול ב"תנאים" היא if. אופן הכתיבה של הפקודה הוא כזה:

if cond [instruction]

כאשר cond הוא תנאי שיש לבדוק, ו-instruction הוא אוסף פקודות שיתבצעו במקרה והתנאי נכון. התנאי יכלול בדרך כלל אחד מבין הסימנים הבאים = ("שווה"), < ("גדול"), > ("קטן"), או שילוב שלהם. מבחינת לוגו מה שחשוב הוא שהתנאי יחזיר תוצאה של "אמת" (TRUE) או "שקר" (FALSE). הנה דוגמה לשורה הבודקת תנאי - "האם ערכו של המשתנה size גדול מ 100?" - ומדפיסה את ערכו של המשתנה אם הוא אכן עונה על התנאי.

if :size>100 [print :size]

מה שקורה מבחינת לוגו הוא, שהמחשב מגיע לפקודה IF ומחפש אחריה "ביטוי בוליאני". "ביטוי בוליאני" הוא כל דבר שלוגו מסוגלת לקבל ממנו תשובה של TRUE או FALSE. הביטוי כאן הוא size>100: ולכן לוגו מחפשת את המשתנה size ובודקת מה ערכו. נניח שערכו של size הוא 150. מה תהיה תוצאת ההשוואה 100<150? התוצאה תהיה TRUE, שכן 150 באמת גדול יותר מ-100. הביטוי הבוליאני הניב תוצאה של TRUE, ולכן לוגו פונה לבצע את ההוראות שבין הסוגריים המרובעים. במקרה שלנו מדובר בהוראה יחידה - להדפיס את ערכו של size, ולכן יודפס המספר 150.

הפקודה ifelse עריכה

  • צורה מורחבת ל-if היא ifelse. אופן הכתיבה שלה הוא:

ifelse cond [instruction1] [instruction2]

כאשר instruction1 יבוצע במידה והתנאי נכון, ו-instruction2 יבוצע במקרה והתנאי שיקרי.

הנה דוגמה המנצלת את הפקודה ifelse. השורה הבאה בודקת אם ערכו של המשתנה size קטן מ-1 (כלומר, אם הוא 0 או מספר שלילי). אם התנאי מתקיים, ערכו של המשתנה מודפס. אם התנאי אינו מתקיים, השורה מציירת ריבוע שאורך צלעו הוא size: פיקסלים.

ifelse :size<-1 [print :size] [square :size]

הפקודה test עריכה

  • הפקודה test היא גירסה מעט מסובכת של ifelse. בעזרת test ובעזרת שתי פקודות נוספות, (iftrue (ift ו (iffalse (iff אפשר לבצע בדיקה של תנאי, לבצע פקודות לוגו כלשהן, ואז לבדוק מה היתה תוצאת התנאי שנבדק ולנהוג בהתאם. כל אלה מתבצעים בחלקים נפרדים של ההליך ולא בפקודה אחת. (הרעיון הוא ש ift ו-iff חייבים להיות באותו הליך שבו נמצא test, אך לא בצמוד אליו.)

אופן השימוש במבנה זה הוא:

to name
test cond
(כאן נבצע סדרת הוראות שאינה קשורה לתנאי שנבדק)...
ift [instruction1]
(כאן שוב נבצע סדרת הוראות כלשהי)...
iff [instruction2]
end

לאחר בדיקת התנאי לוגו שומרת את התוצאה. instruction1, שנמצא יחד עם ift, יבוצא במקרה ותוצאת התנאי cond היתה "אמת". instruction2, שנמצא עם iff, יבוצע במקרה והתנאי שיקרי. יש לציין, שכאשר משתנה מסוים נבדק ב-test, גם אם ערכו משתנה בהמשך ההליך, ift ו-iff יבוצעו לפי ערכו של המשתנה בזמן ש-test בוצע. התנאי נבדק פעם אחת בכל ביצוע של ההליך.


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