ক্রিয়ামূলক প্রোগ্রামিং মধ্যে পার্থক্য তালিকা


14

প্রশ্ন কি Okasaki যেহেতু বিশুদ্ধরূপে কার্মিক ডাটা স্ট্রাকচার নতুন? , এবং jbapple এর মহাকাব্য উত্তর, ফাংশনাল প্রোগ্রামিং (লজিক প্রোগ্রামিংয়ের বিপরীতে) এর মধ্যে পার্থক্য তালিকা ব্যবহার করে উল্লিখিত, যা এমন একটি বিষয় যা আমি সম্প্রতি আগ্রহী। এটি আমাকে হাস্কেলের জন্য পার্থক্য তালিকা বাস্তবায়নের সন্ধান করতে পরিচালিত করে । আমার দুটি প্রশ্ন রয়েছে (যদি আমাকে স্ট্যাক এক্সচেঞ্জে দুটি পৃথক প্রশ্ন করা উচিত তবে আমাকে ক্ষমা করুন / সংশোধন করুন)।

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

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


1
প্রথমে আমি "ফাংশনাল প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি (ফাংশনাল প্রোগ্রামিং ল্যাঙ্গুয়েজের বিপরীতে)" দ্বারা বিভ্রান্ত হয়ে পড়েছিলাম, তবে আপনি কি "(লজিক প্রোগ্রামিং ভাষার বিপরীতে)" লেখার অর্থ দিয়েছেন?
Tsuyoshi Ito

ওফ উফ - হ্যাঁ, আমি যা বোঝাতে চেয়েছিলাম, এটি এখন ঠিক হয়ে গেছে।
রব সিমন্স

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

উত্তর:


9

বা "ক্যাচ" কেবল এটিই যে "মাথা" এবং "লেজ" এর জন্য চলমান সময়টির কোনও সীমাবদ্ধতা নেই কারণ এই ক্রিয়াকলাপগুলি স্থগিতকৃত গণনা / বিকল্পের স্বেচ্ছাসেবীর স্তূপের মধ্য দিয়ে লাঙল দিতে হতে পারে?

Θ(m)m

O(1) fromList

{-# LANGUAGE NoMonomorphismRestriction #-}

data DL a = Id
          | Cons a
          | Compose (DL a) (DL a)

fromList [] = Id
fromList (x:xs) = Compose (Cons x) (fromList xs)

toList x = help x []
    where help Id r = r
          help (Cons a) r = a:r
          help (Compose f g) r = help f $ help g r

empty = Id

singleton = Cons

cons x = append (singleton x)

append = Compose

snoc xs x = append xs (singleton x)

Θ(n)headtail[a] -> [a]toList


সুতরাং আপনি অলসতা থেকে যা পাচ্ছেন তা হ'ল তালিকার লেজের জন্য দু'বার জিজ্ঞাসা করা ব্যয়বহুল অপারেশনটি দু'বার করবে না, এটি দুর্দান্ত।
রব সিমন্স

@ রব, আপনি এর দ্বারা কী বোঝাতে চেয়েছেন তা আমি বুঝতে পারি না।
jbapple

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

1
ঠিক আছে, আমি এটির সাথে একমত, কিন্তু আমার উত্তরে আমি যে অলসতা উল্লেখ করেছি তা হ'ল লিস্ট থেকে, যা স্নাক বা মাথা ব্যবহার করা হয় না। অতএব, পেডেন্টিক যেমন হয় তেমনি, আপনার বিবৃতিতে "আপনি কী" অলসতার ফলে যাচ্ছেন "" তা দ্বারা আমি বিভ্রান্ত হয়ে পড়েছিলাম। আমি বলতে চাই যে আপনার উদাহরণ এবং আমার দুটি জিনিস যা আপনি অলসতার মধ্য দিয়ে পাচ্ছেন।
jbapple

ঠিক আছে - এবং সেই ব্যাখ্যাটি আমাকে আপনার আগের বিষয়টিকে আরও ভালভাবে বুঝতে সহায়তা করে।
রব সিমন্স

12

হ্যাঁ, সীমাগুলি অনুমানের উপর নির্ভর করে যে ফাংশন রচনাটি ধ্রুবক সময় নেয়। মূলত, যদি আপনার যোগদানের তালিকা থাকে:

datatype 'a join = Nil | Cons of 'a * 'a join | Join of 'a join * 'a join

O(n)

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