হাস্কেলের সাথে শুরু করা


755

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

তো, আপনি হাসকলকে কীভাবে শিখলেন? কী আপনাকে সত্যই "বরফ ভাঙ্গা" করেছে? এছাড়াও, অনুশীলন শুরু করার জন্য কোনও ভাল ধারণা?


উত্তর:


2476

হাসকেলে আপনার দক্ষতার মাত্রা অনুসারে আমি এই গাইডটি অর্ডার করতে যাচ্ছি, একজন নিখুঁত শিক্ষানবিস থেকে শুরু করে একটি বিশেষজ্ঞ পর্যন্ত। মনে রাখবেন যে এই প্রক্রিয়াটি অনেক মাস (বছর?) নেবে, তাই এটি দীর্ঘতর।

সম্পূর্ণ শিক্ষানবিশ

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

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

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

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

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

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

শিক্ষানবিস

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

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

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

এছাড়াও, ধারণাগুলি সত্যই ডুবে যেতে কিছুটা সময় নেয় This এটি ব্যবহারের মাধ্যমে আসে, তবে সময়ের মাধ্যমেও। আমি দেখতে পাই যে কখনও কখনও কোনও সমস্যায় ঘুমানো অন্য যে কোনও কিছুর চেয়ে বেশি সহায়তা করে! অবশেষে, ধারণাটি ক্লিক করবে এবং আপনি অবাক হবেন যে আপনি কেন এমন ধারণাটি বুঝতে সংগ্রাম করেছিলেন যে বাস্তবে অবিশ্বাস্যরকম সহজ। এটি ঘটলে এটি দুর্দান্ত হয় এবং এটি হয়ে গেলে, আপনি হাস্কেলকে আপনার প্রিয় অপরিহার্য প্রোগ্রামিং ভাষা হিসাবে খুঁজে পেতে পারেন :)

আপনি হাস্কেল টাইপ সিস্টেমটি পুরোপুরি বুঝতে পারছেন তা নিশ্চিত করার জন্য, আপনার 20 টি মধ্যবর্তী হ্যাসেল অনুশীলনগুলি সমাধান করার চেষ্টা করা উচিত । "ফ্যারি" এবং "কলা" এর মতো ফাংশনগুলির মজাদার নামগুলি ব্যবহার করে exercises অনুশীলনগুলি আপনাকে কিছু বেসিক ফাংশনাল প্রোগ্রামিং ধারণাগুলি সম্পর্কে ইতিমধ্যে বুঝতে না সহায়তা করতে সহায়তা করে। তীর, ইউনিকর্ন, সসেজ এবং লোমযুক্ত কলা দিয়ে coveredাকা একগুচ্ছ কাগজপত্র সহ আপনার সন্ধ্যা কাটাবার দুর্দান্ত উপায়।

অন্তর্বর্তী

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

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

