שם
expr - הערכת ביטוי
תקציר
expr arg ? ארג …. ?
משוחח arg (הוספת רווחים מפריד ביניהם), מעריך את התוצאה כמו ביטוי Tcl, ומחזירה את הערך. המפעילים המורשים בביטויים של TCL הם קבוצת משנה של המפעילים המורשים בביטויים C, ויש להם אותה משמעות וקדימות כמו אופרטורים C המתאימים. ביטויים כמעט תמיד מניבים תוצאות מספריות (מספר שלם או ערכי נקודה צפה). לדוגמה, הביטוי
expr 8.2 + 6
מעריכה ל - 14.2. ביטויי TCL שונים מביטויי C באופן שבו מפורטות אופרנדות. כמו כן, ביטויים TCL תמיכה אופרדים נומרית השוואות מחרוזת.
אופרנדס
ביטוי Tcl מורכב משילוב של אופרטורים, אופרטורים וסוגריים. ניתן להשתמש בחלל הלבן בין האופרטורים והמפעילים והסוגריים; היא מתעלמת מהוראות הביטוי. במידת האפשר, אופרנדים מתפרשים כערכים של מספרים שלמים. ערכים שלמים יכולים להיות מפורטים בעשרונית (המקרה הרגיל), באוקטל (אם התו הראשון של המפעיל הוא0), או הקסדצימלי (אם שתי הדמויות הראשונות של האופראן הן0x). אם אופראנד אין אחד פורמטים שלמים שניתנו לעיל, אז זה מטופל כמספר נקודה צפה אם זה אפשרי. ניתן לציין מספרי נקודה צפה בכל אחת מהדרכים המקובלות על ידי מהדר C התואם ל- ANSI (למעטו, F, l, וL סיומות לא יותרו ברוב המתקנים). לדוגמה, כל הפרטים הבאים הם מספרי נקודה צפה: 2.1, 3., 6e4, 7.91e + 16. אם אין פרשנות מספרת אפשרית, אופרנד נשאר כמחרוזת (ורק קבוצה מוגבלת של אופרטורים ניתן להחיל על זה).
ניתן לציין אופרטורים בכל אחת מהדרכים הבאות:
1
כערך מספרי, מספר שלם או נקודה צפה.
2
כמשתנה Tcl, באמצעות תקן$ סימון. ערך המשתנה ישמש כאופראנד.
3
כמחרוזת סגורה במרכאות כפולות. הביטוי מנתח יבצע חזרה נטענת, משתנה, הפקודה החלפות על המידע בין המרכאות, ולהשתמש את הערך המתקבל כמו operand
4
כמו מחרוזת מוקפת הפלטה. הדמויות בין הסד פתוח לבין הסוגר קרוב תואם ישמש אופרנד ללא כל תחליפים.
5
בתור פקודה Tcl סוגר בסוגריים. הפקודה תבוצע ותוצאותיה ישמשו כאופרנד.
6
כפונקציה מתמטית אשר טיעוניה יש את כל הטפסים לעיל עבור operands, כגוןחטא ($ x). ראה להלן רשימה של פונקציות מוגדרות.
כאשר מתרחשות החלפות מעל (למשל מחרוזות מצוטטות פנימיות), הן מבוצעות על פי הנחיות הביטוי. עם זאת, שכבה נוספת של החלפה אולי כבר בוצעה על ידי מנתח הפקודה לפני המעבד הביטוי נקרא. כפי שפורט להלן, זה בדרך כלל הכי טוב כדי להקיף ביטויים ב הפלטה כדי למנוע מנתח הפקודה לבצע תחליפים על התוכן.
עבור כמה דוגמאות של ביטויים פשוטים, נניח את המשתנהא יש את הערך 3 ואת המשתנה.ביש את הערך 6. אז הפקודה בצד שמאל של כל השורות הבאות תייצר את הערך בצד ימין של הקו:
אקספר 3.1 + $ a6.1 expr 2 + "$ a $ b" 5.6 expr 4 * llength "6 2" 8 expr {{word one} <"word $ a"} 0
אופרטורים
המפעילים החוקיים רשומים למטה, מקובצים בסדר יורד של קדימות:
- + ~ !
Unary מינוס, unary פלוס, קצת חכם לא, הגיוני לא. אף אחד אופרנדים אלה עשויים להיות מיושמים על אופרנדות מחרוזת, ו bit- חכם לא ניתן להחיל רק מספרים שלמים.
* / %
הכפל, מחלק, נשאר. אף אחד מן האופראנים האלה לא ניתן להחיל על אופרטורים של מחרוזות, והשאר עשוי להיות מוחל רק על מספרים שלמים. לשאר תמיד יש את אותו סימן כמו המחלק וערך מוחלט קטן יותר מאשר המחלק.
+ -
הוסף וחסר. תקף עבור כל אופרנדים מספריים.
<< >>
שמאל ומשמאל. תקף עבור אופרנדים שלמים בלבד. משמרת ימנית תמיד מפיצה את חתימת הסימנים.
< > <= >=
בוליאני פחות, גדול יותר, פחות או שווה, גדול או שווה. כל מפעיל מייצר 1 אם התנאי נכון, 0 אחרת. אופרטורים אלה עשויים להיות מיושמים על מחרוזות, כמו גם על אופרדים מספריים, ובמקרה זה נעשה שימוש בהשוואת מחרוזת.
== !=
בוליאני שווה ולא שווה. כל מפעיל מייצר תוצאה אפס / אחת. תקף עבור כל סוגי האופראנים.
&
קצת חכם ו. תקף עבור אופרנדים שלמים בלבד.
^
ביט או בלעדי חכם. תקף עבור אופרנדים שלמים בלבד.
|
קצת חכם או. תקף עבור אופרנדים שלמים בלבד.
&&
לוגי ו. מייצרת תוצאה אחת אם שתי האופראציות הן לא אפס, 0 אחרת. תקף עבור אופרטורים בוליאניים ומספריים בלבד (מספרים שלמים או צפים).
||
לוג לוגי. יוצרת תוצאה 0 אם שני האופראנים הם אפס, 1 אחרת. תקף עבור אופרטורים בוליאניים ומספריים בלבד (מספרים שלמים או צפים).
איקס ? y : z
אם-אז-אחר, כמו ב- C. אם איקס מעריכה לא אפס, אז התוצאה היא הערך של y . אחרת, התוצאה היא הערך של z . ה איקס אופרנד חייב להיות בעל ערך מספרי.
עיין במדריך C לקבלת פרטים נוספים על התוצאות שיוצרו על ידי כל מפעיל. כל האופרטורים הבינאריים מקבצים משמאל לימין באותה רמת קדימות. לדוגמה, הפקודה
expr 4 * 2 <7
מחזיר 0.
ה&&, ||, ו?: למפעילים יש הערכה "עצלנית", בדיוק כמו ב- C, כלומר, אופרנדים לא מוערכים אם הם לא נחוצים כדי לקבוע את התוצאה. לדוגמה, בפקודה
expr {$ v? a: b}
רק אחדא אוb יהיה למעשה מוערך, בהתאם לערך של$ v. שים לב, עם זאת, כי זה נכון רק אם הביטוי כולו מוקף הפלטה; אחרת, מנתח TCL יהיה להעריך את שניהםא וb לפני הפעלתexpr פקודה.
פונקציות מתמטיות
Tcl תומך בפונקציות המתמטיות הבאות בביטויים:
שרירי בטן cushיומןsqrt אקוס כפולlog10סראנד asin expפאושזוף שיזוף קומהראנדטאנה ATAN2 fmodעגולים ceil היפוחטא cos intסינה
שרירי בטן( arg )
מחזירה את הערך המוחלט של arg . Arg יכול להיות מספר שלם או נקודה צפה, והתוצאה מוחזרת באותו טופס.
acos ( arg )
מחזירה את הקוסינוס של קשת arg , בטווח 0, pi radians. Arg צריך להיות בטווח -1,1.
asin ( arg )
מחזירה את סינוס הקשת של arg , בטווח -pi / 2, pi / 2 radians. Arg צריך להיות בטווח -1,1.
שיזוף( arg )
מחזירה את משיק הקשת של arg , בטווח -pi / 2, pi / 2 radians.
ATAN2 ( x, y )
מחזירה את משיק הקשת של y / איקס , בטווח -pi, pi radians. איקס ו y לא יכול להיות גם 0.
12te arg )
מחזירה את הערך השלם הקטן ביותר לא פחות arg .
cos ( arg )
מחזירה את הקוסינוס של arg , נמדד ברדיאנים.
cosh ( arg )
מחזירה את הקוסינוס ההיפרבולי של arg . אם התוצאה תגרום לגלישה, תוחזר שגיאה.
כפולה arg )
אם arg הוא ערך צף, מחזירה arg , אחרת ממיר arg כדי לצוף ומחזירה את הערך המומר.
52 arg )
מחזירה את המעריכי של arg , המוגדר כ- ** arg . אם התוצאה תגרום לגלישה, תוחזר שגיאה.
קומה arg )
מחזירה את הערך האינטגרלי הגדול ביותר לא גדול מ arg .
fmod ( x, y )
מחזירה את שארית הנקודה הצפה של החלוקה איקס על ידי y . אם y הוא 0, שגיאה מוחזרת.
hypot ( x, y )
מחשב את אורך hypotenuse של משולש זווית ישרה ( איקס * איקס + y * y ).
int arg )
אם arg הוא ערך שלם, מחזירה arg , אחרת ממיר arg כדי שלם על ידי חתוך ומחזיר את הערך המומר.
יומן arg )
מחזירה את הלוגריתם הטבעי של arg . Arg חייב להיות ערך חיובי.
log10 ( arg )
מחזירה את הלוגריתם הבסיסי של 10 arg . Arg חייב להיות ערך חיובי.
פו ( x, y )
מחשב את הערך של איקס הרים את הכוח y . אם איקס הוא שלילי, y חייב להיות ערך שלם.
rand ()
מחזירה מספר נקודה צפה מאפס ליותר מאחד או, במונחים מתמטיים, טווח 0,1. הזרע מגיע מן השעון הפנימי של המכונה או ניתן להגדיר ידנית עם הפונקציה srand.
תאורה arg )
אם arg הוא ערך שלם, מחזירה arg , אחרת ממיר arg כדי שלם על ידי עיגול ומחזירה את הערך המומר.
חטא( arg )
מחזירה את הסינוס של arg , נמדד ברדיאנים.
sinh ( arg )
מחזירה את הסינוס ההיפרבולי של arg . אם התוצאה תגרום לגלישה, תוחזר שגיאה.
sqrt ( arg )
מחזירה את השורש הריבועי של arg . Arg חייב להיות לא שלילי.
srand ( arg )
ה arg , אשר חייב להיות מספר שלם, משמש כדי לאפס את הזרע עבור מחולל מספרים אקראיים. מחזירה את המספר האקראי הראשון מאותו זרע. לכל מתורגמן יש זרע משלו.
טאן ( arg )
מחזירה את המשיק של arg , נמדד ברדיאנים.
טאנה ( arg )
מחזירה את המשיק ההיפרבולי של arg .
בנוסף לפונקציות מוגדרות מראש אלה, יישומים יכולים להגדיר פונקציות נוספות באמצעותTcl_CreateMathFunc().
סוגי, גלישה, ו Precision
כל החישובים הפנימיים של מספרים שלמים נעשים עם סוג C ארוך , וכל החישובים הפנימיים הקשורים לנקודה צפה נעשים עם סוג C כפול . בעת המרת מחרוזת לנקודה צפה, הזרימה של המעריך מזוהה ומופיעה בשגיאת Tcl. עבור המרה למספר שלם מחרוזת, זיהוי של הצפת תלוי בהתנהגות של כמה שגרות בספריית C המקומית, ולכן זה צריך להיחשב אמין. בכל מקרה, זרימת מספרים שלמים ואת זרימה נמוכה בדרך כלל לא מזוהים באופן מהימן עבור תוצאות ביניים. הצפה נקודה הצפת זרימה מזוהים במידה הנתמכת על ידי החומרה, אשר בדרך כלל די אמין.
ההמרה בין ייצוגים פנימיים עבור מספר שלם, נקודה צפה ופעולות מחרוזת נעשית באופן אוטומטי לפי הצורך. עבור חישובים אריתמטיים, מספרים שלמים משמשים עד מספר נקודה צף הוא הציג, לאחר מכן נקודה צפה משמש. לדוגמה,
expr 5/4
חזר/, בעוד
expr 5 / 4.0 expr 5 / (אורך מחרוזת "abcd" + 0.0)
שניהם חוזרים 1.25. ערכים של נקודה צפה מוחזרים תמיד עם ``.'' 'או' א 'ה כך שהם לא ייראו כמו ערכים שלמים. לדוגמה,
expr 20.0 / 5.0
החזרות4.0, לא4.
פעולות מחרוזת
ניתן להשתמש בערכי מחרוזות כפעולות של מפעילי ההשוואה, אם כי מעריך הביטויים מנסה לבצע השוואות כמספר שלם או נקודה צפה כאשר הוא יכול. אם אחד אופרנדס של השוואה הוא מחרוזת והשני יש ערך מספרי, המופרז המספרי מומרת חזרה מחרוזת באמצעות C ספרינטף פורמט% d עבור מספרים שלמים ו% g עבור ערכי נקודה צפה. לדוגמה, הפקודות
expr {"0x03"> "2"} expr {"0y" <"0x12"}
שניהם חוזרים 1. ההשוואה הראשונה מתבצעת באמצעות השוואה של מספרים שלמים, והשנייה נעשית באמצעות השוואת מחרוזות לאחר שהמפעיל השני עובר למחרוזת18. בגלל נטייתו של Tcl לטפל בערכים כמספרים בכל הזדמנות אפשרית, אין זה רעיון טוב להשתמש במפעילים כמו==כאשר אתה באמת רוצה השוואה מחרוזת ואת הערכים של אופרנים יכול להיות שרירותי; זה טוב יותר במקרים אלה להשתמשמחרוזת במקום זאת.
שיקולי ביצועים
צרף ביטויים של הפלטה עבור המהירות הטובה ביותר ואת דרישות האחסון הקטן ביותר. זה מאפשר מהדר TCL bytecode ליצור את הקוד הטוב ביותר.
כאמור, ביטויים מוחלפים פעמיים: פעם על ידי מנתח TCL ופעם אחת על ידי expr פקודה. לדוגמה, הפקודות
להגדיר 3 בחר ב {$ a + 2} expr $ b * 4
לחזור 11, לא מרובה של 4. זה בגלל מנתח TCL תחליף הראשון$ a + 2 עבור המשתנה.ב, אז הexpr הפקודה תעריך את הביטוי$ a + 2 * 4.
רוב הביטויים אינם דורשים סיבוב שני של תחליפים. או שהם סגורים בתוך הפלטה או, אם לא, המשתנים שלהם משתנה הפקודה תשואה מספרים או מחרוזות כי הם עצמם לא דורשים תחליפים. עם זאת, בגלל כמה ביטויים unbraced צריך שני סיבובים של תחליפים, מהדר bytecode חייב לפלוט הוראות נוספות כדי להתמודד עם המצב הזה. הקוד היקר ביותר נדרש עבור ביטויים unbraced המכילים חילופי פקודות. ביטויים אלה חייבים להיות מיושמים על ידי יצירת קוד חדש בכל פעם הביטוי מבוצע.
מילות מפתח
אריתמטי, בוליאני, להשוות, ביטוי, השוואה מטושטשת
חשוב: להשתמש ב איש פקודה ( % איש ) כדי לראות כיצד נעשה שימוש בפקודה במחשב הספציפי שלך.




