যদি আমরা পাইথন দিয়ে ফাংশনাল প্রোগ্রামিং করতে পারি তবে আমাদের কি একটি নির্দিষ্ট ক্রিয়ামূলক প্রোগ্রামিং ভাষা প্রয়োজন? [বন্ধ]


22

জেনারেটর এবং ল্যাম্বদা ব্যবহার করে আমরা পাইথন দিয়ে ফাংশনাল প্রোগ্রামিং করতে পারি। আপনি রুবির সাথে একই জিনিস অর্জন করতে পারেন।

সুতরাং প্রশ্নটি হল: কেন আমাদের নির্দিষ্ট ফাংশনাল প্রোগ্রামিং ভাষা যেমন এরলং, হাস্কেল এবং স্কিমের প্রয়োজন? এই নির্দিষ্ট কার্যকরী প্রোগ্রামিং ভাষাগুলি সরবরাহ করে এমন কি আলাদা কিছু আছে? আমরা কেবল ফাংশনাল প্রোগ্রামিংয়ের জন্য পাইথনটি ব্যবহার করতে পারি না কেন?


30
এঁরা সবাই অজগর তৈরির আগেও ছিলেন
মাহমুদ হোসাম

51
একটি ফোর্ড পিন্টো একটি গাড়ি। কেন আমাদের ফেরারির মতো নির্দিষ্ট দ্রুত গাড়ী দরকার?
মার্টিন ইয়র্ক

11
ক্লাস এবং টেমপ্লেট ব্যবহার করে, আমরা সি ++ এ ওও কিছু করতে পারি। জাভা এবং পাইথন কেন কখনও তৈরি করা হয়েছিল? তারা কী যুক্ত করে?
9000

19
সমস্ত প্রোগ্রামিং ভাষা (কিছু খাঁটি একাডেমিক গবেষণা ভাষাগুলি স্যান) টিউরিং সমতুল্য, সুতরাং আপনি ভাষা এ কী করতে পারেন আপনি অন্য যে কোনও ভাষায় করতে পারেন। সুতরাং, চিন্তার এই ট্রেনটি অনুসরণ করে, আমাদের কেবল একটি টিউরিংয়ের
ম্যাগলব

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

উত্তর:


20

আমি এই প্রশ্নের প্রশংসা করি, কারণ আমি ব্যক্তিগতভাবে পাইথন এবং প্রোগ্রামিংয়ের কার্যকরী শৈলী উভয়েরই এক বিশাল অনুরাগী। পাইথনে আমার দীর্ঘ পটভূমি রয়েছে এবং আমি সম্প্রতি হাস্কেল শিখতে শুরু করেছি, তাই কার্যকরী দৃষ্টিকোণ থেকে এই ভাষাগুলির মধ্যে পার্থক্য সম্পর্কে আমার ব্যক্তিগত অভিজ্ঞতার ভিত্তিতে কিছু পয়েন্ট এখানে দেওয়া হয়েছে।

বিশুদ্ধতা

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

কর্মক্ষমতা

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

টেইল-কল অপ্টিমাইজেশন

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

বাক্য গঠন

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

  • ল্যাম্বডা ফাংশনগুলির জন্য সিনট্যাক্সটি কেবল ভারবস এবং এতে যা থাকতে পারে তার মধ্যে সীমাবদ্ধ
  • ফাংশন কম্পোজিশনের জন্য কোনও সিনট্যাকটিক চিনি যেমন f = g . hবনাম।f = lambda *arg: g(h(*arg))
  • আংশিক প্রয়োগের জন্য কোনও সিনট্যাকটিক চিনির অর্থাত্ f = map gবনাম sugarf = functools.partial(map, g)
  • উচ্চতর অর্ডার ফাংশনগুলিতে যেমন sum = reduce (+) lstভার্সেস ইনফিক্স অপারেটরগুলি ব্যবহারের জন্য কোনও সিনট্যাকটিক চিনি নেইsum = reduce(operator.add, lst)
  • কোনও ফ্যাশন আর্গুমেন্টের জন্য কোনও প্যাটার্ন ম্যাচিং বা গার্ড নেই, যা পুনরাবৃত্তির সমাপ্তি শর্তগুলি এবং খুব পঠনীয় বাক্য গঠন সহ কিছু সীমান্ত ক্ষেত্রে প্রকাশ করা সহজ করে তোলে।
  • বন্ধনীগুলি ফাংশন কলগুলির জন্য কখনই alচ্ছিক হয় না এবং নেস্টেড কলগুলির জন্য কোনও সিনট্যাকটিক চিনি নেই। আমি অনুমান করি এটি স্বাদের বিষয়, তবে বিশেষত ফাংশনাল কোডে, আমি চেন ফাংশন কলগুলিতে এটি সাধারণ বলে মনে করি এবং একবার আপনি এই স্বরলিপিটির সাথে পরিচিত y = func1 $ func2 $ func3 xহওয়ার পরে আমি পড়ার চেয়ে সহজ y = func1(func2(func3(x)))মনে করি।

