سؤال

أنا أعمل من خلال SICP. حاليًا ، في الفصل الأول ، أواجه مشاكل في الحصول على مضرب للسماح لي بإعادة تعريف "البدائية". على سبيل المثال ، كنت تحت الانطباع بأنني يجب أن أكون قادرًا على القيام بعمل تعسفي (define + 5) وهذا سيكون على ما يرام ، أو إعادة تعريف sqrt إجراء. بدلاً من ذلك ، أحصل على هذا:

define-values: cannot change constant variable: +

لدي اللغة التي تم تعيينها حاليًا على R5Rs ، والتي كنت تحت الانطباع ستعتني بقضايا التوافق مع SICP.

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

المحلول

حتى لو كان ذلك ممكنًا ، فإن إعادة التعريف هذه ليست شيئًا يجب عليك القيام به دون فهم حقًا كيفية رد فعل النظام على هذا. على سبيل المثال ، إذا قمت بإعادة تعريف +, ، هل سيفكر أي رمز آخر؟ الإجابة على ذلك في حالة المضرب هي "لا" - ولكن هذا لأنك لا يمكنك إعادة تعريفها حقًا +: بدلاً من ذلك ، تحدد أ الجديد +, ، أي فقط الكود الخاص بك يمكن استخدامه.

بالنسبة للاختيار اللغوي - يعد وضع R5RS Grackets أمرًا صارمًا للغاية ، وهو ليس شيئًا تريد استخدامه عادة. ل كثير المزيد من البيئة الصديقة لـ SICP ، انظر نيل فان دايك صفحة دعم SICP والتي ستوفر لك لغة مصنوعة خصيصًا للكتاب. (IIRC ، حتى أنه يحتوي على اللغة الرسومية التي تظهرها الكتب.)

نصائح أخرى

واجهت مشاكل في محاولة العمل من خلال مثال RSA هنا (جزء من أشياء SICP):
http://mitpress.mit.edu/sicp/psets/ps3/readme.html

للحصول على هذا العمل ، كان علي القيام بذلك:

1) قم بتشغيل التنزيل الأولي بإضافة هذا إلى أعلى ملف فارغ:

#lang planet neil/sicp

ثم ضرب "الجري"

2) استمتع بتنزيل Drracket سهل الاستخدام ، وتثبيت وحدة Planet Neil من خلال الذهاب إلى القهوة ؛-)

3) وبعد تثبيته ، أغلق drracket.

4) إعادة فتح ، واختر SICP Planet 1.15 من قائمة اختيار اللغة.
(لم أستطع الحصول على إضافة الإعلان في الجزء العلوي للعمل بالنسبة لي بصرف النظر عن القيام بذلك لأداء التنزيل الأولي.)

حظا طيبا وفقك الله!

في لوحة اللغة ، تحتاج إلى تعطيل "عدم السماح بإعادة تعريف الارتباطات الأولية". هذا يحدد المشكلة.

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