সেটেক এবং ডিফভারের মধ্যে পার্থক্য কী


14

ইমাস লিস্পের মধ্যে setqএবং এর defvarমধ্যে পার্থক্য কী ?

আমি একই প্রশ্নের সাধারণ লিস্প সংস্করণটি /programming/3855862 এ দেখছি । তারা কি এলিস্পে একই?

উত্তর:


18

আপনার ইমাসকে এই প্রশ্নটি জিজ্ঞাসা করা উচিত C-h i:, এলিস্প ম্যানুয়ালটি ( m Elisp) চয়ন করুন এবং "ডিফভার" ( i defvar) এর জন্য সূচীটি অনুসন্ধান করুন । এটি আপনাকে ভেরিয়েবলগুলি সংজ্ঞায়িত করতে নিয়ে যায় ।

ইমাস আপনাকে জানায় যে defvarকোনও ডক স্ট্রিং সংযুক্ত করার অনুমতি দেয় এবং ভেরিয়েবলের যদি ইতিমধ্যে কোনও মান থাকে তবে এটি কিছুই করে না

এছাড়া ব্যবহার সম্পর্কে আপনি বলে defvarসঙ্গে কোনো মূল্যই নির্ধারিত হবে: (defvar foo)। এটি আপনাকে বলে যে এটি পরিবর্তনশীলকে গতিশীলভাবে বাদ দেওয়া হবে বলে ঘোষণা করে

setq এই সম্পত্তিগুলির কোনওটিই নেই।

defvarএবং setqইমাস লিস্প এবং কমন লিস্পে একইরকম, তবে একেবারে এক নয়।

আরও পড়ুন, আরও জানতে।


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

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

@নিকোলস: দয়া করে ম্যানুয়ালটি পড়ুন। setqভ্যার (উপস্থিতি) স্থানীয় কিনা তা বিবেচনা না করে একটি ভেরি মান সেট করে। defvarএকটি বৈশ্বিক হিসাবে একটি ঘোষিত। (এটি "বাফার-লোকাল "ও হতে পারে local-variable-p:)) একটি ফাংশন আর্গ হিসাবে আবদ্ধ বা letসাধারণ অর্থে" স্থানীয় " দ্বারা আবদ্ধ একটি ঘটনা var letইত্যাদি দ্বারা আবদ্ধ যদি কোনও বৈশ্বিক (বা বাফার-স্থানীয়) হয় তবে তার সময়কাল / সুযোগের জন্য এটির জন্য স্থানীয় বাইন্ডিং (স্বাভাবিক বোধ) তৈরি করা হয় let। এই বাঁধার সুযোগের মধ্যে, setqস্থানীয় মান পরিবর্তন করে। এটা একটা Var সম্পর্কে কথা বলতে ভালো সংঘটন একটি Var তাই থাকার চেয়ে (স্ট্যাক) স্থানীয় হচ্ছে অথবা (গাদা দিকে) গ্লোবাল।
ড্রয়

1
@নিকোলস: এটি পড়ার এবং পুনরায় পড়ার জন্য আপনার সময় দিন। কখনও কখনও এটি যা বলে তা সুনির্দিষ্ট তবে বোঝা শক্ত, যেমন একটি আনুষ্ঠানিক স্পেসিফিকেশন। একবার আপনি এটি পেয়ে গেলে, M-x report-emacs-bugউন্নতিগুলির পরামর্শ দেওয়া আপনার পক্ষে সহায়ক হতে পারে যা অন্যকে এটি আরও সহজ হতে সহায়তা করে।
ড্রিউ

1
@নিকোলস: গাদা (একটি গ্লোবাল বা বাফার-লোকাল ভেরিয়েবল ওরফে) এর উপর একটি পরিবর্তনীয় বোঝার সাথে শুরু করুন । আপনি সম্ভবত ইতিমধ্যে সত্য স্থানীয় ভেরিয়েবলগুলি বুঝতে পারবেন, অর্থাত্, স্ট্যাকের ভেরিয়েবল । গুগলিং সাহায্য করতে পারে।
ড্রিউ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.