28

এগুলি সবচেয়ে গুরুত্বপূর্ণ পার্থক্য:

Haskell,

  • অলস মূল্যায়ন
  • মেশিন কোড সংকলন
  • স্ট্যাটিক টাইপিং নিশ্চিত করে যে ফাংশনগুলি খাঁটি
  • অনুমান টাইপ করুন

হাস্কেল এবং এরলাং

  • প্যাটার্ন ম্যাচিং

Erlang

  • সম্মতি, হালকা ওজন প্রক্রিয়া অভিনেতার মডেল

পরিকল্পনা

  • ম্যাক্রো

সকল ভাষা

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

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


3
+1 ভাল পোস্ট। আপনি এ্যাসল্যাজে হাস্কেল এবং হালকা-ওজন প্রক্রিয়াগুলিতে টাইপ-ইনসারেন্স যুক্ত করতে পারেন।
জোনাস

1
পাইথনের মানচিত্র, ফিল্টার এবং ভাঁজ (হ্রাস) রয়েছে। "রিয়েল ক্লোজারগুলি" সম্পর্কিত: আপনি যদি একটি আসল বন্ধকে ক্লোজার হিসাবে সংজ্ঞায়িত করেন যা একক অভিব্যক্তি ব্যতীত অন্য কিছু ধারণ করতে পারে তবে হাস্কেলেরও সত্যিকারের বন্ধ নেই (তবে অবশ্যই হাস্কেলের কিছু জিনিস আছে যা এক্সপ্রেশন নয় ...) । যাইহোক অপরিবর্তনীয় ডেটা স্ট্রাকচার সম্পর্কে বিন্দুটি ভাল, সুতরাং এটির জন্য +1। এছাড়াও: লেজ পুনরাবৃত্তি (এবং সাধারণত কম ব্যয়বহুল পুনরাবৃত্তি)।
sepp2k

2
"স্ট্যাটিক টাইপিং নিশ্চিত করে যে ফাংশনগুলি নির্ভুল" এর জন্য +1 খাঁটি এবং অ-খাঁটি ফাংশনগুলির মধ্যে বৈষম্যমূলক একটি টাইপ সিস্টেম পাওয়া খুব শীতল। (সি
+++ এর কনস্ট ডোটি

1
@ বুটলি: আপনি যদি সুযোগের মতো কোনও ভেরিয়েবলকে বরাদ্দ করতে না পারেন তবে আমি এটিকে বন্ধ বলে বিবেচনা করব না। অন্যথায় আমাদের বলতে হবে যে জাভাটিরও বন্ধ রয়েছে, যেহেতু আপনি সেখানে একই কৌশল ব্যবহার করতে পারেন।
কিম

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

19

একটি "কার্যকরী ভাষা" ঠিক কী তা নির্ধারণ করা শক্ত - আপনি তালিকাভুক্ত ভাষাগুলির মধ্যে কেবল হাস্কেল খাঁটিভাবে কার্যকরী (অন্যরা সকলেই একরকম সংকর পদ্ধতির অবলম্বন করেছেন)। কিছু নির্দিষ্ট ভাষা বৈশিষ্ট্য রয়েছে যা ফাংশনাল প্রোগ্রামিংয়ের জন্য খুব সহায়ক, এবং রুবি এবং পাইথনের এফপির পক্ষে খুব ভাল পরিবেশ হতে পারে না। গুরুত্ব অনুসারে এখানে আমার ব্যক্তিগত চেকলিস্টটি রয়েছে:

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

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

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

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

(4) হ'ল আমার পক্ষে খাঁটি-কার্যকরী ভাষা সম্পর্কে (আকর্ষণীয় ভাষার বিপরীতে) সবচেয়ে আকর্ষণীয় বিষয়। নিম্নলিখিত অত্যন্ত সাধারণ রুবি ফাংশন বিবেচনা করুন:

def add(a, b)
  a + b
end

এটি খাঁটি ফাংশনের মতো দেখায়, তবে অপারেটর ওভারলোডিংয়ের কারণে এটি প্যারামিটারকে রূপান্তর করতে পারে বা কনসোলটিতে মুদ্রণের মতো পার্শ্ব প্রতিক্রিয়া সৃষ্টি করতে পারে। এর সম্ভাবনা নেই যে +পার্শ্ব প্রতিক্রিয়া হওয়ার জন্য কেউ অপারেটরটিকে ওভারলোড করবে , তবে ভাষা কোনও গ্যারান্টি দেয় না। (পাইথনের ক্ষেত্রে এটি একই প্রযোজ্য, যদিও এই নির্দিষ্ট উদাহরণের সাথে নাও থাকতে পারে))

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

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


