হাস্কেলের সিক ক্রিয়াকলাপের সাথে ফাংশনগুলির জন্য কি এটা-সমতুল্যতা উপযুক্ত?


14

থিম: ধরে নেওয়া যাক ETA-সমানতা আমরা যে আছে (\x -> ⊥) = ⊥ :: A -> B

প্রুফ: ⊥ = (\x -> ⊥ x)এটা-সমতা এবং (\x -> ⊥ x) = (\x -> ⊥)ল্যাম্বদার নীচে হ্রাস দ্বারা।

হাস্কেল 2010 রিপোর্ট, বিভাগ 6.2 seqদুটি সমীকরণ দ্বারা ফাংশন নির্দিষ্ট করে :

seq :: a -> b -> খ
seq ⊥ b = ⊥
seq আব = খ, যদি একটি ≠ ⊥ ⊥

এরপরে এটি দাবি করে "ফলস্বরূপ, \ \ x -> ⊥ এর মতো নয়, যেহেতু সিক তাদের পার্থক্য করতে ব্যবহার করা যেতে পারে।"

আমার প্রশ্ন, এটি কি সত্যই সংজ্ঞাটির পরিণতি seq?

অন্তর্নিহিত যুক্তিটি মনে হয় যে seqএটি যদি আপোনাযোগ্য হয় seq (\x -> ⊥) b = ⊥। তবে আমি প্রমাণ করতে সক্ষম হইনি যে এরকম একটি seqআপত্তিহীন হবে। এটি আমার কাছে মনে হয় এটি seqএকঘেয়ে এবং অবিচ্ছিন্ন উভয়ই এটি গণনাযোগ্য হওয়ার রাজ্যে রাখে।

একটি অ্যালগরিদম যে কিছু জন্য অনুসন্ধান করতে চেষ্টা করেন SeQ যথাসাধ্য কাজ যেমন বাস্তবায়ন xযেখানে f x ≠ ⊥ডোমেইনের enumerating দ্বারা f⊥ থেকে শুরু। যদিও এমন বাস্তবায়ন, এমনকি যদি কিছুটা হলেও সম্ভব হয়, একবার আমরা seqবহুবর্ণ তৈরি করতে চাই তবে বেশ লোমশ হয়ে যায় ।

এমন কোনও প্রমাণ আছে seqযা সনাক্ত (\x -> ⊥)করার মতো কোনও গণনাযোগ্য নেই ⊥ :: A -> B? বিকল্পভাবে, এর কোনও নির্মাণ রয়েছে seqযার সাথে সনাক্ত (\x -> ⊥)করা যায় ⊥ :: A -> B?

উত্তর:


6

প্রথমে আসুন কীভাবে λ x থেকে seqআলাদা করা যায় সে সম্পর্কে সুস্পষ্ট হয়ে :λx.

bottom :: a
bottom = bottom

eta :: a -> b
eta x = bottom

-- This terminates
fortytwo = seq eta 42

-- This does not terminate
infinity = seq bottom 42

সুতরাং এটি পরীক্ষামূলক সত্য যে এবং λ x এ রয়েছে : তৎপরতা চালাচ্ছে এমন পার্থক্যসূচক হয়। এটি হ'ল সত্য এবং একটি স্পষ্টতই এটি গণনাযোগ্য কারণ হাস্কেল এটিকে গণনা করে। হাস্কেল সম্পর্কে অনেক কিছু। আপনি হাস্কেল ডকুমেন্টেশনের খুব নির্দিষ্ট ফ্রেসিং সম্পর্কে জিজ্ঞাসা করছেন। আমি এটি বলেছিলাম যে দুটি প্রদত্ত সমীকরণকে সন্তুষ্ট করার কথা বলে এটি পড়েছি , তবে এই দুটি সমীকরণের সংজ্ঞাটির জন্য এটি যথেষ্ট নয় । এখানে কেন, আমি কি তোমাদেরকে দুটি মডেল দিতে পারে (কেবল টাইপ) λ -calculus যাλx.seqseqseqλseq গণনীয় এবং সন্তুষ্ট দেওয়া সমীকরণ কিন্তু মডেলের এক এবং λ এক্স λx. সম্মত হন, অন্যদিকে তারা তা করে না।

