`প্রতীক-মান` কী করে?


13

দস্তাবেজগুলি আমাকে আরও জ্ঞানী করে তোলে না:

এই ফাংশনটি প্রতীকের মান কক্ষে সঞ্চিত মান প্রদান করে। এটি যেখানে ভেরিয়েবলের বর্তমান (গতিশীল) মান সঞ্চয় করা হয়। যদি ভেরিয়েবলের কোনও স্থানীয় বাঁধাই না থাকে তবে এটি কেবল তার বৈশ্বিক মান। চলকটি যদি শূন্য হয় তবে একটি শূন্য-ভেরিয়েবল ত্রুটি সংকেত দেওয়া হয়।

প্রতীক-মূল্যের বিন্দুটি কী? আমার এটি কোথায় এবং কখন ব্যবহার করা দরকার?


3
ইমাসকে জিজ্ঞাসা করে উত্তর খোঁজার চেষ্টা করার জন্য আপনাকে ধন্যবাদ। এটি সঠিক পদ্ধতির: প্রথমে ইমাক্সকে জিজ্ঞাসা করুন, এবং তারপরে যা এখনও পরিষ্কার নয় তা সম্পর্কে এখানে জিজ্ঞাসা করুন, আপনি ইতিমধ্যে কী চেষ্টা করেছেন তা আপনার প্রশ্নে আমাদের জানান। যশ!
ড্রু

উত্তর:


13

আপনার এটি দরকার যখন এলিস্প কোডে আপনি একটি চিহ্নের মান পেতে চান, অর্থাত্ তার মানটি যখন ভেরিয়েবল হিসাবে বিবেচনা করা হয়।

মনে রাখবেন যে একটি এলিস্প প্রতীকটির কয়েকটি বৈশিষ্ট্য / বৈশিষ্ট্য রয়েছে:

  • এর একটি নাম রয়েছে (যা ফাংশন symbol-nameদেয়)
  • ভেরিয়েবল হিসাবে বিবেচিত হলে এটির একটি মান থাকতে পারে (যা symbol-valueদেয়)
  • এটি কোনও ফাংশনটির নাম দিতে পারে, যখন একটি ফাংশন হিসাবে বিবেচিত হয় (যা symbol-functionদেয়)
  • এটিতে একটি সম্পত্তি তালিকা রয়েছে (যা symbol-plistদেয়)

প্রতীকটিকে একটি অবজেক্ট হিসাবে বিভিন্ন গুণাবলী সহ ভাবুন।


1
এছাড়াও নোট করুন (ডকুমেন্টেশন হিসাবে ইঙ্গিত হিসাবে) symbol-valueসর্বদা প্রতীক জন্য গতিশীল বাঁধাই প্রদান করে। আপনি এইভাবে লেজিক্যাল মান অর্জন করতে পারবেন না।
ফিল্ড করুন

2
এছাড়াও C-h i g (elisp) Symbol Components RETএই বিভিন্ন প্রতীক কোষ / উপাদানগুলির নথিপত্রের জন্য দেখুন see
ফিল্ডস

@phils: HM, আমি ভাবছি: (setq lexical-binding t) (let ((v 42)) (message "lex: %S, val: %S" lexical-binding (symbol-value 'v)))। তবে হ্যাঁ, যে কি এটা (elisp) এ বলেছেন Lexical Binding: " ফাংশন মত symbol-value, boundp'এবং set'শুধুমাত্র পুনরুদ্ধার বা বাঁধাই একটি পরিবর্তনশীল এর গতিশীল সংশোধন করুন (অর্থাত, তার প্রতীক মান ঘরের বিষয়বস্তু) "। তবে এ নিয়ে কিছুই বলা হয়নি Symbol Components
ড্রিউ

10

(দোহ, @ ড্রয় ইতিমধ্যে নীচের কয়েকটি লিখেছেন way যাইহোক, এখানে কিছু অতিরিক্ত বিবরণ দেওয়া হয়েছে))

প্রতীক উপাদানগুলির ম্যানুয়াল পৃষ্ঠাটি যেমন ব্যাখ্যা করে, প্রতিটি চিহ্নের জন্য চারটি উপাদান (কোষ) রয়েছে: এর মুদ্রণের নাম ঘর, এর মান ঘর, তার কার্যকারিতা সংজ্ঞা এবং তার সম্পত্তি তালিকা। হয় মান সেল বা ফাংশন সেলটি শূন্য হতে পারে এবং সম্পত্তি তালিকাটি শূন্য হতে পারে।

যেমন ম্যানুয়ালটিও উল্লেখ করেছে:

যেহেতু প্রতিটি প্রতীকের পৃথক মান এবং ফাংশন সেল রয়েছে, ভেরিয়েবলের নাম এবং ফাংশনের নামগুলি বিরোধী নয়।

এজন্য আপনি থাকতে পারেন, উদাহরণস্বরূপ:

(setq test "kittens")
(defun test ()
  (message "puppies"))
(symbol-value 'test)    ; => "kittens"
(symbol-function 'test) ; => (lambda nil (message "puppies"))

1
আহ, এটি ফাংশনের বিপরীতে মূল্য হিসাবে এটি বোঝা আরও সহজ করে তুলেছে। ধন্যবাদ।
আনফুন বিড়াল

8

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

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

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


7

ছোট ডেমো:

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