السلطان
  1. الرئيسية
  2. الأمثلة
  3. البيانات

نوع جبري تحمل بدائله سجلات تُفكك داخل `طابق`

data/shapes.sn
// نوع جبري تحمل بدائله سجلات تُفكك داخل `طابق`.
استورد std.io.println;
استورد std.text.number;

نوع نقطة = { س: عدد, ص: عدد };
نوع شكل =
    | مربع بنوع عدد
    | مستطيل بنوع نقطة
    | مثلث بنوع نقطة
;

عرف المساحة(الشكل: شكل): عدد {
    طابق الشكل مع
    | شكل.مربع(الضلع) -> { أرجع الضلع * الضلع; }
    | شكل.مستطيل({ س: العرض_الجزئي, ص: الارتفاع_الجزئي }) -> { أرجع العرض_الجزئي * الارتفاع_الجزئي; }
    | شكل.مثلث({ س: القاعدة, ص: الارتفاع_الجزئي }) -> { أرجع (القاعدة * الارتفاع_الجزئي) / 2; };
}

عرف الرئيسية(): عدد {
    دع الأضلاع: نقطة = { س: 4, ص: 5 };
    دع الزاوية: نقطة = { س: 6, ص: 3 };
    اطبع_سطر(عدد_إلى_نص(المساحة(شكل.مربع(3))));
    اطبع_سطر(عدد_إلى_نص(المساحة(شكل.مستطيل(الأضلاع))));
    اطبع_سطر(عدد_إلى_نص(المساحة(شكل.مثلث(الزاوية))));
    أرجع 0;
}

التشغيل

بالمفسر، دون ترجمة:

./build/sultanc run examples/ar/data/shapes.sn

أو ترجمه إلى ملف تنفيذي:

./build/sultanc examples/ar/data/shapes.sn -o build/example && ./build/example

المصدر على GitHub   كل الأمثلة