سؤال

أحاول أن أتعلم Lisp وكان يمر بمثال رمز حيث يتم استخدام شيء مشابه للرمز التالي:

(قائمة 'اقتباس 5)

هذا يقيم إلى '5 في repl. كنت أتوقع أن تقييم ('5) أو (اقتباس 5)

أحاول ذلك في Clisp REPL.

سيكون موضع تقدير أي مساعدة.

هل كانت مفيدة؟

المحلول

تقرأ حلقة المطبوعة ذات القيم القراءة أولاً ، ثم تُقيّم

"اقتبس يقرأ باسم" الرمز الذي يكون اسمه اقتباس "

5 يقرأ باسم "الرقم 5"

لذلك (القائمة 'QUOTE 5) يتم تقييمها على أنها "اصنع قائمة العنصر الأول هو الرمز الذي يكون اسمه اقتباسه والذي يكون العنصر الثاني 5".

يمكن كتابة نتيجة هذا التقييم على أنها "(اقتباس 5)". "5" هي طريقة أخرى لقول هذا ، وستختار الطابعة في بعض (ربما معظم) تنبؤات LISP طباعة النموذج الأقصر بدلاً من الشكل الأطول.

عندما تتعلم هذه الأشياء عن طريق الكتابة في Reply ، عليك أن تتذكر أن خطوتي القراءة والتقييم متميزة ، لكن الحلقة تفعل الاثنين

محاولة

* (read-from-string "(list 'quote 5)")
(LIST 'QUOTE 5)

للقيام بخطوة واحدة في كل مرة ، أو

* (first (read-from-string "(quote 5)"))
QUOTE
* (second (read-from-string "(quote 5)"))
5
* (read-from-string "(quote 5)")
'5

لإقناع نفسك بأن "(اقتباس 5)" و "5" هما نفس الشيء

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top