ফাংশনাল ভাষার বাক্য গঠন বাক্যটি মানব ভাষার আরও বেশি ঘনিষ্ঠ হয় না কেন?


14

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

এটি আরও প্রকাশিত , মানব ভাষার আরও বেশি ঘনিষ্ঠ হওয়ার কোনও কারণ নেই ?

আমি বুঝতে পারি যে গাণিতিক ধারণাগুলির মডেলিংয়ের ক্ষেত্রে এফপি ভাল, এবং এটির কিছুটা সংক্ষিপ্ত প্রকাশের মাধ্যম ধার করা হয়েছিল, তবে এখনও এটি গণিত নয় ... এটি একটি ভাষা।


4
@ র্যাচেট ফ্রিক: :) তাই এমন কি এমন কোনও লোক ডিজাইন করেছেন যে পোলিশ স্বরলিপি ঘৃণা করে?
জনডোডো

10
@ratchetfreak কীভাবে হাস্কেল সিনট্যাক্সটি পোলিশ স্বরলিপিটির সাথে সাদৃশ্যপূর্ণ? হাস্কেল অপারেটরগুলি অন্যান্য ভাষার অপারেটরগুলির মতোই ইনফিক্স হয় (এবং ফাংশন কলগুলি উপসর্গ হয় - বেশিরভাগ অন্যান্য ভাষার ফাংশন কলগুলির মতো)।
sepp2k

9
এটি আপনি তৈরি করছেন একটি দুর্দান্ত ধারণা / লিপ, "মানব ভাষার কাছাকাছি" "আরও অভিব্যক্তিপূর্ণ" সমান।
ম্যাট বল

7
কোবোল এবং ফোর্টরানের কথা কখনও শুনেছেন?
অট--

7
গণিতবিদরা ঠিক একই কারণে দীর্ঘ বীজগণিত বাক্যাংশগুলিকে বীজগণিতযুক্ত ভাবের সাথে প্রতিস্থাপন করেছিলেন। একটি সামান্য অনুশীলন সঙ্গে, একটি আরও কমপ্যাক্ট স্বরলিপি অনেক বেশি উত্পাদনশীল।
কেভিন ক্লাইন

উত্তর:


14

হাস্কেল এবং এর পূর্বসূরি মিরান্ডার মতো কার্যকরী ভাষা ল্যাম্বডা ক্যালকুলাসের গাণিতিক ধারণা থেকে বেড়ে ওঠে । উইকিপিডিয়া পৃষ্ঠা থেকে:

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

...

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

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

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


29

Haskell, সিনট্যাক্স হল মানুষের ভাষা থেকে বন্ধ। এটি বিশেষত গাণিতিক স্বরলিপির সাথে সাদৃশ্য করার জন্য ডিজাইন করা হয়েছে, যা হাস্কেলের উপর নির্মিত সেই ধারণাগুলি যথাযথভাবে প্রকাশ করার জন্য মানুষের দ্বারা নির্মিত একটি ভাষা (সুতরাং একটি মানব ভাষা )।

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

অন্যদিকে, আপনি যে কোনও গণিতবিদ বা লজিস্টিয়ানকে এই জাতীয় কোডের একটি অংশ প্রদর্শন করতে পারেন:

x = x + 1

এবং তিনি একদম বিভ্রান্ত হবে, বলার অপেক্ষা রাখে না: "এই অর্থে দেখা যায় না, কোন xযেমন যে xসমান xপ্লাস 1।"

কিছু নির্দিষ্ট স্বরলিপি "ক্রিপ্টিক" বা না, এটি মতামত এবং পরিচিতির বিষয়।


8
এই উত্তরটির সাথে একটি মাত্র সমস্যা আছে: আমি গণিতজ্ঞ নই।
জনডোডো

6
@ sepp2k: আমি একমত নই অধিকাংশ মানুষের জন্য W প্রোগ্রামিং ভাষায় / O পূর্বে উন্মুক্ততা এবং কিছু মৌলিক গাণিতিক পটভূমি Haskell, সিনট্যাক্স তার পার্শ্ব প্রতিক্রিয়া ও জটিল পরিবেশের বিবৃতির চালানো হয় টিপিক্যাল procedual কোড চেয়ে বুঝতে অনেক সহজ হবে। সিনট্যাক্স মত whereসারকথা ঘনীভূত করার অনুমতি দেয় এক লাইনে একটি ফাংশন।
বেনিয়ামিন ব্যানিয়ার

17
-1: এই উত্তরটি বেশিরভাগ পেডেন্টিক বলে মনে হচ্ছে। আমি মোটামুটি নিশ্চিত ওপি বলতে স্পোক ভাষা বলতে চাই।
স্টিভেন এভার্স 16

6
প্রকৃতপক্ষে, আমি দৃ solve়ভাবে নিশ্চিত যে x = infinityএটি অবশ্যই সমীকরণটি সমাধান করে।
ডেড এমএমজি

6
ঠিক আছে, প্রোগ্রামিং ভাষাও মানুষের দ্বারা ডিজাইন করা হয়েছে .... সুতরাং আপনার সংজ্ঞা অনুসারে এগুলি মানব ভাষা by
মার্কো ফিসেট

13

আমি মনে করি যে একটি জিনিস আপনি সম্ভবত চালাচ্ছেন সেটি হ'ল আমি কার্যকরী প্রোগ্রামিং শিখার সময় খুব তাড়াতাড়ি ছুটে এসেছি, এটি হ'ল কার্যকরী প্রোগ্রামিংয়ের মাধ্যমে আপনি অত্যাবশ্যক প্রোগ্রামিংয়ের চেয়ে উচ্চতর স্তরে চিন্তা করতে / কাজ করতে পারেন।

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