একটি সহজ ডোমেইন-তত্ত্বীয় মডেল যেখানে সালে -expressions একটানা ফাংশন ডোমেইনে ব্যাখ্যা করা হয় [ ডি ] আমরা আছে =λ[DE] , স্পষ্টতই। সমস্ত কিছুকে কম্পিউটাবল করে তুলতে কার্যকর স্কট ডোমেন বা এমন কিছু নিন। যেমন একটি মডেলসংজ্ঞায়িত করা সহজ।=λx.seq

আমরা মডেল থাকতে পারে -calculus যা আলাদা এবং λ এক্স , এবং অবশ্যই η -rule ধরে রাখতে পারে না। উদাহরণ হিসেবে বলা যায়, আমরা ডোমেইনে ফাংশন ব্যাখ্যা এটা করতে পারেন [ ডি ] , অর্থাত্, একটি অতিরিক্ত নীচে সঙ্গে ফাংশন স্থান ডোমেইন সংযুক্ত করা হয়েছে। এখন হয়, ভাল, নীচে [ ডি ] , যখন λ এক্স এটির উপরে উপাদান। এগুলি প্রয়োগের মাধ্যমে আলাদা করা যায় না কারণ তারা উভয়ই মূল্যায়ন করেλseqλx.η[DE][DE]λx. যা প্রয়োগ করেন তা নয় (তারা এক্সটেনশনালি সমান )। তবে আমাদের কাছে seqডোমেনগুলির মধ্যে একটি মানচিত্র হিসাবে রয়েছে এবং এটি আলওয়্যাস অন্যান্য সমস্ত উপাদান থেকে নীচে পৃথক করে।


1
এটি একটি পরীক্ষামূলক সত্য যে জিএইচসি এবং / অথবা হাগস এবং এক্স ⊥x ⊥ এ ⊥ ভাগ্যক্রমে, হাস্কেল কোনও প্রয়োগের মাধ্যমে সংজ্ঞায়িত হয়নি। আমার প্রশ্নটি পরামর্শ দিচ্ছে যে হাস্কেলকে সেক সহকারে সংক্ষিপ্ত বিবরণ দেওয়া হয়েছে।
রাসেল ও'কনোর

আপনি "কার্যকর স্কট ডোমেনস" বলতে কী বোঝাতে চেয়েছেন তার একটি রেফারেন্স দিতে পারেন সম্ভবত এটি বোঝা যাচ্ছে না যে আংশিক ক্রমটি সিদ্ধান্ত গ্রহণযোগ্য। এছাড়াও, এসটিএলসি বহুমুখী নয়, তবে হাস্কেল। সাধারণত হাস্কেলকে সিস্টেম এফ বা এর কোনও একটি ডেরাইভেটিভে ব্যাখ্যা করা হয়। এটি কীভাবে আপনার যুক্তিকে প্রভাবিত করবে?
রাসেল ও'কনোর

আমার পিএইচডি বিভাগের 1.1.4। গবেষণামূলক andrej.com/thesis/thesis.pdf এর কার্যকর স্কট ডোমেনগুলির একটি সংক্ষিপ্ত সংজ্ঞা রয়েছে এবং এটি নিখরচায় উপলব্ধ প্রথম গুগল হিট।
আন্দ্রেজ বাউর

2
আপনি যদি আমার পক্ষে প্রমাণ লিখেন তবে আপনি হাস্কেল 98 এর একটি বাস্তবায়ন পাবেন যেখানে এটা-রুল হ'ল (ফোল্ডার (\ আব -> ফাব) জেড এক্স) এর (ফোল্ডার এফজেড এক্স) এর জন্য অপ্টিমাইজ করার অনুমতি দেয় যা হে থেকে অ্যাসিম্পটোটিক পারফরম্যান্স বৃদ্ধি করে (n ^ 2) থেকে ও (এন) (দেখুন ghc.haskell.org/trac/ghc/ticket/7436 )। আরও জোর করে এটি একটি নিউটাইপওয়্যার্পার ইন (নিউ টাইপওয়্যার্পার। চ) এটা-প্রসারিত করার জন্য চাপ না দিয়ে অপ্টিমাইজ করার অনুমতি দেবে এবং বর্তমানে জিএইচসিতে নিউ টাইপগুলি দ্বারা আরোপিত কিছু অ্যাসিম্পটিক পারফরম্যান্স জরিমানা রোধ করবে (উদাহরণস্বরূপ ফোল্ডারের ব্যবহারে)।
রাসেল ও'কনোর