2
পুরো ব্যাখ্যাটির জন্য +1 - এমনকি আমি এফপি বহিরাগত হিসাবে এটি বুঝতে পেরেছিলাম। ধন্যবাদ! :-)
প্যাটার তারেক

এই প্রশ্নের সবচেয়ে মূল্যবান উত্তর। তথ্য এবং প্রচুর তথ্য উপর প্রতিষ্ঠিত। দারূন কাজ.
ভাইরবল

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

@itsbruce এই পোস্টটি বেশ পুরানো, আইআইআরসি স্কালার সময় এটি ছিল না (বা আমি সম্ভবত ভুল হতে পারি;)। আপডেট করা হয়েছে।
shosti

আমি প্রথম থেকেই স্কালাকে ব্যবহার করে আসছি না তবে ২০০৮ সালে এর লেজ পুনরাবৃত্তি হয়েছিল, যখন আমি আগ্রহী ছিলাম ;-) আমি এই বিষয় সম্পর্কে জিজ্ঞাসা করা লোকদের এই বিশেষ এসও প্রশ্নে উল্লেখ করি কারণ এর কিছু ভাল উত্তর রয়েছে এবং আমি কেবলমাত্র অদ্ভুততা লক্ষ্য করেছেন, তাই সম্পূর্ণতার জন্য মন্তব্য।
ব্রুস

11

আপনি যে ভাষাগুলির উল্লেখ করেছেন সেগুলি খুব আলাদা।

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

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


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

8

যথারীতি পার্টিতে লেট, তবে যাই হোক কিছু বলা যায়।

ক্রিয়ামূলক প্রোগ্রামিং ভাষা কোনও ভাষা নয় যা কার্যকরী প্রোগ্রামিংয়ের অনুমতি দেয় its আমরা যদি সেই সংজ্ঞাটি অনুসরণ করি, তবে কোথাও যে কোনও ভাষা হ'ল কার্যকরী প্রোগ্রামিং ভাষা। (ঘটনাটি ঘটনাক্রমে ওওপি-র ক্ষেত্রেও প্রযোজ্য you আপনি যদি চান তবে আপনি একটি ওওপি স্টাইলে লিখতে পারেন Thus সুতরাং, আপনার যুক্তি অনুসারে সি একটি ওওপি ভাষা)

একটি কার্যকরী প্রোগ্রামিং ল্যাঙ্গুয়েজ যা আপনাকে প্রোগ্রাম করার অনুমতি দেয় তা নয় , এটি আপনাকে সহজে প্রোগ্রাম করার সুযোগ দেয় । এটাই চাবি।

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

সুতরাং পাইথন (বা রুবি (বা আপনার পছন্দের ভাষাটি সন্নিবেশ করানো)) "ফাংশনাল প্রোগ্রামিং" করতে পারলে আমাদের কেন কার্যকরী প্রোগ্রামিং ভাষা থাকে? পাইথন, এবং অন্যান্য সঠিক ক্রিয়ামূলক প্রোগ্রামিং করতে পারে না। এই জন্য.


6