আপনার এখন যে জ্ঞানটি ছিল তা দিয়ে, আপনি ক্যাবলের বেশিরভাগ প্যাকেজগুলি (কমপক্ষে নথিভুক্ত ন্যূনতম ...) পাশাপাশি হাস্কেলের সাথে আসা বেশিরভাগ লাইব্রেরি ব্যবহার করতে সক্ষম হবেন। চেষ্টা করার জন্য আকর্ষণীয় গ্রন্থাগারের একটি তালিকা হবে:

  • পার্সেক : পার্সিং প্রোগ্রাম এবং পাঠ্যের জন্য। রিজেক্সস ব্যবহারের চেয়ে অনেক বেশি ভাল। দুর্দান্ত ডকুমেন্টেশন, এছাড়াও একটি বাস্তব বিশ্বের হাস্কেল অধ্যায় রয়েছে।

  • কুইকচেক : একটি খুব দুর্দান্ত পরীক্ষার প্রোগ্রাম। আপনি যা করেন তা হ'ল একটি ভবিষ্যদ্বাণী লিখুন যা সর্বদা সত্য হওয়া উচিত (উদাঃ length (reverse lst) == length lst)। তারপরে আপনি প্রিকিকেটটি কুইলচেকটি পাস করুন এবং এটি প্রচুর এলোমেলো মান উত্পন্ন করবে (এই ক্ষেত্রে তালিকাগুলিতে) এবং পরীক্ষা করবে যে ভবিষ্যদ্বাণীটি সমস্ত ফলাফলের জন্য সত্য। আরও দেখুন অনলাইন ম্যানুয়াল

  • হুনিট : হাসকেলে ইউনিট পরীক্ষা করা।

  • gtk2hs : হাস্কেলের জন্য সর্বাধিক জনপ্রিয় গুই কাঠামো, আপনাকে হাসকেলে gtk অ্যাপ্লিকেশন লিখতে দেয়।

  • হ্যাস্টস্ট্যাক : হাস্কেলের জন্য একটি ওয়েব বিকাশ কাঠামো। ডাটাবেসগুলি ব্যবহার করে না, পরিবর্তে একটি ডেটা টাইপ স্টোর। খুব ভাল ডক্স (অন্যান্য জনপ্রিয় ফ্রেমওয়ার্কগুলি স্ন্যাপ এবং হ্যাওড হবে )।

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

  • প্রয়োগমূলক: মনডসের মতো একটি ইন্টারফেস, তবে কম শক্তিশালী। প্রতিটি মোনাড প্রয়োগযোগ্য, তবে বিপরীত নয়। এটি কার্যকর কারণ কিছু প্রকার যা প্রয়োগযোগ্য তবে মনাদ নয়। এছাড়াও, আবেদনকারী ফাংশনগুলি ব্যবহার করে লিখিত কোডটি প্রায়শই মোনাড ফাংশনগুলি ব্যবহার করে সমমানের কোডটি লেখার চেয়ে বেশি কম্পোজেবল হয়। আপনি একটি হ্যাসেল গাইড শিখুন থেকে ফান্টেক্টর, প্রয়োগমূলক ফ্যাক্টর এবং মনোয়েডগুলি দেখুন ।

  • মলত্যাগের , Traversable : Typeclasses যে তালিকার অপারেশনের বিমূর্ত অনেক, যাতে একই ফাংশন অন্যান্য ধারক ধরনের প্রয়োগ করা যেতে পারে। আরও দেখুন Haskell উইকি ব্যাখ্যা

  • Monoid : একটি Monoid একটি টাইপ একটি শূন্য (অথবা mempty) মূল্য আছে, এবং একটি অপারেশন notated হয় <>যে দুটি Monoids একসঙ্গে যোগ দেয় তখন যেমন যে x <> mempty = mempty <> x = xএবং x <> (y <> z) = (x <> y) <> z। এগুলিকে পরিচয় এবং সমিতি আইন বলা হয়। অনেক ধরণের মনোয়েড যেমন সংখ্যার মতো mempty = 0এবং থাকে <> = +। এটি অনেক পরিস্থিতিতে কার্যকর।

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

  • অ্যারে : হাস্কেলের বিভিন্ন পরিবর্তনীয় / পরিবর্তনযোগ্য অ্যারে।

  • এস টি মোনাদ : আপনি খুব দ্রুত পরিবর্তিত এমন একটি মিউচ্যুয়াল স্টেটের সাথে কোডটি লিখতে দিন, যদিও এখনও মনাডের বাইরে বিশুদ্ধ রয়েছেন। আরো বিস্তারিত জানার জন্য লিঙ্কটি দেখুন।

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

আপনার অনেকগুলি নতুন ভাষার বৈশিষ্ট্য দেখতে হবে। আমি কেবল তাদের তালিকা করব, আপনি তাদের সম্পর্কে গুগল, হ্যাশেল উইকিবুক , হ্যাশেলউইকিআর.অর্গ সাইট এবং জিএইচসি ডকুমেন্টেশন থেকে প্রচুর তথ্য পেতে পারেন ।

  • মাল্টিপ্যারামিটার ধরণের শ্রেণি / ক্রিয়ামূলক নির্ভরতা
  • পরিবার টাইপ করুন
  • অস্তিত্বযুক্ত পরিমাণযুক্ত প্রকার
  • ভুতের ধরণ
  • GADTS
  • অন্যান্য...

