Tail recursion is more efficient than general recursion.

সাধারণ পুনরাবৃত্তির চেয়ে লেজ পুনরাবৃত্তি বেশি কার্যকর।


Recursive function applications can only appear in tail positions.

পুনরাবৃত্তিমূলক ফাংশন অ্যাপ্লিকেশনগুলি কেবল লেজ অবস্থানে উপস্থিত হতে পারে।


Functions like gcd are typical examples of tail recursive functions.

gcd-এর মতো ফাংশনগুলি লেজ পুনরাবৃত্তিমূলক ফাংশনের সাধারণ উদাহরণ।


The execution of tail recursive functions can be traced in a simple way.

লেজ পুনরাবৃত্তিমূলক ফাংশনগুলির কার্যকরীকরণ একটি সহজ উপায়ে চিহ্নিত করা যেতে পারে।


For functions where the recursion is not tail recursive, traces look more complicated.

যেখানে পুনরাবৃত্তি লেজ পুনরাবৃত্তিমূলক নয়, সেখানে ট্রেসগুলি আরও জটিল দেখায়।


In imperative programming languages tail recursive functions can be expressed with loops.

ইম্পারেটিভ প্রোগ্রামিং ভাষাগুলিতে লেজ পুনরাবৃত্তিমূলক ফাংশনগুলি লুপের মাধ্যমে প্রকাশ করা যেতে পারে।


Functional programming languages are designed such that tail recursive functions are preferable over loops.

ফাংশনাল প্রোগ্রামিং ভাষাগুলি এমনভাবে ডিজাইন করা হয়েছে যাতে লুপের চেয়ে লেজ পুনরাবৃত্তিমূলক ফাংশনগুলি পছন্দসই।


Often recursive functions that are not tail recursive can be reformulated as tail recursive functions.

প্রায়শই, যে পুনরাবৃত্তিমূলক ফাংশনগুলি লেজ পুনরাবৃত্তিমূলক নয়, সেগুলিকে লেজ পুনরাবৃত্তিমূলক ফাংশন হিসাবে পুনরায় তৈরি করা যেতে পারে।


The factorial of a positive integer n, denoted by n!, is the product of all positive integers less than or equal to n.

একটি ধনাত্মক পূর্ণসংখ্যা n-এর ফ্যাক্টরিয়াল, যা n! দ্বারা চিহ্নিত করা হয়, n-এর চেয়ে ছোট বা সমান সমস্ত ধনাত্মক পূর্ণসংখ্যার গুণফল।


উদাহরণস্বরূপ, 5! = 5·4·3·2·1 = 120।


এছাড়াও, 0! কে 1 হিসাবে সংজ্ঞায়িত করা হয়।


Sometimes we want a function that returns more than one value.

কখনও কখনও আমরা এমন একটি ফাংশন চাই যা একাধিক মান প্রদান করে।


The time for a marathon may be given with three numbers in the format h:m:s.

একটি ম্যারাথনের সময় h:m:s বিন্যাসে তিনটি সংখ্যা দিয়ে দেওয়া যেতে পারে।


The time of Eliud Kipchoge’s world record in 2018 in Berlin was 2 : 01 : 39.

বার্লিনে ২০১৮ সালে এলিয়ুদ কিপচোগের বিশ্ব রেকর্ড ছিল ২ : ০১ : ৩৯।


OCaml has tuples to represent collections of values as single values.

OCaml-এর একক মান হিসাবে মানের সংগ্রহগুলি উপস্থাপন করার জন্য টুপল রয়েছে।


We can use the tuple (2,1,39) :int×int×int consisting of three integers.

আমরা তিনটি পূর্ণসংখ্যা নিয়ে গঠিত টুপল (2,1,39) :int×int×int ব্যবহার করতে পারি।


The component types of a tuple are not restricted to int.

একটি টুপলের উপাদান প্রকারগুলি int-এর মধ্যে সীমাবদ্ধ নয়।


We may have tuples as follows: (2,3) :int×int

আমাদের নিম্নলিখিত টুপল থাকতে পারে: (2,3) :int×int


When coding a mathematical function in OCaml, we need to replace mathematical types like N with the OCaml type int.

OCaml-এ একটি গাণিতিক ফাংশন কোড করার সময়, আমাদের N-এর মতো গাণিতিক প্রকারগুলিকে OCaml প্রকার int দিয়ে প্রতিস্থাপন করতে হবে।


Exceptions can be useful when debugging erroneous programs.

ত্রুটিপূর্ণ প্রোগ্রামগুলি ডিবাগ করার সময় ব্যতিক্রমগুলি কার্যকর হতে পারে।


Every programming language provides machine integers for efficiency.

দক্ষতার জন্য প্রতিটি প্রোগ্রামিং ভাষা মেশিন ইনটিজার সরবরাহ করে।


There are techniques for realizing much larger intervals of integers based on machine integers in programming languages.

প্রোগ্রামিং ভাষায় মেশিন ইনটিজারের উপর ভিত্তি করে আরও বৃহত্তর ইনটিজার ব্যবধান উপলব্ধি করার কৌশল রয়েছে।


Things become interesting once we declare functions.

আমরা যখন ফাংশন ঘোষণা করি, তখন জিনিসগুলি আকর্ষণীয় হয়ে ওঠে।


Can we compute a power x^8 with just three multiplications?

আমরা কি মাত্র তিনটি গুণের মাধ্যমে x^8 ঘাত গণনা করতে পারি?


Another possibility is the declaration let pow8' x = let a = x * x in let b = a * a in b * b

আরেকটি সম্ভাবনা হল ঘোষণা let pow8' x = let a = x * x in let b = a * a in b * b


Local declarations are obtained with let expressions let d1 in (let d2 in e).

স্থানীয় ঘোষণাগুলি let এক্সপ্রেশন let d1 in (let d2 in e) এর মাধ্যমে পাওয়া যায়।


The declaration let abs x = if x < 0 then -x else x declares a function abs: int -> int returning the absolute value of an integer.

ঘোষণা let abs x = if x < 0 then -x else x একটি ফাংশন abs: int -> int ঘোষণা করে যা একটি পূর্ণসংখ্যার পরম মান প্রদান করে।


This is the first function we see taking two arguments.

এটি প্রথম ফাংশন যা আমরা দুটি আর্গুমেন্ট গ্রহণ করতে দেখি।


Given max, we can declare a function let max3 x y z = max (max x y) z returning the maximum of three numbers.

max দেওয়া হলে, আমরা একটি ফাংশন ঘোষণা করতে পারি let max3 x y z = max (max x y) z যা তিনটি সংখ্যার সর্বোচ্চ মান প্রদান করে।


There is a type bool having two values true and false called booleans.

bool নামক একটি প্রকার আছে যার দুটি মান আছে: true এবং false, এদেরকে বুলিয়ান বলা হয়।


We recall that powers satisfy the equations x^0 = 1 and x^(n+1) = x * x^n

আমরা মনে করি যে ঘাতগুলি x^0 = 1 এবং x^(n+1) = x * x^n সমীকরণগুলি মেনে চলে।


What we see here is a typical example of a recursive computation.

আমরা এখানে যা দেখছি তা একটি পুনরাবৃত্তিমূলক গণনার সাধারণ উদাহরণ।


Recursive computations can be captured with recursive functions.

পুনরাবৃত্তিমূলক গণনাগুলি পুনরাবৃত্তিমূলক ফাংশনগুলির সাথে ধরা যেতে পারে।


