কোনও কমপ্লেষ্ক বিজ্ঞান ব্যাকগ্রাউন্ডবিহীন ব্যক্তির জন্য কম্পিউটার সায়েন্সের জগতে ল্যাম্বডা কী?
কোনও কমপ্লেষ্ক বিজ্ঞান ব্যাকগ্রাউন্ডবিহীন ব্যক্তির জন্য কম্পিউটার সায়েন্সের জগতে ল্যাম্বডা কী?
উত্তর:
লাম্বদা লাম্বদা ক্যালকুলাস থেকে আসে এবং প্রোগ্রামিংয়ে বেনামে ফাংশন বোঝায়।
কেন এই দুর্দান্ত? এটি আপনাকে নাম না দিয়ে দ্রুত নিক্ষেপ ফাংশনগুলি লেখার অনুমতি দেয়। এটি ক্লোজারগুলি লেখার একটি দুর্দান্ত উপায়ও সরবরাহ করে। যে শক্তি দিয়ে আপনি এই জিনিস করতে পারেন।
পাইথন
def adder(x):
return lambda y: x + y
add5 = adder(5)
add5(1)
6
যেমন আপনি পাইথনের স্নিপেট থেকে দেখতে পাচ্ছেন, ফাংশন সংযোজনকারী একটি আর্গুমেন্ট x গ্রহণ করে এবং একটি বেনাম ফাংশন, বা ল্যাম্বদা ফেরত দেয় যা অন্য একটি যুক্তি y নিয়ে যায়। সেই অনামী ফাংশন আপনাকে ফাংশন থেকে ফাংশন তৈরি করতে দেয় allows এটি একটি সহজ উদাহরণ, তবে এটি পাওয়ার ল্যাম্বডাস এবং ক্লোজারগুলির কাছে পৌঁছে দেওয়া উচিত।
অন্যান্য ভাষায় উদাহরণ
পার্ল 5
sub adder {
my ($x) = @_;
return sub {
my ($y) = @_;
$x + $y
}
}
my $add5 = adder(5);
print &$add5(1) == 6 ? "ok\n" : "not ok\n";
জাভাস্ক্রিপ্ট
var adder = function (x) {
return function (y) {
return x + y;
};
};
add5 = adder(5);
add5(1) == 6
জাভাস্ক্রিপ্ট (ES6)
const adder = x => y => x + y;
add5 = adder(5);
add5(1) == 6
পরিকল্পনা
(define adder
(lambda (x)
(lambda (y)
(+ x y))))
(define add5
(adder 5))
(add5 1)
6
Func<int, Func<int, int>> adder =
(int x) => (int y) => x + y; // `int` declarations optional
Func<int, int> add5 = adder(5);
var add6 = adder(6); // Using implicit typing
Debug.Assert(add5(1) == 6);
Debug.Assert(add6(-1) == 5);
// Closure example
int yEnclosed = 1;
Func<int, int> addWithClosure =
(x) => x + yEnclosed;
Debug.Assert(addWithClosure(2) == 3);
দ্রুতগতি
func adder(x: Int) -> (Int) -> Int{
return { y in x + y }
}
let add5 = adder(5)
add5(1)
6
পিএইচপি
$a = 1;
$b = 2;
$lambda = fn () => $a + $b;
echo $lambda();
Haskell,
(\x y -> x + y)
জাভা দেখতে এই পোস্টে
// The following is an example of Predicate :
// a functional interface that takes an argument
// and returns a boolean primitive type.
Predicate<Integer> pred = x -> x % 2 == 0; // Tests if the parameter is even.
boolean result = pred.test(4); // true
অ্যাপ্লিকেশন Lua
adder = function(x)
return function(y)
return x + y
end
end
add5 = adder(5)
add5(1) == 6 -- true
Kotlin
val pred = { x: Int -> x % 2 == 0 }
val result = pred(4) // true
চুনি
রুবি এর থেকে কিছুটা আলাদা যে আপনি কোনও ফাংশন বলার মতো সঠিক একই বাক্য গঠন ব্যবহার করে ল্যাম্বডাকে কল করতে পারবেন না, তবে এটিতে ল্যাম্বডাস রয়েছে।
def adder(x)
lambda { |y| x + y }
end
add5 = adder(5)
add5[1] == 6
রুবি হলেন রুবি, ল্যাম্বডাসের জন্য একটি শর্টহ্যান্ড রয়েছে, সুতরাং আপনি এইভাবে সংজ্ঞা দিতে পারেন adder
:
def adder(x)
-> y { x + y }
end
আর
adder <- function(x) {
function(y) x + y
}
add5 <- adder(5)
add5(1)
#> [1] 6
ল্যাম্বদা হ'ল এক ধরণের ফাংশন, ইনলাইন সংজ্ঞায়িত। ল্যাম্বদার পাশাপাশি আপনারও সাধারণত কিছু ধরণের ভেরিয়েবল টাইপ থাকে যা কোনও ফাংশন, ল্যাম্বডা বা অন্যথায় রেফারেন্স রাখতে পারে।
উদাহরণস্বরূপ, এখানে কোডের একটি সি # টুকরা যা ল্যাম্বডা ব্যবহার করে না:
public Int32 Add(Int32 a, Int32 b)
{
return a + b;
}
public Int32 Sub(Int32 a, Int32 b)
{
return a - b;
}
public delegate Int32 Op(Int32 a, Int32 b);
public void Calculator(Int32 a, Int32 b, Op op)
{
Console.WriteLine("Calculator: op(" + a + ", " + b + ") = " + op(a, b));
}
public void Test()
{
Calculator(10, 23, Add);
Calculator(10, 23, Sub);
}
এটি ক্যালকুলেটরকে কল করে, কেবল দুটি সংখ্যার সাথে না পেরে, কিন্তু গণনার ফলাফল পাওয়ার জন্য ক্যালকুলেটরের অভ্যন্তরে কোন পদ্ধতিতে কল করতে হয়।
সি # ২.০ এ আমরা বেনামে পদ্ধতি পেয়েছি, যা উপরের কোডটি এতে সংক্ষিপ্ত করে:
public delegate Int32 Op(Int32 a, Int32 b);
public void Calculator(Int32 a, Int32 b, Op op)
{
Console.WriteLine("Calculator: op(" + a + ", " + b + ") = " + op(a, b));
}
public void Test()
{
Calculator(10, 23, delegate(Int32 a, Int32 b)
{
return a + b;
});
Calculator(10, 23, delegate(Int32 a, Int32 b)
{
return a - b;
});
}
এবং তারপরে সি # 3.0 এ আমরা ল্যাম্বডাস পেয়েছি যা কোডটিকে আরও ছোট করে তোলে:
public delegate Int32 Op(Int32 a, Int32 b);
public void Calculator(Int32 a, Int32 b, Op op)
{
Console.WriteLine("Calculator: op(" + a + ", " + b + ") = " + op(a, b));
}
public void Test()
{
Calculator(10, 23, (a, b) => a + b);
Calculator(10, 23, (a, b) => a - b);
}
Op
Func<int, int>
Console.WriteLine("Calculator: op " + op.Method.Name + " (" + a + ", " + b + ") = " + op(a, b));
প্রথম উদাহরণের জন্য পরামর্শ দেব ।
"ল্যাম্বদা" নামটি কেবল একটি .তিহাসিক নিদর্শন। আমরা যে সমস্ত কথা বলছি তা হ'ল একটি অভিব্যক্তি যার মূল্য একটি ফাংশন।
একটি সহজ উদাহরণ (পরের লাইনের জন্য স্কালা ব্যবহার করে):
args.foreach(arg => println(arg))
যেখানে foreach
পদ্ধতির যুক্তি হ'ল বেনাম ফাংশনের জন্য একটি অভিব্যক্তি। উপরের লাইনটি কমবেশি এই জাতীয় কিছু লেখার মতো একই (পুরোপুরি বাস্তব কোড নয়, তবে আপনি ধারণাটি পাবেন):
void printThat(Object that) {
println(that)
}
...
args.foreach(printThat)
তা ছাড়া আপনার বিরক্ত করার দরকার নেই:
একবার আপনি মানগুলি ফাংশন করতে ব্যবহৃত হয়ে গেলে সেগুলি না করে নিখরচায় মনে হয় প্রতিটি অভিব্যক্তির নামকরণ করা দরকার যেমন:
int tempVar = 2 * a + b
...
println(tempVar)
আপনার যেখানে প্রয়োজন সেখানে কেবল প্রকাশটি লেখার পরিবর্তে:
println(2 * a + b)
সঠিক স্বরলিপি ভাষা থেকে ভাষাতে ভিন্ন হয়; গ্রীক সবসময় প্রয়োজন হয় না! ;-)
এটি ল্যাম্বডা ক্যালকুলাসকে বোঝায় , এটি একটি আনুষ্ঠানিক ব্যবস্থা যা সবেমাত্র ল্যাম্বডা এক্সপ্রেশন থাকে যা একটি ফাংশনকে প্রতিনিধিত্ব করে যা তার একক যুক্তির জন্য একটি ফাংশন গ্রহণ করে এবং একটি ফাংশন প্রদান করে। ল্যাম্বডা ক্যালকুলাসের সমস্ত ফাংশন সেই ধরণের, অর্থাত্ λ : λ → λ
,।
লিস্প তার বেনামে ফাংশনটির আক্ষরিক নামকরণের জন্য ল্যাম্বডা ধারণাটি ব্যবহার করেছিল। এই ল্যাম্বদা এমন একটি ফাংশন উপস্থাপন করে যা এক্স এবং ওয়াই দুটি আর্গুমেন্ট নেয় এবং তাদের পণ্যটি ফেরত দেয়:
(lambda (x y) (* x y))
এটি লাইনের মতো এটি প্রয়োগ করা যেতে পারে ( 50 টিতে মূল্যায়ন করে ):
((lambda (x y) (* x y)) 5 10)
λ : λ -> λ
বিভ্রান্তিকর (এবং অবৈধ প্রকৃতপক্ষে)।
ল্যাম্বদা ক্যালকুলাস প্রতিস্থাপনের একটি সামঞ্জস্যপূর্ণ গাণিতিক তত্ত্ব। স্কুল গণিতে একজন উদাহরণস্বরূপ x+y=5
জুড়ি দেওয়া দেখায় x−y=1
। স্বতন্ত্র সমীকরণগুলি কৌশলগতভাবে চালিত করার উপায়গুলির সাথে এই দুটি থেকে তথ্য একসাথে রাখাও সম্ভব, প্রদত্ত ক্রস-সমীকরণের বিকল্পগুলি যৌক্তিকভাবে করা হয়। ল্যাম্বদা ক্যালকুলাস এই বিকল্পগুলি করার সঠিক পদ্ধতিটিকে কোড করে।
y = x−1
দ্বিতীয় সমীকরণের একটি বৈধ পুনঃব্যবস্থা এটি দেওয়া , এটি: প্রতীকটির জন্য λ y = x−1
চিহ্নগুলি প্রতিস্থাপন করা একটি ফাংশন । এখন প্রথম সমীকরণে প্রতিটি পদ প্রয়োগ করার কথা ভাবুন । যদি একটি পদ থাকে তবে প্রতিস্থাপন সম্পাদন করুন; অন্যথায় কিছুই করবেন না। আপনি যদি কাগজে এটি করেন তবে আপনি কীভাবে এটি প্রয়োগ করছেন তা দেখতে পাবেনx−1
y
λ y
y
λ y
করলে প্রথম সমীকরণটি সমাধানযোগ্য হয়।
এটি কোনও কম্পিউটার বিজ্ঞান বা প্রোগ্রামিং ছাড়াই একটি উত্তর।
আমি যে সহজ প্রোগ্রামিংয়ের উদাহরণটি ভাবতে পারি তা হ'ল http://en.wikedia.org/wiki/Joy_( প্রোগ্রামিং_এলংয়েজি) : # কী_উত_কর্মগুলি :
এখানে বাধ্যতামূলক প্রোগ্রামিং ভাষা (সি) এ বর্গ ফাংশনটি কীভাবে সংজ্ঞায়িত করা যেতে পারে:
int square(int x) { return x * x; }
ভেরিয়েবল এক্স হল একটি আনুষ্ঠানিক প্যারামিটার যা ফাংশনটি বলা হলে স্কোয়ার করার জন্য প্রকৃত মান দ্বারা প্রতিস্থাপিত হয়। একটি কার্যকরী ভাষাতে (স্কিম) একই ফাংশন সংজ্ঞায়িত করা হবে:
(define square (lambda (x) (* x x)))
এটি বিভিন্ন উপায়ে পৃথক, তবে এটি এখনও একই পদ্ধতিতে ফর্মাল প্যারামিটার এক্স ব্যবহার করে।
যুক্ত: http://imgur.com/a/XBHub
কিছুটা ওভারসিম্লিফাইফাইড: ল্যাম্বডা ফাংশন এমনটি যা অন্য ক্রিয়াকলাপগুলিতে যেতে পারে এবং এটির পক্ষে যুক্তি অ্যাক্সেস হয়।
সি # ল্যাম্বদা সিনট্যাক্সে প্রায়শই অনামী বেনামের প্রতিনিধিদের মতো একই পদ্ধতিতে সহজ পদ্ধতিতে সংকলন করা হয় তবে এটিও ভেঙে যেতে পারে এবং এর যুক্তিটি পড়া যায়।
উদাহরণস্বরূপ (সি # 3 এ):
LinqToSqlContext.Where(
row => row.FieldName > 15 );
লিনকটোসকিউএল সেই ফাংশনটি (x> 15) পড়তে পারে এবং এক্সপ্রেশন ট্রি ব্যবহার করে নির্বাহ করতে প্রকৃত এসকিউএল এ রূপান্তর করতে পারে।
উপরের বিবৃতিটি হয়ে যায়:
select ... from [tablename]
where [FieldName] > 15 --this line was 'read' from the lambda function
এটি সাধারণ পদ্ধতি বা বেনামে প্রতিনিধিদের চেয়ে পৃথক (যা সত্যিকারের কেবল যাদু সংকলক) যা তারা পড়তে পারে না ।
সি # তে সমস্ত পদ্ধতি যা ল্যাম্বদা সিনট্যাক্স ব্যবহার করে তা এক্সপ্রেশন ট্রিগুলিতে সংকলন করা যায় না (যেমন আসল ল্যাম্বদা ফাংশন)। এই ক্ষেত্রে:
LinqToSqlContext.Where(
row => SomeComplexCheck( row.FieldName ) );
এখন এক্সপ্রেশন ট্রিটি পড়া যায় না - সামারকম্পলেক্সচেক ভাঙ্গা যায় না। এসকিউএল স্টেটমেন্টটি যেখানেই ছাড়াই কার্যকর করা হবে এবং ডেটাগুলির প্রতিটি সারি পাঠানো হবে SomeComplexCheck
।
লাম্বদা ফাংশনগুলি বেনামে পদ্ধতিতে বিভ্রান্ত করা উচিত নয়। এই ক্ষেত্রে:
LinqToSqlContext.Where(
delegate ( DataRow row ) {
return row.FieldName > 15;
} );
এটিতে একটি 'ইনলাইন' ফাংশন রয়েছে, তবে এবার এটি কেবল যান্ত্রিক সংকলক - সি # সংকলকটি একটি স্বয়ংক্রিয়ভাবে নাম সহ একটি নতুন উদাহরণ পদ্ধতিতে এটি বিভক্ত করবে।
বেনামি পদ্ধতিগুলি পড়া যায় না, এবং ল্যাম্বদা ফাংশনগুলির জন্য যুক্তিটি অনুবাদ করা যায় না।
আমি এই নিবন্ধটিতে ল্যাম্বডাসের ব্যাখ্যা পছন্দ করি: লিনকিউ এর বিবর্তন এবং সি # এর ডিজাইনের উপর এর প্রভাব । এটি আমার কাছে প্রচুর অর্থবোধ করেছিল কারণ এটি লাম্বদাসের জন্য একটি বাস্তব জগত দেখায় এবং এটি ব্যবহারিক উদাহরণ হিসাবে তৈরি করে।
তাদের দ্রুত ব্যাখ্যা: ল্যাম্বডাস কোড (ফাংশন) কে ডেটা হিসাবে গণ্য করার একটি উপায়।
রুবির একটি ল্যাম্বদার উদাহরণ নিম্নরূপ:
hello = lambda do
puts('Hello')
puts('I am inside a proc')
end
hello.call
নিম্নলিখিত আউটপুট উত্পন্ন করবে:
Hello
I am inside a proc
@ ব্রায়ান আমি লিংক এবং নন-লিনকিউ অপারেটরগুলিতে সি # তে সর্বদা ল্যাম্বডাস ব্যবহার করি। উদাহরণ:
string[] GetCustomerNames(IEnumerable<Customer> customers)
{ return customers.Select(c=>c.Name);
}
সি # এর আগে, আমি অ্যাজ্যাক্স ফাংশনে কলব্যাকের জন্য জাভাস্ক্রিপ্টে বেনাম ফাংশন ব্যবহার করেছি, আজাক্স শব্দটি এমনকি তৈরি হওয়ার আগে:
getXmlFromServer(function(result) {/*success*/}, function(error){/*fail*/});
সি # এর ল্যাম্বডা সিনট্যাক্সের সাথে আকর্ষণীয় বিষয়টি হ'ল এটি হ'ল যে তাদের নিজস্ব ধরণের প্রকারভেদ করা যায় না (যেমন, আপনি var foo = (x, y) => x * y) টাইপ করতে পারবেন না তবে তারা কোন ধরণের উপর নির্ভর করে নির্ধারিত, সেগুলি প্রতিনিধি হিসাবে সংকলন করা হবে বা ভাবের প্রতিনিধিত্ব করে এমন বিমূর্ত সিনট্যাক্স ট্রি (এটি কীভাবে লিনকিউ অবজেক্ট ম্যাপাররা তাদের "ভাষা-সংহত" যাদু করে)।
এলআইএসপিতে লাম্বডাসকে একটি উদ্ধৃতি অপারেটরের কাছেও দেওয়া যেতে পারে এবং তারপরে তালিকার তালিকা হিসাবে ট্র্যাভার করা যায়। কিছু শক্তিশালী ম্যাক্রো এইভাবে তৈরি করা হয়।
প্রশ্নের আনুষ্ঠানিকভাবে বড় উত্তর দেওয়া হয়েছে, তাই আমি এই বিষয়ে আরও যুক্ত করার চেষ্টা করব না।
খুব সরল, অনানুষ্ঠানিকভাবেগণিত বা প্রোগ্রামিংয়ে খুব কম বা কিছুই জানে না এমন কাউকে কথায়, আমি এটিকে একটি ছোট "মেশিন" বা "বাক্স" হিসাবে ব্যাখ্যা করব যা কিছু ইনপুট নেয়, কিছু কাজ করে এবং কিছু আউটপুট উত্পন্ন করে, তার কোনও বিশেষ নাম নেই , তবে আমরা জানি এটি কোথায় এবং কেবল এই জ্ঞান দ্বারা আমরা এটি ব্যবহার করি।
ব্যবহারিকভাবে বলতে গেলে, কোনও ফাংশন কী তা জানেন এমন একজন ব্যক্তির জন্য, আমি তাদের বলব যে এটি একটি ফাংশন যার কোনও নাম নেই, সাধারণত স্মৃতিতে একটি বিন্দুতে রাখা হয় যা কেবলমাত্র সেই স্মৃতিতে উল্লেখ করে ব্যবহার করা যেতে পারে (সাধারণত ব্যবহারের মাধ্যমে একটি পরিবর্তনশীল - যদি তারা ফাংশন পয়েন্টারগুলির ধারণার কথা শুনে থাকে তবে আমি তাদেরকে অনুরূপ ধারণা হিসাবে ব্যবহার করব) - এই উত্তরটি চমত্কার বেসিকগুলি (সমাপ্তির কোনও উল্লেখ নেই) coversেকে দেয় তবে সহজেই পয়েন্টটি পাওয়া যায়।
আপনি এটিকে একটি বেনামি ফাংশন হিসাবে ভাবতে পারেন - এখানে আরও কিছু তথ্য দেওয়া হয়েছে: উইকিপিডিয়া - বেনামে ফাংশন
আমি এখানে একটি সি ++ 11 উদাহরণ দেখতে পাচ্ছি না বলেই আমি এগিয়ে যাব এবং এখান থেকে এই সুন্দর উদাহরণটি পোস্ট করব । অনুসন্ধানের পরে, এটি স্পষ্ট ভাষায় নির্দিষ্ট উদাহরণ যা আমি খুঁজে পেতে পারি find
template<typename F>
void Eval( const F& f ) {
f();
}
void foo() {
Eval( []{ printf("Hello, Lambdas\n"); } );
}
void bar() {
auto f = []{ printf("Hello, Lambdas\n"); };
f();
}
ল্যাম্বডা এক্সপ্রেশনগুলিতে আমার মাথা গুটিয়ে নিতে আমার সমস্যা হচ্ছে কারণ আমি ভিজ্যুয়াল ফক্সপ্রোতে কাজ করি যার ম্যাক্রো সাবস্টিটিউশন এবং এক্সেসস্ক্রিপ্ট {} এবং মূল্যায়ন () ফাংশন রয়েছে, যা মনে হয় অনেক একই উদ্দেশ্যে কাজ করে।
? Calculator(10, 23, "a + b")
? Calculator(10, 23, "a - b");
FUNCTION Calculator(a, b, op)
RETURN Evaluate(op)
আনুষ্ঠানিক ল্যাম্বডাস ব্যবহারের একটি সুনির্দিষ্ট সুবিধা হ'ল (আমার ধারনা) কম্পাইল-টাইম চেকিং: ফক্স এটি জানতে পারবে না যে আপনি উপরের পাঠ্য স্ট্রিংটি চালানোর চেষ্টা না করা পর্যন্ত এটি টাইপ করেছেন কিনা।
এটি ডেটা-চালিত কোডের জন্যও দরকারী: আপনি ডেটাবেজে মেমো ক্ষেত্রে সম্পূর্ণ রুটিনগুলি সঞ্চয় করতে পারেন এবং তারপরে রান-টাইমে এগুলি মূল্যায়ন করতে পারেন। এটি আপনাকে উত্সটিতে অ্যাক্সেস না করেই অ্যাপ্লিকেশনটির কিছু অংশ ঝাঁকুনি দেয়। (তবে এটি সামগ্রিকভাবে অন্য একটি বিষয়))
কোনও কমপ্লেষ্ক বিজ্ঞান ব্যাকগ্রাউন্ডবিহীন ব্যক্তির জন্য কম্পিউটার সায়েন্সের জগতে ল্যাম্বডা কী?
আমি সহজ এবং পঠনযোগ্য অজগর কোডগুলির ধাপে ধাপে স্বজ্ঞাতভাবে এটি চিত্রিত করব।
সংক্ষেপে, একটি ল্যাম্বদা কেবল একটি বেনামে এবং ইনলাইন ফাংশন।
আসুন lambdas
বেসিক পাটিগণিতের পটভূমি সহ একটি নতুন ব্যক্তি হিসাবে বুঝতে অ্যাসাইনমেন্ট থেকে শুরু করা যাক ।
অ্যাসাইনমেন্টের ব্লুপ্রিন্টটি হল 'নাম = মান', দেখুন:
In [1]: x = 1
...: y = 'value'
In [2]: x
Out[2]: 1
In [3]: y
Out[3]: 'value'
'x', 'y' নাম এবং 1, 'মান' মান। গণিতে কোনও ফাংশন চেষ্টা করুন
In [4]: m = n**2 + 2*n + 1
NameError: name 'n' is not defined
ত্রুটি রিপোর্ট,
আপনি কোড হিসাবে সরাসরি গণিত লিখতে পারবেন না, 'n' সংজ্ঞায়িত করা উচিত বা একটি মান নির্ধারিত করা উচিত।
In [8]: n = 3.14
In [9]: m = n**2 + 2*n + 1
In [10]: m
Out[10]: 17.1396
এটি এখন কাজ করে, আপনি যদি দুটি পৃথক রেখাকে একের সাথে সংযুক্ত করার জন্য জেদ করেন তবে কি হবে। আসেlambda
In [13]: j = lambda i: i**2 + 2*i + 1
In [14]: j
Out[14]: <function __main__.<lambda>>
কোনও ত্রুটি রিপোর্ট করা হয়নি।
এটি এক নজরে lambda
, এটি আপনাকে কম্পিউটারে সরাসরি গাণিতিকের মতো একটি লাইনে একটি ফাংশন লিখতে সক্ষম করে।
আমরা পরে এটি দেখতে হবে।
আসুন 'অ্যাসাইনমেন্ট' এর উপর আরও গভীর খনন করা চালিয়ে যাওয়া যাক।
উপরে চিত্রিত হিসাবে, সমান প্রতীকটি =
সাধারণ ডেটা (1 এবং 'মান') প্রকার এবং সরল অভিব্যক্তি (এন ** 2 + 2 * এন + 1) এর জন্য কাজ করে।
এটা চেষ্টা কর:
In [15]: x = print('This is a x')
This is a x
In [16]: x
In [17]: x = input('Enter a x: ')
Enter a x: x
এটি সাধারণ বিবৃতিগুলির জন্য কাজ করে, পাইথন in এগুলির মধ্যে ১১ প্রকার রয়েছে Simple সরল বিবৃতি - পাইথন ৩.6.৩ ডকুমেন্টেশন
যৌগিক বিবৃতি সম্পর্কে,
In [18]: m = n**2 + 2*n + 1 if n > 0
SyntaxError: invalid syntax
#or
In [19]: m = n**2 + 2*n + 1, if n > 0
SyntaxError: invalid syntax
সেখানে আসে def
কাজ এটি সক্রিয়
In [23]: def m(n):
...: if n > 0:
...: return n**2 + 2*n + 1
...:
In [24]: m(2)
Out[24]: 9
তদা, এটি বিশ্লেষণ করুন, 'মি' নাম, 'এন ** 2 + 2 * এন + 1' এর মান। :
'=' এর একটি রূপ।
এটি সন্ধান করুন, যদি কেবল বোঝার জন্য, সবকিছু অ্যাসাইনমেন্ট থেকে শুরু হয় এবং সবকিছুই অ্যাসাইনমেন্ট।
এখন ফিরে আসি lambda
, আমাদের 'm' নামে একটি ফাংশন আছে
চেষ্টা করুন:
In [28]: m = m(3)
In [29]: m
Out[29]: 16
এখানে 'মি' এর দুটি নাম রয়েছে, ফাংশনটির m
ইতিমধ্যে একটি নাম রয়েছে, সদৃশ।
এটি এর মতো বিন্যাসকরণ:
In [27]: m = def m(n):
...: if n > 0:
...: return n**2 + 2*n + 1
SyntaxError: invalid syntax
এটি কোনও স্মার্ট কৌশল নয়, সুতরাং ত্রুটির প্রতিবেদন
আমাদের মধ্যে একটি মুছতে হবে, নাম ছাড়াই একটি ফাংশন সেট করতে হবে।
m = lambda n:n**2 + 2*n + 1
একে 'বেনামে ফাংশন' বলা হয়
উপসংহারে,
lambda
একটি ইনলাইন ফাংশনে যা আপনাকে গণিতের মতো একটি সরাসরি লাইনে একটি ফাংশন লিখতে সক্ষম করেlambda
বেনামেআশাকরি এটা সাহায্য করবে.
এটি এমন একটি ফাংশন যার কোনও নাম নেই। যেমন সি # তে আপনি ব্যবহার করতে পারেন
numberCollection.GetMatchingItems<int>(number => number > 5);
5 এর চেয়ে বেশি নম্বরগুলি ফিরিয়ে দিতে।
number => number > 5
এখানে ল্যাম্বদা অংশ। এটি এমন একটি ফাংশন উপস্থাপন করে যা একটি প্যারামিটার (সংখ্যা) নেয় এবং একটি বুলিয়ান মান (সংখ্যা> 5) প্রদান করে। GetMatchingItems পদ্ধতিটি সংগ্রহের সমস্ত আইটেমগুলিতে এই ল্যাম্বদা ব্যবহার করে এবং ম্যাচিংয়ের আইটেমগুলি ফেরত দেয়।
জাভাস্ক্রিপ্ট মধ্যে, উদাহরণস্বরূপ, ফাংশন অন্য সব কিছুর মতো একই মিশ্র ধরনের হিসাবে গণ্য করা হয় ( int
, string
, float
, bool
)। এর মতো, আপনি ফ্লাইতে ফাংশন তৈরি করতে পারেন, জিনিসগুলিতে তাদের বরাদ্দ করতে পারেন এবং পরে তাদের আবার কল করতে পারেন। এটি দরকারী তবে আপনি ব্যবহারের অতিরিক্ত কিছু চান না বা আপনি আপনার কোডটি বজায় রাখার জন্য প্রত্যেককে বিভ্রান্ত করবেন ...
এই খরগোশের গর্তটি কত গভীর হয় তা দেখতে আমি এটি খেলছিলাম:
var x = new Object;
x.thingy = new Array();
x.thingy[0] = function(){ return function(){ return function(){ alert('index 0 pressed'); }; }; }
x.thingy[1] = function(){ return function(){ return function(){ alert('index 1 pressed'); }; }; }
x.thingy[2] = function(){ return function(){ return function(){ alert('index 2 pressed'); }; }; }
for(var i=0 ;i<3; i++)
x.thingy[i]()()();
সিএসের প্রসঙ্গে ল্যাম্বডা ফাংশন হ'ল একটি বিমূর্ত গাণিতিক ধারণা যা গাণিতিক প্রকাশগুলির প্রতীকী মূল্যায়নের সমস্যার সমাধান করে। সেই প্রসঙ্গে ল্যাম্বডা ফাংশন ল্যাম্বডা টার্মের সমান ।
প্রোগ্রামিং ভাষার ক্ষেত্রে এটি আলাদা কিছু। এটি কোডের একটি অংশ যা "স্থানে" ঘোষিত এবং এটি একটি "প্রথম শ্রেণির নাগরিক" হিসাবে পাস হতে পারে। এই ধারণাটি কার্যকর হিসাবে উপস্থিত হয়েছিল যাতে এটি প্রায় সমস্ত জনপ্রিয় আধুনিক প্রোগ্রামিং ভাষায় এসেছিল (দেখুন ল্যাম্বদা ফাংশনগুলি কোথাও পোস্ট দেখুন)।
এ
Lambda Function
, বা কSmall Anonymous Function
, কার্যকারিতার একটি স্ব-অন্তর্ভুক্ত ব্লক যা আপনার কোডে চারপাশে পাস এবং ব্যবহার করা যেতে পারে। - ল্যামডা বিভিন্ন বিভিন্ন প্রোগ্রামিং ভাষার নাম হয়েছেLambda
এ পাইথন এবং Kotlin ,Closure
মধ্যে সুইফট , অথবাBlock
মধ্যে সি এবং উদ্দেশ্য সি । যদিও ল্যাম্বদার অর্থ এই ভাষাগুলির জন্য বেশ অনুরূপ তবে এর মাঝে মাঝে কিছুটা আলাদা পার্থক্য রয়েছে।
let coffee: [String] = ["Cappuccino", "Espresso", "Latte", "Ristretto"]
func backward(_ n1: String, _ n2: String) -> Bool {
return n1 > n2
}
var reverseOrder = coffee.sorted(by: backward)
// RESULT: ["Ristretto", "Latte", "Espresso", "Cappuccino"]
reverseOrder = coffee.sorted(by: { (n1: String, n2: String) -> Bool in
return n1 > n2
})
reverseOrder = coffee.sorted(by: { (n1: String, n2: String) -> Bool in return n1 > n2 } )
reverseOrder = coffee.sorted(by: { n1, n2 in return n1 > n2 } )
reverseOrder = coffee.sorted(by: { n1, n2 in n1 > n2 } )
reverseOrder = coffee.sorted(by: { $0 > $1 } )
// $0 and $1 are closure’s first and second String arguments.
reverseOrder = coffee.sorted(by: >)
// RESULT: ["Ristretto", "Latte", "Espresso", "Cappuccino"]
আশাকরি এটা সাহায্য করবে.
আমি এটা পেয়েছিলাম। আমি এর সাথে এটি জেএসে চেষ্টা করেছি:
var addAndMult = function(x) {
return (function(y) {
return (function(z) {
return (x+y)*z;
});
});
};
এটি 2 থেকে 4 যোগ করে তারপরে ফলাফলটি 6 দ্বারা বিভক্ত করে দেয় তবে আমি মাঝে মাঝে পড়তে অসুবিধা বোধ করি :(
এছাড়াও প্রতিটি অনুষ্ঠানের জন্য আমি আকর্ষণীয় করে তুলেছি:
var forEach = function(arr) {
return (function(x) {
for (var i=0; arr[i]; i++) {
x(arr[i]);
}
});
}
foreach ([1,2,3,4,5]) (console.log);
এই পদ্ধতিটি একটি অ্যারের পুনরাবৃত্তি করবে এবং একটি ক্রিয়া সম্পাদন করবে - কনসোলে মুদ্রণের ক্ষেত্রে। এখন আমিও কেন ল্যাবমডাস শক্তিশালী।
কম্পিউটার প্রোগ্রামিংয়ে ল্যাম্বদা হ'ল কোডের একটি অংশ (বিবৃতি, অভিব্যক্তি বা তাদের একটি গোষ্ঠী) যা বাহ্যিক উত্স থেকে কিছু আর্গুমেন্ট নেয়। এটি সর্বদা একটি বেনামি ফাংশন হওয়া উচিত নয় - এগুলি বাস্তবায়নের আমাদের কাছে অনেক উপায় রয়েছে।
অভিব্যক্তি, বিবৃতি এবং ফাংশনগুলির মধ্যে আমাদের স্পষ্ট বিচ্ছেদ রয়েছে, যা গণিতবিদদের নেই।
প্রোগ্রামিংয়ে "ফাংশন" শব্দটিও পৃথক - আমাদের কাছে "ফাংশনটি করণীয় এক ধরণের পদক্ষেপ" (ল্যাটিন থেকে "পারফর্ম")। গণিতে এটি ভেরিয়েবলের মধ্যে পারস্পরিক সম্পর্ক সম্পর্কিত কিছু।
কার্যকরী ভাষাগুলি যতটা সম্ভব গণিতের সূত্রের অনুরূপ হওয়ার চেষ্টা করছে এবং তাদের কথার অর্থ প্রায় একই। তবে অন্যান্য প্রোগ্রামিং ভাষায় আমাদের আলাদা থাকে।
প্রশ্নের পুরো উত্তর দেওয়া হয়েছে, আমি বিশদে যেতে চাই না। মরিচায় সংখ্যার গণনা লেখার সময় আমি ব্যবহারটি ভাগ করতে চাই।
ল্যাম্বদা (বেনামে ফাংশন) এর উদাহরণ রয়েছে
let f = |x: f32| -> f32 { x * x - 2.0 };
let df = |x: f32| -> f32 { 2.0 * x };
আমি যখন নিউটন – র্যাফসন পদ্ধতির একটি মডিউল লিখছিলাম, তখন এটি প্রথম এবং দ্বিতীয় ক্রমের ডেরাইভেটিভ হিসাবে ব্যবহৃত হত। (আপনি যদি নিউটন – র্যাফসন পদ্ধতিটি জানতে চান তবে অনুগ্রহ করে " https://en.wikedia.org/wiki/Newton%27s_method " দেখুন।
নিম্নলিখিত হিসাবে আউটপুট
println!("f={:.6} df={:.6}", f(10.0), df(10.0))
f=98.000000 df=20.000000
কল্পনা করুন যে আপনার কাছে একটি বিতরণ বিকল্প সহ একটি রেস্তোঁরা রয়েছে এবং আপনার কাছে একটি অর্ডার রয়েছে যা 30 মিনিটের মধ্যেই করা উচিত। মুল বক্তব্যটি হ'ল গ্রাহকরা সাধারণত খেয়াল রাখেন না যতক্ষণ আপনি খাবারটি উষ্ণ রাখেন এবং বেঁধে রাখেন ততক্ষণ আপনি গাড়ি বা খালি পা দিয়ে বাইক চালিয়ে তাদের খাবার পাঠান। সুতরাং বেনামে এবং সংজ্ঞায়িত পরিবহন ফাংশনগুলির সাথে এই আইডিয়মটিকে জাভাস্ক্রিপ্টে রূপান্তর করতে দিন।
নীচে আমরা আমাদের বিতরণ ওরকের উপায়টি সংজ্ঞায়িত করেছি আমরা একটি ফাংশনে একটি নাম সংজ্ঞায়িত করেছি:
// ES5
var food = function withBike(kebap, coke) {
return (kebap + coke);
};
যদি আমরা এই স্থানান্তরটি সম্পাদন করতে তীর / ল্যাম্বদা ফাংশন ব্যবহার করব:
// ES6
const food = (kebap, coke) => { return kebap + coke };
আপনি দেখতে পাচ্ছেন যে ক্লায়েন্টের জন্য কোনও পার্থক্য নেই এবং কীভাবে খাবার প্রেরণ করা যায় তা ভেবে সময় নষ্ট করবেন না। শুধু এটি প্রেরণ।
বিটিডব্লিউ, আমি কোকের সাথে কাবাবের প্রস্তাব দিচ্ছি না, এ কারণেই উপরের কোডগুলি আপনাকে ত্রুটি দেয়। আনন্দ কর.