আপনি জাভাতে ক্রিয়ামূলক প্রোগ্রামিং করতে পারেন (উদাহরণস্বরূপ http://functionaljava.org/ দেখুন )। আপনি সি তে অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংও করতে পারেন । এটা ঠিক যে মূর্খতা নয়।

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


4

এই প্রশ্নটি অসীম সংখ্যক ভাষা এবং দৃষ্টান্তগুলিতে প্রয়োগ করা যেতে পারে।

  • যেহেতু প্রত্যেকে সি ++ ব্যবহার করে, তাই কেন আমাদের অন্য কোনও সাধারণ উদ্দেশ্য ভাষা প্রয়োজন?
  • জাভা যেহেতু একটি দুর্দান্ত ওও ভাষা তাই অন্যান্য ওও ভাষার অস্তিত্ব কেন?
  • যেহেতু পার্ল একটি আশ্চর্যজনক স্ক্রিপ্টিং ভাষা, তাই আমাদের কেন অজগর দরকার?
  • ইয়ত্তা, ইয়ত্তা, ইয়ত্তা

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

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


2

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

চেহারা: ফাংশনাল প্রোগ্রামিং কেবল ল্যাম্বডাস mapবা উচ্চতর অর্ডার ফাংশন সম্পর্কে নয়। এটা নকশা সম্পর্কে । "সত্য" কার্যকরী প্রোগ্রামিং ভাষায় রচিত একটি প্রোগ্রাম ফাংশনগুলির রচনার মাধ্যমে সমস্যার সমাধান করে। রুবি বা পাইথনে লিখিত প্রোগ্রামগুলি এফপির মতো বৈশিষ্ট্যগুলি ব্যবহার করতে পারে, তবে তারা সাধারণত রচিত ফাংশনগুলির সেটগুলির মতো পড়েন না।


0

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


0

ল্যাম্বডা-ক্যালকুলাস, এলআইএসপি এবং স্কিমের প্রতিটি ধারণাই পাইথনে উপলভ্য, তাই হ্যাঁ, আপনি এতে কার্যকরী প্রোগ্রামিং করতে পারেন। যদি এটি সুবিধাজনক হয় বা না হয় তবে এটি প্রসঙ্গ এবং স্বাদের বিষয়।

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

এই পুরানো এবং সুন্দর বইটিতে কার্যকরী প্রোগ্রামিংয়ের মূলমন্ত্র কী তা সম্পর্কে বেশিরভাগ (যদিও সমস্ত নয়) এর উত্তর রয়েছে।


@ আরকায়েটো তবে আপনি কি সম্মত হন যে ল্যাম্বডা ক্যালকুলাস, এলআইএসপি এবং স্কিমের প্রতিটি ধারণাই পাইথনে উপলব্ধ?
মার্ক সি সি

আপনি কি নিশ্চিত যে প্রতিটি লিজপ ধারণা পাইথনে পাওয়া যায়? ম্যাক্রোস, কোড-ইজ-ডেটা?
এসকে-যুক্তি

@ এসকে-লজিক ম্যাক্রোগুলি ল্যাম্বডা-ক্যালকুলাসে নেই তবে হ্যাঁ, এগুলি পাইথনে পাওয়া যায়, যদিও এই নামে নয়। পাইথন একটি eval()ফাংশন সরবরাহ করে যা কোডের জন্য প্রয়োজনীয় ডেটা , তবে এটি আরও এগিয়ে যায়: এটি আপনাকে LISP এর মতো বেশিরভাগ রানটাইম পরিবেশকে পরিবর্তন করতে দেয়।
অপালালা

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

@ এসকে-লজিক এই জাতীয় ম্যাক্রোগুলি কোড-এর-ডেটা ভিত্তিটি ভেঙে দেয় , কারণ প্রোগ্রামগুলি ম্যাক্রোগুলি পরিবর্তন করতে পারে না (বা তাদের অস্তিত্ব সম্পর্কেও জানতে পারে)। পাইথনে, প্রোগ্রামগুলির প্রয়োজন হয় যদি রানটাইমের সময় তাদের নিজস্ব পার্স গাছগুলিতে অ্যাক্সেস পায়। ম্যাক্রোস (স্ট্যাটিক প্রাক প্রক্রিয়াজাতকরণ) মোটেই কার্যকরী নয়।
অপালালা

-5

কারণ পাইথন একটি অ-কার্যকরী শৈলীতে প্রোগ্রামও করতে পারে এবং এটি এফপি পিউরিস্টের পক্ষে যথেষ্ট ভাল নয়। আরও বাস্তববাদী কোডারগুলি যদিও এটি সম্পর্কে কৌতূহল না করেই কার্যকরী শৈলীর সুবিধাগুলি উপভোগ করতে পারে:

"কার্যকরী প্রোগ্রামারটি মধ্যযুগীয় সন্ন্যাসীর মতো শোনাচ্ছে, নিজেকে জীবনের আনন্দগুলি অস্বীকার করে এই আশায় যে এটি তাকে পুণ্যবান করে তুলবে। বস্তুগত সুবিধার জন্য যারা আরও আগ্রহী তাদের কাছে এই "সুবিধা" খুব বিশ্বাসযোগ্য নয়। কার্যকরী প্রোগ্রামাররা যুক্তি দেয় যে এখানে প্রচুর পরিমাণে উপাদান রয়েছে ... [তবে] এটি স্পষ্টতই হাস্যকর। যদি অ্যাসাইনমেন্টের বিবৃতি বাদ দেওয়া হয় তবে এর ফলে প্রচুর সুবিধা পাওয়া যায় তবে ফরটান প্রোগ্রামাররা বিশ বছর ধরে এটি করে চলেছেন। তারা যতই খারাপ হোক না কেন বৈশিষ্ট্যগুলি বাদ দিয়ে কোনও ভাষাকে আরও শক্তিশালী করা একটি যৌক্তিক অসম্ভবতা। "

- জন হিউজেস, ক্রিয়ামূলক প্রোগ্রামিংয়ের বিষয়টি কেন গুরুত্বপূর্ণ


6
আমি রাজী. ছাড়া gotoযে কোনও ভাষা ভয়ঙ্কর।
আনন

2
@ অ্যান: বা এর বড় ভাইবোন call-with-current-continuation,।
ক্রিস জেস্টার-ইয়ং

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

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

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