We now declare a recursive function implementing this equation: let rec pow x n = if n < 1 then 1 else x * pow x (n - 1)

এখন আমরা এই সমীকরণটি প্রয়োগ করে একটি পুনরাবৃত্তিমূলক ফাংশন ঘোষণা করি: let rec pow x n = if n < 1 then 1 else x * pow x (n - 1)


Given two integers x >= 0 and y > 0, there exist unique integers k, r >= 0 such that x = k * y + r and r < y

দুটি পূর্ণসংখ্যা x >= 0 এবং y > 0 দেওয়া হলে, k, r >= 0 এর অনন্য পূর্ণসংখ্যা বিদ্যমান থাকে যেমন x = k * y + r এবং r < y


We speak of integer division, or division with remainder, or Euclidean division.

আমরা পূর্ণসংখ্যা বিভাজন, বা অবশিষ্ট সহ বিভাজন, বা ইউক্লিডীয় বিভাজন নিয়ে কথা বলি।


The maximal number of boxes that can be placed into the shelf is the quotient k and the length of the space remaining is the remainder r = x - k * y < y.

সেল্ফে স্থাপন করা যেতে পারে এমন বাক্সের সর্বোচ্চ সংখ্যা হল ভাগফল k এবং অবশিষ্ট স্থানের দৈর্ঘ্য হল অবশিষ্ট r = x - k * y < y।


We note that digit sum terminates since the argument gets smaller upon recursion.

আমরা লক্ষ্য করি যে অঙ্কগুলির যোগফল শেষ হয় কারণ আর্গুমেন্ট পুনরাবৃত্তিতে ছোট হয়ে যায়।


We now write a function rev that given a number computes the number represented by the reversed digital representation of the number.

এখন আমরা একটি ফাংশন rev লিখি যা একটি সংখ্যা দিলে, সেই সংখ্যার বিপরীত ডিজিটাল উপস্থাপনা দ্বারা প্রতিনিধিত্ব করা সংখ্যাটি গণনা করে।


When we program, expressions are written as sequences of characters.

আমরা যখন প্রোগ্রাম করি, তখন অভিব্যক্তিগুলি অক্ষরের ক্রম হিসাবে লেখা হয়।


The rules for the conversion of character sequences into abstract expressions are fixed by the concrete syntax of a language.

অক্ষরের ক্রমকে বিমূর্ত অভিব্যক্তিতে রূপান্তর করার নিয়মগুলি একটি ভাষার কংক্রিট সিনট্যাক্স দ্বারা স্থির করা হয়।


The part of the concrete syntax concerned with characters and words is known as lexical syntax.

অক্ষর এবং শব্দ নিয়ে গঠিত কংক্রিট সিনট্যাক্সের অংশটিকে লেক্সিক্যাল সিনট্যাক্স হিসাবে জানা যায়।


In the lexical representation of an expression, subexpressions can be indicated with parentheses.

একটি অভিব্যক্তির লেক্সিক্যাল উপস্থাপনায়, বন্ধনী ব্যবহার করে উপ-অভিব্যক্তিগুলি নির্দেশিত হতে পারে।


To reduce the number of parentheses needed for the textual representation of expressions, the concrete syntax of a language fixes operator precedences and grouping rules.

অভিব্যক্তিগুলির টেক্সচুয়াল উপস্থাপনার জন্য প্রয়োজনীয় বন্ধনীর সংখ্যা কমাতে, একটি ভাষার কংক্রিট সিনট্যাক্স অপারেটরের অগ্রাধিকার এবং গ্রুপ করার নিয়মগুলি স্থির করে।


Given the abstract syntax of a language, we can define the static semantics and the dynamic semantics of the language.

একটি ভাষার বিমূর্ত সিনট্যাক্স দেওয়া হলে, আমরা ভাষার স্ট্যাটিক সেম্যান্টিক্স এবং ডায়নামিক সেম্যান্টিক্স সংজ্ঞায়িত করতে পারি।


The dynamic semantics is concerned with the evaluation of expressions and does not make use of types.

ডায়নামিক সেম্যান্টিক্স অভিব্যক্তিগুলির মূল্যায়ন নিয়ে কাজ করে এবং প্রকারগুলি ব্যবহার করে না।


The static semantics defines a type discipline such that the evaluation of well-typed expressions doesn’t lead to obviously erroneous situations.

স্ট্যাটিক সেম্যান্টিক্স একটি টাইপ শৃঙ্খলা সংজ্ঞায়িত করে যাতে সু-টাইপযুক্ত অভিব্যক্তিগুলির মূল্যায়ন স্পষ্টভাবে ত্রুটিপূর্ণ পরিস্থিতিতে না যায়।


Both semantics employ environments mapping free variables to either types or values.

উভয় সেম্যান্টিক্স মুক্ত ভেরিয়েবলগুলিকে টাইপ বা মানগুলিতে ম্যাপিং পরিবেশ ব্যবহার করে।


The dynamic semantics represents functional values as so-called closures combining the syntactic description of a function with a value environment providing values for the free variables.

ডায়নামিক সেম্যান্টিক্স কার্যকরী মানগুলিকে তথাকথিত ক্লোজার হিসাবে উপস্থাপন করে যা একটি ফাংশনের সিনট্যাক্টিক বর্ণনাকে একটি মান পরিবেশের সাথে একত্রিত করে যা মুক্ত ভেরিয়েবলগুলির জন্য মান সরবরাহ করে।


We speak of typing judgments and typing rules for the static semantics, and of evaluation judgments and evaluation rules for the dynamic semantics.

আমরা স্ট্যাটিক সেম্যান্টিক্সের জন্য টাইপিং জাজমেন্ট এবং টাইপিং নিয়ম এবং ডায়নামিক সেম্যান্টিক্সের জন্য মূল্যায়ন জাজমেন্ট এবং মূল্যায়ন নিয়মের কথা বলি।


The algorithmic reading of the inference rules gives us abstract algorithms that given an expression and an environment compute either the type or the value of the expression provided it exists.

অনুমান নিয়মের অ্যালগরিদমিক পাঠ আমাদের বিমূর্ত অ্যালগরিদম দেয় যা একটি অভিব্যক্তি এবং একটি পরিবেশ দেওয়া হলে, বিদ্যমান থাকলে, হয় প্রকার বা অভিব্যক্তির মান গণনা করে।


The type checking algorithm given by the typing rules needs to guess the types of the argument variables of lambda expressions.

টাইপিং নিয়ম দ্বারা প্রদত্ত টাইপ চেকিং অ্যালগরিদমকে ল্যামডা এক্সপ্রেশনগুলির আর্গুমেন্ট ভেরিয়েবলগুলির প্রকারগুলি অনুমান করতে হবে।


For recursive function declarations we need an argument type and a result type to avoid guessing.

পুনরাবৃত্তিমূলক ফাংশন ঘোষণার জন্য আমাদের অনুমান এড়াতে একটি আর্গুমেন্ট টাইপ এবং একটি ফলাফলের প্রকার প্রয়োজন।


A good way to think about type checking sees type checking as abstract evaluation of an expression.

টাইপ চেকিং সম্পর্কে চিন্তা করার একটি ভাল উপায় হল টাইপ চেকিংকে একটি অভিব্যক্তির বিমূর্ত মূল্যায়ন হিসাবে দেখা।


While evaluation computes values, type checking computes types.

যখন মূল্যায়ন মান গণনা করে, তখন টাইপ চেকিং প্রকার গণনা করে।


