আমি মোটামুটি প্রতিস্থাপনের মডেলটি বুঝতে পারছি (রেফারেনশিয়াল স্বচ্ছতার সাথে (আরটি)), আপনি কোনও ফাংশনকে তার সহজতম অংশে ডি-রাইজ করতে পারেন। যদি এক্সপ্রেশনটি আরটি হয়, তবে আপনি এক্সপ্রেশনটি ডি-রচনা করতে পারেন এবং সর্বদা একই ফলাফল পেতে পারেন।
হ্যাঁ, অন্তর্দৃষ্টিটি বেশ সঠিক। আরও সুনির্দিষ্ট পেতে এখানে কয়েকটি পয়েন্টার রয়েছে:
যেমনটি আপনি বলেছেন, যে কোনও আরটি এক্সপ্রেশনটির single
"ফলাফল" হওয়া উচিত । এটি, factorial(5)
প্রোগ্রামটিতে একটি অভিব্যক্তি দেওয়া , এটি সর্বদা একই "ফলাফল" পাওয়া উচিত yield সুতরাং, যদি কোনও factorial(5)
প্রোগ্রামে থাকে এবং এটি 120 উপার্জন করে তবে সময়টি নির্বিশেষে এটি "ধাপে ক্রম" প্রসারিত / গণনা করা ছাড়াই সর্বদা 120 ফলন করা উচিত ।
উদাহরণ: factorial
ফাংশন
def factorial(n):
if n == 1:
return 1
return n * factorial(n - 1)
এই ব্যাখ্যাটি সহ কয়েকটি বিবেচনা রয়েছে।
প্রথমত, বিভিন্ন মূল্যায়ন মডেলগুলি মনে রাখবেন (আবেদনকারী বনাম স্বাভাবিক ক্রম দেখুন) একই আরটি এক্সপ্রেশনটির জন্য বিভিন্ন "ফলাফল" পেতে পারে।
def first(y, z):
return y
def second(x):
return second(x)
first(2, second(3)) # result depends on eval. model
উপরের কোডে first
এবং second
উল্লেখযোগ্যভাবে স্বচ্ছ এবং তবুও, সাধারণ ক্রম এবং প্রয়োগমূলক আদেশের (যদি পরবর্তীটির অধীনে, অভিব্যক্তিটি থামে না) নীচে মূল্যায়ন করা হয় তবে শেষে অভিব্যক্তিটি বিভিন্ন "ফলাফল" দেয়।
.... যা উদ্ধৃতিতে "ফলাফল" ব্যবহারের দিকে পরিচালিত করে। যেহেতু এটি থামার জন্য কোনও অভিব্যক্তির প্রয়োজন হয় না, এটি কোনও মান তৈরি করতে পারে না। সুতরাং "ফলাফল" ব্যবহার করা এক ধরণের অস্পষ্টতা। কেউ বলতে পারেন একটি আরটি এক্সপ্রেশন সর্বদা computations
মূল্যায়ন মডেলের অধীনে একই ফলন দেয় ।
তৃতীয়ত, foo(50)
প্রোগ্রামে দু'জনকে বিভিন্ন স্থানে আলাদা আলাদা এক্সপ্রেশন হিসাবে দেখা দরকার হতে পারে - প্রত্যেকে একে অপরের থেকে পৃথক হতে পারে এমন নিজস্ব ফলাফল প্রদান করে। উদাহরণস্বরূপ, ভাষা যদি গতিশীল সুযোগের অনুমতি দেয় তবে উভয় এক্সপ্রেশন, যদিও বর্ণগতভাবে অভিন্ন, ভিন্ন। পার্ল ইন:
sub foo {
my $x = shift;
return $x + $y; # y is dynamic scope var
}
sub a {
local $y = 10;
return &foo(50); # expanded to 60
}
sub b {
local $y = 20;
return &foo(50); # expanded to 70
}
ডায়নামিক সুযোগ বিপথগামী করা হয়েছে কারণ এটি সহজ করে এক চিন্তা করতে করতে x
শুধু ইনপুট foo
যখন বাস্তবে, তা না হয়, x
এবং y
। পার্থক্যটি দেখার একটি উপায় হ'ল প্রোগ্রামটি গতিশীল সুযোগ ছাড়াই সমতুল্য রূপে রূপান্তরিত করা - অর্থাৎ স্পষ্টভাবে প্যারামিটারগুলি পাশ করা, সুতরাং সংজ্ঞার পরিবর্তে foo(x)
আমরা কলকারীদের মধ্যে স্পষ্টভাবে সংজ্ঞা দিয়ে foo(x, y)
ও পাস করি y
।
মুল বক্তব্যটি হ'ল আমরা সর্বদা একটি function
মানসিকতার আওতায় থাকি : একটি অভিব্যক্তির জন্য একটি নির্দিষ্ট ইনপুট দেওয়া হলে আমাদের একটি সম্পর্কিত "ফলাফল" দেওয়া হয়। আমরা যদি একই ইনপুট দিই, আমাদের সর্বদা একই "ফলাফল" আশা করা উচিত।
এখন, নিম্নলিখিত কোড সম্পর্কে কি?
def foo():
global y
y = y + 1
return y
y = 10
foo() # yields 11
foo() # yields 12
foo
কার্যপ্রণালী রিটুইট ভঙ্গ কারণ redefinitions হয়। অর্থাৎ আমরা সংজ্ঞায়িত y
এক বিন্দুতে, এবং পরেরটির, যে পুনরায় সংজ্ঞায়িত একই y
। উপরের পার্ল উদাহরণে, y
s একই অক্ষরের নাম "y" ভাগ করে নিলেও তারা আলাদা আলাদা বাইন্ডিং। এখানে y
s গুলি আসলে একই রকম। এজন্য আমরা বলি (পুনরায়) নিয়োগটি একটি মেটা অপারেশন: আপনি আসলে আপনার প্রোগ্রামের সংজ্ঞা পরিবর্তন করছেন।
মোটামুটিভাবে লোকেরা সাধারণত পার্থক্যটি নিম্নরূপে চিত্রিত করে: পার্শ্ব-প্রতিক্রিয়া মুক্ত সেটিংয়ে আপনার কাছ থেকে একটি ম্যাপিং রয়েছে input -> output
। একটি "অপরিহার্য" সেটিংসে আপনার এমন input -> ouput
একটি প্রসঙ্গে রয়েছে state
যা সময়ের সাথে পরিবর্তিত হতে পারে।
এখন, তাদের সম্পর্কিত মানগুলির জন্য কেবল প্রকাশের পরিবর্তে, state
প্রতিটি অপারেশনের জন্য এটির প্রয়োজন অনুসারে রূপান্তরকৃত প্রয়োগ করতে হবে (এবং অবশ্যই, এক্সপ্রেশনগুলি state
গণনা সম্পাদন করতে একই পরামর্শ করতে পারে )।
সুতরাং, যদি কোনও পার্শ্ব-প্রতিক্রিয়া মুক্ত প্রোগ্রামে আমাদের একটি অভিব্যক্তি গণনা করা দরকার তবে এটি একটি অনিবার্য প্রোগ্রামে, প্রতিটি কম্পিউটারের পদক্ষেপের জন্য আমাদের ইনপুটগুলি এবং পুরো রাজ্যটি জানতে হবে। যুক্তি হ'ল প্রথমে বড় ধাক্কা খেয়েছে (এখন, সমস্যাযুক্ত পদ্ধতির ডিবাগ করার জন্য আপনার ইনপুট এবং কোর ডাম্পের প্রয়োজন)। নির্দিষ্ট কৌশলগুলি স্মৃতিচারণের মতো অযৌক্তিকভাবে উপস্থাপিত হয়। তবে, একযোগে এবং সমান্তরালতা আরও চ্যালেঞ্জের হয়ে ওঠে।
RT
আপনাকে ব্যবহার থেকে অক্ষম করে এটি ব্যবহার করতে সক্ষম না হওয়ায়substitution model.
বড় সমস্যাটি কোনও প্রোগ্রাম সম্পর্কে যুক্তিযুক্ত কারণ হিসাবে এটি ব্যবহার করার শক্তি?substitution model