প্রচুর হাস্কেল বিভাগের তত্ত্বকে কেন্দ্র করে তৈরি হয়েছে , তাই আপনি এটি সন্ধান করতে পারেন may একটি ভাল সূচনা পয়েন্ট কম্পিউটার সায়েন্টিস্টের জন্য বিভাগ তত্ত্ব । আপনি যদি বইটি কিনতে না চান তবে লেখকের সম্পর্কিত নিবন্ধটিও দুর্দান্ত।

শেষ পর্যন্ত আপনি বিভিন্ন হাস্কেল সরঞ্জাম সম্পর্কে আরও জানতে চাইবেন। এর মধ্যে রয়েছে:

  • জিসিসি (এবং এর সমস্ত বৈশিষ্ট্য)
  • ক্যাবল : হাসেল প্যাকেজ সিস্টেম
  • ডার্কস : হাস্কেল প্রোগ্রামের জন্য খুব জনপ্রিয় হাস্কেল লিখিত একটি বিতরণিত সংস্করণ নিয়ন্ত্রণ ব্যবস্থা।
  • হ্যাডক : একটি হাস্কেল স্বয়ংক্রিয় ডকুমেন্টেশন জেনারেটর

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

বিশেষজ্ঞ

এই পর্যায়ে আসতে আপনার কয়েক বছর সময় লাগবে (২০০৯ সাল থেকে হ্যালো!) তবে এখান থেকে আমি অনুমান করছি যে আপনি পিএইচডি কাগজপত্র, নতুন জিএইচসি এক্সটেনশান লিখতে শুরু করেছেন এবং নতুন বিমূর্ততা নিয়ে এসেছেন।

সাহায্য পাচ্ছেন

শেষ অবধি, শেখার যে কোনও পর্যায়ে, তথ্য পাওয়ার জন্য একাধিক জায়গা রয়েছে। এইগুলো:

  • # হেস্কেল আইরিক চ্যানেল
  • মেইলিং তালিকা । এগুলি সংঘটিত হওয়া আলোচনাগুলি পড়ার জন্য সাইন আপ করার উপযুক্ত - কিছু খুব আকর্ষণীয়।
  • haskell.org হোম পেজে তালিকাভুক্ত অন্যান্য স্থান

উপসংহার

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


35
ইয়া তীর! প্রথমে আপনি মনদেহগুলি আপনার মস্তিষ্ককে আকার দেবেন, তারপরে আপনি আপনার মাথায় দাঁড়িয়ে কমোনাদগুলি সম্পর্কে চিন্তাভাবনা করুন এবং তারপরে তীর পেতে একইসাথে আপনি উভয়টিই করেন :) হাস্কেলের মধ্যে অনেকগুলি মত প্রকাশের ক্ষমতা রয়েছে যা টাইপ-স্তরের সাহায্যে খোলা যেতে পারে প্রোগ্রামিং, খুব।
প্রকাশিত

13
@ জ্ঞানচৌড় Monadআরও শক্তিশালী, তবে কম গঠনমূলক ... প্রচুর লোকেরা এমন স্নাতকের ব্যবহার করেন যেখানে তারা ক্লিনার Applicativeকোড দিয়ে সরে যেতে পারত । বেশিরভাগ জিনিসগুলি Functorহ'ল Monadএস, তবে আপনি ব্যবহার করতে ঘুরেন না >>=এবং returnকখন fmapপর্যাপ্ত হবে, কারণ যদি আপনি এটি ব্যবহার করতে পারেন তবে পরবর্তীকালে অনেক সরল কোড বাড়ে।
টম ক্রকেট

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

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

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

179

আমার কিছু সহকর্মীর সাথে গ্রেট গুডের জন্য শিখুন আপনি একটি হাস্কেল দিয়ে ভাল অভিজ্ঞতা পেয়েছিলেন !

টিউটোরিয়ালটি এমন লোকদের লক্ষ্য করে যাঁদের অত্যাবশ্যক প্রোগ্রামিং ভাষার অভিজ্ঞতা আছে তবে তারা আগে কোনও কার্যকরী ভাষায় প্রোগ্রাম করেননি।

ও উত্তর পরীক্ষা এখানে খুব