There is the connection that an expression of a type evaluate to a value of type t (so-called type safety).

এখানে সংযোগ রয়েছে যে একটি প্রকারের একটি অভিব্যক্তি t প্রকারের একটি মানকে মূল্যায়ন করে (তথাকথিত টাইপ নিরাপত্তা)।


The type checking algorithm given by the typing rules always terminates.

টাইপিং নিয়ম দ্বারা প্রদত্ত টাইপ চেকিং অ্যালগরিদম সর্বদা শেষ হয়।


This is in contrast to the evaluation algorithm given by the evaluation rules, which may diverge on expressions not identified as evaluable by the evaluation rules.

এটি মূল্যায়ন নিয়ম দ্বারা প্রদত্ত মূল্যায়ন অ্যালগরিদমের বিপরীতে, যা মূল্যায়ন নিয়ম দ্বারা মূল্যায়নযোগ্য হিসাবে চিহ্নিত না হওয়া অভিব্যক্তিগুলিতে ভিন্ন হতে পারে।


In later chapters we will implement in OCaml a type checker and an evaluator for the language considered here following the algorithmic reading of the typing and evaluation rules.

পরবর্তী অধ্যায়গুলিতে আমরা এখানে বিবেচিত ভাষার জন্য টাইপিং এবং মূল্যায়ন নিয়মের অ্যালগরিদমিক পাঠ অনুসরণ করে OCaml-এ একটি টাইপ পরীক্ষক এবং একটি মূল্যায়নকারী প্রয়োগ করব।


The example derivation system considered here was chosen for the purpose of explanation.

এখানে বিবেচিত উদাহরণ উদ্ভব ব্যবস্থাটি ব্যাখ্যার উদ্দেশ্যে বেছে নেওয়া হয়েছে।


In practice, derivation systems are used for describing computational relations that cannot be described otherwise.

ব্যবহারিকভাবে, উদ্ভব ব্যবস্থাগুলি এমন গণনামূলক সম্পর্ক বর্ণনা করতে ব্যবহৃত হয় যা অন্যথায় বর্ণনা করা যায় না।


Typing and evaluation of expressions are examples for such relations, and we are going to use derivation systems for this purpose.

এক্সপ্রেশন টাইপ করা এবং মূল্যায়ন করা এই ধরনের সম্পর্কের উদাহরণ, এবং আমরা এই উদ্দেশ্যে উদ্ভব ব্যবস্থা ব্যবহার করতে যাচ্ছি।


5 ̇ <9 এর জন্য সমস্ত উদ্ভব দিন।


Give two inference rules for judgments x ̇ < y such that your rules derive the same judgments the rules given above derive, but have the additional property that no judgments has more than one derivation.

x ̇ < y বিচারের জন্য দুটি অনুমান নিয়ম দিন যাতে আপনার নিয়মগুলি একই বিচারগুলি উদ্ভূত করে যা উপরের নিয়মগুলি উদ্ভূত করে, তবে অতিরিক্ত বৈশিষ্ট্য রয়েছে যে কোনও বিচারের একাধিক উদ্ভব নেই।


Give two inference rules for judgments x ̇ < y such that a judgment x ̇ < y is derivable if and only if x+k·5 = y for some k≥1.

x ̇ < y বিচারের জন্য দুটি অনুমান নিয়ম দিন যাতে x ̇ < y একটি বিচার উদ্ভূত হয় যদি এবং শুধুমাত্র যদি কিছু k≥1 এর জন্য x+k·5 = y হয়।


The semantic layers of a language see the phrases of the language as abstract syntactic objects where lexical details don’t play a role.

একটি ভাষার শব্দার্থিক স্তরগুলি ভাষার বাক্যাংশগুলিকে বিমূর্ত সিনট্যাকটিক বস্তু হিসাবে দেখে যেখানে শব্দার্থিক বিবরণ কোনও ভূমিকা পালন করে না।


This brings us back to the philosophy of Chapter 1 where we explained OCaml with abstract syntactic notions such as expressions, types, and declarations and lexical details where conveyed tacitly through the code for mathematically motivated examples.

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


For the discussion of the semantic layers, we switch to a language of abstract expressions differing from the sublanguage considered for the syntactic layers.

শব্দার্থিক স্তরগুলির আলোচনার জন্য, আমরা বিমূর্ত অভিব্যক্তির একটি ভাষায় পরিবর্তন করি যা সিনট্যাকটিক স্তরগুলির জন্য বিবেচিত উপভাষা থেকে আলাদা।


The new language has types as considered before t::=int|bool|string|t 1 →t 2 |t 1 ×···×t n n≥2 35 2 Syntax and Semantics and abstract expressions as described by the following grammar:

নতুন ভাষাটিতে আগে যেমন বিবেচনা করা হয়েছে তেমন প্রকার রয়েছে t::=int|bool|string|t 1 →t 2 |t 1 ×···×t n n≥2 35 2 সিনট্যাক্স এবং শব্দার্থবিদ্যা এবং নিম্নলিখিত ব্যাকরণ দ্বারা বর্ণিত বিমূর্ত অভিব্যক্তি:


The letter c ranges over constants (lexically represented as literals), the letters x and f range over variables (lexically represented as identifiers), and the letter o ranges over operators.

c অক্ষরটি ধ্রুবকগুলির উপর বিস্তৃত (শব্দগতভাবে আক্ষরিক হিসাবে উপস্থাপিত), x এবং f অক্ষরগুলি ভেরিয়েবলের উপর বিস্তৃত (শব্দগতভাবে শনাক্তকারী হিসাবে উপস্থাপিত), এবং o অক্ষরটি অপারেটরগুলির উপর বিস্তৃত।


Constants are values of the types int, bool, and string.

ধ্রুবকগুলি int, bool এবং স্ট্রিং প্রকারের মান।


For simplicity, we just have binary operator applications.

সহজতার জন্য, আমাদের কেবল বাইনারি অপারেটর অ্যাপ্লিকেশন রয়েছে।


The variables introduced by lambda expressions and let expressions are called local variables.

ল্যাম্বডা এক্সপ্রেশন এবং লেট এক্সপ্রেশন দ্বারা প্রবর্তিত ভেরিয়েবলগুলিকে স্থানীয় ভেরিয়েবল বলা হয়।


Lambda expressions are written in mathematical notation and take only one argument variable.

ল্যাম্বডা এক্সপ্রেশনগুলি গাণিতিক স্বরলিপিতে লেখা হয় এবং শুধুমাত্র একটি আর্গুমেন্ট ভেরিয়েবল নেয়।


Similarly, let expressions bind only one or two variables.

একইভাবে, লেট এক্সপ্রেশনগুলি শুধুমাত্র একটি বা দুটি ভেরিয়েবলকে আবদ্ধ করে।


Tuple patterns are replaced by projections π n , yielding the nth component of a tuple.

টুপল প্যাটার্নগুলি প্রজেকশন π n দ্বারা প্রতিস্থাপিত হয়, যা একটি টুপলের n তম উপাদান তৈরি করে।


We will refer to the expressions identified by the phrasal syntax as concrete expressions.

আমরা শব্দগুচ্ছ সিনট্যাক্স দ্বারা চিহ্নিত অভিব্যক্তিগুলিকে কংক্রিট অভিব্যক্তি হিসাবে উল্লেখ করব।


It is possible to translate concrete expressions into equivalent abstract expressions.

