একটি "উত্পন্ন প্রতিনিধিত্ব" কি?


12

এখানে এই পদটি জুড়ে দৌড়েছে:

http://www.codemesh.io/codemesh2014/viktor-klang

"আমরা ফ্লো এপিআই প্রদর্শন করব - একটি উত্তোলিত প্রতিনিধিত্ব well পাশাপাশি উত্তোলিত প্রতিনিধিত্বকে মৃত্যুদন্ডের উপস্থাপনে রূপান্তর করার একটি প্লাগযোগ্য উপায় — ফ্লো ম্যাটারিয়ালাইজেশন" "

গুগলিং খুব একটা সাহায্য করেনি।


প্রস্তাবিত পাঠ: এই $ {ব্লগ} আলোচনা
মশা

11
@ উদাসীন মনে হয় যে তিনি এই শব্দটি আবিষ্কার করেননি, এটি কোনও মতামত বলে মনে হচ্ছে না, এটি কোনও আলোচনার উদ্রেক করার সম্ভাবনা নেই এবং আমার অন্ত্রের অনুভূতি হ'ল এটি খুব বেশি বিস্তৃত হবে না (যদিও এটি গণিতের মতো মনে হয়)।
ডেন

2
আমি এখানে সি # এর প্রসঙ্গে "উত্তোলন" এর অর্থ নিয়ে আলোচনা করেছি: ব্লগস.এমএসএনএন / বি / এরিক্লিপার্ট / অর্চিভ / 2007 / 06 / 27/… - সম্ভবত স্কালার বিকাশকারীরা এই শব্দটি একটি উপমা হিসাবে ব্যবহার করছেন, তবে আরও সাধারণ ফ্যাশন
এরিক লিপার্ট

উত্তর:


22

আমি ফ্লো এপিআইয়ের সাথে পরিচিত নই।

"উত্তোলন" শব্দটি বিভাগের তত্ত্ব থেকে এসেছে। হাস্কেল বা স্কালার মতো প্রোগ্রামিং ভাষায়, একটি liftফাংশন একটি ফাংশন নেয় A => Bএবং কোনওভাবে যাদু সম্পাদন করে যাতে উত্তোলন ফাংশনটি F[A] => F[B]কোনও ফান্টেক্টর বা মোনাডে প্রয়োগ করা যায় F[A]

স্কালার Seqধারক ব্যবহার করে একটি কংক্রিটের উদাহরণ : ধরে নিন আমাদের একটি ক্রিয়াকলাপ def double(x: Int): Int = 2 * xএবং ক্রম রয়েছে val xs = Seq(1, 2, 3)। আমরা double(xs)বেমানান ধরণের কারণে পারি না । তবে আমরা যদি একটি val doubleSeq = liftToSeq(double)পাই, আমরা করতে পারি doubleSeq(xs), যা মূল্যায়ন করে Seq(2, 4, 6)। এখানে, liftToSeqহিসাবে বাস্তবায়ন করা যেতে পারে

def liftToSeq[A, B](f: A => B): (Seq[A] => Seq[B]) =
  (seq: Seq[A]) => seq.map(f)

Seq(…)কন্সট্রাকটর একটি উত্তোলন অপারেশন, যা মান ওপরও হিসেবে দেখা যেতে পারে 1, 2, 3একটি মধ্যে Seqউদাহরণস্বরূপ, এইভাবে আমাদের এই মানের জন্য তালিকা বিমূর্ত ব্যবহার করার অনুমতি দেয়।

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


4
এটি গাণিতিক "উত্তোলন" এর একটি ভাল বর্ণনা। আমাদের উইকিপিডিয়া থেকে উত্তোলনের আরও আনুষ্ঠানিক বিবরণের একটি উল্লেখ অন্তর্ভুক্ত করা উচিত ।
স্কট হুইটলক

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

আপনি কি উত্তোলন করবেন?
হেলরিচ

1
@ ফ্র্যাঙ্ক আমি আমার উত্তর লেখার আগে উইকিপিডিয়া নিবন্ধটি পড়েছিলাম, এবং এটিও বুঝতে পারি নি। পরিবর্তে, আমি পাওয়া Haskell, উইকি তে উদ্ধরণ আরো অ্যাক্সেসযোগ্য যাবে। মনে রাখবেন যে আমাদের কাছে আসলে চার ধরণের নেই। আমাদের চারটি কংক্রিট ধরণের রয়েছে তবে কেবল তিন ধরণের ভেরিয়েবল: দুই প্রকার এবং , এবং একটি ফান্টেক্টর যা একটি প্রকারের নির্মাণকারী। ABF
আমন

