سؤال

ولماذا لا يغيرونه؟

يحرر:سبب السؤال هو أنني جديد في استخدام emacs وأرغب في استخدام Emacs كـ "آلة حاسبة مبرمجة".لذلك، يمكنني التعامل مع الأعداد الصحيحة 32 بت و64 بت وجعلها تتصرف كما تفعل على الجهاز الأصلي.

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

المحلول

Emacs-Lisp هي لغة مكتوبة ديناميكيًا.هذا يعني أنك تحتاج إلى علامات الكتابة في وقت التشغيل.إذا كنت تريد التعامل مع الأرقام، فسيتعين عليك عادةً تجميعها في نوع من الحاويات ذات العلامات التي يمكنك الإشارة إليها (على سبيل المثال:"وضعها في مربع")، حيث لا توجد طريقة لتمييز المؤشر عن عدد صحيح للجهاز في وقت التشغيل دون وجود نوع من نظام وضع العلامات.

لأسباب تتعلق بالكفاءة، فإن معظم تطبيقات Lisp لا تستخدم مؤشرات أولية ولكن ما أعتقد أنه يسمى الواصفات.عادةً ما تكون هذه الواصفات عبارة عن كلمة آلية واحدة قد تمثل مؤشرًا أو رقمًا غير مضمن (ما يسمى رقم الإصلاح)، أو إحدى هياكل البيانات الأخرى المتنوعة (يستحق غالبًا تشفير NIL وخلايا سلبيات بشكل خاص أيضًا، على سبيل المثال).

الآن، من الواضح، إذا قمت بإضافة علامة النوع، فلن يتبقى لديك 32 بت كاملة للرقم، لذلك يتبقى لديك 26 بت كما في MIT Scheme أو 29 بت كما في Emacs أو أي عدد آخر من البتات لم تستخدم ما يصل لوضع العلامات.

تحتفظ بعض تطبيقات اللغات الديناميكية المختلفة بعلامات متعددة للأرقام الإصلاحية حتى تتمكن من إعطائك أرقام إصلاح 30 بت أو حتى 31 بت.SBCL هو أحد تطبيقات Lisp الشائعة يفعل هذا.لا أعتقد أن التعقيد الذي يسببه هذا يستحق العناء بالنسبة لـ Emacs.كم مرة تحتاج إلى حساب سريع ذو 30 بت فيكسنوم مقابل حساب 29 بت فيكسنوم؟ محرر النص الذي لا يقوم حتى بتجميع كود Lisp الخاص به في كود الجهاز (أو هل يفعل ذلك؟لا أتذكر في الواقع)؟هل تكتب عميل Distributed.net في Emacs-Lisp؟من الأفضل التبديل إلى Common Lisp إذن!;)

نصائح أخرى

يتم استخدام البتات الثلاثة المتبقية كأعلام بواسطة مترجم Lisp.(يمكنك الحصول على أعداد صحيحة أكبر عن طريق تجميع Emacs لجهاز 64 بت.)

علق آخرون على سبب كون عرض الإصلاحات 29 بت فقط.ولكن إذا كنت تريد آلة حاسبة للمبرمج، تحقق من ذلك احسب.فهو يقدم أعدادًا صحيحة دقيقة، وعمليات المصفوفة، وتحويلات الوحدات، والرسومات عبر gnuplot، والوظائف الإحصائية، والوظائف المالية، والوظائف العلمية، وRPN والترميز الجبري، وتبسيط الصيغة...وهو بالفعل جزء من Emacs، لذا للبدء، قم بزيارة عقدة المعلومات لـ "calc" وابدأ في البرنامج التعليمي.

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

في العديد من تطبيقات Lisp، يتم استخدام بعض البتات الموجودة في الكلمة كعلامة.يتيح ذلك لأشياء مثل أداة تجميع البيانات المهملة معرفة ما هو المؤشر وما هو غير ذلك دون الحاجة إلى التخمين.

لماذا تهتم بمدى حجم Elisp Fixnum؟يمكنك فتح ملفات ضخمة كما هي.

أستخدم مترجم Common Lisp CLISP كآلة حاسبة للمبرمج.لدى Common Lisp أفضل معالجة للأرقام رأيتها في أي لغة برمجة؛وأبرزها أنها تحتوي على أعداد صحيحة ذات حجم تعسفي، أي.bignums، وكذلك الأعداد العقلانية.كما أن لديها مدخلات في قواعد أرقام عشوائية ووظائف bitwise لـ bignums.إذا كنت تريد الحساب من داخل Emacs، فيمكنك تشغيل CLISP في غلاف M-x.على سبيل المكافأة، بناء الجملة هو تقريبًا نفس ما ستستخدمه في Emacs Lisp.

وهذا ينطبق فقط على معماريات 32 بت، ويمكن تغييره بناءً على خيارات البناء.يتم استخدام البتات الأخرى لوضع علامات على هياكل البيانات الأساسية.

يمكنك استخدام إصدار 64 بت يحتوي على أعداد صحيحة أكبر، كما توجد حزم لعمليات حسابية ذات أعداد صحيحة كبيرة بشكل تعسفي.

أو أنك تطرح فقط سؤالًا بلاغيًا تحاول أن تبدو غاضبًا ومهمًا...

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