কংক্রিট এক্সপ্রেশনগুলিকে সমতুল্য বিমূর্ত এক্সপ্রেশনে অনুবাদ করা সম্ভব।


The reverse translation is trivial as long as no projections are used.

বিপরীত অনুবাদটি তুচ্ছ, যতক্ষণ না কোনও প্রজেকশন ব্যবহার করা হয়।


The program binds the identifier 'a' to the integer 8.

এই প্রোগ্রামটি 'a' নামক শনাক্তকারীকে ৮ পূর্ণসংখ্যার সাথে যুক্ত করে।


After the program has been executed successfully, the interpreter will show the values it has computed.

সফলভাবে প্রোগ্রামটি কার্যকর হওয়ার পরে, ইন্টারপ্রেটার তার গণনা করা মানগুলি দেখাবে।


We assume that incoming students are familiar with mathematical thinking, but we do not assume programming experience.

আমরা ধরে নিই যে আগত শিক্ষার্থীরা গাণিতিক চিন্তাভাবনার সাথে পরিচিত, তবে আমরা প্রোগ্রামিং অভিজ্ঞতার ধারণা করি না।


The course is designed to take about one third of the study time of the first semester.

এই কোর্সটি প্রথম সেমিস্টারের অধ্যয়নের সময়ের প্রায় এক তৃতীয়াংশ সময় নেওয়ার জন্য ডিজাইন করা হয়েছে।


Students perceive the course as challenging and exciting, whether they have programmed before or not.

শিক্ষার্থীরা কোর্সটিকে চ্যালেঞ্জিং এবং উত্তেজনাপূর্ণ হিসাবে মনে করে, তারা আগে প্রোগ্রামিং করেছে কিনা তা নির্বিশেষে।


As it comes to functional programming, we cover higher-order recursive functions, polymorphic typing, and constructor types for lists, trees, and abstract syntax.

ফাংশনাল প্রোগ্রামিংয়ের ক্ষেত্রে, আমরা উচ্চ-ক্রমের পুনরাবৃত্তিমূলক ফাংশন, বহুরূপী টাইপিং এবং তালিকা, গাছ এবং বিমূর্ত সিনট্যাক্সের জন্য কনস্ট্রাক্টর প্রকারগুলি কভার করি।


We emphasize the role of correctness statements and practice inductive correctness proofs.

আমরা সঠিকতার বিবৃতিগুলির ভূমিকা এবং আবেশিক সঠিকতা প্রমাণগুলির অনুশীলনের উপর জোর দিই।


We also cover asymptotic running time considering binary search (logarithmic), insertion sort (quadratic), merge sort (linearithmic), and other algorithms.

আমরা বাইনারি অনুসন্ধান (লগারিদমিক), সন্নিবেশ বাছাই (কোয়াড্রেটিক), মার্জ বাছাই (লিনিয়ারিদমিক) এবং অন্যান্য অ্যালগরিদম বিবেচনা করে অ্যাসিপোটিক রানটাইমও কভার করি।


As it comes to the structure of programming languages, we study the different layers of syntax and semantics at the example of the idealized functional programming language Mini-OCaml.

প্রোগ্রামিং ভাষার কাঠামোর ক্ষেত্রে, আমরা আদর্শ ফাংশনাল প্রোগ্রামিং ভাষা মিনি-ওকামলের উদাহরণে সিনট্যাক্স এবং শব্দার্থবিদ্যার বিভিন্ন স্তর অধ্যয়ন করি।


We describe the syntactic layers with grammars and the semantic layers with inference rules.

আমরা ব্যাকরণ সহ সিনট্যাকটিক স্তর এবং অনুমান নিয়ম সহ শব্দার্থিক স্তর বর্ণনা করি।


Based on these formal descriptions, we program recursive descent parsers, type checkers and evaluators.

এই আনুষ্ঠানিক বর্ণনাগুলির উপর ভিত্তি করে, আমরা পুনরাবৃত্তিমূলক বংশের পার্সার, টাইপ পরীক্ষক এবং মূল্যায়নকারী প্রোগ্রাম করি।


We also cover stateful programming with arrays and cells (assignable variables).

আমরা অ্যারে এবং সেল (অ্যাসাইনযোগ্য ভেরিয়েবল) সহ স্টেটফুল প্রোগ্রামিংও কভার করি।


We explain how lists and trees can be stored as linked blocks in an array, thus explaining memory consumption for constructor types.

আমরা ব্যাখ্যা করি কিভাবে তালিকা এবং গাছগুলিকে একটি অ্যারেতে লিঙ্কযুক্ত ব্লক হিসাবে সংরক্ষণ করা যেতে পারে, এইভাবে কনস্ট্রাক্টর প্রকারের জন্য মেমরি খরচ ব্যাখ্যা করা হয়।


There is a textbook written for the German iterations of the course (1998 to 2020).

জার্মান ভাষার কোর্সের পুনরাবৃত্তির জন্য একটি পাঠ্যপুস্তক লেখা হয়েছে (1998 থেকে 2020)।


The new English text realizes some substantial changes.

নতুন ইংরেজি পাঠ কিছু উল্লেখযোগ্য পরিবর্তন উপলব্ধি করে।


OCaml rather than Standard ML as programming language, less details about the concrete programming language being used, more emphasis on correctness arguments and algorithms, informal type-theoretic explanations rather than formal set-theoretic definitions.

প্রোগ্রামিং ভাষা হিসাবে স্ট্যান্ডার্ড ML-এর পরিবর্তে OCaml, ব্যবহৃত নির্দিষ্ট প্রোগ্রামিং ভাষা সম্পর্কে কম বিস্তারিত, সঠিকতা যুক্তি এবং অ্যালগরিদমের উপর বেশি জোর, আনুষ্ঠানিক সেট-তাত্ত্বিক সংজ্ঞাগুলির পরিবর্তে অনানুষ্ঠানিক টাইপ-তাত্ত্বিক ব্যাখ্যা।


The current version of the text leaves room for improvement.

পাঠ্যের বর্তমান সংস্করণটি উন্নতির জন্য জায়গা রাখে।


More basic explanations with more examples could be helpful in many places.

আরও উদাহরণ সহ আরও মৌলিক ব্যাখ্যা অনেক জায়গায় সহায়ক হতে পারে।


An additional chapter on imperative programming with loops and the realization with stack machines with jumps (see the German textbook) would be interesting, but this extra material may not fit into the time-budget of a one-semester course.

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


At Saarland University, the course spans 15 weeks of teaching in the winter semester.

সারল্যান্ড বিশ্ববিদ্যালয়ে, শীতকালীন সেমিস্টারে এই কোর্সটি ১৫ সপ্তাহের শিক্ষাদান নিয়ে গঠিত।


The list [1, 2, 3] can be represented as a tree.

[১, ২, ৩] তালিকাটিকে একটি গাছের মতো করে দেখানো যেতে পারে।


Lists are constructed using 'nil' and 'cons'.

'নিল' এবং 'কনস' ব্যবহার করে তালিকা তৈরি করা হয়।


The head of the list is the first element.

তালিকার প্রথম উপাদানটি হলো শীর্ষ।


The tail of the list is the rest of the list after the head.

শীর্ষের পরের তালিকার অংশটি হলো লেজ।


Every list is obtained with either the constructor nil or the constructor cons.

প্রতিটি তালিকা হয় 'নিল' অথবা 'কনস' কনস্ট্রাক্টর ব্যবহার করে পাওয়া যায়।


Tuples and lists represent sequences, but their types are different.

