অপরিবর্তনীয় ডেটা সহ ভাষাগুলিতে দ্বিগুণ সংযুক্ত বা বৃত্তাকার ডেটা স্ট্রাকচারের উপর ক্রিয়াকলাপ বাস্তবায়নের জন্য কাজ


11

আমি কীভাবে গ্রাফ তৈরি করতে এবং হাসকেলের উপর তাদের কয়েকটি স্থানীয় ক্রিয়াকলাপ করা যায় তা শিখতে চাই, তবে প্রশ্নটি হাস্কেলের ক্ষেত্রে সুনির্দিষ্ট নয় এবং গ্রাফের পরিবর্তে আমরা দ্বিগুণ সংযুক্ত তালিকা বিবেচনা করতে পারি।

প্রশ্ন: দ্বিগুণ সংযুক্ত তালিকা (বা অন্যান্য দ্বিগুণ লিঙ্কযুক্ত বা বিজ্ঞপ্তি তথ্য কাঠামো) বাস্তবায়নের একটি অদ্ভুত বা প্রস্তাবিত উপায় কী হবে এবং এর উপর এমন একটি ভাষায় অপারেশন যা মূলত অপরিবর্তনীয় ডেটা স্ট্রাকচারের (হাস্কেল, ক্লোজার, ইত্যাদি) সমর্থন এবং সমর্থন করে language ? বিশেষত, স্থান দ্বারা আপডেটগুলি কীভাবে ব্যবহার করতে হবে, যা ভাষা দ্বারা আনুষ্ঠানিকভাবে নিষিদ্ধ?

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

এর অর্থ কি এই যে এই কাজের জন্য অপরিবর্তনীয় ডেটা কেবল অনুপযুক্ত, এবং পরিবর্তনীয় ডেটার জন্য "নেটিভ" সমর্থন ব্যতীত ক্রিয়ামূলক ঘোষণামূলক ভাষাগুলি অত্যাবশ্যকীয়গুলির মতো ভাল নয়? বা, কিছু জটিল কাজ আছে?

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


সম্পর্কিত প্রশ্নাবলী


প্রাসঙ্গিক উদ্ধৃতি

বিশুদ্ধভাবে কার্যকরী প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি অনেক অ্যালগরিদমকে খুব সংক্ষিপ্তভাবে প্রকাশ করার অনুমতি দেয় তবে কয়েকটি অ্যালগরিদম রয়েছে যাতে জায়গাটিতে আপডেটযোগ্য রাষ্ট্র একটি গুরুত্বপূর্ণ ভূমিকা পালন করে বলে মনে হয়। এই অ্যালগরিদমের জন্য, খাঁটি-কার্যকরী ভাষাগুলি, যাদের আপডেটযোগ্য রাষ্ট্রের অভাব রয়েছে, সেগুলি অন্তর্নিহিতভাবে অদক্ষ বলে মনে হয় ( [পন্ডার, ম্যাকগিয়ার এবং এনজি, 1988] )।

- জন লঞ্চবারি এবং সাইমন পাইটন জোন্স, অলস কার্যকরী রাষ্ট্রের থ্রেড (1994), জন লঞ্চবারি এবং সাইমন পাইটন জোন্স, হাসকেলে স্টেট (1995)। এই কাগজপত্রগুলি STহাস্কেলের মধ্যে মোনাডিক ধরণের নির্মাতার পরিচয় করিয়ে দেয় ।



2
রেফারেন্সের জন্য ধন্যবাদ। আমি তার থিসিস পেয়েছি ।
আলেক্সি

এই কাগজটি প্রতিশ্রুতিবদ্ধ দেখাচ্ছে: ডেভিড কিং এবং জন লঞ্চবারি দ্বারা রচিত হাসেল (1994) এ অলস গভীরতার প্রথম অনুসন্ধান এবং লিনিয়ার গ্রাফ অ্যালগরিদমগুলি looks
অ্যালেক্সি

দেখে মনে হচ্ছে অ্যারেগুলির একই সমস্যাটি ডিফার্য প্যাকেজ দ্বারা সম্বোধন করা হয়েছে যা DiffArrayটাইপ প্রয়োগ করে । এ খুঁজছি উৎস এর diffarray প্যাকেজ, আমি 91 ঘটনার দেখতে unsafePerformIO। দেখে মনে হচ্ছে আমার প্রশ্নের উত্তরটি "হ্যাঁ, না, অপরিবর্তনীয় ডেটা বিশুদ্ধভাবে কার্যকরী ভাষাগুলি সাধারণত অস্থায়ী আপডেটগুলিতে নির্ভর করে এমন অ্যালগরিদমগুলি প্রয়োগ করার জন্য উপযুক্ত নয়"।
অ্যালেক্সি

