מבוא

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

כאשר אנו משתמשים ב-cons, נוצר למעשה רכיב מידע בשם cons (או "זוג מנוקד") בעל שני שדות המכונים car ו-cdr. כל אחד משדות אלו יכול להיות כל רכיב חוקי של שפת LISP.

לדוגמא:

(setf z (cons 1 'a)) (1 . A)
(car z) 1
(cdr z) A

רשימה בשפת LISP היא למעשה שרשרת של cons המקושרים ביניהם על ידי שדה ה-cdr. האיבר האחרון ברשימה מקושר בד"כ ל-nil.

(list 1 2 3) plot:\[
 \equiv \] (cons 1 (cons 2 (cons 3 nil)))

נביט כיצד מיוצגת הרשימה הבאה בזכרון:

(list 'a '(b c) 'c)

נשים לב כי שמות סימבוליים משותפים בשפה. כאשר יש שתי רשימות המכילות את C, שתיהן למעשה מצביעות אל אותו איבר.

דוגמא:

> (setf v1 '(a b c))
(A B C)
> (setf v2 '(a b c))
(A B C)
> (setf v3 v2)
(A B C)

בזכרון v1, v2, v3 יראו כך:

כעת נשתמש בפונקציות eq ו-equal על מנת להשוות בין הרשימות, ונראה את ההבדלים:

(equal v1 v2) T
(equal v2 v3) T

(eq v1 v2) NIL
(eq v2 v3) T

eq מבצעת השוואה בין אובייקטים. מוחזר שוויון רק אם מדובר על אותו אובייקט ממש.

equal תחזיר אמת גם במקרה בו הרשימות שונות, וזאת בתנאי שאיברי הרשימות הינם זהים.

נציג כעת את האופרטורים השונים של השוואה ביתר פירוט.

מאת: מיכאל קנוסוב

לימוד שפת LISP

בתור חובב תכנות ללא ניסיון רב אני מעונין ללמוד באופן פרטי את שפת ליספ בתור
שפת אם לתכנות פונקציונלי. אינני עוסק בתכנות ואינני מתכוון להרויח משפת תכנות מדובר רק בלימוד תכנות כהובי. אודה לך אם תןכל להתקשר לטלפון 050-6262013
תודה
מאת: white-dragon

שימוש של lisp

אפשר לכתוב בlisp מקרואים וקיצורים חדשים לemacs.
שיתוף:
| עוד