27
আমিও একমত. এছাড়াও, যেহেতু এটি সুস্পষ্ট নয়, টিউটোরিয়ালের একটি ডাউনলোডযোগ্য পিডিএফ সংস্করণটির লিঙ্ক এখানে রয়েছে: learnyouahaskell.com/learnyouahaskell.pdf ওয়েব ডিজাইনটি দুর্দান্ত, তবে আমিও পাতাল রেলের জন্য একটি অনুলিপি রাখতে চাই।
টেলিমাচাস

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

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

7
@ আববাবা 22 আমি মনে করি প্রথমে LYAH পড়া এবং তারপরে আরডাব্লুএইচ এ যাওয়া সেরা ধারণা idea লায়াহ আপনাকে কেবল হাস্কেল শেখায় না; এটি আপনাকে কার্যকরী প্রোগ্রামিং শেখায়। আপনি সমস্যার সমাধান করার সময় আপনি কার্যকরীভাবে চিন্তাভাবনা শুরু করেন। স্পষ্টতই, কেবলমাত্র লায়াহ একটি বড় অ্যাপ্লিকেশন লেখার পক্ষে যথেষ্ট হবে না, তবে এটি আপনার মনকে সঠিকভাবে বাঁকায়। আপনি যদি অত্যাচারী ব্যাকগ্রাউন্ড থেকে থাকেন তবে এটিই সেরা উপায়, আইএমও
আব্দুলসত্তার মোহাম্মদ

4
@ টেলিম্যাচাস শুধু লক্ষ করুন: পিডিএফ চূড়ান্ত সংস্করণ নয়, অন্তত এটি শেষ অধ্যায়টি অনুপস্থিত।
sdcvvc

103

এখানে একটি ভাল বই যা আপনি অনলাইনে পড়তে পারেন: রিয়েল ওয়ার্ল্ড হাস্কেল

আমি করা বেশিরভাগ হাস্কেল প্রোগ্রাম প্রকল্পের এলিউর সমস্যাগুলি সমাধান করার জন্য হয়েছে ।

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


2
আমার অভিজ্ঞতা রিয়েল ওয়ার্ল্ড হাস্কেল দুর্দান্ত, আপনি অধ্যায় 5 এ পৌঁছানোর আগ পর্যন্ত আমি এটির প্রস্তাব দেব না।
মাস্টারমাস্টিক

@ মাস্টারমাস্টিক কেন? অধ্যায় 5 এর বাইরে সমস্যা কী? আমি অর্থ ব্যয় করার আগে জানতে চাই।
জে ব্লানচার্ড

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

73

আমি হাস্কেল ব্যবহার করে ফাংশনাল প্রোগ্রামিংয়ের এই 13 পর্বের সিরিজটি দেখে উপভোগ করেছি।

সি 9 লেকচার: ডঃ এরিক মাইজার - ফাংশনাল প্রোগ্রামিং ফান্ডামেন্টাল: http://channel9.msdn.com/shows/Going+Dip/Lecture-Series- এরিক- মিজার- ফাংশনাল- প্রোগ্রামিং- ফান্ডামেন্টালস- অধ্যায় -১/


69

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

কমান্ড লাইন

আপনি হাস্কেল প্ল্যাটফর্মটি ইনস্টল করার পরে নিশ্চিত হন cabal install hoogle

গুগলের ব্যবহারের উদাহরণ:

আপনার একটি ফাংশন রয়েছে f x = 3 * x + 1এবং আপনি এটি প্রয়োগ করতে চান (5 :: Int), তারপরে ফলাফল এবং সেই ফলাফলের উপর প্রয়োগ করুন এবং এই জাতীয় মানগুলির একটি অসীম তালিকা পান। আপনার সন্দেহ হয় ইতিমধ্যে আপনাকে সহায়তা করার জন্য কোনও ফাংশন উপস্থিত থাকতে পারে (বিশেষত আপনার জন্য এটি নয় f)।

এই ফাংশনটি (a -> a) -> a -> [a]যদি লাগে তবে তা লাগে f 5বা a -> (a -> a) -> [a]এটি লাগে তবে 5 f(আমরা ধরে নিই যে ফাংশনটি সাধারণ ধরণের জন্য, কেবলমাত্র Intগুলি নয়)

$ hoogle "a -> (a -> a) -> [a]"
Prelude iterate :: (a -> a) -> a -> [a]

