আমি ভোঁতা হয়ে যাব: "সিনট্যাক্সের জন্য নয়, শব্দার্থবিদ্যার জন্য নয়" এর অর্থ কী তা আমি বুঝতে পারি না। এই কারণেই এই উত্তরের অংশটি লুনারিয়নের উত্তর নিয়ে কাজ করবে এবং অন্য অংশটি মূল প্রশ্নের উত্তর দেওয়ার ক্ষেত্রে আমার চেষ্টা হবে।
প্রোগ্রামিংয়ে "শব্দার্থবিজ্ঞান" শব্দটি ব্যবহার করা হলে এটি ভাষার লেখক যেভাবে তাদের ভাষার ব্যাখ্যা করতে বেছে নিয়েছিল তা বোঝায়। এটি সাধারণত সূত্রগুলির একটি সেটে ফোটায় যা পাঠকের সাথে পরিচিত বলে ধরে নেওয়া হয় এমন কিছু নিয়মের ক্ষেত্রে ভাষার ব্যাকরণ নিয়মকে রূপান্তর করে। উদাহরণস্বরূপ, প্লটকিন তাঁর স্ট্রাকচারাল অ্যাপ্রোচ টু অপারেশনাল সেমেন্টিকস গ্রন্থে অ্যাবস্ট্রাক্ট সিনট্যাক্সটি কীভাবে মূল্যায়ন করে (কোনও প্রোগ্রাম চালানোর অর্থ কী) তা বোঝাতে লজিক্যাল ডেরিভেশন ভাষা ব্যবহার করে। অন্য কথায়, সিনট্যাক্স যদি কিছু স্তরের প্রোগ্রামিং ভাষা গঠন করে, তবে এর কিছু শব্দার্থবিজ্ঞান থাকতে হবে, অন্যথায় এটি ভাল, কোনও প্রোগ্রামিং ভাষা নয়।
তবে, আসুন আমরা মুহুর্তের জন্য আনুষ্ঠানিক সংজ্ঞাগুলি ভুলে যাই, সর্বোপরি উদ্দেশ্যটি বোঝা গুরুত্বপূর্ণ। সুতরাং, মনে হচ্ছে লুনারিওন তার পাঠকদের ম্যাক্রো ব্যবহার করতে উত্সাহিত করবে যখন কোনও নতুন অর্থ প্রোগ্রামে যুক্ত করা হয় না, তবে সংক্ষেপে কিছুটা সংক্ষেপে। আমার কাছে এটি অদ্ভুত এবং ম্যাক্রোগুলি আসলে কীভাবে ব্যবহৃত হয় তার সম্পূর্ণ বিপরীতে sounds নীচে এমন উদাহরণ দেওয়া আছে যা স্পষ্টভাবে নতুন অর্থ তৈরি করে:
defun
এবং বন্ধুরা, যা ভাষার অপরিহার্য অঙ্গ, একই পদে আপনি ফাংশন কলগুলি বর্ণনা করতে পারবেন না।
setf
নিয়মগুলি কীভাবে কার্য সম্পাদন করে তার বিবরণের মতো প্রতিক্রিয়ার বিবরণ অপর্যাপ্ত বলে বর্ণনা করে (setf (aref x y) z)
।
with-output-to-string
ম্যাক্রোর অভ্যন্তরে কোডটির শব্দার্থবিজ্ঞানও পরিবর্তন করে। একইভাবে, with-current-buffer
এবং অন্যান্য with-
ম্যাক্রোগুলির একগুচ্ছ ।
dotimes
এবং অনুরূপ ফাংশনের ক্ষেত্রে বর্ণনা করা যায় না।
ignore-errors
কোডটির শব্দার্থক শব্দটিকে এটি মোড়ানো করে changes
cl-lib
প্যাকেজ, eieio
প্যাকেজ এবং ইমাস লিস্পে ব্যবহৃত কয়েকটি প্রায় সর্বব্যাপী গ্রন্থাগারগুলিতে ম্যাক্রোগুলির পুরো গোছা রয়েছে যা ফাংশন ফর্মগুলির মতো বিভিন্ন ব্যাখ্যা হতে পারে বলে মনে হয়।
সুতরাং, যদি কিছু হয় তবে ম্যাক্রোগুলি একটি ভাষায় নতুন শব্দার্থবিজ্ঞান প্রবর্তনের হাতিয়ার। আমি এটি করার বিকল্প উপায় ভাবতে পারি না (কমপক্ষে ইমাস লিস্পে নয়)।
যখন আমি ম্যাক্রোগুলি ব্যবহার করব না:
যখন তারা নতুন শব্দার্থবিজ্ঞানের সাথে কোনও নতুন নির্মাণকে উপস্থাপন করবেন না (অর্থাত ফাংশনটি ঠিক তেমন কাজ করবে)।
যখন এটি কেবল এক ধরণের সুবিধা (যেমন ম্যাক্রো নামের একটি ম্যাক্রো তৈরি mvb
করা যা cl-multiple-value-bind
এটি আরও সংক্ষিপ্ত করতে প্রসারিত )।
যখন আমি প্রত্যাশা করি যে অনেক ত্রুটি পরিচালনার কোডটি ম্যাক্রো দ্বারা লুকানো থাকবে (যেমনটি উল্লেখ করা হয়েছে, ম্যাক্রোগুলি ডিবাগ করা কঠিন)।
যখন আমি কার্যের চেয়ে ম্যাক্রোগুলিকে দৃ strongly়তার সাথে পছন্দ করব:
যখন ডোমেন-নির্দিষ্ট ধারণাগুলি ফাংশন কল দ্বারা অস্পষ্ট হয়। উদাহরণস্বরূপ, যদি কাউকে একই context
যুক্তিটিকে ক্রমাগত কল করার প্রয়োজন হয় এমন একটি ফাংশনগুলির একটি গুচ্ছের কাছে যেতে হয়, তবে আমি তাদেরকে একটি ম্যাক্রোতে আবৃত করতে পছন্দ করব, যেখানে context
যুক্তিটি লুকানো রয়েছে।
যখন ফাংশন ফর্মের জেনেরিক কোড অত্যধিক ভার্বোজ হয় (ইমাস লিস্পে খালি পুনরাবৃত্তি রচনাগুলি আমার স্বাদের পক্ষে খুব ভার্জোজ এবং অকারণে প্রোগ্রামারকে নিম্ন স্তরের প্রয়োগের বিশদগুলিতে প্রকাশ করে)।
চিত্রণ
নীচে জলযুক্ত সংস্করণটি কম্পিউটার বিজ্ঞানে শব্দার্থক বলতে কী বোঝায় সে সম্পর্কে একটি অন্তর্দৃষ্টি দেওয়ার উদ্দেশ্যে তৈরি করা হয়েছে।
ধরুন আপনার কাছে কেবল এই বাক্য গঠন নিয়মগুলি সহ একটি অত্যন্ত সাধারণ প্রোগ্রামিং ভাষা রয়েছে:
variable := 1 | 0
operation := +
expression := variable | (expression operation expression)
এই ভাষা দিয়ে আমরা মত "প্রোগ্রাম" গঠন করা যেতে পারে (1+0)+1
বা 0
বা ((0+0))
ইত্যাদি
তবে যতক্ষণ না আমরা শব্দার্থবিজ্ঞানের বিধি সরবরাহ করি না, এই "প্রোগ্রামগুলি" অর্থহীন।
ধরুন আমরা এখন আমাদের ভাষাকে (শব্দার্থক) বিধি দ্বারা সজ্জিত করেছি:
0+0 0+1 1+0 1+1 (exp)
---, ---, ---, ---, -----
0 1+0 1 0 exp
এখন আমরা আসলে এই ভাষাটি ব্যবহার করে গণনা করতে পারি। অর্থাৎ, আমরা সিনট্যাক্টিকাল প্রতিনিধিত্ব নিতে পারি, এটি বিমূর্তভাবে বুঝতে পারি (অন্য কথায়, এটাকে অ্যাবস্ট্রাক্ট সিনট্যাক্সে রূপান্তরিত করে), তারপরে এই প্রতিনিধিত্বকে হেরফের করার জন্য শব্দার্থ বিধি ব্যবহার করতে পারি।
আমরা যখন ভাষার লিস্প পরিবার সম্পর্কে কথা বলি, ফাংশন মূল্যায়নের মূল শব্দটির নিয়মগুলি প্রায় ল্যাম্বডা-ক্যালকুলাসের:
(f x) (lambda x y) x
-----, ------------, ---
fx ^x.y x
উদ্ধৃতি এবং ম্যাক্রো-এক্সপেনশন প্রক্রিয়াগুলি মেটা-প্রোগ্রামিং সরঞ্জাম হিসাবেও পরিচিত, যেমন তারা কেবল প্রোগ্রামিংয়ের পরিবর্তে কোনওটিকে প্রোগ্রাম সম্পর্কে কথা বলতে দেয় । তারা "মেটা স্তর" ব্যবহার করে নতুন শব্দার্থবিদ্যা তৈরি করে এটি অর্জন করেছে। এই জাতীয় সরল ম্যাক্রোর উদাহরণ হ'ল:
(a . b)
-------
(cons a b)
এটি আসলে ইমাস লিস্পে কোনও ম্যাক্রো নয়, তবে এটি হতে পারত। আমি কেবল সরলতার জন্য বেছে নিয়েছি। লক্ষ্য করুন যে উপরোক্ত সংজ্ঞাযুক্ত কোনও নিয়মই এই ক্ষেত্রে প্রযোজ্য নয় যেহেতু নিকটতম প্রার্থী একটি ফাংশন হিসাবে (f x)
ব্যাখ্যা f
করেন, যদিও a
অগত্যা কোনও ফাংশন নয়।