תוכן שנמחק תוכן שנוסף
Jona1357 (שיחה | תרומות)
אין תקציר עריכה
Jona1357 (שיחה | תרומות)
ביטויים סימבולים
שורה 24:
 
== כתיבת קוד ב-Common Lisp ==
 
=== ביטויים סימבולים ( Symbolic Expressions ) ===
'''ביטויים סימבולים''' ( באנ׳: '''Symbolic Expressions''' או בקיצור, '''S Expressions''' ) הם ביטויים אשר נמצאים אשר נמצאים בתוך סוגריים, מכילים בד״כ הוראה ואופרנדים, ומפושטים לאחר מכן.
 
לדוגמה : <code>(3 2 5 +)</code> יחבר את 5, 3, ו-2, ויפושט ל-10.
 
ביטויים סימבולים יכולים להופיע באופן מקונן, כלומר, בתוך ביטויים סימבולים אחרים. לדוגמה :<syntaxhighlight lang="common-lisp">
(print (+ 5 2 3 ))
</syntaxhighlight>קוד זה יפשט את הביטוי האריתמטי <code>(3 2 5 +)</code> וידפיסו, באמצעות הפעולה המובנית <code>print</code>. הפעולה <code>print</code> היא [[פעולה אונארית]] ( כלומר, מקבלת פרמטר יחיד) אשר תדפיס את הביטוי שניתן לה בשורה חדשה. על מנת לכתוב טקסט ללא מעבר לשורה חדשה, ניתן להשתמש בפעולה <code>write</code>, באותו האופן.
 
=== אופרטורים אריתמטיים ===
ארבעת האופרטורים האריתמטייםה[[אריתמטיקה|אריתמטיים]] המשמעותיים ביותר ב-Common Lisp, ובניבי Lisp בכלל, הם חיבור <code>+</code> , חיסור <code>-</code> , כפל <code>*</code> , וחילוק <code>/</code> .
 
אמנם אופרטורים אלה הם חלק אינטגרלי ממתמטיקה ואריתמטיקה בסיסית, וקיימים בכלל שפות התכנות, במשפחת Lisp צורת הכתיבה שלהם שונה. ב-Lisp ישנו שימוש בכתיב תחילי, כלומר, האופרטורים והפעולות בה מופיעים בהתחלה, ושאר האיברים בביטוי הם האופרנדים, או הפרמטרים בהתאמה. באופרטורים ופעולות מובנות רבות אין מגבלה לכמות האופרנדים שניתן להכניס, כלומר, חיבור,חיסור, כפל וחילוק למשל, אינן פעולות בינאריות ב-Lisp. לדוגמה, על מנת לבצע את הפעולה האריתמטית <math>2 * 3 + 7 - 6</math>, נכתוב את הקוד הבא:<syntaxhighlight lang="common-lisp">
( - (+ (* 2 3) 7) 6 )
</syntaxhighlight>
</syntaxhighlight>כל ביטוי בתוך סוגריים נקרא ביטוי סימבולי ( Symbolic Expression ) והוא מפושט לתוצאתו, אלא אם כן יכתב לפניו גרש <code>׳</code>.
 
=== פעולות min ו-max ===
שורה 42 ⟵ 51:
ב-Common Lisp, על מנת לבצע התניות יש להשתמש בהוראת ה-if. בניבי Lisp אחרים לעתים תבוצע התניה באמצעות הוראת ה-cond ( קיצור של condition ).
 
מבנה הבלוק של '''if''' : <syntaxhighlight>
( if ( שקר /אמת )
תבצע את השורה הזו במידה והתנאי אמת
שורה 86 ⟵ 95:
<content>
)
</syntaxhighlight>דוגמה לפעולה אשר מפושטת לפרמטר ( בדוגמה זו: <code>number1</code>) בריבוע:<syntaxhighlight lang="common-lisp">
(defun power number1
(* number1 number1)
שורה 97 ⟵ 106:
)
)
</syntaxhighlight>ועל אותו עיקרון, מימוש רקורסיבי ב-Common Lisp לפעולת ה[[עצרת]] ב[[מתמטיקה]], שמקבלת [[מספרים חיוביים ושליליים|מספרים אי שליליים]] ושלמים בלבד:<syntaxhighlight lang="common-lisp">
(defun factorial_of( num1 )
( if ( eq num1 0 )
שורה 105 ⟵ 114:
)
)
</syntaxhighlight>וכן פעולה רקורסיבית אשר מפושטת למספר הגדול ביותר ב[[רשימה (מבנה נתונים)|רשימה]] המוכנסת אליה:<syntaxhighlight lang="common-lisp">
(defun max_item ( item lst )
( if ( eq lst nil )