উদাহরণস্বরূপ, আমি জরুরীভাবে লিখতে পারি:

for each (Person person in people)
    print(person.name)

যা সম্পূর্ণ ইংরেজী হিসাবে সুস্পষ্ট।

একটি হাস্কেল সংস্করণ হতে পারে (এবং এটি হাস্কেল বৈধ নয়, তবে এটি কেবল সিনট্যাকটিক তুলনার জন্য):

map (print . name) people

যার জন্য কম কোড এবং কম বিশদ বিশৃঙ্খলা প্রয়োজন - আমাকে জিনিসগুলি একটি লুপ এবং এর ভেরিয়েবল (গুলি) এ ভেঙে ফেলতে হবে না for each (...), mapফাংশনটি আমার জন্য এটি যত্ন করে।

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


8

আমি বর্তমানে এই মুহুর্তে স্কালার সাথে আঁকড়ে উঠছি, তাই আমি সহানুভূতি জানাতে পারি। চলার সময় খুব শক্ত হয়ে উঠলে কমপক্ষে স্কালার সাথে আমি একটি আবশ্যক স্টাইলে ফিরে যেতে পারি।

আমি মনে করি এখানে বেশ কয়েকটি বাহিনী খেলছে:

  • কার্যকরী ভাষার ডিজাইনারদের অগত্যা শক্তিশালী গণিতের পটভূমি থাকে, তাই তারা গাণিতিক স্বীকৃতি ধার করেন যা তাদের কাছে স্বাভাবিক।

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

  • কার্যকরী ভাষা কেবল জিনিসগুলি খুব আলাদাভাবে করে, তাই মৌলিক ক্রিয়াকলাপগুলি অত্যাবশ্যকীয় কন্সট্রাক্টসে ম্যাপ করে না।


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

1
@ জে কে, হ্যাঁ, রাজি! একই সাথে, এ কারণেই তাদের কাছে অত্যাবশ্যক ব্যাকগ্রাউন্ড এবং সামান্য গণিত (আমার মতো) সহ প্রোগ্রামারদের জন্য খাড়া শেখার বক্রতা রয়েছে এবং কেন তারা সার্থক।
রিচার্ড বন্ধ

3

যদি আমি আপনার শেষ মন্তব্যটি সঠিকভাবে বুঝতে পারি তবে আপনার প্রশ্ন হসকেল প্রায়শই এমন জায়গায় প্রতীকী অপারেটর ব্যবহার করে যেখানে এটি পাশাপাশি বর্ণানুক্রমিক কীওয়ার্ডগুলি (বা ফাংশনের নাম) ব্যবহার করতে পারে?

কীওয়ার্ড সম্পর্কিত একটি উত্তর হ'ল কীওয়ার্ডগুলি আপনাকে নির্দিষ্ট শব্দগুলি পরিবর্তনশীল নাম হিসাবে ব্যবহার করতে বাধা দেয়। উদাহরণস্বরূপ আমি যখন আমার ভেরিয়েবলগুলিতে কল করতে চাই fromএবং toএমন একটি ভাষায় যেখানে শব্দগুলির মধ্যে একটি হ'ল পাইথন - তে সর্বদা বিরক্ত থাকি ।

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

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


@ পিটারটেলর নাপ, কেবল আমার বোকা ;-) এখনই স্থির।
sepp2k

3

জরুরী কম্পিউটারের ভাষাগুলি প্রায়শই প্রাকৃতিক ভাষার সাথে খুব বেশি ঘনিষ্ঠ হয় না, বলুন, হাস্কেল।

তবে, কিছু ইংরাজির সাথে আরও সাদৃশ্যপূর্ণ নকশাকৃত হয়েছে: উদাহরণস্বরূপ কোবল এবং হাইপারকার্ড। এই উদাহরণগুলি থেকে আমি যে শিক্ষা গ্রহণ করব তা হ'ল:

  • প্রাকৃতিক ভাষার সাথে মিলের ব্যবহারের ক্ষেত্রে সরাসরি উন্নতি হবে বলে মনে হয় না
  • প্রাকৃতিক ভাষাগুলি অনুকরণ করে কম্পিউটারের ভাষা কার্যকর হতে পারে যা ভার্বোস এবং অস্পষ্ট

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


3

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

qsort [] = []
qsort (p:xs) = qsort lesser ++ [p] ++ qsort greater
               where lesser = [x | x <- xs, x <= p] 
                     greater = [x | x <- xs, x > p]

স্বীকার করেছেন, এটি একটি সহজ উদাহরণ, তবে আমি অন্য কোনও ভাষা জানি না যা এটিকে এতটা পঠনযোগ্য করে তোলে।

আরও জটিল স্টাফ করা করা হাস্কেলতে পড়া সহজ হয়ে উঠতে পারে, তবে এটি টাইপ সিস্টেম, বাঁধা আইও এবং সিনট্যাক্সের সাথে মোটেই নয় with

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


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

আমার ধারণা এটি আপনার পটভূমির উপর নির্ভর করে। এই যেমন আমার জন্য পায় ... প্লেইন হিসাবে
অ্যান্ড্রিয়া

2
যাই হোক না কেন, এটি এই স্বরলিপিটির সাথে সাদৃশ্যযুক্ত বলে মনে করা হচ্ছে: বেগুনিমাথ.com
Andrea

4
আপনি কি নিশ্চিত যে এটি হওয়া উচিত নয় ++ [p] ++?
পিটার টেলর

1
@ মেসন: এটি আমার কাছে বেশ স্পষ্ট মনে হয়েছে এবং আমি হাস্কেলের একটি লাইন কখনও
লিখিনি

2

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

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


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