// Anonymous functions capture surrounding values and can be returned.
import std.io.println;
import std.text.number;
def make_adder(amount: int): fn(int): int {
return fn(value: int): int -> value + amount;
}
def main(): int {
let add_ten: fn(int): int = make_adder(10);
let add_two: fn(int): int = make_adder(2);
let curry: fn(int): fn(int): int = fn(a: int): fn(int): int -> fn(b: int): int -> a * b;
let triple: fn(int): int = curry(3);
println(int_to_text(add_ten(5)));
println(int_to_text(add_two(add_ten(30))));
println(int_to_text(triple(14)));
return 0;
}// الدوال المجهولة تلتقط القيم المحيطة بها ويمكن إرجاعها.
استورد std.io.println;
استورد std.text.number;
عرف أنشئ_جامعا(المقدار: عدد): دالة(عدد): عدد {
أرجع دالة(القيمة: عدد): عدد -> القيمة + المقدار;
}
عرف الرئيسية(): عدد {
دع أضف_عشرة: دالة(عدد): عدد = أنشئ_جامعا(10);
دع أضف_اثنين: دالة(عدد): عدد = أنشئ_جامعا(2);
دع المنحني: دالة(عدد): دالة(عدد): عدد = دالة(أ: عدد): دالة(عدد): عدد -> دالة(ب: عدد): عدد -> أ * ب;
دع ثلاثة_أضعاف: دالة(عدد): عدد = المنحني(3);
اطبع_سطر(عدد_إلى_نص(أضف_عشرة(5)));
اطبع_سطر(عدد_إلى_نص(أضف_اثنين(أضف_عشرة(30))));
اطبع_سطر(عدد_إلى_نص(ثلاثة_أضعاف(14)));
أرجع 0;
}
Run it
With the interpreter, without compiling:
./build/sultanc run examples/en/functions/closures.snOr compile it to an executable:
./build/sultanc examples/en/functions/closures.sn -o build/example && ./build/example