سؤال

أنا في اليوم 1 ساعة 1 من تعليم نفسي مخطط. وغني عن القول ، أنا لا أفهم أي شيء. لذلك أنا أقرأ المخطط الصغير واستخدام هذا الشيء:

http://sisc-scheme.org/sisc-online.php

كمترجم.

أنا بحاجة إلى استخدام ' على سبيل المثال

(atom? 'turkey)

لتجنب خطأ "متغير غير محدد". ال ', ، وفقا للكتاب ، هو شيء شائع.

لدي سؤالان:

  1. هل المترجم الذي ذكرته أعلاه جيد؟ هل يمكنك أن تنصح آخر؟ أحتاج إلى واحدة ستسير على ما يرام المخطط الصغير.

  2. ما هو '?

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

المحلول

الاستمارة 'foo هي ببساطة طريقة أسرع لكتابة النموذج الخاص

(quote foo)

وهذا يعني ، "لا تقيم اسم Foo واستبداله بقيمة ذلك ؛ أقصد حقًا اسم Foo".

أعتقد أن SISC بخير تمامًا لاستكشاف التمارين في TLS.

نصائح أخرى

تحتاج إلى فهم قواعد التقييم الأساسية للمخطط.

أولاً:

(atom? 'turkey)

القائمة هي تطبيق وظيفة ، لذلك atom? يتم تقييمها إلى وظيفة.'turkey هو تدوين اليد قصيرة ل (quote turkey). التقييم (quote turkey) يعطي الرمز turkey.

لذلك يتم تطبيق الوظيفة على الرمز turkey ويتم حساب قيمة الإرجاع.

ثانيا

(atom? turkey)

مرة أخرى لدينا تطبيق وظيفة و atom? يتم تقييمها إلى وظيفة. هذا الوقت turkey هو متغير. التقييم turkey يعطي القيمة المرتبطة بها - ما هو عليه من أي وقت مضى.

إذن يتم تطبيق الوظيفة على قيمة المتغير turkey.

ملخص

turkey هو متغير ، والذي يتم تقييمه إلى قيمته. 'turkey هو (quote turkey), الذي يتم تقييمه على الرمز turkey.

يعيد Scheme استخدام S-Expressions ويبني برامجه خارج S-Expressions. هذا يؤدي إلى المشكلة في وقت ما turkey يجب أن يكون متغيرًا وأحيانًا يكون الرمز. هذا مربك بعض الشيء للمبتدئين. بعد مرور بعض الوقت سترى القوة وراءها.

SISC جيد ، ولكن مخطط مخطط عبر الإنترنت أكثر خفيفة الوزن هو http://codepad.org. إنه في الواقع ليس استبدالًا لأنه ليس تفاعليًا ، لكنه قريب جدًا. يتم تنفيذ الرمز الذي ترسله على الخادم الجانب بدلا من استخدام تطبيق المستعرض. ويمكنك مشاركة التعليمات البرمجية التي تقوم بتشغيلها عن طريق عنوان URL القصير.

ال حول تقول الصفحة الموجودة على Codepad إنها تستخدم "MzScheme V372 [CGC].

يمكنني استخدام CODEPAD لجميع أنواع اختبار المقتطف السريع (بما في ذلك عينات رمز الاختبار للإجابات!).

بالنسبة لبناء بناء الجملة ، يمكن رؤية الفرق باستخدام رمز مثل هذا:

(let ((x 5))
  (display x) (newline)
  (display 'x) (newline))

هذا يعرض:

5
x

في الحالة الأولى، x يتم تقييمه وتمريره display, ، الذي يطبع 5. في الحالة الثانية ، رمز x (وهذا ليس هو نفس الشيء مثل سلسلة الأحرف) يتم تمريره إلى display, ، الذي يطبع اسم الرمز.

اختزال ل (quote ...), ' يحول التعليمات البرمجية إلى البيانات.

stuff هو رمز ، وهذا يعني أنه يمكن أن يكون اسم متغير أو اسم وظيفة ، وما إلى ذلك ..
'stuff يمنحك الرمز "الاشياء" نفسها.

(dostuff "on" those 4 :parameters) عند التقييم ، سيتم تشغيل الوظيفة dostuff مع أربعة معلمات: سلسلة ، محتوى المتغير تلك ، الرقم والكلمة الرئيسية.
'(dostuff "on" those 4 :parameters) عند تقييمه ، ستعيد الرمز أعلاه ، والذي ، عند تقييمه ، بدوره يعمل بدوره dostuff مع ذلك الأربعة معلمات ..

على سبيل المثال: تشغيل '''somecode, ، يعود ''somecode. يجري ''somecode, ، يعود 'somecode. يجري 'somecode, ، يعود somecode. يجري somecode, و ... حسنا ... somecode سوف يركض.

تستطيع قول ذلك ' يشبه إلى حد ما عكس ذلك (eval..).

(eval (eval (eval '''(print "hello")))) سوف تطبع "مرحبا".
(eval (eval (eval ''''(print "hello"))) - لاحظ واحد آخر ' ومن بعد eval - لن تطبع أي شيء ، لكنه سيعيد الرمز (print "hello") بحد ذاتها!!

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

  1. أقترح أن تنتقل إلى بيئة أفضل مثل مخطط PLT, التي لديها IDE ، تصحيح الأخطاء والكثير من المكتبات. أثناء المضي قدمًا وتبدأ في كتابة برامج أكبر ، ستحتاج إليها.

  2. الحرف أحادي الروت هو السكر النحوي للتعبير "اقتباس" ، لذلك فإن تركيا هي نفسها (اقتباس تركيا). في الأساس ، ما يفعله "الاقتباس" هو إيقاف تشغيل تقييم المخطط. وبعبارة أخرى ، "اقتباس" يرجع التعبير ، حرفيًا. إذا لم يكن هناك "اقتباس" ، فسيحاول المخطط تقييم "تركيا" في البيئة الحالية. هذا ليس شيئًا شائعًا ولكن شيء lisp. LISP المشتركة والمخطط هما لهجات LISP. يتم شرح استخدامات "اقتباس" في جميع البرامج التعليمية/الكتب LISP. انظر أيضا الإجابات على هذا السؤال.

الشخصية ذات السعة الواحدة هي طريقة اختصار لقول (اقتباس FOO) حيث يكون الاقتباس هو النموذج لإرجاع FOO فقط دون تقييمه.

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

إن اقتباس شيء ما يفعل هذا فقط والمبادرة الواحدة تتطلب فقط كتابة أقل ويؤدي إلى رمز أقل مطولاً.

إذا كنت تبحث عن أفضل IDE scheme ثم اذهب ل Dr Racket. ولكن عندما تبدأ Dr Racket يجب أن يكون السطر الأول #lang scheme حيث Dr Racket لديه العديد من اللغة التي نذكرها صراحة اللغة التي سنستخدمها.

عندما نريد تمرير وسيطة نفسها بدلاً من تمرير قيمة الوسيطة ، نستخدم اقتباس. يرتبط في الغالب بالإجراء الذي يمر أثناء استخدام القوائم والأزواج والذرات غير المتوفرة بلغة البرمجة C (معظم الأشخاص يبدأون في البرمجة باستخدام برمجة C ، وبالتالي نشعر بالارتباك). وأعتقد أنه يمكنك فهم هذا الرمز.

(define atom?              ; defining a procedure atom?
(lambda (x)              ; which as one argument x
(and (not (null? x)) (not(pair? x) )))) ; checks if the argument is atom or not
(atom? '(a b c)) ; since it is a list it is false #f

السطر الأخير (الذرة؟ 'ABC) هو تمرير ABC كما هو الحال في الإجراء للتحقق مما إذا كانت ABC هي ذرة أم لا ، ولكن عندما تمر (ATOM؟ ABC) ، فإنه يتحقق من قيمة ABC ويمرر القيمة إلى هو - هي. منذ ذلك الحين ، لم نقدم أي قيمة لها

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