"প্রিন্টফ ডিবাগিং" ব্যবহার করে
ফাংশন সংজ্ঞাটি সংশোধন করে আপনি ইমাসকে আপনাকে বুঝতে সহায়তা করতে পারেন:
(defun triangle-using-cond (number)
(message (format "called with %d" number))
(cond ((<= number 0) 0)
((= number 1) 1)
((> number 1)
(+ number (triangle-using-cond (1- number))))))
বাফারে (message ...)
একটি ট্রেইল মুদ্রণের জন্য কেবল কোথাও যুক্ত করুন *Messages*
।
ইডিবাগ ব্যবহার করা হচ্ছে
ফাংশন সংজ্ঞাটির ভিতরে যে কোনও জায়গায় পয়েন্ট করুন এবং C-u C-M-x
এটি "উপকরণ" টিপুন । তারপরে ফাংশনটি মূল্যায়ন করুন, উদাহরণস্বরূপ পয়েন্ট স্থাপন (triangle-using-cond 3)
এবং আঘাতের মাধ্যমে C-x C-e
।
আপনি এখন ইডিবাগ মোডে আছেন। ফাংশনটি সরাতে স্পেস বারটি হিট করুন। প্রতিচ্ছবিটির মধ্যবর্তী মানগুলি প্রতিধ্বনির ক্ষেত্রগুলিতে প্রদর্শিত হয়। ইদেবগ মোড থেকে বেরিয়ে আসার জন্য কেবল হিট করুন q
। উপকরণটি সরাতে, সংজ্ঞাটির ভিতরে যে কোনও জায়গায় পয়েন্ট রেখে সংজ্ঞাটি C-M-x
পুনরায় মূল্যায়নের জন্য হিট করুন ।
স্ট্যান্ডার্ড ইম্যাকস ডিবাগার ব্যবহার করা
M-x debug-on-entry triangle-using-cond
, তারপরে, যখন triangle-using-cond
আহ্বান করা হয়, আপনাকে ইম্যাক্স ডিবাগারে (বাফার *Backtrace*
) স্থাপন করা হবে।
মূল্যায়নের মাধ্যমে পদক্ষেপ d
(অথবা c
কোনও উদ্বেগমূলক মূল্যায়নের মাধ্যমে এড়িয়ে যেতে)।
মধ্যবর্তী অবস্থা (পরিবর্তনশীল মান ইত্যাদি) দেখতে আপনি e
যে কোনও সময় ব্যবহার করতে পারেন । আপনাকে মূল্যায়নের জন্য একটি সেক্সপ প্রবেশের অনুরোধ জানানো হবে এবং মূল্যায়নের ফলাফলটি মুদ্রিত হবে।
আপনি ডিবাগারটি ব্যবহার করার সময়, উত্স কোডের একটি অনুলিপি অন্য ফ্রেমে দৃশ্যমান রাখুন, তাই যা চলছে তা আপনি অনুসরণ করতে পারেন।
আপনি উত্স কোডে স্বেচ্ছাসেবী জায়গায় ডিবাগার (আরও বা কম ব্রেকপয়েন্ট) প্রবেশ করতে সুস্পষ্ট কল inোকাতে পারেন can আপনি sertোকান (debug)
বা (debug nil SOME-SEXP-TO-EVALUATE)
। পরবর্তী ক্ষেত্রে, ডিবাগারটি প্রবেশ SOME-SEXP-TO-EVALUATE
করা হলে মূল্যায়ন করা হয় এবং ফলাফল মুদ্রিত হয়। (মনে রাখবেন যে আপনি উত্স কোডে এই জাতীয় কোড C-M-x
inোকাতে পারেন এবং এটি মূল্যায়নের জন্য ব্যবহার করতে পারেন, তারপরে পূর্বাবস্থায় ফিরুন - আপনার সম্পাদিত ফাইলটি সংরক্ষণ করার দরকার নেই))
Using Debugger
আরও তথ্যের জন্য এলিসপ ম্যানুয়াল, নোড দেখুন।
একটি লুপ হিসাবে পুনরাবৃত্তি
যাইহোক, লুপ হিসাবে পুনরাবৃত্তি ভাবেন। এখানে দুটি সমাপ্তির সংজ্ঞা দেওয়া আছে: (<= number 0)
এবং (= number 1)
। এই ক্ষেত্রে ফাংশনটি একটি সাধারণ সংখ্যা দেয়।
পুনরাবৃত্তির ক্ষেত্রে ফাংশনটি সেই সংখ্যার যোগফল এবং ফাংশনের ফলাফল প্রদান করে number - 1
। শেষ পর্যন্ত, ফাংশনটি 1
শূন্যের চেয়ে ছোট বা সমান সংখ্যক বা একটি সংখ্যার সাথে কল করা হবে।
পুনরাবৃত্ত মামলার ফলাফল তাই:
(+ number (+ (1- number) (+ (1- (1- number)) ... 1)
উদাহরণস্বরূপ নিন (triangle-using-cond 4)
। আসুন চূড়ান্ত অভিব্যক্তি জমে:
প্রথম পুনরাবৃত্তির number
হয় 4
তাই হয়, (> number 1)
শাখা অনুসরণ করা হয়। আমরা একটি এক্সপ্রেশন তৈরি করা শুরু করি (+ 4 ...
এবং সাথে ফাংশনটি কল করি (1- 4)
, অর্থাৎ (triangle-using-cond 3)
।
এখন number
হয় 3
, এবং ফল (+ 3 (triangle-using-cond 2))
। মোট ফলাফল প্রকাশ হয় (+ 4 (+ 3 (triangle-using-cond 2)))
।
number
হয় 2
, এখন তাই অভিব্যক্তি(+ 4 (+ 3 (+ 2 (triangle-using-cond 1))))
number
হয় 1
এখন, এবং আমরা নিতে (= number 1)
শাখা, একটি বিরক্তিকর ফলে 1
। পুরো এক্সপ্রেশন হয় (+ 4 (+ 3 (+ 2 1)))
। আউট ভিতর থেকে মূল্যায়ন এবং আপনি পান: (+ 4 (+ 3 3))
, (+ 4 6)
, বা শুধু 10
।
triangle-using-cond
যাই হোক না কেন তার চেয়ে কম 1 যুক্তি যুক্ত করে ফাংশন দ্বারা ফিরিয়ে দেওয়া মানটিতে সংখ্যা যুক্ত করুন। শর্তগুলি ক, খ এবং তারপরে সি এর ক্রম অনুসারে যায় - প্রথমে যা কিছু ম্যাচ হয়, সেখানেই বাক থামে।