`match` on integers, ranges, characters, strings and booleans
// `match` on integers, ranges, characters, strings and booleans.
import std.io.println;
def describe_number(value: int): string {
match value with
| 0 -> { return "zero"; }
| -1 | 1 -> { return "unit"; }
| range 2 to 9 -> { return "digit"; }
| _ -> { return "large"; };
}
def describe_char(value: char): string {
match value with
| range 'a' to 'z' -> { return "lowercase"; }
| range '0' to '9' -> { return "digit"; }
| 'س' | 'ص' -> { return "arabic letter"; }
| _ -> { return "other"; };
}
def describe_word(value: string): string {
match value with
| "yes" | "ok" -> { return "agree"; }
| "no" -> { return "refuse"; }
| _ -> { return "unknown"; };
}
def main(): int {
println(describe_number(0));
println(describe_number(-1));
println(describe_number(7));
println(describe_number(250));
println(describe_char('q'));
println(describe_char('5'));
println(describe_char('س'));
println(describe_word("ok"));
println(describe_word("maybe"));
return 0;
}// `طابق` على الأعداد والمدى والحروف والنصوص والقيم المنطقية.
استورد std.io.println;
عرف صف_العدد(القيمة: عدد): نص {
طابق القيمة مع
| 0 -> { أرجع "صفر"; }
| -1 | 1 -> { أرجع "واحد"; }
| مدى 2 إلى 9 -> { أرجع "رقم"; }
| _ -> { أرجع "كبير"; };
}
عرف صف_الحرف(القيمة: حرف): نص {
طابق القيمة مع
| مدى 'a' إلى 'z' -> { أرجع "حرف لاتيني صغير"; }
| مدى '0' إلى '9' -> { أرجع "رقم"; }
| 'س' | 'ص' -> { أرجع "حرف عربي"; }
| _ -> { أرجع "آخر"; };
}
عرف صف_الكلمة(القيمة: نص): نص {
طابق القيمة مع
| "نعم" | "حسنا" -> { أرجع "موافقة"; }
| "لا" -> { أرجع "رفض"; }
| _ -> { أرجع "غير معروف"; };
}
عرف الرئيسية(): عدد {
اطبع_سطر(صف_العدد(0));
اطبع_سطر(صف_العدد(-1));
اطبع_سطر(صف_العدد(7));
اطبع_سطر(صف_العدد(250));
اطبع_سطر(صف_الحرف('q'));
اطبع_سطر(صف_الحرف('5'));
اطبع_سطر(صف_الحرف('س'));
اطبع_سطر(صف_الكلمة("حسنا"));
اطبع_سطر(صف_الكلمة("ربما"));
أرجع 0;
}
Run it
With the interpreter, without compiling:
./build/sultanc run examples/en/control_flow/match_patterns.snOr compile it to an executable:
./build/sultanc examples/en/control_flow/match_patterns.sn -o build/example && ./build/example