ডেটা স্ট্রাকচারকে কেবল একটি বোকা প্রোগ্রামিং ভাষা বলে বিল গস্পার কী বোঝায়? [বন্ধ]


16

রাল্ফ উইলিয়াম গসপার, জুনিয়রের একটি উদ্ধৃতি রয়েছে যা বলেছে:

একটি ডেটা স্ট্রাকচার কেবল একটি বোকা প্রোগ্রামিং ভাষা।

এর দ্বারা সে কী বোঝাতে চেয়েছিল? হায় আফসোস, গুগলে আমি এটির বিষয়ে যা কিছু জানতে পারি তা হ'ল কোনও প্রসঙ্গ ছাড়াই নিরলস অনুলিপি / উক্তিটির পেস্ট।



1
এই জাতীয় প্রশ্নটি এখন আমাদের মেটা-আলোচনার সাইটে আলোচনা করা হচ্ছে ।

টুরিং-সম্পূর্ণ টাইপ সিস্টেম সহ ভাষা রয়েছে। তাদের মধ্যে কিছু বোকা।
এসকে-যুক্তি

@ এসকে-যুক্তি: টাইপ সিস্টেমগুলি, ট্যুরিং সম্পূর্ণ বা অন্যথায়, এই উদ্ধৃতিটির সাথে কী করতে হবে?
অনুপস্থিতি

1
@ রেহনলিন্ডেক, আপনি কি কখনও আগদা বা কোক দেখেছেন? প্রকারগুলি টুরিং-সম্পূর্ণ হতে পারে।
এসকে-যুক্তি

উত্তর:


10

ঠিক আছে, মনে হচ্ছে বিবৃতিটির হৃদয়টি হ'ল:

একটি ডেটা স্ট্রাকচার হ'ল ... প্রোগ্রামিং ল্যাঙ্গুয়েজ

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

প্রকৃতপক্ষে, আপনি যদি চাইতেন যে কোনও সি তথ্য কাঠামোর মতো কিছু ক্রেজিও করতে পারেন, যা আপনাকে এর বিভিন্ন পদ্ধতিতে কল করে সি কোড লিখতে দেয় - উদাহরণস্বরূপ (কিন্ডা সি # তে, কারণ এটি আমি এখনই ব্যবহার করছি):

var সি = নতুন হররকোবজেক্ট ();
সি ফাংশন <int> ("মূল", টাইপফ (চর [] []), টাইপফ (ইনট)
  । পরিবর্তনশীল ("আমি", টাইপফ (ইনট), 0)
  .তাহলে ("আমি", ফানক (i) => আই <10))
     । কল ("প্রিন্টফ", "% ডি", "আই")
     .PostIncrement ( "আমি")
  .EndWhile ();
  .Return (0)
 .EndFunction ();

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

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

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

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


2

একটি ডেটা স্ট্রাকচার হ'ল একটি প্রোগ্রামিং ভাষার রিপ্রেসেন্টেশন। তবে বিশেষত "তীক্ষ্ণ" নয়।

এটি নীচের উইকি নিবন্ধের মতো একটি "নোড ডায়াগ্রাম" থেকে দেখা যাবে:

http://en.wikipedia.org/wiki/Root_node#Terminology

তবুও, একটি ডেটা স্ট্রাকচার হ'ল প্রোগ্রামিং ল্যাঙ্গুয়েজ হিসাবে অসম্পূর্ণ, কারণ এতে সিনট্যাক্স এবং সম্পূর্ণ চিন্তাভাব নেই যা প্রোগ্রামারকে বোঝাতে পারে। একটি ডেটা স্ট্রাকচারের "ভাষা" এর সাথে এমন কোনও শিশুকে তুলনা করা যেতে পারে যিনি এমন কিছু বলেছিলেন, "আমাকে, ঠান্ডা coat

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


1

আমি বিশ্বাস করি যে বিল গসপারের উদ্দেশ্য কী তা হ'ল সমস্ত ডেটা স্ট্রাকচার কেবল সীমিত প্রয়োগযোগ্যতার সাথে প্রোগ্রামিং নির্মাণ । এটি "ভাষার নকশাটি গ্রন্থাগার নকশা এবং গ্রন্থাগার নকশা ভাষা নকশা" [1] এই ধারণার সাথেও সম্পর্কিত ।

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

উদাহরণস্বরূপ, আপনি কোনও এসোসিয়েটিভ অ্যারে কোডিং করতে পারেন ( mapকিছু ভাষায় একটি বলা হয়) দুটি উপায়ে: হয় স্মৃতিতে সঞ্চিত কিছু ধরণের সূচক ব্যবহার করে বা একটি সাধারণ কেস এক্সপ্রেশন ব্যবহার করে।

হাস্কেলতে আপনি ডেটা স্ট্রাকচার হিসাবে কোনও এসোসিয়েটিভ অ্যারে কোডাইফাই করতে পারেন ...

let assocArray = [("a", 1),("b", 2),("c", 3)]
let key = "b"
lookup key assocArray

... বা কেস এক্সপ্রেশন ব্যবহার করে ...

let key = "b"
case key of 
  "a" -> 1
  "b" -> 2
  "c" -> 3

... বা আরও সরাসরি ...

let key = "b"
if key == "a" 
  then 1 
  else if key == "b"
    then 2
    else if key == "c"
      then 3
      else undefined

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

[1] উদ্ধৃতিটি বজরেন স্ট্রাস্ট্রপকে ধন্যবাদ।


0

জাভাস্ক্রিপ্ট বিবেচনা করুন, যেখানে সমস্ত ডেটা কোড। এলআইএসপি বিবেচনা করুন, যেখানে সমস্ত ডেটা কোড এবং সমস্ত কোড ডেটা।

শুরুতে, শেষ এবং এর মাঝে যে কোনও জায়গায় ডেটা কেবল বিট। আমরা সহজে পাঠযোগ্য এবং মানব-রূপান্তরযোগ্য হিসাবে টেক্সট এবং চিহ্নগুলির সাথে বিটগুলি অনটোলজ করার চেষ্টা করি এটি বিমূর্ততার একটি স্তর যা প্রয়োজন) ক) আপনি সংজ্ঞা ভাষা শিখেন এবং খ) আপনি বিমূর্ততার ফাঁস শিখেন।

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

শেষ অবধি, যখন কোনও বি-ট্রি বা অনুরূপ ডেটা স্ট্রাকচার বিবেচনা করে, গাছের কাঠামোটি নেভিগেট করে এবং অন্যান্য ধরণের ক্রিয়াকলাপ সম্পাদনের জন্য একটি বিশেষ ধরণের সিনট্যাক্স প্রয়োজন যা গাছ, কাঠামো বা ভাষাগুলিতে স্থানান্তরযোগ্য নয় rable


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

4
আপনি কি নিশ্চিত যে এটি রাল্ফ উইলিয়াম গস্পার, জুনিয়র বলতে চেয়েছিলেন?
রবার্ট হার্ভে

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