1
আসলে, আপনি কি নিশ্চিত যে আপনার কম্পাইলার করতে হবে সবসময় কার্যকরী যেমন । অর্থাৎ আপনি সবসময় চুক্তি প্রয়োজন এবং তাই নীতি প্রলুব্ধ করা যেতে পারে λ এক্স এবং , "মাঝে মাঝে পার্থক্যসূচক" হবে একটি খুব বিপজ্জনক অবস্থা। এটি কেস না হওয়ার বিষয়টি নিশ্চিত করতে আপনার λx.λx.seq একটি চৌকস উপায়ে যার মধ্যে প্রতিটি আপনার ফাংশনকে একটি মৌলিক উপাদানকে প্রয়োগ করে অসীম বহু প্রক্রিয়া তৈরি করা জড়িত। যদি কোনও প্রক্রিয়া শেষ হয়, তবে seqএগিয়ে যেতে পারে। আমরা ক্রমানুসারে এটি করতে পারি কিনা তা আকর্ষণীয় হবে। হুম।
আন্দ্রেজ বাউয়ার

2

নোট করুন যে নির্দিষ্টকরণের জন্য seqআপনি উদ্ধৃত করেন নি এর সংজ্ঞা নয়। হাস্কেল রিপোর্টটির উদ্ধৃতি দিতে "ফাংশন সেক সমীকরণগুলি দ্বারা সংজ্ঞায়িত করা হয়েছে : [এবং তারপরে আপনি যে সমীকরণগুলি দিচ্ছেন]"।

প্রস্তাবিত আর্গুমেন্টটি মনে হয় যে Seq (\ x -> ⊥) বি = ⊥ থাকলে সীমটি আপমুক্ত হবে ⊥

এই জাতীয় আচরণের স্পেসিফিকেশন লঙ্ঘন করবে seq

গুরুত্বপূর্ণভাবে, যেহেতু seqবহুমুখী,seq তাই দুটি পরামিতির যে কোনও একটিতে ডিকনস্ট্রাক্টরের (প্রজেকশনগুলি / প্যাটার্ন ম্যাচিং ইত্যাদি) হিসাবে সংজ্ঞা দেওয়া যায় না।

এমন কোনও প্রমাণ আছে যে কোনও গণনীয় সেক নেই যা (\ x -> ⊥) ⊥ :: এ -> বি দিয়ে চিহ্নিত করে?

যদি seq' (\x -> ⊥) b, কেউ মনে করতে পারে যে আমরা প্রথম মানটিকে কিছু মান (যা একটি ফাংশন) প্রয়োগ করতে পারি এবং তারপরে ⊥ আউট করতে পারি। তবে, প্যারামেট্রিক পলিমারফিক টাইপের কারণে seqকোনও ফাংশন মান (এমনকি এটি কিছু ব্যবহারের জন্য এক হিসাবে হয়ে গেলেও) প্রথম পরামিতিটি কখনই সনাক্ত করতে পারে না seq। প্যারামিমেট্রিটি মানে আমরা প্যারামিটারগুলি সম্পর্কে কিছুই জানি না। তদুপরি, seqকখনই কোনও অভিব্যক্তি নিয়ে সিদ্ধান্ত নিতে পারে না "এটি কি ⊥?" (সিএফ। হাল্টিং সমস্যা) seqকেবলমাত্র এটির মূল্যায়নের চেষ্টা করতে পারে এবং নিজেই ⊥ এ ডাইভার্জ করতে পারে ⊥

কি seqকরে, প্রথম প্যারামিটার নির্ণয় করা (পুরোপুরি নয়, কিন্তু "দুর্বল মাথা স্বাভাবিক ফর্ম" [1], অর্থাত উপরের সবচেয়ে কন্সট্রাকটর করতে) তাহলে দ্বিতীয় প্যারামিটারটি আসতে হয়। যদি প্রথম প্যারামিটারটি ঘটে (যেমন, একটি নন-টার্মিনেটিং গণনা) তবে তা মূল্যায়নের কারণ হয়seq অ-সমাপ্তি এবং এইভাবে seq ⊥ a = ⊥

[1] সেকের উপস্থিতিতে বিনামূল্যে উপপাদ্য - জোহান, ভয়েগটল্যান্ডার http://www.iai.uni-bonn.de/~jv/p76-voigtlaender.pdf