1
আমি এই সমস্তগুলির মধ্যে খুব গভীর নই, তবে যদি Fকোনও টাইপ কনস্ট্রাক্টর F[A]হয় তবে এটি তার নির্মিত ধরণেরগুলির মধ্যে একটি। তাহলে কেন এই চার ধরণের কথা বলা ভুল? (দুই ধরণের এবং এক ধরণের কনস্ট্রাক্টর অবশ্যই অবশ্যই সমান হবে)
ফ্রাঙ্ক

6

উত্তোলনের শব্দটির অবশ্যই প্রসঙ্গের ভিত্তিতে বিভিন্ন অর্থ থাকতে পারে।

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

আমি এই শব্দটির ব্যবহারটি উত্তোলনের অর্থ কী জন্য একটি ভাল স্বজ্ঞাত গাইডলাইন হিসাবে পেয়েছি । বিভিন্ন প্রসঙ্গের মধ্যে যে পার্থক্যটি মনে হয় কেবলমাত্র এটিই এটি উচ্চতর বিমূর্তিটি আসলে।

বিশেষত, ভিক্টর ক্রিয়ামূলক প্রোগ্রামিংয়ের প্রসঙ্গে পরিচিত, এবং এই প্রসঙ্গে আপনি সেখানে উত্তোলনের দৃশ্যত বিভিন্ন ব্যাখ্যা পেতে পারেন । একটি উদাহরণ হ'ল মানকে কোনও ফান্টারে তুলতে, বা মনাদিক মানগুলিতে (যেমন হাস্কেলের liftM2) কাজ করার জন্য ফাংশন উত্তোলন করা ।

"উত্তোলিত প্রতিনিধিত্ব" এর একটি খুব দৃ concrete় উদাহরণ তখন f.ex. একটি List(1), বা একটি হতে Some(1)


4

এই ধরণের ধারণাগুলি সাধারণত একটি দৃ concrete় উদাহরণ সহ বোঝা সহজ। এই ফ্লো এপিআই উদাহরণ থেকে নিম্নলিখিত অংশগুলি বিবেচনা করুন :

Flow(text.split("\\s").toVector).
      // transform
      map(line => line.toUpperCase).
      // print to console (can also use ``foreach(println)``)
      foreach(transformedLine => println(transformedLine)).
      onComplete(FlowMaterializer(MaterializerSettings())) {
        case Success(_) => system.shutdown()
        case Failure(e) =>
          println("Failure: " + e.getMessage)
          system.shutdown()
      }

এটি নিম্নলিখিত কোড গ্রহণ করে:

text.split("\\s").toVector.
      map(line => line.toUpperCase).
      foreach(println)

এবং এটিকে একটি Flowপ্রসঙ্গে "উত্তোলন" করুন । এটি আপনাকে আপনার অ্যালগোরিদম নির্দিষ্ট করার জন্য পরিচিত একই সিনট্যাক্সটি ব্যবহার করতে দেয়, তবে পর্দার আড়ালে mapবেশ কয়েকটি প্রসেসর বা এমনকি মেশিনে সমান্তরালভাবে কাজ করা হয়, তারপরে foreach(println)বিনা বাধায় সেই আউটপুট মুদ্রণের জন্য একটি প্রসেসরে ফিরে আসে।

এটি একটি জেনেরিক শব্দ যা কোনও প্রকারের চারপাশে যেকোন প্রসঙ্গে মোড়ক বোঝাতে পারে। আরও একটি পরিচিত উদাহরণ হ'ল mapএকটি ফাংশন যা কোনও একক উপাদানের উপর কাজ করে এবং এই উপাদানগুলির সংকলনে কাজ করার নতুন প্রসঙ্গে "লিফট" করে। কার্যক্ষম প্রোগ্রামিংয়ে উত্তোলন সর্বব্যাপী এবং মূল কারণগুলির মধ্যে একটি এটি ফাংশনাল কোডটি পুনরায় ব্যবহার করা এত সহজ।

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