কমন লিস্প, 58 টি অক্ষর
#1=(let((*print-circle* t))(print'(write '#1# :circle t)))
... বা 24 টি অক্ষর যদি আপনার মনে হয় না *print-circle*
যে বিশ্বব্যাপী সেট করা আছে T
:
#1=(print '(write '#1#))
কোডটির মুদ্রিত প্রতিনিধিত্বটি একটি চক্রাকার কাঠামো হিসাবে পড়া হয়, যেখানে #1#
নিম্নলিখিত কনস সেলটি নির্দেশ করে #1=
। আমরা প্রোগ্রামগুলি উদ্ধৃত করি যাতে তারা কার্যকর না হয়। যেহেতু *print-circle*
টি, তাই আরপিএল মুদ্রণের সময় এই জাতীয় পাঠক ভেরিয়েবলগুলি নির্গত করার জন্য যত্ন নেয়; উপরের কোডটি এটি প্রিন্ট করে এবং ফেরত দেয়:
#1=(write '(print '#1#))
যখন আমরা উপরের কোডটি মূল্যায়ন করি তখন এটি মুদ্রণ করে:
#1=(print '(write '#1#))
আপনি যদি ডিফল্ট মানটির সাথে *print-circle*
মানিয়ে নিতে চান যা মানানসই বাস্তবায়নে নিল, তবে আপনাকে অস্থায়ীভাবে পরিবর্তনশীলটি পুনরায় ফিরিয়ে দিতে হবে:
#1=(let((*print-circle* t))(print'(write '#1# :circle t)))
এলইটি-র শরীরের অভ্যন্তরে, আমরা *print-circle*
টি হিসাবে জিনিসগুলি মুদ্রণ করি So
#1=(write
'(let ((*print-circle* t))
(print '#1#))
:circle t)
আপনি দেখতে পাচ্ছেন যে নতুন প্রোগ্রামটি পুনরায় ফিরিয়ে আনবে না *print-circle*
, তবে যেহেতু আমরা ব্যবহার করছি write
, যা নিম্ন-স্তরের ফাংশন বলে print
, আমরা অতিরিক্ত আর্গুমেন্ট যেমন পাস করতে পারি :circle
। কোডটি তখন প্রত্যাশার মতো কাজ করে:
#1=(let ((*print-circle* t))
(print '(write '#1# :circle t)))
তবে আপনাকে উপরের প্রোগ্রামগুলি কোনও স্ক্রিপ্ট হিসাবে সম্পাদন করতে হবে, একটি আরপিএল-র ভিতরে নয়, কারণ আপনি বিজ্ঞপ্তি কাঠামোগুলি যত্ন নেওয়ার সময় জিনিসগুলি মুদ্রণ করেছেন write
এবং উভয়ই print
মুদ্রিত মানটি ফিরিয়ে দেন; এবং একটি ডিফল্ট REPL- তে, মানটিও মুদ্রিত হচ্ছে, তবে গতিশীল প্রেক্ষাপটের বাইরে যেখানে *print-circle*
টি is