تخطَّ إلى المحتوى

أمثلة عملية

مجموعة شاملة من الأمثلة العملية لتطبيقات متنوعة في كنوز.

دالة جمع(أ: صحيح, ب: صحيح) -> صحيح {
أرجع أ + ب;
}
دالة طرح(أ: صحيح, ب: صحيح) -> صحيح {
أرجع أ - ب;
}
دالة ضرب(أ: صحيح, ب: صحيح) -> صحيح {
أرجع أ * ب;
}
دالة قسمة(أ: صحيح, ب: صحيح) -> نتيجة<صحيح, نص> {
إذا ب == 0 {
أرجع فشل("لا يمكن القسمة على صفر");
}
أرجع موافق(أ / ب);
}
// الاستخدام
اطبع_سطر!("5 + 3 = {}", جمع(5, 3));
اطبع_سطر!("5 - 3 = {}", طرح(5, 3));
اطبع_سطر!("5 × 3 = {}", ضرب(5, 3));
طابق قسمة(10, 2) {
موافق(ن) => { اطبع_سطر!("10 ÷ 2 = {}", ن); }
فشل(خ) => { اطبع(خ); }
}
دالة سلزيوس_لفهرنهايت(س: عشري) -> عشري {
أرجع (س * 9.0 / 5.0) + 32.0;
}
دالة فهرنهايت_لسلزيوس(ف: عشري) -> عشري {
أرجع (ف - 32.0) * 5.0 / 9.0;
}
// الاستخدام
دع درجة_س = 25.0;
دع درجة_ف = سلزيوس_لفهرنهايت(درجة_س);
اطبع_سطر!("{}°C = {}°F", درجة_س, درجة_ف);
دع درجة_ف2 = 77.0;
دع درجة_س2 = فهرنهايت_لسلزيوس(درجة_ف2);
اطبع_سطر!("{}°F = {}°C", درجة_ف2, درجة_س2);
دالة ولد_كلمة_مرور(طول: صحيح) -> نص {
دع حروف = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%";
دع متغير نتيجة = "";
لكل _ في 0..طول {
دع فهرس = عشوائي(0, 66);
// إضافة حرف عشوائي
}
أرجع نتيجة;
}
هيكل عقدة<ن> {
قيمة: ن,
التالي: اختياري<صندوق<عقدة<ن>>>
}
هيكل قائمة_مرتبطة<ن> {
رأس: اختياري<صندوق<عقدة<ن>>>,
طول: صحيح
}
نفذ<ن> قائمة_مرتبطة<ن> {
دالة جديد() -> ذاتي {
أرجع ذاتي {
رأس: عدم,
طول: 0
};
}
دالة أضف(&متغير ذاتي, قيمة: ن) {
دع عقدة_جديدة = صندوق(عقدة {
قيمة: قيمة,
التالي: ذاتي.رأس
});
ذاتي.رأس = بعض(عقدة_جديدة);
ذاتي.طول += 1;
}
دالة طول(&ذاتي) -> صحيح {
أرجع ذاتي.طول;
}
}
هيكل مكدس<ن> {
عناصر: متجه<ن>
}
نفذ<ن> مكدس<ن> {
دالة جديد() -> ذاتي {
أرجع ذاتي {
عناصر: متجه[]
};
}
دالة ادفع(&متغير ذاتي, قيمة: ن) {
ذاتي.عناصر.ادفع(قيمة);
}
دالة انزع(&متغير ذاتي) -> اختياري<ن> {
إذا ذاتي.فارغ() {
أرجع عدم;
}
أرجع بعض(ذاتي.عناصر.انزع());
}
دالة قمة(&ذاتي) -> اختياري<&ن> {
إذا ذاتي.فارغ() {
أرجع عدم;
}
دع فهرس = ذاتي.عناصر.طول() - 1;
أرجع بعض(&ذاتي.عناصر[فهرس]);
}
دالة فارغ(&ذاتي) -> منطقي {
أرجع ذاتي.عناصر.طول() == 0;
}
}
// الاستخدام
دع متغير م: مكدس<صحيح> = مكدس::جديد();
م.ادفع(10);
م.ادفع(20);
م.ادفع(30);
طابق م.انزع() {
بعض(ق) => { اطبع_صحيح(ق); } // 30
عدم => { اطبع("فارغ"); }
}
هيكل طابور<ن> {
عناصر: متجه<ن>
}
نفذ<ن> طابور<ن> {
دالة جديد() -> ذاتي {
أرجع ذاتي {
عناصر: متجه[]
};
}
دالة أدخل(&متغير ذاتي, قيمة: ن) {
ذاتي.عناصر.ادفع(قيمة);
}
دالة أخرج(&متغير ذاتي) -> اختياري<ن> {
إذا ذاتي.فارغ() {
أرجع عدم;
}
أرجع بعض(ذاتي.عناصر.أزل(0));
}
دالة فارغ(&ذاتي) -> منطقي {
أرجع ذاتي.عناصر.طول() == 0;
}
}
هيكل طالب {
رقم: صحيح,
اسم: نص,
درجات: متجه<صحيح>
}
نفذ طالب {
دالة جديد(رقم: صحيح, اسم: نص) -> ذاتي {
أرجع ذاتي {
رقم: رقم,
اسم: اسم,
درجات: متجه[]
};
}
دالة أضف_درجة(&متغير ذاتي, درجة: صحيح) {
ذاتي.درجات.ادفع(درجة);
}
دالة المعدل(&ذاتي) -> عشري {
إذا ذاتي.درجات.طول() == 0 {
أرجع 0.0;
}
دع متغير مجموع = 0;
لكل د في ذاتي.درجات {
مجموع += د;
}
أرجع (مجموع كـ عشري) / (ذاتي.درجات.طول() كـ عشري);
}
دالة التقدير(&ذاتي) -> نص {
دع م = ذاتي.المعدل();
إذا م >= 90.0 {
أرجع "ممتاز";
} وإلا إذا م >= 80.0 {
أرجع "جيد جداً";
} وإلا إذا م >= 70.0 {
أرجع "جيد";
} وإلا إذا م >= 60.0 {
أرجع "مقبول";
} وإلا {
أرجع "راسب";
}
}
}
هيكل نظام_طلاب {
طلاب: قاموس<صحيح, طالب>
}
نفذ نظام_طلاب {
دالة جديد() -> ذاتي {
أرجع ذاتي {
طلاب: قاموس[]
};
}
دالة أضف_طالب(&متغير ذاتي, طالب: طالب) {
ذاتي.طلاب.أضف(طالب.رقم, طالب);
}
دالة ابحث(&ذاتي, رقم: صحيح) -> اختياري<&طالب> {
أرجع ذاتي.طلاب.اقرأ(رقم);
}
دالة تقرير(&ذاتي) {
اطبع_سطر!("=== تقرير الطلاب ===");
لكل (رقم, طالب) في ذاتي.طلاب {
اطبع_سطر!("{} - {} - المعدل: {} - التقدير: {}",
رقم, طالب.اسم, طالب.المعدل(), طالب.التقدير());
}
}
}
تعداد حالة_كتاب {
متاح,
معار(نص), // اسم المستعير
محجوز
}
هيكل كتاب {
رقم_isbn: نص,
عنوان: نص,
مؤلف: نص,
حالة: حالة_كتاب
}
هيكل مكتبة {
كتب: قاموس<نص, كتاب>
}
نفذ مكتبة {
دالة جديد() -> ذاتي {
أرجع ذاتي {
كتب: قاموس[]
};
}
دالة أضف_كتاب(&متغير ذاتي, كتاب: كتاب) {
ذاتي.كتب.أضف(كتاب.رقم_isbn, كتاب);
}
دالة أعر(&متغير ذاتي, isbn: نص, مستعير: نص) -> نتيجة<(), نص> {
طابق ذاتي.كتب.اقرأ_متغير(isbn) {
بعض(متغير كتاب) => {
طابق كتاب.حالة {
حالة_كتاب::متاح => {
كتاب.حالة = حالة_كتاب::معار(مستعير);
أرجع موافق(());
}
_ => {
أرجع فشل("الكتاب غير متاح");
}
}
}
عدم => {
أرجع فشل("الكتاب غير موجود");
}
}
}
دالة أرجع_كتاب(&متغير ذاتي, isbn: نص) -> نتيجة<(), نص> {
طابق ذاتي.كتب.اقرأ_متغير(isbn) {
بعض(متغير كتاب) => {
كتاب.حالة = حالة_كتاب::متاح;
أرجع موافق(());
}
عدم => {
أرجع فشل("الكتاب غير موجود");
}
}
}
دالة ابحث_بالعنوان(&ذاتي, عنوان: نص) -> متجه<&كتاب> {
دع متغير نتائج: متجه<&كتاب> = متجه[];
لكل (_, كتاب) في ذاتي.كتب {
إذا كتاب.عنوان.يحتوي(عنوان) {
نتائج.ادفع(كتاب);
}
}
أرجع نتائج;
}
}
هيكل مهمة {
اسم: نص,
وقت_البدء: ص64,
وقت_الانتهاء: اختياري<ص64>
}
نفذ مهمة {
دالة جديد(اسم: نص) -> ذاتي {
أرجع ذاتي {
اسم: اسم,
وقت_البدء: وقت(),
وقت_الانتهاء: عدم
};
}
دالة أنهِ(&متغير ذاتي) {
ذاتي.وقت_الانتهاء = بعض(وقت());
}
دالة المدة(&ذاتي) -> ص64 {
طابق ذاتي.وقت_الانتهاء {
بعض(انتهاء) => { أرجع انتهاء - ذاتي.وقت_البدء; }
عدم => { أرجع وقت() - ذاتي.وقت_البدء; }
}
}
}
// قياس أداء دالة
دالة قس_أداء<ف>(اسم: نص, دالة: ف)
حيث ف: دالة()
{
دع بداية = وقت();
دالة();
دع نهاية = وقت();
اطبع_سطر!("{}: {} مللي ثانية", اسم, نهاية - بداية);
}
دالة طلب_GET(مضيف: نص, منفذ: صحيح, مسار: نص) -> نتيجة<نص, نص> {
جرب {
دع متغير مقبس = أنشئ_مقبس();
اتصل_مقبس(مقبس, مضيف, منفذ);
دع طلب = "GET " + مسار + " HTTP/1.1\r\n"
+ "Host: " + مضيف + "\r\n"
+ "Connection: close\r\n\r\n";
أرسل_مقبس(مقبس, طلب);
دع رد = استقبل_مقبس(مقبس);
أغلق_مقبس(مقبس);
أرجع موافق(رد);
} التقط خ {
أرجع فشل("فشل الطلب");
}
}
دالة خادم_ملفات(منفذ: صحيح, مجلد: نص) {
دع متغير مقبس = أنشئ_مقبس();
اربط_مقبس(مقبس, "0.0.0.0", منفذ);
استمع_مقبس(مقبس);
اطبع_سطر!("خادم الملفات يعمل على المنفذ {}", منفذ);
كرر {
دع متغير عميل = اقبل_اتصال(مقبس);
أطلق || {
دع طلب = استقبل_مقبس(عميل);
// تحليل الطلب واستخراج المسار
// قراءة الملف وإرسال المحتوى
أغلق_مقبس(عميل);
};
}
}

