ইমা্যাকস লিস্পে অস্থায়ী ভেরিয়েবলটি না নিয়েই কি ভেরিয়েবলগুলিতে সরাসরি একাধিক রিটার্ন মান নির্ধারণ করা সম্ভব?
উদাহরণস্বরূপ, আসুন আমি বলি যে আমার একটি ফাংশন রয়েছে যা দুটি তালিকার একটি তালিকা ফেরত দেয়:
(defun test-func ()
(setq a '(a b))
(setq b '(c d))
`(,a ,b))
যদি আমি প্রথম রিটার্ন মান list-aএবং দ্বিতীয়টি ফেরতের মান নির্ধারণ করতে চাই তবে আমি list-bএকটি অস্থায়ী ভেরিয়েবল ব্যবহার করে এটি করতে পারি temp, উদাহরণস্বরূপ:
(let* ((temp (test-func)) (list-a (car temp)) (list-b (cadr temp)))
(message-box (prin1-to-string list-a))
(message-box (prin1-to-string list-b)))
এটি আরও সহজভাবে করা সম্ভব? (আমি পার্ল এবং পাইথনের অভ্যস্ত যেখানে আপনাকে কোনও অস্থায়ী পরিবর্তনশীল নির্দিষ্ট করতে হবে না)
letফাংশনটির ভিতরে ব্যবহার করতে ভুলে গেছি .. আমি কোনও বৈশ্বিক ভেরিয়েবল সেট করার পরিকল্পনা করিনি :)
cl-destructuring-bindম্যাক্রো চেষ্টা করতে পারেন । এছাড়াও, আপনি কি সত্যিইsetqএকটি ভিতরে ব্যবহার করার ইচ্ছা ছিলdefun?setqএকটি "বিশেষ" (বিশ্বব্যাপী অ্যাক্সেসযোগ্য) ভেরিয়েবল তৈরি করে, যা আপনি সাধারণত কোনও ফাংশনের বাইরে রাখতেন (কারণ একই পরিবর্তনশীলটিকে একাধিকবার ঘোষণার কিছু অর্থ নেই, যখন ফাংশনগুলি একাধিকবার চালানোর উদ্দেশ্যে তৈরি হয়)।