A+B:-findall(X,(append(X,Y,A),append(Y,X,A)),[_|Z]),length(Z,B).
এটি অনলাইন চেষ্টা করুন!
একটি প্রাকটিকে সংজ্ঞায়িত করে +/2যা তার প্রথম যুক্তি ( A) হিসাবে একটি অক্ষর (অক্ষর কোডের তালিকার আকারে ) নেয় এবং তার দ্বিতীয় যুক্তি ( B)টিকে সর্বোচ্চ অর্ডারের প্রতিসম ঘূর্ণনের ক্রমে সেট করে ।
ব্যাখ্যা
এই প্রোগ্রামটি এই সত্যটি ব্যবহার করে যে কোনও স্ট্রিংয়ের প্রতিসাম্য ঘূর্ণনের সেটটি একটি চক্রীয় গোষ্ঠী এবং তাই প্রতিসম ঘূর্ণনের সেটটির ক্রমটি সর্বোচ্চ ক্রমের প্রতিসম ঘূর্ণনের ক্রমের সমান। সুতরাং প্রোগ্রামটি ইনপুট স্ট্রিংয়ে প্রতিসাম্য ঘূর্ণনের মোট সংখ্যা খুঁজে বার করে কাঙ্ক্ষিত ফলাফল গণনা করতে সক্ষম হয়।
কোড ব্যাখ্যা
ভারী উত্তোলনের সিংহভাগই findall/3প্রিডিটকে কল করে সম্পন্ন হয় । findall/3সম্পৃক্ত প্রথম আর্গুমেন্ট (জন্য সব বিভিন্ন সম্ভাব্য মান খুঁজে বের করে Xএই ক্ষেত্রে) যেমন যে অভিব্যক্তি দ্বিতীয় যুক্তি হিসেবে দেওয়া (সত্য (append(X,Y,A),append(Y,X,A)), সেটিতে আরো পরে)। শেষ অবধি এটি Xচূড়ান্ত যুক্তিতে ( [_|Z]) যুক্তি হিসাবে এই সম্ভাব্য প্রতিটি মানকে সংরক্ষণ করে ।
অভিব্যক্তি মধ্যে পাস findall/3দ্বিতীয় arugment হিসেবে (append(X,Y,A),append(Y,X,A))ব্যবহার append/3করে নির্দিষ্ট করার সম্পৃক্ত Xকিছু এখনো অনির্দিষ্ট সঙ্গে ঘনিভূত Yসমান হতে হবে A, ইনপুট স্ট্রিং, এবং একই যে Yসঙ্গে ঘনিভূত Xআবশ্যক এছাড়াও সমান হতে A। এর অর্থ এটির Xকিছু উপসর্গ হতে হবে Aএটি যদি সামনে থেকে সরানো Aহয় এবং পিছনে যুক্ত করা হয় তবে ফলস্বরূপ স্ট্রিংটি সমান A। Xএই সম্পত্তির সাথে গুলিগুলির সেটটির প্রতিসাম্যিক ঘূর্ণনের সাথে প্রায় একের সাথে চিঠিপত্র থাকে A। ডাবল কাউন্টিংয়ের সর্বদা ঠিক একটি ক্ষেত্রে রয়েছে যা খালি স্ট্রিং এবং Aএর উপসর্গ উভয়ের কারণে ঘটেAযা 0-ঘূর্ণনের সাথে সামঞ্জস্য করে A। যেহেতু 0এর -rotation Aসবসময় প্রতিসম ফলে তালিকার দৈর্ঘ্য হল Xs থেকে findall/3উপর প্রতিসম ঘুর্ণন সংখ্যার চেয়ে এক বেশি হবে A।
দ্বিগুণ গণনা সমস্যা সমাধানের জন্য, আমি findall/3প্রেডিকেটের তৃতীয় যুক্তির সাথে প্যাটার্ন মিলটি ব্যবহার করি use প্রোলোগের তালিকায় তাদের মাথার জোড়া (প্রথম উপাদান) এবং তাদের লেজ (বাকি অংশ) হিসাবে উপস্থাপিত হয়। সুতরাং এমন [_|Z]একটি তালিকা প্রতিনিধিত্ব করে যার লেজ সমান Z। এর অর্থ Zহ'ল দৈর্ঘ্যটি প্রিডিকেট দ্বারা পাওয়া উপসর্গের সংখ্যার চেয়ে কম findall/3এবং এইভাবে প্রতিসাম্যের ঘূর্ণনের সংখ্যার সমান A। অবশেষে, আমি দৈর্ঘ্যের উপর length/2সেট Bকরতে প্রিডিকেট ব্যবহার করি Z।