সংজ্ঞা এবং তালিকা উভয়ই ক্রম উপস্থাপন করে, তবে তাদের প্রকারগুলি আলাদা।


A list type L(t) admits lists of any length but fixes a single type t for all elements.

একটি তালিকা প্রকার L(t) যেকোনো দৈর্ঘ্যের তালিকা গ্রহণ করে তবে সমস্ত উপাদানের জন্য একটি একক প্রকার t স্থির করে।


The length function returns the number of elements in a list.

দৈর্ঘ্য ফাংশন একটি তালিকার উপাদানগুলির সংখ্যা প্রদান করে।


সংযোজন দুটি তালিকা একসাথে যুক্ত করে।


Reversing a list means changing the order of its elements.

একটি তালিকা বিপরীত করা মানে তার উপাদানগুলির ক্রম পরিবর্তন করা।


'rev' ফাংশন একটি তালিকা বিপরীত করে।


তালিকা পুনরাবৃত্তি সবসময় শেষ হয়।


The map function applies a function to each element of a list.

ম্যাপ ফাংশন একটি তালিকা প্রতিটি উপাদানে একটি ফাংশন প্রয়োগ করে।


The 'seq' function generates a list of integers between two numbers.

'seq' ফাংশন দুটি সংখ্যার মধ্যে পূর্ণসংখ্যার একটি তালিকা তৈরি করে।


OCaml uses semicolons to separate elements in lists.

ওসিএএমএল তালিকায় উপাদানগুলিকে আলাদা করতে সেমিকোলন ব্যবহার করে।


Match expressions are used to discriminate between empty and non-empty lists.

খালি এবং অ-খালি তালিকার মধ্যে পার্থক্য করতে ম্যাচ এক্সপ্রেশন ব্যবহার করা হয়।


The power list of a list contains all its sublists.

একটি তালিকার পাওয়ার তালিকায় তার সমস্ত উপ-তালিকা থাকে।


A sublist is obtained by deleting some positions of the original list.

একটি উপ-তালিকা মূল তালিকা থেকে কিছু অবস্থান মুছে ফেলার মাধ্যমে পাওয়া যায়।


Folding lists is similar to iteration with numbers.

তালিকা ভাঁজ করা সংখ্যাগুলির সাথে পুনরাবৃত্তির অনুরূপ।


সন্নিবেশ বাছাই একটি বাছাই করার অ্যালগরিদম।


The code defines a lexer for Mini-OCaml.

কোডটি মিনি-ওসিএলের জন্য একটি লেক্সার সংজ্ঞায়িত করে।


Variables are represented as strings in this context.

এই প্রসঙ্গে ভেরিয়েবলগুলিকে স্ট্রিং হিসাবে উপস্থাপন করা হয়।


Constants can be either booleans or integers.

ধ্রুবকগুলি হয় বুলিয়ান বা পূর্ণসংখ্যা হতে পারে।


Operators are represented as values of a constructor type.

অপারেটরগুলি একটি কনস্ট্রাক্টর টাইপের মান হিসাবে উপস্থাপন করা হয়।


Expressions are represented as values of a constructor type.

এক্সপ্রেশনগুলি একটি কনস্ট্রাক্টর টাইপের মান হিসাবে উপস্থাপন করা হয়।


ব্যাকরণটি ওসিএলের নিয়ম অনুসরণ করে।


Conditionals, lambda expressions, and let expressions take their arguments after operator and function applications.

শর্তসাপেক্ষ, ল্যামডা এক্সপ্রেশন এবং লেট এক্সপ্রেশনগুলি তাদের আর্গুমেন্ট অপারেটর এবং ফাংশন অ্যাপ্লিকেশনের পরে নেয়।


Function applications take their arguments before operator applications.

ফাংশন অ্যাপ্লিকেশনগুলি তাদের আর্গুমেন্ট অপারেটর অ্যাপ্লিকেশনের আগে নেয়।


Multiplication takes its arguments before addition and subtraction.

গুণ তার আর্গুমেন্ট যোগ এবং বিয়োগের আগে নেয়।


ব্যাকরণটির ৬টি স্তর রয়েছে।


The top level accommodates prefix constructs.

শীর্ষ স্তরটি উপসর্গ গঠনকে অন্তর্ভুক্ত করে।


The bottom level accommodates primitive expressions.

নীচের স্তরটি আদিম এক্সপ্রেশনগুলিকে অন্তর্ভুক্ত করে।


Linearization functions must put white space characters between the words.

লিনিয়ারাইজেশন ফাংশনগুলিকে শব্দগুলির মধ্যে সাদা স্থান অক্ষর রাখতে হবে।


OCaml’s concrete syntax doesn’t have constants for negative integers.

ওসিএলের কংক্রিট সিনট্যাক্সে ঋণাত্মক পূর্ণসংখ্যার জন্য ধ্রুবক নেই।


Identifiers used for values must start with lower case letters.

মানগুলির জন্য ব্যবহৃত শনাক্তকারী অবশ্যই ছোট হাতের অক্ষর দিয়ে শুরু করতে হবে।


কনস্ট্রাক্টর টাইপ nat বিবেচনা করুন।


We can now easily define addition and multiplication as functions.

আমরা এখন সহজেই যোগ এবং গুণকে ফাংশন হিসাবে সংজ্ঞায়িত করতে পারি।


Defining the natural numbers with a constructor type is logically of great importance.

একটি কনস্ট্রাক্টর টাইপ সহ স্বাভাবিক সংখ্যা সংজ্ঞায়িত করা যুক্তিযুক্তভাবে অত্যন্ত গুরুত্বপূর্ণ।


The process of translating string representations of syntactic objects into tree representations is known as parsing.

সিনট্যাকটিক অবজেক্টের স্ট্রিং উপস্থাপনাগুলিকে ট্রি উপস্থাপনায় অনুবাদ করার প্রক্রিয়াটিকে পার্সিং হিসাবে পরিচিত।


We will focus on a parsing method called recursive descent.

আমরা রিকার্সিভ ডিসেন্ট নামক একটি পার্সিং পদ্ধতির উপর মনোযোগ দেব।


The type checker verifies the correctness of expressions.

টাইপ পরীক্ষক অভিব্যক্তিগুলির সঠিকতা যাচাই করে।


If the expression is well-typed, the check yields its unique type.

যদি অভিব্যক্তিটি ভালোভাবে টাইপ করা হয়, তবে পরীক্ষাটি তার অনন্য প্রকার দেয়।


Expressions with untyped lambda expressions are ill-typed.

অনির্ধারিত ল্যামডা অভিব্যক্তি সহ অভিব্যক্তিগুলি ভুলভাবে টাইপ করা হয়েছে।


The type checker follows the algorithmic reading of the typing rule.

টাইপ পরীক্ষক টাইপিং নিয়মের অ্যালগরিদমিক পাঠ অনুসরণ করে।


We are using helper functions for better readability.

আমরা আরও ভাল পাঠযোগ্যতার জন্য সাহায্যকারী ফাংশন ব্যবহার করছি।


The evaluator function evaluates an expression in an environment.

মূল্যায়নকারী ফাংশন একটি পরিবেশে একটি অভিব্যক্তি মূল্যায়ন করে।


The lexer needs to recognize identifiers and number constants.

লেক্সারকে শনাক্তকারী এবং সংখ্যা ধ্রুবকগুলি সনাক্ত করতে হবে।


The lexer is realized with mutually tail-recursive functions.