আমি সেকের জন্য যে স্পেসিফিকেশন দিচ্ছি তা হ'ল সেকের সংজ্ঞা কারণ কারণ হ্যাস্কেল 2010 এর প্রতিবেদনটি বিভাগ 6.2-এ বলেছে says আপনার সেকের অপারেশন সংজ্ঞাটি হাস্কেল ২০১০ রিপোর্ট দ্বারা সমর্থিত নয়: "হেড নরমাল ফর্ম" শব্দটি প্রতিবেদনে একবার সম্পূর্ণ ভিন্ন প্রসঙ্গে দেখা যায়। এটি আমার বোঝার সাথেও বেমানান যে জিএইচসি প্রায়শই প্রথম যুক্তির আগে সেকের দ্বিতীয় তর্কটিকে কমিয়ে দেয়, বা প্রথম যুক্তিটি একেবারেই হ্রাস করা যাবে না কারণ কঠোরতা বিশ্লেষক প্রমাণ করেছেন যে এটি স্থিতিশীলভাবে নীচে নয়।
রাসেল ও'কনোর

প্যারামিমেট্রিটি সরাসরি বলে না যে আমরা কোনও ডিকনস্ট্রাক্টর প্রয়োগ করতে পারি না, বা এটি বলে না যে আমরা কোনও ফাংশন মান সহ প্রথম পরামিতিটি কখনই চিহ্নিত করতে পারি না। সমস্ত পরামিতিটি পলিমারফিক ল্যাম্বা ক্যালকুলাসের জন্য ফিক্সপয়েন্টগুলির সাথে বলে যে সিক কঠোর ক্রিয়াকলাপগুলি শোষণ করতে পারে বা আরও সাধারণভাবে শর্তগুলির জন্য নির্দিষ্ট কঠোর সম্পর্কের ক্ষেত্রে সেক থাকে। আমি স্বীকার করি এটি প্রশংসনীয় যে প্যারাম্যাট্রিকটিটি প্রমাণ করতে ব্যবহৃত হতে পারে (\ x -> ⊥) & ne; ⊥, তবে আমি একটি কঠোর প্রমাণ দেখতে চাই।
রাসেল ও'কনোর

কোনও ফাংশনের ক্ষেত্রে f : forall a . a -> T(যেখানে Tঅন্য কোনও ধরণের থাকে) তারপরে fকোনও ডিকনস্ট্রাক্টররকে তার প্রথম যুক্তিতে প্রয়োগ করতে পারবেন না কারণ কোন ডিকনস্ট্রাক্টর প্রয়োগ করতে হবে তা এটি জানেন না। প্রকারভেদে আমরা "কেস" করতে পারি না। আমি উপরের উত্তরটি উন্নত করার চেষ্টা করেছি ( seqসাধারণ ফর্মটি মূল্যায়নের তথ্যের উদ্ধৃতি সহ )।
ডরচার্ড

আমি সময় পেলে কঠোর প্রমাণ করার চেষ্টা করতে পারি (রেইনল্ডসের স্টাইলে সম্পর্কগুলি ব্যবহার করা ভাল পদ্ধতির হতে পারে)।
ডারচার্ড

@ রাসেলও'কনোনার: সেকের বর্ণনাটি এই আচরণগুলির সাথে "বেমানান" নয়, এটি কেবল একটি অপারেশনাল স্পেসিফিকেশন (এবং আচরণগুলি অপ্টিমাইজেশন যা চূড়ান্ত ফলাফল পরিবর্তন করে না)।
ব্লেজারব্লেড

2

আমি নিশ্চিত না যে হাসকল রিপোর্টে শব্দার্থবিজ্ঞানকে কঠোরভাবে সংজ্ঞা দিয়েছে কি সম্পর্কে এই প্রশ্নটি নিষ্পত্তি করার জন্য λএক্সমানে করা উচিত। তবে, হাস্কেলের পাশাপাশি অন্যান্য সমস্ত অলস কার্যকরী ভাষাগুলির সাধারণ অভিজ্ঞতা, যদি আপনি তাদের এমন একটি শব্দ মূল্যায়ন করতে বলেন যা প্রতিনিধিত্ব করেλএক্স, মূল্যায়ন সমাপ্ত। হাস্কেল রিপোর্টে "ফলাফল হিসাবে ..." মন্তব্যটি ধরেই নেওয়া হচ্ছে যে পাঠক এটি জানেন knows

