সি # দেব - আমি লিপস চেষ্টা করেছি, তবে আমি এটি [বন্ধ] পাই না


37

কয়েক মাস সিএল এবং কিছুটা ক্লোজারের সাথে লিস্পের সাথে শেখার এবং খেলার পরেও আমি এখনও সি # এর পরিবর্তে এতে কিছু লেখার জন্য বাধ্যতামূলক কারণ দেখছি না।

আমি সত্যিই কিছু জোরালো কারণ চাই বা কারও পক্ষে এটি উল্লেখ করতে চাই যে আমি সত্যিই বড় কিছু মিস করছি ।

লিস্পের শক্তি (আমার গবেষণা অনুসারে):

  • কমপ্যাক্ট, ভাবপূর্ণ স্বরলিপি - সি # এর চেয়েও বেশি, হ্যাঁ ... তবে আমি মনে করি যে এই ধারণাগুলি সি # তেও প্রকাশ করতে সক্ষম হব।
  • ক্রিয়ামূলক প্রোগ্রামিংয়ের জন্য অন্তর্নিহিত সমর্থন - লিংক এক্সটেনশন পদ্ধতির সাথে সি #:
    • mapcar =। নির্বাচন করুন (ল্যাম্বদা)
    • mapcan =। নির্বাচন করুন (ল্যাম্বদা)। সমষ্টি ((a, b) => a.Uunion (b))
    • গাড়ি / প্রথম =। প্রথম ()
    • সিডিআর / বিশ্রাম =। ছেড়ে দিন (1) .... ইত্যাদি
  • লাম্বদা এবং উচ্চতর অর্ডার ফাংশন সমর্থন - সি # এর এটি রয়েছে এবং বাক্য গঠনটি তর্কযোগ্যভাবে সহজ:
    • "(ল্যাম্বদা (এক্স) (দেহ))" বনাম "এক্স => (দেহ)"
    • "# (" "%", "% 1", "% 2" ক্লোজুরেতে খুব ভাল লাগছে
  • অবজেক্ট থেকে পৃথক পদ্ধতি প্রেরণ - এক্স # এর এক্সটেনশন পদ্ধতির মাধ্যমে রয়েছে
  • মাল্টিমোথডোপ প্রেরণ - সি # এর এ স্থানীয়ভাবে নেই, তবে আমি কয়েক ঘন্টার মধ্যে এটি একটি ফাংশন কল হিসাবে প্রয়োগ করতে পারি
  • কোডটি হ'ল ডেটা (এবং ম্যাক্রোস) - সম্ভবত আমি ম্যাক্রোগুলি "অর্জিত" নাও করেছি, তবে এমন কোনও উদাহরণ আমি দেখিনি যেখানে ম্যাক্রোর ধারণাটি কোনও ফাংশন হিসাবে প্রয়োগ করা যায়নি; এটি "ভাষা" পরিবর্তন করে না, তবে আমি নিশ্চিত নই যে এটি একটি শক্তি
  • ডিএসএলস - এটি কেবল ফাংশন রচনার মাধ্যমেই করতে পারে ... তবে এটি কাজ করে
  • শিরোনামহীন "অন্বেষণকারী" প্রোগ্রামিং - স্ট্রাক্ট / ক্লাসের জন্য, সি # এর অটোপ্রোপার্টি এবং "অবজেক্ট" বেশ ভাল কাজ করে এবং আপনি সহজেই আরও শক্তিশালী টাইপিংয়ের সাথে এগিয়ে যেতে পারবেন
  • উইন্ডোজবিহীন হার্ডওয়্যারে চলছে - হ্যাঁ, তাই না? কলেজের বাইরে, আমি কেবলমাত্র এমন একজনকে চিনি যে বাড়িতে উইন্ডোজ চালায় না, বা কমপক্ষে * নিক্স / ম্যাকের উইন্ডোজ একটি ভিএম আছে। (তারপরে আবার, সম্ভবত এটি আমার চেয়ে বেশি গুরুত্বপূর্ণ এবং আমি সবেমাত্র ব্রেইন ওয়াশ হয়েছি ...)
  • নীচের অংশের নকশার জন্য REPL - ঠিক আছে, আমি স্বীকার করি এটি সত্যিই দুর্দান্ত, এবং আমি এটি সি # এ মিস করছি।