লেক্সার পারস্পরিক লেজ-পুনরাবৃত্তিমূলক ফাংশনগুলির সাথে উপলব্ধি করা হয়।


We avoid considering auxiliary strings by accessing the given string by position.

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


Digits and letters are recognized by using the function Char.code.

ডিজিট এবং অক্ষরগুলি Char.code ফাংশন ব্যবহার করে স্বীকৃত হয়।


The parsing grammar for Mini-OCaml expressions has 6 levels.

Mini-OCaml অভিব্যক্তিগুলির জন্য পার্সিং ব্যাকরণের 6টি স্তর রয়েছে।


The top level takes care of the prefix phrases.

শীর্ষ স্তর উপসর্গ বাক্যাংশগুলির যত্ন নেয়।


Function applications are at the lowest infix level.

ফাংশন অ্যাপ্লিকেশনগুলি সর্বনিম্ন ইনফিক স্তরে রয়েছে।


The bottom level takes care of variables, constants, and parenthesized expressions.

নীচের স্তরটি ভেরিয়েবল, ধ্রুবক এবং বন্ধনীযুক্ত অভিব্যক্তিগুলির যত্ন নেয়।


We follow OCaml’s concrete syntax for typed lambda expressions.

আমরা টাইপ করা ল্যামডা অভিব্যক্তিগুলির জন্য OCaml-এর কংক্রিট সিনট্যাক্স অনুসরণ করি।


Your project consists in writing one file realizing two functions.

আপনার প্রকল্পটি দুটি ফাংশন উপলব্ধি করে এমন একটি ফাইল লেখার মধ্যে গঠিত।


The project counts as the test for this week.

এই প্রকল্পটি এই সপ্তাহের পরীক্ষার মতো গণ্য করা হয়।


আমরা আশা করি আপনি প্রকল্পটি উপভোগ করবেন।


There are many interesting issues and add-ons you may explore.

এমন অনেক আকর্ষণীয় সমস্যা এবং অ্যাড-অন রয়েছে যা আপনি অন্বেষণ করতে পারেন।


Often there are several algorithms solving a given computational task.

প্রায়শই, একটি নির্দিষ্ট গণনামূলক কাজ সমাধান করার জন্য বেশ কয়েকটি অ্যালগরিদম থাকে।


Sorting a list is easy: We start with the empty list, which is sorted, and insert the elements one by one.

একটি তালিকা সাজানো সহজ: আমরা খালি তালিকা দিয়ে শুরু করি, যা সাজানো হয়, এবং একে একে উপাদানগুলি সন্নিবেশ করি।


Once all elements are inserted, we have a sorted rearrangement of the original list.

একবার সমস্ত উপাদান সন্নিবেশিত হয়ে গেলে, আমাদের মূল তালিকার একটি সাজানো পুনর্বিন্যাস থাকে।


Make sure you understand every detail of the definition.

নিশ্চিত করুন যে আপনি সংজ্ঞাটির প্রতিটি বিবরণ বুঝতে পেরেছেন।


We offer a trace: isort[3,2] = insert3 (isort[2]) = insert3 (insert2 (isort[])) = insert3 (insert2 []) = insert3 [2] = 2 :: insert3 [] = 2 :: [3] = [2,3]

আমরা একটি ট্রেস অফার করি: isort[3,2] = insert3 (isort[2]) = insert3 (insert2 (isort[])) = insert3 (insert2 []) = insert3 [2] = 2 :: insert3 [] = 2 :: [3] = [2,3]


Note that isort inserts the elements of the input list reversing the order they appear in the input list.

লক্ষ্য করুন যে isort ইনপুট তালিকার উপাদানগুলিকে সন্নিবেশিত করে যে ক্রমে সেগুলি ইনপুট তালিকায় প্রদর্শিত হয় তার বিপরীত ক্রমে।


More elegantly, we may say that the insertion function preserves sortedness.

আরও মার্জিতভাবে, আমরা বলতে পারি যে সন্নিবেশ ফাংশনটি সাজানো অবস্থা বজায় রাখে।


Declaring the functions insert and isort in OCaml is now routine.

OCaml-এ insert এবং isort ফাংশন ঘোষণা করা এখন একটি রুটিন কাজ।


There is, however, the surprise that OCaml derives polymorphic types for insert and isort if no type specification is given.

তবে, এখানে একটি বিস্ময়কর বিষয় রয়েছে যে OCaml insert এবং isort-এর জন্য বহুরূপী প্রকারগুলি তৈরি করে যদি কোনও প্রকারের স্পেসিফিকেশন দেওয়া না হয়।


This follows from the fact that OCaml accommodates comparisons with the polymorphic type.

এটি এই সত্য থেকে আসে যে OCaml বহুরূপী প্রকারের সাথে তুলনাগুলি মিটমাট করে।


We will explain later how comparisons behave on tuples and lists.

আমরা পরে ব্যাখ্যা করব কিভাবে তুলনাগুলি tuples এবং তালিকাগুলিতে আচরণ করে।


For boolean values, OCaml realizes the order false < true.

বুলিয়ান মানের জন্য, OCaml false < true ক্রমটি উপলব্ধি করে।


Thus we have isort[true,false,false,true] = [false,false,true,true]

সুতরাং আমাদের কাছে আছে isort[true,false,false,true] = [false,false,true,true]


Declare a function that tests whether a list is sorted.

একটি ফাংশন ঘোষণা করুন যা পরীক্ষা করে যে একটি তালিকা সাজানো হয়েছে কিনা।


লেজ পুনরাবৃত্তি ব্যবহার করুন।


Write the function with a generalized match and show how the generalized match translates into simple matches.

একটি সাধারণীকৃত ম্যাচ সহ ফাংশনটি লিখুন এবং দেখান কিভাবে সাধারণীকৃত ম্যাচগুলি সাধারণ ম্যাচগুলিতে অনুবাদ করে।


Declare a function that tests whether two lists are equal up to reordering.

একটি ফাংশন ঘোষণা করুন যা পরীক্ষা করে যে দুটি তালিকা পুনরায় সাজানো পর্যন্ত সমান কিনা।


Declare a function that reorders a list such that the elements appear in descending order.

একটি ফাংশন ঘোষণা করুন যা একটি তালিকাকে পুনরায় সাজায় যাতে উপাদানগুলি অবরোহী ক্রমে প্রদর্শিত হয়।


উদাহরণস্বরূপ, আমরা চাই sort desc[5,3,2,5,2,3] = [5,5,3,3,2,2]।


Declare a function that sorts a list and removes all duplicates.

একটি ফাংশন ঘোষণা করুন যা একটি তালিকা সাজায় এবং সমস্ত ডুপ্লিকেট সরিয়ে দেয়।


The algorithm is based on two straightforward rules.

অ্যালগরিদমটি দুটি সহজবোধ্য নিয়মের উপর ভিত্তি করে তৈরি করা হয়েছে।


If one of the numbers is 0, the other is the greatest common divisor.

যদি সংখ্যাগুলির মধ্যে একটি ০ হয়, তবে অন্যটি বৃহত্তম সাধারণ গুণনীয়ক হবে।


We now recall that x%y is obtained by subtracting y from x as long as y ≤ x.

আমরা এখন মনে করি যে x%y, x থেকে y বিয়োগ করে পাওয়া যায় যতক্ষণ না y ≤ x হয়।


This gives us the following function for computing greatest common divisors.

এটি আমাদের বৃহত্তম সাধারণ গুণনীয়ক গণনার জন্য নিম্নলিখিত ফাংশনটি দেয়।


