শেপলেস এ নাট টাইপের সীমা


151

আকারহীন, নাট টাইপ একটি ধরণের স্তরে প্রাকৃতিক সংখ্যা এনকোড করার একটি উপায় উপস্থাপন করে। এটি নির্দিষ্ট আকারের তালিকার জন্য উদাহরণস্বরূপ ব্যবহৃত হয়। এমনকি আপনি টাইপ স্তরের গণনাও করতে পারেন, উদাহরণস্বরূপ Nউপাদানগুলির তালিকায় উপাদানের একটি তালিকা যুক্ত করুন এবং Kউপাদানগুলি সংকলনের সময় পরিচিত একটি তালিকা ফিরে পাবেন N+K

এই প্রতিনিধিত্ব কি বৃহত সংখ্যার প্রতিনিধিত্ব করতে সক্ষম, যেমন 1000000বা 2 53 , বা এর ফলে স্কালা সংকলকটি হাল ছেড়ে দেবে?


21
মাইলসের NE স্কাল উপস্থাপনা গত বছর এই প্রশ্নের সমাধান করে, এবং সংক্ষিপ্ত উত্তরটি হ'ল স্কালায় ধরণের স্তরে বা কমপক্ষে 2.10 — সিঙ্গলটন প্রকারগুলি ব্যবহার করে বড় সংখ্যক প্রতিনিধিত্ব করা সম্ভব হবে তবে এটি সম্ভবত এটির পক্ষে উপযুক্ত হবে না । শেপলেস ২.০ বর্তমানে এখনও চার্চ এনকোডিং ব্যবহার করে যা সংকলকটি শেষ হওয়ার আগে আপনাকে এক হাজার বা আরও বেশি পরিমাণে পাবেন।
ট্র্যাভিস ব্রাউন

3
আমি আজ পরে আরও কিছু প্রসঙ্গে একটি উত্তর লেখার চেষ্টা করব। পার্শ্ব নোট হিসাবে, আপনার যদি আরও বড় ধরণের স্তরের সংখ্যার প্রয়োজন হয় তবে পূর্ণসংখ্যার সিঙ্গলটন প্রকারের সাথে কাজ করা খুব কঠিন নয় example উদাহরণস্বরূপ এখানে আমার ব্লগ পোস্ট বা শেপলেসে সিঙ্গলটন কার্যকারিতা দেখুন
ট্র্যাভিস ব্রাউন

2
আপনি যদি বড় ধরণের-স্তরের সংখ্যায় পাটিগণিত করতে চান তবে আপনি সেগুলি বিটের লিঙ্কযুক্ত তালিকা হিসাবে প্রয়োগ করতে পারেন।
করোল এস

1
@ কারোলস আমার কাছে সেই কৌশলটি বাস্তবায়ন হয়েছে! আমি যদিও এটা অখাদ্য যদি না কেউ সাহায্য করবে সমাধান, যদি কেউ আগ্রহী হয় কদাকার তা অবদান খুশি হবেন stackoverflow.com/questions/31768203/...
beefyhalo

2
দেখে মনে হচ্ছে স্ট্যাকওভারফ্লো / প্রশ্নগুলি / ৩১6868৮০২০৩ / ঠিক হয়ে গেছে, তাই আপনি কী কোডটি অবদান রাখতে পারেন এবং নিজের উত্তর দিয়ে প্রশ্নটি বন্ধ করতে পারেন?
অ্যান্ড্রি কুবা

উত্তর:


17

আমি নিজে চেষ্টা করব। ট্র্যাভিস ব্রাউন বা মাইলস সাবিনের কাছ থেকে আমি আরও ভাল উত্তরটি সানন্দে গ্রহণ করব।

নাট বর্তমানে বড় সংখ্যার প্রতিনিধিত্ব করতে ব্যবহার করা যাবে না

নাটের বর্তমান বাস্তবায়নে মানটি নেস্টেড শেপলেস আকারের সাথে মিলে যায় ucসুক [] প্রকারগুলি:

scala> Nat(3)
res10: shapeless.Succ[shapeless.Succ[shapeless.Succ[shapeless._0]]] = Succ()

সুতরাং 1000000 সংখ্যাটি উপস্থাপন করার জন্য, আপনার কাছে এমন এক ধরণের থাকবে যা 1000000 স্তর গভীর নীচে অবস্থিত, যা অবশ্যই স্কেল সংকলককে ফুটিয়ে তুলবে। বর্তমান সীমাটি পরীক্ষা-নিরীক্ষার থেকে প্রায় 400 বলে মনে হচ্ছে, তবে যুক্তিসঙ্গত সংকলনের সময়গুলি সম্ভবত 50 এর নীচে থেকে যাওয়া ভাল।

যাইহোক, টাইপ পর্যায়ে বৃহৎ পূর্ণসংখ্যার বা অন্যান্য মান এনকোড একটি উপায় হল, প্রদত্ত যে আপনি তাদের উপর হিসাবগুলি চাই না । আমি যতদূর জানি তাদের সাথে কেবলমাত্র আপনি যা করতে পারেন তা হ'ল তারা সমান কিনা তা পরীক্ষা করা। নিচে দেখ.

scala> type OneMillion = Witness.`1000000`.T
defined type alias OneMillion

scala> type AlsoOneMillion = Witness.`1000000`.T
defined type alias AlsoOneMillion

scala> type OneMillionAndOne = Witness.`1000001`.T
defined type alias OneMillionAndOne

scala> implicitly[OneMillion =:= AlsoOneMillion]
res0: =:=[OneMillion,AlsoOneMillion] = <function1>

scala> implicitly[OneMillion =:= OneMillionAndOne]
<console>:16: error: Cannot prove that OneMillion =:= OneMillionAndOne.
       implicitly[OneMillion =:= OneMillionAndOne]
                 ^

এটি উদাহরণস্বরূপ অ্যারে [বাইট] এ বিট অপারেশন করার সময় একই অ্যারে আকার প্রয়োগ করতে ব্যবহৃত হতে পারে।


এই উত্তরটি সবেমাত্র দেখেছেন, এবং +1, এটি একটি ভাল উদাহরণ। এটি লক্ষণীয় যে আপনি যেমন টাইপ ক্লাস যেমন যেমন শেপলেস এর সরবরাহ ops.nat.Sumকরতে পারেন যে দুটি টাইপ-লেভেল পূর্ণসংখ্যার একটি নির্দিষ্ট পরিমাণ ইত্যাদি রয়েছে (এগুলি কেবল ম্যাক্রোর দ্বারা সরবরাহ করতে হবে) witness
ট্র্যাভিস ব্রাউন

1
এখানে এমন একটি Concatশ্রেণীর উদাহরণ রয়েছে যা ম্যাক্রোর মাধ্যমে দুটি টাইপ-স্তরের স্ট্রিং সংশ্লেষ করতে দেয়। টাইপ-লেভেল পূর্ণসংখ্যার যোগফলের জন্য একটি টাইপ শ্রেণি সম্ভবত খুব মিল দেখায়।
ফ্র্যাঙ্ক এস থমাস

5

Natচার্চ এনকোডিং ব্যবহার করে শেপলেস এর এনকোড প্রাকৃতিক নম্বর টাইপ স্তরে। একটি বিকল্প পদ্ধতি হ'ল বিটগুলির টাইপ লেভেল এইচএললিস্ট হিসাবে প্রাকৃতিকদের প্রতিনিধিত্ব করা।

নিবিড় শৈলীতে এই সমাধানটি প্রয়োগ করে এমন ঘন পরীক্ষা করুন ।

আমি এটির জন্য কিছুক্ষণ কাজ করি নি, এবং এটির Lazyজন্য নির্লজ্জের ছিটানো দরকার ' এখানে এবং সেখানে যখন স্ক্যালাক ছেড়ে দেয় তবে ধারণাটি দৃ solid় হয় :)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.