سؤال

وأنا أعلم ذلك:

(cons [p] [q]) is ((s ((s i) (k [p]))) (k [q]))
(car [lst]) is ([lst] k)
(cdr [lst]) is ([lst] (k i))

أريد أن أكتب قائمة مثل هذا

(cons [a] (cons [b] (cons [c] [nil])))

, ، والتي ستكون شيء مثل هذا:

((s ((s i) (k [a]))) (k ((s ((s i) (k [b]))) (k ((s ((s i) (k [c]))) (k [nil]))))))

لكنني لا أعرف كيفية ترجمة "NIL" في S، K وأنا منفذي. هل يعلم أحد؟

شكرا مقدما، إدوين خوسيه Palathinkal

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

المحلول

الشيء الوحيد الذي تحتاجه من nil التمثيل هو أن تكون قادرا على تحديد ذلك - اكتب بعض null? المسند الذي يعود "صحيح" ل nil و "خطأ" لجميع أزواج أخرى. هذا يعني أن الإجابة تعتمد على تمثيلك الصحيح / الخاطئ. مع الاختيار المشترك λxy.x و λxy.y, ، ترميز مريحة ل nil هو λf.[true]. وبعد ترجمة هذا إلى التزلج سهل للغاية الآن (ولن أقوم بذلك هنا، لأنه يبدو وكأنه الواجبات المنزلية ...).

(أيضا، تنفيذ null? المسند بالنظر إلى هذا التمثيل ل nil هو ممارسة جيدة.)

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