Our goal here is to carefully explain how the algorithm can be derived from basic principles.

এখানে আমাদের লক্ষ্য হল কীভাবে অ্যালগরিদমটি মৌলিক নীতিগুলি থেকে উদ্ভূত হতে পারে তা সাবধানে ব্যাখ্যা করা।


We first define the divides relation for numbers.

আমরা প্রথমে সংখ্যাগুলির জন্য বিভাজন সম্পর্ক সংজ্ঞায়িত করি।


When we have k|x, we say that k is a divisor or a factor of x.

যখন আমাদের k|x থাকে, তখন আমরা বলি যে k হল x এর একটি বিভাজক বা উৎপাদক।


Moreover, when we say that k is a common divisor of x and y we mean that k is a divisor of both x and y.

এছাড়াও, যখন আমরা বলি যে k হল x এবং y এর একটি সাধারণ গুণনীয়ক, তখন আমরা বুঝি যে k হল x এবং y উভয়েরই একটি গুণনীয়ক।


We observe that every number x has 1 and x as divisors.

আমরা লক্ষ্য করি যে প্রতিটি সংখ্যা x এর ১ এবং x উভয়ই গুণনীয়ক রয়েছে।


In contrast, 0 has infinitely many divisors since it is divided by every number.

অন্যদিকে, ০ এর অসীম সংখ্যক গুণনীয়ক রয়েছে কারণ এটি প্রতিটি সংখ্যা দ্বারা বিভাজ্য।


It follows that two numbers have a greatest common divisor if and only if not both numbers are zero.

এর থেকে বোঝা যায় যে দুটি সংখ্যার বৃহত্তম সাধারণ গুণনীয়ক তখনই থাকবে যখন উভয় সংখ্যাই শূন্য হবে না।


We call a number z the GCD of two numbers x and y if the divisors of z are exactly the common divisors of x and y.

আমরা একটি সংখ্যা z কে দুটি সংখ্যার x এবং y এর GCD বলি যদি z এর গুণনীয়কগুলি x এবং y এর সাধারণ গুণনীয়কগুলির সমান হয়।


Our goal is to find an algorithm that computes the GCD of two numbers.

আমাদের লক্ষ্য হল এমন একটি অ্যালগরিদম খুঁজে বের করা যা দুটি সংখ্যার GCD গণনা করে।


If one of the two numbers is 0, we are done since the other number is the GCD of the two numbers.

যদি দুটি সংখ্যার মধ্যে একটি ০ হয়, তবে আমাদের কাজ শেষ, কারণ অন্য সংখ্যাটিই হল দুটি সংখ্যার GCD।


It remains to find a rule that given two positive numbers x and y yields two numbers x' and y' that have the same GCD and whose sum is smaller.

এখন আমাদের এমন একটি নিয়ম খুঁজে বের করতে হবে যা দুটি ধনাত্মক সংখ্যা x এবং y দেওয়া হলে দুটি সংখ্যা x' এবং y' তৈরি করে যাদের একই GCD আছে এবং যাদের যোগফল ছোট।


It turns out that the GCD of two number x ≥ y stays unchanged if x is replaced with the difference x − y.

দেখা যায় যে দুটি সংখ্যা x ≥ y এর GCD অপরিবর্তিত থাকে যদি x কে x − y পার্থক্য দিয়ে প্রতিস্থাপন করা হয়।


আমাদের দুটি দিক দেখাতে হবে।


ধরুন x = n·a এবং y = n·b।


আমাদের আছে x − y = n·a − n·b = n·(a − b)।


Euclid’s algorithm now simply applies the modulo rule until the zero rule applies, using the symmetry rule when needed.

ইউক্লিডের অ্যালগরিদম এখন কেবল মডুলো নিয়মটি প্রয়োগ করে যতক্ষণ না শূন্য নিয়মটি প্রযোজ্য হয়, প্রয়োজনে প্রতিসাম্য নিয়ম ব্যবহার করে।


The algorithm's running time assumes that field access is constant time, which is the case for arrays.

অ্যালগরিদমের রানটাইম ধরে নেয় যে ফিল্ড অ্যাক্সেস ধ্রুবক সময় নেয়, যা অ্যারেগুলির ক্ষেত্রে সত্য।


We have seen binary search before in generalized form.

আমরা আগে সাধারণীকৃত আকারে বাইনারি অনুসন্ধান দেখেছি।


Binary search is usually realized such that in the positive case it returns an index where the element searched for occurs.

সাধারণত বাইনারি অনুসন্ধান এমনভাবে উপলব্ধি করা হয় যে ইতিবাচক ক্ষেত্রে এটি একটি সূচক প্রদান করে যেখানে অনুসন্ধান করা উপাদানটি বিদ্যমান।


To ease the presentation of binary search and related algorithms, we work with a three-valued constructor type.

বাইনারি অনুসন্ধান এবং সম্পর্কিত অ্যালগরিদমগুলির উপস্থাপনা সহজ করার জন্য, আমরা একটি ত্রি-মান কনস্ট্রাক্টর টাইপ নিয়ে কাজ করি।


The binary search function can now be declared as follows:

বাইনারি অনুসন্ধান ফাংশনটি এখন নিম্নরূপ ঘোষণা করা যেতে পারে:


Note that the worker function is tail-recursive and that the segment of the array to be considered is at least halved upon recursion.

লক্ষ্য করুন যে কর্মী ফাংশনটি টেইল-রিকর্সিভ এবং বিবেচনা করার জন্য অ্যারের অংশটি পুনরাবৃত্তিতে কমপক্ষে অর্ধেক হয়ে যায়।


বাইনারি অনুসন্ধান দুটি ইনভেরিয়েন্টকে সন্তুষ্ট করে।


Linear search generalizes binary search in that it doesn’t assume the array is sorted.

লিনিয়ার অনুসন্ধান বাইনারি অনুসন্ধানকে সাধারণীকরণ করে, কারণ এটি ধরে নেয় না যে অ্যারেটি সাজানো হয়েছে।


Declare a function that checks whether a value occurs in an array and in the positive case yields an index where the value occurs.

একটি ফাংশন ঘোষণা করুন যা পরীক্ষা করে যে একটি মান একটি অ্যারেতে বিদ্যমান কিনা এবং ইতিবাচক ক্ষেত্রে একটি সূচক প্রদান করে যেখানে মানটি বিদ্যমান।


The running time of linear search should be O(n) where n is the length of the array.

লিনিয়ার অনুসন্ধানের রানটাইম O(n) হওয়া উচিত যেখানে n হল অ্যারের দৈর্ঘ্য।


Declare a function that given an increasing function, a number, and a value, checks whether there is some such that using at most calls of f.

একটি ফাংশন ঘোষণা করুন যা একটি ক্রমবর্ধমান ফাংশন, একটি সংখ্যা এবং একটি মান দেওয়া হলে, পরীক্ষা করে যে কিছু আছে কিনা যেমন f এর সর্বাধিক কল ব্যবহার করে।


A function f is increasing if f(i) ≤ f(j) whenever i ≤ j.

যদি i ≤ j হয় তবে একটি ফাংশন f ক্রমবর্ধমান হয় যদি f(i) ≤ f(j) হয়।


There is an elegant algorithm reversing the elements of an array in time linear in the length of the array.

একটি মার্জিত অ্যালগরিদম রয়েছে যা অ্যারের দৈর্ঘ্যের সাথে রৈখিকভাবে একটি অ্যারের উপাদানগুলিকে বিপরীত করে।