(মধ্যে Haskell) আমার বর্তমান সমাধান একটি অভিধান (ব্যবহার করা Map, IntMapঅথবা HashMapএকটি সংগ্রহস্থলের) এবং নোড সংযুক্ত নোড ID- র ধারণ করা। "কম্পিউটার বিজ্ঞানের সমস্ত সমস্যা ইন্ডিয়ারেশনের অন্য স্তরের মাধ্যমে সমাধান করা যেতে পারে।"
অ্যালেক্সি

উত্তর:


6

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

অপরিবর্তনীয় কাঠামোর অর্থনৈতিক ট্রান্সফারিংয়ের সাধারণ উত্তর হ'ল লেন্স। ধারণাটি হ'ল আপনি তার অশোধিত অংশগুলি এবং বর্তমানে পরিবর্তিত টুকরা থেকে পরিবর্তিত অপরিবর্তনীয় কাঠামো পুনর্গঠনের জন্য পর্যাপ্ত তথ্য রাখতে পারেন এবং এটির পাশের নোডে নেভিগেট করতে পারেন।

আর একটি দরকারী কাঠামো একটি জিপার । (মজার অংশটি হ'ল লেন্স জিপারের জন্য প্রকারের স্বাক্ষরটি কোনও কাঠামোর স্বাক্ষরের একটি স্কুল-গণিতের ডেরাইভেটিভ))

এখানে কয়েকটি লিঙ্ক দেওয়া আছে।


1
জিপারের প্রয়োজনের উপর নির্ভর করে জীপারও কার্যকর হতে পারে
জে.কে.

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

1
@ অ্যালেক্সা: গ্রাফ রাইটিংয়ে আপনি কি ক্লিন লোকের কাজের সাথে পরিচিত? wiki.clean.cs.ru.nl/…
জর্জিও

1
@ অ্যালেক্সি: আমি জানি না: ক্লিন হ্যাস্কেলের এক কাজিন যা নিজে থেকেই তৈরি হয়েছিল। পার্শ্ব-প্রতিক্রিয়াগুলি মোকাবেলার জন্য এটির একটি পৃথক প্রক্রিয়াও রয়েছে (এএফআইএকে একে অনন্য প্রকার বলা হয়)। অন্যদিকে, বিকাশকারীরা গ্রাফ পুনর্লিখনের সাথে অনেক কাজ করেছে। সুতরাং তারা সেই সেরা ব্যক্তিদের মধ্যে থাকতে পারেন যারা গ্রাফের পুনর্লিখন এবং কার্যকরী প্রোগ্রামিং উভয় সম্পর্কেই জানেন।
জর্জিও

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

2

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

আমি এগিয়ে যাওয়ার উপায় হিসাবে সফ্টওয়্যার লেনদেনের মেমরির ব্যবহারের তদন্তের পরামর্শ দেব। পরিবর্তনীয় কাঠামো বাস্তবায়নের কার্যকর উপায় সরবরাহ করার পাশাপাশি এটি থ্রেড-সুরক্ষার জন্য খুব দরকারী গ্যারান্টিও সরবরাহ করে। এ মডিউল বিবরণ দেখুন https://hackage.haskell.org/package/stm এবং উইকি ওভারভিউ https://wiki.haskell.org/Software_transactional_memory


ধন্যবাদ, আমি এসটিএম সম্পর্কে জানার চেষ্টা করব। মনে হচ্ছে Haskell, আরও পদ্ধতি পরিবর্তনশীলতা এবং রাষ্ট্র (ঝ উপর হোঁচট খাওয়ার করেছি আছে মত MVar, State, ST), তাই আমি তাদের পার্থক্য জিনিসটা প্রয়োজন এবং ব্যবহারের উদ্দেশ্যে করব।
অ্যালেক্সি

@ আলেক্সি: সম্পর্কিত ভাল বক্তব্য ST, আইএমওর উত্তরে এটি উল্লেখ করা উচিত কারণ এটি একটি রাষ্ট্রীয় গণনা চালাতে, তারপরে রাষ্ট্রটিকে ফেলে দিতে এবং খাঁটি মূল্য হিসাবে ফলাফলটি বের করতে দেয়।
জর্জিও

@ জর্জিও, এসএসএম-এর STসাথে হাস্কেলকে একত্রে এবং নিষ্পত্তিযোগ্য উভয় অবস্থাতেই ব্যবহার করা সম্ভব ?
অ্যালেক্সি

আরও একটি পরিভাষা পরামর্শ: রচিত প্রধান আইও ক্রিয়াটি " মূল ফাংশন দ্বারা ফিরে আসে না " তবে mainভেরিয়েবলের জন্য নির্ধারিত হয় । :) ( mainএমনকি কোনও অনুষ্ঠানও রাখে না))
আলেক্সি 21

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