let

يُسمّى let لأنه يعكس أصوله الرياضية في إدخال روابط مؤقتة، كما في «Let ( x = 2 ) and ( y = 3 )».

عبارة let في Scheme بنية ربط تُستخدم لتعريف متغيرات ضمن نطاق محلي. تتيح إنشاء روابط مؤقتة ثم تنفيذ كتلة تعليمات برمجية باستخدامها. هذا مفيد للحفاظ على نمطية التعليمات البرمجية وتجنّب تلويث المتغيرات العامة.

هناك ثلاثة أشكال رئيسية لـ let في Scheme:

  • let: المعيار؛ ينشئ روابط محلية بسيطة.
  • let*: تسلسلي؛ يمكن أن تعتمد الروابط على نتائج روابط سابقة.
  • named let: نموذج خاص ينشئ حلقات عودية أو إجراءات مُسمّاة.

في أبسط أشكاله، ينشئ let روابط متغيرة محلية ويقيّم تعبيرًا بهذه الروابط.

(let ((variable1 value1)
      (variable2 value2))
  expression)
  • الروابط: قائمة أزواج يُسند فيها value إلى variable.
  • التعبير: نص let الذي يستخدم المتغيرات المحلية.

مثال

(let ((x 10)
      (y 20))
  (+ x y))
  • يعرّف متغيرين محليين: x (10) وy (20).
  • ثم يحسب (+ x y).

النتيجة: 30


let*

تشبه let* بنية let، لكن تُقيَّم الروابط بالتسلسل. يمكن أن تعتمد الروابط اللاحقة على السابقة.

(let* ((variable1 value1)
       (variable2 expression-using-variable1))
  expression)

مثال

(let* ((x 10)
       (y (+ x 5)))
  (* x y))
  • الربط الأول يعيّن 10 إلى x.
  • الثاني يحسب y كـ (+ x 5).
  • النص يحسب (* x y).

النتيجة: 150


named let

named let نموذج خاص يمنح كتلة let اسمًا، فيحوّلها إلى إجراء عودي. مفيد للحلقات أو الحسابات العودية.

(let name ((variable1 initial-value1)
           (variable2 initial-value2))
  body-expression)
  • name: اسم تُعطى له كتلة let، فيُعرَّف إجراء بفعالية.
  • الروابط: القيم الأولية للمتغيرات، كما في let المعياري.
  • body: يمكن أن يستدعي named let نفسه عوديًا.

مثال: التكرار بـ named let

(let loop ((n 5)
           (result 1))
  (if (= n 0)
      result
      (loop (- n 1) (* result n))))
  • تبدأ loop بـ n = 5 وresult = 1.
  • إذا n يساوي 0، تُرجع result.
  • وإلا تستدعي نفسها بـ n - 1 وresult * n.

النتيجة: 120 (5!)


جدول ملخص

البنيةالوصفحالة الاستخدام
letيحدّد روابط محلية للمتغيرات.عندما تكون جميع الروابط مستقلة.
let*يحدّد روابط محلية تسلسلية.عندما تعتمد روابط لاحقة على سابقة.
named letيحدّد إجراءات عودية محلية.للحلقات أو الحسابات العودية في سياق محلي.

أمثلة

استخدام let لحساب محلي

(let ((x 2)
      (y 3))
  (+ (* x x) (* y y)))

النتيجة: 13 (حساب x² + y²)


استخدام let* لتبعيات تسلسلية

(let* ((x 2)
       (y (* x x))
       (z (* y x)))
  z)

النتيجة: 8 (حساب )


استخدام named let لحسابات عودية

(let factorial ((n 5)
                (result 1))
  (if (= n 0)
      result
      (factorial (- n 1) (* result n))))

النتيجة: 120 (5!)


باستخدام let وlet* وnamed let، يُمكّن Scheme البرمجة المعيارية والعودية والتسلسلية بقواعد نطاق واضحة.