হ্যাঁ, আপনার প্রয়োজনীয় ফাংশনটি ইতিমধ্যে বিদ্যমান এবং এটি ডাকা হয় iterate। আপনি এটি দ্বারা ব্যবহার iterate func 5!

ওয়েব ইন্টারফেস

একই উদাহরণের ফলাফল এখানে পাওয়া যাবে


আপনার কী প্রয়োজন তার জন্য কীভাবে Hoogle কে জিজ্ঞাসা করতে হবে তা বুঝতে পারলে আপনার যা প্রয়োজন তার জন্য প্রমিত পাঠাগার ফাংশন সন্ধান করা এত সহজ হয়ে যায়।
ankh-morpork

57

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

বিশেষ করে, অধ্যায় 8 ( "প্রায়োগিক parsers") বাস্তব বনিয়াদ আপনি monads সঙ্গে তার আচরণ শুরু করতে প্রদান করে, এবং আমি মনে করি এ পর্যন্ত সবচেয়ে ভাল জায়গা শুরু করার দ্বারা অনুসরণ করা হয় সকল Monads সম্পর্কে । (এই অধ্যায়টি সম্পর্কে, তবে ওয়েবসাইট থেকে doত্রুটিটি লক্ষ্য করুন, তবে: আপনি কোনও বিশেষ সহায়তা ছাড়াই ফর্মটি ব্যবহার করতে পারবেন না You আপনি প্রথমে টাইপক্লাসগুলি সম্পর্কে শিখতে এবং নিজেরাই সেই সমস্যাটি সমাধান করতে চাইতে পারেন))

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


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

52

সব মোনাদ টিউটোরিয়াল মজাদার রূপকের সাথে পড়ার চেষ্টা করবেন না। তারা আপনাকে আরও খারাপ মিশ্রিত করবে।


5
একমত! : 'বিমূর্ততা, স্বজ্ঞা, এবং "একসংখ্যা টিউটোরিয়াল ভ্রান্ত ধারণা" দেখুন byorgey.wordpress.com/2009/01/12/...
ShreevatsaR

31

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


5
+1 টি - ক্লিয়ার হবে: কি না তা জানতে শুধু IRC চ্যানেলের সাথে। যেমন আছে, ভিতরে গিয়ে জিজ্ঞাসা করবেন না "আমি কীভাবে একটি হেস্কেল প্রোগ্রাম লিখব? আমি কীভাবে সংখ্যা যুক্ত করব?"
বিকল্প

রিক ফ্রেইনোড ছাড়াও, ইদানীং ডিসকর্ড চ্যাটে হেস্কেল নিয়ে একটি বর্ধমান সজীব আলোচনা হয়।
টাইপলজিক


19

আমি আরও একটি পরিচয় হিসাবে আরও একটি হাস্কেল টিউটোরিয়াল সুপারিশ করতে পারেন ।

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

এটি খুব অ্যাক্সেসযোগ্য স্টাইলে লেখা এবং এতে (আরও অনেক কিছুর মধ্যে) নীচের সূচনামূলক পরামর্শ রয়েছে:

বিশেষজ্ঞ হাস্কেল হ্যাকারের জ্ঞানের দুটি কী রয়েছে:

  1. প্রকারগুলি বুঝতে।

  2. প্রতিটি ধরণের শ্রেণির জন্য এবং অন্যান্য ধরণের শ্রেণীর সাথে এর সম্পর্কের জন্য গভীর স্বীকৃতি অর্জন করুন, অনেক উদাহরণের সাথে পরিচিত হয়ে ব্যাক আপ।

মোনাড রিডার নিজেই ক্রিয়ামূলক প্রোগ্রামারগুলির জন্য একমাত্র ধনাত্মক ট্রেভর (কেবল হাস্কেল প্রোগ্রামার নয়)।


14

এটিতে সহজ প্রোগ্রাম লেখার চেষ্টা করুন।

আপনি বিভিন্ন পাঠ্যপুস্তকে নমুনার কাজগুলি খুঁজে পেতে পারেন সম্ভবত।