স্যামসন আব্রামস্কি অনেক আগে এই বিষয়টি বিবেচনা করেছিলেন এবং " দ্য অলস ল্যাম্বডা ক্যালকুলাস " নামে একটি নিবন্ধ লিখেছিলেন । সুতরাং, আপনি যদি আনুষ্ঠানিক সংজ্ঞা চান, আপনি এখানে দেখতে পারেন this


1
স্পষ্টতই, এই বিশদগুলি কেবলমাত্র "হাস্কেল কার্নেল" এর মধ্যে বিযুক্ত হয়ে সংজ্ঞায়িত করা হয়। এটি সংজ্ঞায়িত কোথায়? প্রতিবেদনে বলা হয়েছে, সেকেন্ডে ১.২ : "যদিও কার্নেলটি আনুষ্ঠানিকভাবে সুনির্দিষ্টভাবে নির্দিষ্ট করা হয়নি, তবে এটি ল্যাম্বডা ক্যালকুলাসের মূলত একটি সরল ডারোটেশনাল সিঁটমিকের সাথে সামান্য সুগারযুক্ত রূপ। প্রতিটি সিনট্যাক্টিক কাঠামোর কার্নেলের মধ্যে অনুবাদ সিনট্যাক্স চালু হওয়ার সাথে সাথে দেওয়া হয়" "
ব্লেসরব্ল্যাড

হাস্কেল 2010 এর প্রতিবেদনটি আশ্চর্যজনকভাবে একই কথা বলেছে ।
ব্লেজারব্লেড

আব্রামস্কির রেফারেন্সের জন্য ধন্যবাদ! এটি কীভাবে প্রশ্নের উত্তর দেয় তা দেখার জন্য আমি এটিকে স্কিম করেছিলাম এবং আমি নিম্নলিখিত উত্তরটি নিয়ে এসেছি: cstheory.stackexchange.com/a/21732/989
ব্লেজারব্ল্যাড

2

প্রমাণ করে λ x। Rams ‌ ≠ Ω ইন তার অলস ল্যাম্বডা ক্যালকুলাস তত্ত্বের জন্য আব্রামস্কি একটি লক্ষ্য নির্ধারণ করেছেন ( উদয় রেড্ডির দ্বারা ইতিমধ্যে উদ্ধৃত তাঁর কাগজের পৃষ্ঠা 2 ), কারণ এগুলি দু'জনেই দুর্বল মাথার স্বাভাবিক আকারে। ২.7 সংজ্ঞা অনুসারে, তিনি স্পষ্টভাবে আলোচনা করেছেন যে এটি-হ্রাস-এক্স। এম x → এম সাধারণত বৈধ নয়, তবে এম প্রতিটি পরিবেশে এম শেষ করলে এটি সম্ভব। এর অর্থ এই নয় যে এম অবশ্যই মোট ফাংশন হতে পারে - কেবল এম এর মূল্যায়ন করা অবশ্যই শেষ করতে হবে (উদাহরণস্বরূপ ল্যাম্বডায় হ্রাস করে)।

আপনার প্রশ্নটি ব্যবহারিক উদ্বেগ (পারফরম্যান্স) দ্বারা অনুপ্রাণিত বলে মনে হচ্ছে। তবে, যদিও হাস্কেল রিপোর্ট সম্পূর্ণ পরিষ্কারের চেয়ে কম হতে পারে, আমি সন্দেহ করি যে সমান λ x। "এটির সাথে" হাস্কেলের একটি কার্যকর বাস্তবায়ন তৈরি করবে; এটি হাস্কেল '98 কার্যকর করে কিনা তা বিতর্কযোগ্য নয়, তবে এই মন্তব্যটি দেওয়া হলেও এটি স্পষ্ট যে লেখকরা এটির বিষয়টি হতে চেয়েছিলেন।

সবশেষে, স্বেচ্ছাসেবীরা কীভাবে একটি স্বেচ্ছাসহ ইনপুট টাইপের জন্য উপাদান তৈরি করবেন? (আমি জানি কুইকচেক তার জন্য স্বেচ্ছাসেবী টাইপক্লাস সংজ্ঞায়িত করে তবে আপনাকে এখানে এ জাতীয় সীমাবদ্ধতা যুক্ত করার অনুমতি নেই)। এটি প্যারামিট্রিকটি লঙ্ঘন করে।