الخيوط الخضراء (M:N Scheduler)

Section titled “الخيوط الخضراء (M:N Scheduler)”
دالة عمل(رقم: صحيح) -> صحيح {
اطبع("خيط أخضر بدأ:", رقم)
دع نتيجة = رقم * 10;
اطبع("خيط أخضر انتهى:", رقم)
أرجع نتيجة;
}
دالة رئيسية() {
اطبع("=== اختبار الخيوط الخضراء (M:N) ===")
اطبع("إطلاق 5 خيوط خضراء...")
دع م1 = أطلق(عمل(1));
دع م2 = أطلق(عمل(2));
دع م3 = أطلق(عمل(3));
دع م4 = أطلق(عمل(4));
دع م5 = أطلق(عمل(5));
دع ن1 = انتظر(م1);
دع ن2 = انتظر(م2);
دع ن3 = انتظر(م3);
دع ن4 = انتظر(م4);
دع ن5 = انتظر(م5);
اطبع("جميع الخيوط الخضراء انتهت!")
}

الأنواع المرتبطة المعممة (GATs)

Section titled “الأنواع المرتبطة المعممة (GATs)”
سمة حاوية {
نوع عنصر<ط>;
دالة أول(&ذاتي) -> صحيح;
}
هيكل صندوق_أرقام {
قيمة: صحيح,
}
نفذ حاوية لـ صندوق_أرقام {
نوع عنصر<ط> = صحيح;
دالة أول(&ذاتي) -> صحيح {
أرجع 42;
}
}
دالة رئيسية() {
دع ص = صندوق_أرقام { قيمة: 42 };
اطبع("صندوق_أرقام.أول() =", ص.أول());
}
دالة احسب_متوازي(بيانات: متجه<صحيح>, عدد_الخيوط: صحيح) -> صحيح {
دع (مرسل, مستقبل) = قناة();
دع حجم_القطعة = بيانات.طول() / عدد_الخيوط;
// إطلاق الخيوط
لكل ت في 0..عدد_الخيوط {
دع بداية = ت * حجم_القطعة;
دع نهاية = إذا ت == عدد_الخيوط - 1 {
بيانات.طول()
} وإلا {
(ت + 1) * حجم_القطعة
};
دع مرسل_نسخة = مرسل.انسخ();
أطلق || {
دع متغير مجموع = 0;
لكل ف في بداية..نهاية {
مجموع += بيانات[ف];
}
مرسل_نسخة.أرسل(مجموع);
};
}
// جمع النتائج
دع متغير إجمالي = 0;
لكل _ في 0..عدد_الخيوط {
إجمالي += مستقبل.استقبل();
}
أرجع إجمالي;
}
دالة منتج_مستهلك() {
دع (مرسل, مستقبل) = قناة();
// المنتج
دع منتج = أطلق || {
لكل ت في 1..=10 {
اطبع_سطر!("إنتاج: {}", ت);
مرسل.أرسل(ت);
نم(100);
}
مرسل.أغلق();
};
// المستهلك
دع مستهلك = أطلق || {
طالما صح {
طابق مستقبل.استقبل() {
بعض(قيمة) => {
اطبع_سطر!("استهلاك: {}", قيمة);
}
عدم => {
أوقف;
}
}
}
};
منتج.انضم();
مستهلك.انضم();
}