আমি হাস্কেল / এফপি পাঠ্যপুস্তকে আঁকড়ে রাখার পরামর্শ দেব না, কেবল এটির সাথে সহজ জিনিসগুলি করার চেষ্টা করুন: গণনা, স্ট্রিং ম্যানিপুলেশনস, ফাইল অ্যাক্সেস।

আমি এক ডজন সমাধান করার পরে, আমি বরফটি ভেঙে দিয়েছি :)

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


14

আমি মনে করি যে উদাহরণগুলির মাধ্যমে হাস্কেলের বৈশিষ্ট্য উপলব্ধি করা সর্বোপরি সর্বোত্তম উপায়।

http://en.wikipedia.org/wiki/Haskell_98_features

এখানে মনড এবং তীরগুলি সহ জটিল কৌশলগুলি রয়েছে

http://www.haskell.org/haskellwiki/Typeclassopedia

বাস্তব বিশ্বের সমস্যা এবং বড় প্রকল্পের জন্য, এই ট্যাগগুলি মনে রাখবেন: জিএইচসি (সর্বাধিক ব্যবহৃত সংকলক), হ্যাকেজ (গ্রন্থাগারডিবি), ক্যাবল (বিল্ডিং সিস্টেম), ডারাকস (অন্য একটি বিল্ডিং সিস্টেম)।

একটি সমন্বিত সিস্টেম আপনার সময় বাঁচাতে পারে: http://hackage.haskell.org/platform/

এই সিস্টেমের জন্য প্যাকেজ ডাটাবেস: http://hackage.haskell.org/

জিএইচসি সংকলকের উইকি: http://www.haskell.org/haskellwiki/GHC

হাস্কেল_৯৮_সামান্য বৈশিষ্ট্য এবং টাইপক্লাসোপিডিয়া পরে, আমি মনে করি আপনি ইতিমধ্যে তাদের সম্পর্কে নথিপত্রগুলি খুঁজে পেতে এবং পড়তে পারেন

যাইহোক, আপনি কিছু GHC এর ভাষা বর্ধনের পরীক্ষা করতে চাইতে পারেন যা ভবিষ্যতে হ্যাশেল স্ট্যান্ডার্ডের অংশ হতে পারে।

এটি হ্যাশেল শেখার জন্য আমার সেরা উপায়। আমি আশা করি এটি আপনাকে সহায়তা করতে পারে


13

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

বোনাসের টিউটোরিয়ালটি আপনাকে শীর্ষস্থানীয় করবে এবং রিয়েল ওয়ার্ল্ড হাস্কেল যে রোমাঞ্চের যাত্রায় নিয়ে আসে তার জন্য আপনাকে প্রস্তুত করে তুলবে। আপনার সৌভাগ্য কামনা করছি!


12

আপনার যদি কেবল অত্যাবশ্যক / ওও ভাষাগুলির অভিজ্ঞতা থাকে তবে আমি পরামর্শ দিচ্ছি যে আরও বেশি প্রচলিত কার্যনির্বাহী ভাষাটি স্টেপিং পাথর হিসাবে ব্যবহার করুন। হাস্কেল সত্যিই আলাদা এবং যে কোনও জায়গা পেতে আপনাকে অনেকগুলি ভিন্ন ধারণা বুঝতে হবে। আমি প্রথমে একটি এমএল-স্টাইলের ভাষা (যেমন F #) ব্যবহার করার পরামর্শ দিই।


এলম হতে পারে এই বিকল্পগুলির মধ্যে সবচেয়ে কাছের, আরও ব্যবহারকারীর এবং শিক্ষণক্ষেত্র বান্ধব ...
পেড্রো রলো

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

10

প্রথম উত্তরটি খুব ভাল একটি। বিশেষজ্ঞের স্তরে পৌঁছানোর জন্য আপনার নিজের বিশেষজ্ঞদের কিছু পিএইচডি করা উচিত।

আমি আপনাকে হাস্কেল পৃষ্ঠাটি দেখার জন্য পরামর্শ দিচ্ছি: http://haskell.org । সেখানে আপনার কাছে প্রচুর পরিমাণে উপাদান এবং হাস্কেল সম্প্রদায়ের দ্বারা অনুমোদিত হাস্কেলের সর্বাধিক যুগোপযোগী সামগ্রীর উল্লেখ রয়েছে।


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