The algorithm is based on a function swapping the values at two given positions of a given array.

অ্যালগরিদমটি একটি ফাংশনের উপর ভিত্তি করে তৈরি করা হয়েছে যা একটি প্রদত্ত অ্যারের দুটি নির্দিষ্ট অবস্থানে মানগুলি অদলবদল করে।


The algorithm now reverses a segment in an array by swapping the values and continuing with the smaller segment.

অ্যালগরিদমটি এখন মানগুলি অদলবদল করে এবং ছোট অংশটি চালিয়ে অ্যারেতে একটি অংশকে বিপরীত করে।


One may see as pointers to fields of the array that are moved inside from the leftmost and the rightmost position.

কাউকে অ্যারের ক্ষেত্রগুলির সূচক হিসাবে দেখতে পারে যা বাম এবং ডান দিক থেকে ভিতরে সরানো হয়।


Function reverses satisfies two invariants.

ফাংশন বিপরীত দুটি ইনভেরিয়েন্টকে সন্তুষ্ট করে।


Declare a function rotating the elements of an array by shifting each element by one position to the right except for the last element, which becomes the new first element.

একটি ফাংশন ঘোষণা করুন যা শেষ উপাদানটি বাদে প্রতিটি উপাদানকে এক স্থান ডানদিকে সরিয়ে একটি অ্যারের উপাদানগুলিকে ঘোরায়, যা নতুন প্রথম উপাদান হয়ে যায়।


For instance, rotation changes the state of an array to.

উদাহরণস্বরূপ, ঘূর্ণন একটি অ্যারের অবস্থা পরিবর্তন করে।


A naive sorting algorithm for arrays is selection sort.

অ্যারেগুলির জন্য একটি সাধারণ বাছাই অ্যালগরিদম হল নির্বাচন বাছাই।


The list [10,11,12] may be stored with three blocks connected through links.

[10,11,12] তালিকাটি তিনটি ব্লকের মাধ্যমে সংরক্ষণ করা যেতে পারে যেগুলি লিঙ্কের মাধ্যমে সংযুক্ত।


Each of the 3 blocks has two fields, where the first field represents a number in the list and the second field holds a link.

প্রতিটি 3টি ব্লকের দুটি ক্ষেত্র রয়েছে, যেখানে প্রথম ক্ষেত্রটি তালিকার একটি সংখ্যা উপস্থাপন করে এবং দ্বিতীয় ক্ষেত্রটি একটি লিঙ্ক ধারণ করে।


Links always point to blocks and are represented through the addresses of the blocks.

লিঙ্কগুলি সর্বদা ব্লকগুলির দিকে নির্দেশ করে এবং ব্লকগুলির ঠিকানাগুলির মাধ্যমে উপস্থাপন করা হয়।


Given a linked block representation of a list we can freely choose where the blocks are allocated in the heap.

একটি তালিকার লিঙ্কযুক্ত ব্লক উপস্থাপনা দেওয়া হলে, আমরা অবাধে নির্বাচন করতে পারি যে হিপে ব্লকগুলি কোথায় বরাদ্দ করা হয়েছে।


It is also perfectly possible to represent circular lists.

বৃত্তাকার তালিকাগুলি উপস্থাপন করাও সম্পূর্ণরূপে সম্ভব।


We emphasize that mathematical lists cannot be circular.

আমরা জোর দিচ্ছি যে গাণিতিক তালিকাগুলি বৃত্তাকার হতে পারে না।


Lists as they appear with the block representation are commonly called linked lists.

ব্লক উপস্থাপনার সাথে তালিকাগুলিকে সাধারণত লিঙ্কযুক্ত তালিকা বলা হয়।


How many blocks and how many fields are required to store the list [1,2,3,4] in a heap using the linked block representation?

একটি লিঙ্কযুক্ত ব্লক উপস্থাপনা ব্যবহার করে একটি হিপে [1,2,3,4] তালিকাটি সংরক্ষণ করার জন্য কতগুলি ব্লক এবং কতগুলি ক্ষেত্র প্রয়োজন?


The function alloc locates a new block of the given length in the heap and returns the address of the block.

alloc ফাংশনটি হিপে প্রদত্ত দৈর্ঘ্যের একটি নতুন ব্লক সনাক্ত করে এবং ব্লকের ঠিকানাটি প্রদান করে।


The function get yields the value in the field of a block, where the field is given by its index in the block.

get ফাংশনটি একটি ব্লকের ক্ষেত্রে মান প্রদান করে, যেখানে ক্ষেত্রটি ব্লকের সূচক দ্বারা দেওয়া হয়।


The function set replaces the value in the field of a block.

set ফাংশন একটি ব্লকের ক্ষেত্রে মান প্রতিস্থাপন করে।


The function release is given the address of an allocated block and deallocates this block and all blocks allocated after this block.

release ফাংশনটি একটি বরাদ্দকৃত ব্লকের ঠিকানা পায় এবং এই ব্লক এবং এই ব্লকের পরে বরাদ্দকৃত সমস্ত ব্লকগুলি মুক্ত করে।


We implement the heap with the following structure:

আমরা নিম্নলিখিত কাঠামো সহ হিপটি প্রয়োগ করি:


Note that we use the helper function check to ensure that only allocated addresses are used by set, get, and release.

লক্ষ্য করুন যে আমরা check সাহায্যকারী ফাংশনটি ব্যবহার করি তা নিশ্চিত করতে যে শুধুমাত্র সেট, গেট এবং রিলিজে বরাদ্দকৃত ঠিকানাগুলি ব্যবহার করা হয়।


The exception address signals an address error that has occurred while allocating or accessing a block.

address ব্যতিক্রমটি একটি ঠিকানা ত্রুটি নির্দেশ করে যা একটি ব্লক বরাদ্দ বা অ্যাক্সেস করার সময় ঘটেছে।


Given the heap H, we declare a high-level allocation function alloc′ : L(int) → address allocating a block for a list of integers:

হিপ H দেওয়া হলে, আমরা একটি উচ্চ-স্তরের বরাদ্দ ফাংশন alloc′ : L(int) → address ঘোষণা করি যা পূর্ণসংখ্যার একটি তালিকার জন্য একটি ব্লক বরাদ্দ করে:


It is now straightforward to declare a function putlist: L(int) → address allocating a linked block representation of a given list in the heap:

এখন একটি ফাংশন ঘোষণা করা সহজ putlist: L(int) → address যা হিপে একটি প্রদত্ত তালিকার একটি লিঙ্কযুক্ত ব্লক উপস্থাপনা বরাদ্দ করে:


Next we declare a function getlist: address → L(int) that given the address of the first block of a list stored in the heap recovers the list as a value:

এর পরে আমরা একটি ফাংশন ঘোষণা করি getlist: address → L(int) যা হিপে সংরক্ষিত একটি তালিকার প্রথম ব্লকের ঠিকানা দেওয়া হলে তালিকাটিকে একটি মান হিসাবে পুনরুদ্ধার করে:


We have getlist(putlist l) = l for every list l whose block representation fits into the heap.

আমাদের আছে getlist(putlist l) = l প্রতিটি তালিকার জন্য l যার ব্লক উপস্থাপনা হিপের মধ্যে ফিট করে।


Block representation works for constructor types in general.

ব্লক উপস্থাপনা সাধারণভাবে কনস্ট্রাক্টর প্রকারের জন্য কাজ করে।