আপডেট হয়েছে : আমি এই অধিকারটি কোড করার ব্যবস্থা করিনি (কারণ আমি হাস্কলে তেমন সাবলীল নই), এবং এটি ঠিক করার জন্য নেস্টেড runSTঅঞ্চলগুলির প্রয়োজন বলে মনে হচ্ছে । আমি এ জাতীয় নির্বিচার উপাদানগুলি সংরক্ষণ করতে, পরে সেগুলি পড়তে এবং সেগুলি সর্বজনীনভাবে উপলব্ধ করার জন্য একটি একক রেফারেন্স সেল (এসটি মোনাদে) ব্যবহার করার চেষ্টা করেছি। প্যারামিট্রিকটিটি প্রমাণ করে যে break_parametricityনীচে সংজ্ঞায়িত করা যায় না (নীচে ফিরে যাওয়া ছাড়া, উদাহরণস্বরূপ একটি ত্রুটি), যখন এটি আপনার প্রস্তাবিত সেক উত্পাদিত উপাদানগুলি পুনরুদ্ধার করতে পারে।

import Control.Monad.ST
import Data.STRef
import Data.Maybe

produce_maybe_a :: Maybe a
produce_maybe_a = runST $ do { cell <- newSTRef Nothing; (\x -> writeSTRef cell (Just x) >> return x) `seq` (readSTRef cell) }

break_parametricity :: a
break_parametricity = fromJust produce_maybe_a

আমাকে স্বীকার করতে হবে যে আমি এখানে প্রয়োজনীয় প্যারামিট্রিসিটি প্রুফকে আনুষ্ঠানিক করার বিষয়ে কিছুটা অস্পষ্ট, তবে প্যারামিট্রিকটির এই অনানুষ্ঠানিক ব্যবহার হাস্কেলের কাছে প্রমিত; তবে আমি ডেরেক ড্রেয়ারের লেখাগুলি থেকে শিখেছি যে এই শেষ বছরগুলিতে প্রয়োজনীয় তত্ত্বটি দ্রুত কার্যকর করা হচ্ছে।

সম্পাদনাগুলি:

  • এমএল-জাতীয়, অপরিহার্য এবং অপরিশোধিত ভাষার জন্য পড়াশোনা করা, বা প্যারামিট্রিকটির শাস্ত্রীয় তত্ত্ব হাস্কেলের আওতায় আছে কিনা সেগুলি আপনার কী প্রয়োজন, তাও আমি নিশ্চিত নই।
  • এছাড়াও, আমি ডেরেক ড্রায়ারকে কেবল উল্লেখ করেছি কারণ আমি পরে উদয় রেড্ডির কাজ জুড়ে এসেছি - আমি সম্প্রতি এটি সম্পর্কে "রেইনল্ডসের সারাংশ" থেকে শিখেছি। (আমি কেবল গত একমাসে প্যারামিট্রিকটির উপর সত্যিই সাহিত্য পড়া শুরু করেছি)।

(\x -> writeSTRef cell (Just x) >> return x)এলোমেলো ইনপুটগুলির মূল্যায়ন সেলে কোনও রচনা চালায় না। কেবলমাত্র এসটি কমান্ডগুলি যা এটিকে পাসের অনুক্রমগুলিতে পরিণত করে runSTতা কার্যকর করা হয়। একইভাবে, চলমান main = (putStrLn "Hello") `seq` (return ())প্রদর্শন উপর কিছু মুদ্রণ করে না।
রাসেল ও'কনর

@ রাসেলও'কনর, অবশ্যই আপনি ঠিক বলেছেন - পরীক্ষা করা শক্ত কারণ যেহেতু আমাদের সাথে আলোচিত আচরণটি সেকের নেই। তবে আমি এখনও মনে করি উত্পাদক উপাদানগুলি প্রতি সেমাই প্যারামিট্রিসিটি ভেঙে দেয়। আমি উদাহরণটি দেওয়ার জন্য উত্তরটি ঠিক করার চেষ্টা করব।
ব্লেজারব্ল্যাড

এইচএম, উত্তরের সুস্পষ্ট সমাধানের জন্য রানস্টেস্ট অঞ্চলগুলি বাসা বাঁধতে এবং অভ্যন্তরীণ অঞ্চলে বাইরের অঞ্চল থেকে ঘরটি ব্যবহার করা দরকার, তবে এটি অনুমোদিত নয়।
ব্লেজারব্লেড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.