লিস্পে আমি যে জিনিসগুলি নিখোঁজ করছি (সি #,। নেট, ভিজ্যুয়াল স্টুডিও, পুনঃভাগের মিশ্রণের কারণে):

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

আমি লিস্পকে ঘিরে হাইপটি সত্যিই পছন্দ করি এবং আমি এটির সুযোগ দিয়েছিলাম।

তবে লিস্পে আমি এমন কিছু করতে পারি যা আমি সি # তেও করতে পারি না? এটি সি # তে আরও কিছুটা ভার্বোজ হতে পারে তবে আমার স্বতঃপূরণও রয়েছে।

আমি কী মিস করছি? আমি ক্লোজার / সিএল কেন ব্যবহার করব?


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

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

4
"আমি এমন একটি উদাহরণ দেখিনি যেখানে ম্যাক্রোর ধারণাটি কোনও ফাংশন হিসাবে প্রয়োগ করা যায়নি" - আপনি কীভাবে লিখবেন ANDবা ORকোনও ফাংশন হিসাবে তা দেখতে চাই । এটি করা যেতে পারে (প্রদত্ত LAMBDA, যা ম্যাক্রোও) তবে এটি করার কোনও সুস্পষ্ট উপায় আমি দেখতে পাচ্ছি না যা পুরোপুরি স্তন্যপান করবে না।

1
"নেমস্পেসস ... ... ক্লোজওর এটি বলে মনে হচ্ছে, সিএল বলে মনে হচ্ছে না" - আপনি যা খুঁজছেন সে সম্পর্কে আপনি আরও নির্দিষ্ট হতে পারেন? আমি সত্যিই ক্লোজার ব্যবহার করি নি তবে এর নামের স্থানগুলি সিএল এর প্যাকেজগুলির মতো দেখতে দেখতে বেশ সুন্দর দেখাচ্ছে।

4
জোনাথন: সিএল প্যাকেজগুলিতে নামকরণের চিহ্নগুলির জন্য :(বা ::এক্সপোর্ট করা প্রতীকগুলির জন্য) ব্যবহার করে, উদাহরণস্বরূপ, আপনার উদাহরণটি এখানে ব্যবহার করবে http:sessionএবং chat:session

উত্তর:


23

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

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

সুতরাং পাতার মর্মর পারবেন আপনি অংশগ্রহণের W / O প্রতি একটি পাথ sacrificing ভাষা নকশা দক্ষতা । এবং যদিও এই সমস্যাগুলি আপনার পক্ষে গুরুত্বপূর্ণ নয় তবে এগুলি অত্যন্ত গুরুত্বপূর্ণ কারণ তারা সমস্ত দরকারী উত্পাদন ভিত্তিক প্রোগ্রামিং ভাষার ভিত্তি রচনা করে। সি # তে এই মূল উপাদানটি আপনাকে খুব সীমিত আকারে উন্মুক্ত করে দেয় exposed

ম্যাক্রোগুলির গুরুত্ব অন্য ভাষায় হারিয়ে যায় না - টেম্পলেট হাস্কেল, ক্যাম্পল 4 মাথায় আসে। তবে তবুও এটি ব্যবহারযোগ্যতার একটি সমস্যা - আজ অবধি লিস্প ম্যাক্রোগুলি সংকলন-কাল রূপান্তরটির সবচেয়ে ব্যবহারকারী-বান্ধব তবে শক্তিশালী বাস্তবায়ন implementation

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


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

15
@ জোনাথন মিচেম, আপনি ইতিমধ্যে প্রচুর বাহ্যিক ডিএসএল ব্যবহার করছেন - কনফিগারেশন ফাইল, স্ক্রিপ্ট তৈরি, ওআরএম কনফিগারেশন, ভিজ্যুয়াল কোড জেনারেটর (যেমন, উইনফর্মস সম্পাদক), এক্সএএমএল, পার্সার জেনারেটর ইত্যাদি। তাদের জন্য আলাদা বিল্ড টুলের দরকার নেই এবং এগুলি একক ভাষার মধ্যেই সরবরাহ করা হয়। এবং আপনাকে অবশ্যই এমবেডেড ডিএসএল-এর কমপক্ষে দুটি - নিয়মিত প্রকাশ এবং এসকিউএল এর সাথে परिचित হতে হবে।
এসকে-যুক্তি

ওহ, ঠিক আছে. আমি তাদের কখনই ডিএসএল হিসাবে ভেবে দেখিনি। এখন, আমি ইচ্ছাকৃতভাবে অনেকগুলি থেকে দূরে সরে গেছি, "সি # দিয়ে আমি যে কিছু করতে পারি, তার ভিত্তিতে আমি সি # এর জন্য আঁকতে যাচ্ছি"। আমি ব্যক্তিগতভাবে একটি সামঞ্জস্যপূর্ণ আচরণের সাথে একটি সরঞ্জামের সাথে লেগে থাকতে চাই। তবে আমি এই উদাহরণগুলিতে ডিএসএলগুলির মান বুঝতে পারি।

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

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

15

মূলত কেবলমাত্র লিস্পসে পাওয়া যায় এমন প্রায় সমস্ত কিছুই কৃতজ্ঞতার সাথে অন্যান্য অনেক আধুনিক ভাষায় স্থানান্তরিত হয়েছিল। সবচেয়ে বড় ব্যতিক্রম হ'ল "কোড হ'ল ডেটা" দর্শন এবং ম্যাক্রো।

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

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

ম্যাক্রোর "হ্যালো ওয়ার্ল্ড" উদাহরণটি কনডের ক্ষেত্রে "যদি" লিখতে হয়। আপনি যদি ম্যাক্রোগুলির শক্তি শিখতে আগ্রহী হন তবে ফাংশন ব্যবহার করে ক্লোজারে "মাই-ইফ" সংজ্ঞা দেওয়ার চেষ্টা করুন এবং এটি কীভাবে ব্রেক হয় তা দেখুন। আমি রহস্যময় হতে চাই না, আমি কখনও কাউকে একা ব্যাখ্যা করে ম্যাক্রো বুঝতে শুরু করতে দেখিনি, তবে এই স্লাইডশোটি বেশ ভাল পরিচিতি: http://www.slideshare.net/pcalcado/lisp-macros-in -20-মিনিট-সমন্বিত-clojure-উপস্থাপনা

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


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

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

1
আমি সম্মতি দিচ্ছি যে ম্যাক্রোগুলি সার্থক, তবে এটি সত্য নয় যে মাই-যদি তাদের প্রয়োজন হয় তবে এটি একটি উচ্চ-অর্ডার ফাংশন হিসাবে লেখা যেতে পারে (নীচের সিএল উদাহরণ দেখুন)। আপনি কোডটি হাঁটাতে বা এটি একটি নতুন লেজিকাল প্রসঙ্গে রাখতে চাইলে আপনার কেবল ম্যাক্রোগুলি প্রয়োজন। (defun my-if (test then &optional else) (cond (test (funcall then)) ('otherwise (funcall else))))

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

7
@ জোনাথন মিচেম, লিনকু সিনট্যাক্স ম্যাক্রোগুলির সাহায্যে কী করা যায় তার একটি দুর্দান্ত উদাহরণ, তবে ভাষাটি কোনও শালীন রূপককে সমর্থন করে না বলে পরিবর্তে একটি ভাষা কোরতে প্রয়োগ করতে হয়েছিল।
এসকে-যুক্তি 18

14

আমি কমন লিস্পে বিশেষজ্ঞ নই, তবে আমি সি # এবং ক্লোজার উভয়কেই যুক্তিসঙ্গতভাবে জানি তাই আশা করি এটি একটি কার্যকর দৃষ্টিকোণ।

  • সরল বাক্য গঠন => শক্তি - লিপসগুলি এমন সহজতম সিনট্যাক্স সম্পর্কে যা সম্ভব কাজ করতে পারে। এস-এক্সপ্রেশনগুলি আপনার প্রয়োজন। একবার আপনি "(ফাংশন-কল arg1 arg2 arg3) ছুঁড়ে ফেলেছেন" তবে আপনি মূলত এটি পেয়ে গেছেন। বাকিগুলি কেবল সঠিক ফাংশন কল এবং যুক্তি তুলে ধরেছে। প্রায় তুচ্ছ সহজ মনে হচ্ছে, তবে সত্যটি এই যে সরলতা লিসপসকে এত শক্তি এবং নমনীয়তা দেয় এবং বিশেষত লিস্পের জন্য বিখ্যাত মেটা-প্রোগ্রামিং ক্ষমতাগুলি সক্ষম করে। যেমন আমি যদি একই আর্গুমেন্ট উপর বিভিন্ন ফাংশান কল করার একটি ম্যাক্রো আমি শুধু নিম্নলিখিত (না এই হল ভালো কিছু করতে চান না এটি একটি ম্যাক্রো যে কোড কম্পাইল দ্বারা উৎপন্ন যেমন যদি আপনি সেই সমস্ত পৃথক ফাংশন কল আউট লিখেছিলাম - কেবল রানটাইম ফাংশন আবেদন হাতের দ্বারা):
(defmacro print-many [functions args]  
  `(do   
     ~@(map   
        (fn [function] `(println (~function ~@args)))   
        functions)))

(print-many [+ - * /] [10 7 2])  
19  
1  
140  
5/7
  • অবিশ্বাস্যভাবে সরল বাক্য গঠনের ফলস্বরূপ, লিস্পের "কোড হ'ল ডেটা" ফিলোসফি ফাংশন রচনা / টেমপ্লেট / জেনারিক ইত্যাদির সাথে আপনি যা কিছু করতে পারেন তার চেয়ে অনেক বেশি শক্তিশালী এটি সংকলনের সময় কেবল ডিএসএল এর চেয়ে বেশি, এটি কোড-প্রজন্ম এবং হেরফের , ভাষার একটি মৌলিক বৈশিষ্ট্য হিসাবে। আপনি যদি সি # বা জাভার মতো অ- হোমিকোনিক ভাষায় এই ধরণের ক্ষমতা অর্জনের চেষ্টা করেন , তবে অবশেষে আপনি লিস্পকে খারাপভাবে পুনর্নবীকরণ শেষ করবেন। অতএব বিখ্যাত গ্রিনস্পংস দশম বিধি: "যে কোনও জটিল জটিল সি বা ফোর্টরান প্রোগ্রামে অ্যাডহক রয়েছে, অনানুষ্ঠানিকভাবে নির্দিষ্ট, বাগ-চালিত, সাধারণ লিসপের অর্ধেকের ধীর প্রয়োগ"। আপনি যদি নিজের অ্যাপ্লিকেশনটির মধ্যে কোনও টুরিং-সম্পূর্ণ টেম্প্লেটিং / ফ্লো কন্ট্রোল ল্যাঙ্গুয়েজ আবিষ্কার করতে পেরে থাকেন তবে আপনি সম্ভবত জানেন যে আমি কী বোঝাতে চাইছি .....

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

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

    (def fibs (lazy-cat '(0 1) (map + fibs (drop 1 fibs))))

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

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

আপনি যে জিনিসগুলি "নিখোঁজ" হিসাবে দেখছেন সে সম্পর্কে কয়েকটি দ্রুত মন্তব্য:

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

আমি ব্যক্তিগতভাবে ক্লোজুর / লিস্পের সুবিধাগুলি বেশ জোরালোভাবে খুঁজে পাই এবং আমি সি # / জাভাতে ফিরে যাবার পরিকল্পনা করছি না (সমস্ত দরকারী লাইব্রেরি ধার করার জন্য আমার কী প্রয়োজন!)।

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


1
ধারণাগুলির দুর্দান্ত গণনার জন্য ধন্যবাদ। আমি আসলে সি # তে আইনিউমেবল <> কনস্ট্রাক্টের মাধ্যমে অলস ক্রমগুলি অনেকগুলি ব্যবহার করি (এবং 2005 বা তার পর থেকে কোনও অ্যারেলিস্ট স্পর্শ করি নি) তবে আমি ধারণাটি বুঝতে পারি। ক্লোজারের একযোগের আদিমতা অত্যন্ত চিত্তাকর্ষক। আমি কয়েক বছর আগে সি # তে গ্রিড কম্পিউটিং করছিলাম - বহু মাল্টি-কোর মেশিনে একত্রে - এবং আমি এখনও বিশ্বাস করি এটি ভবিষ্যত। সম্ভবত সবার থেকে সবচেয়ে বড় ধারণাটি হ'ল "আপনাকে সত্যই কেবল খনন করতে হবে এবং এটি অভিজ্ঞতা অর্জন করতে হবে, এটি আসলে ব্যাখ্যা করা যায় না"। সুতরাং, আমি খনন চালিয়ে যাচ্ছি এবং অভিজ্ঞতা চালিয়ে যাচ্ছি।

1
দুর্দান্ত, সাহায্য করতে পেরে আনন্দিত - এবং এটি হ'ল সত্যই!
মাইক্রা

10

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

কমন লিস্পের এই মিশ্রণটি রয়েছে:

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

এখন, সি # এর মতো অন্যান্য ভাষায়ও রয়েছে। তবে প্রায়শই একই জোর দিয়ে নয়।

সি # আছে

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

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

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

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

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

তুমি লেখ:

  • নামস্থান। এমনকি স্থিতিশীল পদ্ধতি সহ, আমি তাদের প্রসঙ্গটি শ্রেণিবদ্ধ করার জন্য তাদের একটি "শ্রেণিতে" বেঁধে রাখতে চাই (ক্লোজুরে মনে হয় এটি সিএল বলে মনে হচ্ছে না।)

কমন লিস্প ক্লাসগুলির সাথে নেমস্পেসগুলি সংযুক্ত করে না। নেমস্পেসগুলি প্রতীক প্যাকেজগুলি সরবরাহ করে এবং ক্লাস থেকে স্বতন্ত্র। আপনি যদি সিএলওএস ব্যবহার করেন তবে আপনাকে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ে আপনার দৃষ্টিভঙ্গি পুনরায় রঙ করতে হবে।

  • টাইপ সিস্টেমটি দুর্দান্ত সংকলন এবং ডিজাইন-টাইম সমর্থন আমাকে ভুল তথ্য বানানো যেকোনো কিছুকেই রিয়েলটাইমের আন্ডারলাইন করা হয় এমন ডেটাস্ট্রাকচারের "সঠিকতা" নির্ধারণ করতে দেয়; কোড উন্নতি (যেমন একটি অপরিহার্য ব্যক্তির পরিবর্তে এফপি পদ্ধতির ব্যবহার) স্বয়ংক্রিয়ভাবে সজ্জিত হওয়ার জন্য আমাকে রানটাইম পর্যন্ত অপেক্ষা করতে হবে না

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

  • জিইউআই বিকাশের সরঞ্জামগুলি: উইনফোর্ডস এবং ডাব্লুপিএফ (আমি জানি ক্লোজুর জাভা জিইউআই লাইব্রেরিতে অ্যাক্সেস পেয়েছে তবে তারা আমার কাছে সম্পূর্ণ বিদেশী))

লিস্প ওয়ার্কস এবং অ্যালেগ্রো সিএল এর মতো বাণিজ্যিক লিপসগুলি উইন্ডোজের অধীনে অনুরূপ জিনিস সরবরাহ করে।

  • জিইউআই ডিবাগিং সরঞ্জামগুলি: ব্রেকপয়েন্টস, স্টেপ-ইন, স্টেপ-ওভার, মান পরিদর্শক (পাঠ্য, এক্সএমএল, কাস্টম), ঘড়িগুলি, ডিবাগ-বাই-থ্রেড, শর্তাধীন ব্রেকপয়েন্টস, কল-স্ট্যাক উইন্ডোটি যে কোনও স্তরে কোডে ঝাঁপ দেওয়ার ক্ষমতা সহ স্ট্যাকের মধ্যে (নিখুঁতভাবে বলতে গেলে, ইমাসস + স্লাইমের সাথে আমার স্টিন্ট মনে হয় এর কিছু সরবরাহ করে তবে আমি ভিএস জিইআই-চালিত পদ্ধতির আংশিক)

লিস্প ওয়ার্কস এবং অ্যালেগ্রো সিএল এর মতো বাণিজ্যিক লিপসগুলি উইন্ডোজের অধীনে সেগুলির সমস্ত অফার করে।


1
আমার সমালোচনা আসলে লিস্পসের নয়। আমি তাদের যথেষ্ট সক্ষম বলে মনে করি। আমি ইতিমধ্যে যা করি না তা লিস্প কী করতে পারে / আমাকে দিতে পারে তা সন্ধান করছি। আমি পুরোপুরি বুঝতে পেরেছি যে বেশিরভাগ সি # ডেভস "নতুন" ভাষার বৈশিষ্ট্যগুলি ব্যবহার করে না। আমি মনে করি বৃহত্তর পয়েন্টটি আমি এটি করি এবং সত্যই, জিইউআইয়ের বাইরে, আমি প্রায় 100% এফপি স্টাইলে লিখি। এফপি একটি ধারণামূলক লিপ ছিল, তবে এটি মূল্যবান। যাইহোক, আমি যেখানে থেকে রয়েছি এমন একটি লিপ্পে স্যুইচ করা খুব সামান্য উপকার বলে মনে হচ্ছে। আমি এটি খুঁজে বার করে চালিয়ে যাওয়া উচিত এমন একটি কারণ খুঁজে পাওয়ার আশা করছি।

@ জোনাথন মিচেম: ভাষা # এর কিছু বৈশিষ্ট্য রয়েছে এমনকি কয়েকটি লাইব্রেরি সেগুলি ব্যবহার করতে পারে, এমনকি সি # আসলেই কোনও এফপি ভাষার মতো লাগে না। আপনি যদি মাইক্রোসফ্ট ইকো সিস্টেমে এফপি প্রোগ্রামিং করতে চান তবে F # আপনার জন্য হতে পারে।

@ রাইনার না, এটি কোনও এফপি ভাষার মতো দেখাচ্ছে না, তবে এটি এটি করতে পারে এবং এটিতে মোটামুটি নিখুঁতভাবে। এবং যখন আমি প্রয়োজন / প্রয়োজনীয় কোড বা ওও চাই, আমি এটিও করতে পারি। (সামান্য অফ-টপিক: আমি এফ # কে সত্যই গুরুত্বের সাথে খনন করার মতো ভাষা বিবেচনা করি না, বরং আমি হাসকেলে মনডের আশেপাশে মাথা নিয়ে এসেছি I একটি "আসল" ভাষা হয় [এবং তারপরেও তা ছিল না, imho]

@ রাইনার এখানে সি # jmitchem.livejorter.com/#post-jmitchem-69978এফপির

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

5

রেইনিয়ার জোসভিগ এটি সেরা বলেছিলেন।

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

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


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

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

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

যদিও এটি একটি ফাংশন হিসাবে তুলনা করা সম্ভব (তুলনা স্ট্রিং, কেসগুলির তালিকা এবং কার্যকর করার জন্য ক্লোজার), সম্ভবত এটি "সাধারণ কোড" এর মতো দেখাবে না এবং এটিই সেখানে লিস্প ম্যাক্রোগুলির একটি নির্দিষ্ট জয় রয়েছে। আপনি সম্ভবত বেশ কিছু ম্যাক্রো বা বিশেষ ফর্ম taht ম্যাক্রো-মত, মত ব্যবহার করেছি defun, defmacro, setf, cond, loopএবং আরো অনেক।


2

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

http://www.defmacro.org/ramblings/lisp.html

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

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