Common Lisp – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
Jona1357 (שיחה | תרומות)
אין תקציר עריכה
Jona1357 (שיחה | תרומות)
יצירת משתנים
שורה 97:
(list 75 21 43 'hello 'world 98)
</syntaxhighlight>
 
=== יצירת משתנים ===
ניתן ליצור משתנים ב-Common Lisp ב-3 דרכים:
 
# דרך זו היא מיושנת יותר והייתה בשימוש רב יותר בגרסאות ישנות יותר של Lisp. ניצור משתנה באמצעות ה[[מאקרו (תכנות)|מאקרו]] <code>set</code> . לדוגמה: <code>(set (quote *foo*) 42)</code> . בדוגמה זו יצרנו משתנה בשם <code>*foo*</code> שערכו 42. השתמשנו בהוראה quote על מנת ששם המשתנה, במקרה זה <code>*foo*</code>, יחשב ל-symbol ולא יפושט. ניתן לכתוב גרש ( ׳ ) לפני הביטוי על מנת לקבל את אותה התוצאה ( ניתן לבצע זאת ב-Common Lisp גם ללא קשר להגדרת משתנים ). שם המשתנה מתחיל ונגמר בכוכבית ככחלק ממוסכמת כתיבה בשפה, ואין חובה לבצע זאת גם.
# באמצעות המאקרו <code>setq</code> ( קיצור של set quote ), לדוגמה: <code>(setq *foo* 42)</code>. גם בדוגמה זו, יצרנו משתנה בשם *foo* שערכו 42.
# באמצעות המאקרו setf . שיטה זו נחשבת לחדשנית יותר, משום שבנוסף ליכולותיהן של השיטות הקודמות. באמצעות setf ניתן לגשת ולשנות איברים ברשימה, לעומת set ו setq.
 
להלן השוואה בין הקוד הנדרש יצירת רשימה זהה בשיטות השונות:<syntaxhighlight lang="common-lisp">
(set (quote foo) (list 1 2 3)) ;foo => (1 2 3)
(1 2 3)
 
(set 'foo '(1 2 3)) ;foo => (1 2 3) same function, simpler expression
(1 2 3)
 
(setq foo '(1 2 3)) ;foo => (1 2 3) similar function, different syntax
(1 2 3)
 
(setf foo '(1 2 3)) ;foo => (1 2 3) more capable function
(1 2 3)
</syntaxhighlight>
 
=== פעולות ===