ONLang/examples/factorial.onla
Artemy e35a1effd6 doc: add link to vscode extension
and rename .json5 files to .onla
2022-08-16 20:53:43 +03:00

78 lines
2.1 KiB
Text

[
{
fn: {
name: "fact",
args: ["n"],
body: [
{ let: { result: { var: "fact.n" } } },
{
loop: [
//using loop because recursion is not supported
{
if: {
condition: { comp: [{ var: "fact.n" }, ">", 1] },
body: [
{
assign: {
"fact.n": {
calc: [{ var: "fact.n" }, "-", 1],
},
},
},
{
assign: {
result: {
calc: [{ var: "result" }, "*", { var: "fact.n" }],
},
},
},
],
else: ["break"],
},
},
],
},
{ return: { var: "result" } },
],
},
},
{
fn: {
name: "_eq",
args: ["a", "b"],
body: [{ return: { comp: [{ var: "_eq.a" }, "==", { var: "_eq.b" }] } }],
},
},
["10! == 3 628 800: ", { _eq: [{ fact: [10] }, 3628800] }],
["11! == 39 916 800: ", { _eq: [{ fact: [11] }, 39916800] }],
["12! == 479 001 600: ", { _eq: [{ fact: [12] }, 479001600] }],
["13! == 6 227 020 800: ", { _eq: [{ fact: [13] }, 6227020800] }],
["14! == 87 178 291 200: ", { _eq: [{ fact: [14] }, 87178291200] }],
["15! == 1 307 674 368 000: ", { _eq: [{ fact: [15] }, 1307674368000] }],
["16! == 20 922 789 888 000: ", { _eq: [{ fact: [16] }, 20922789888000] }],
["17! == 355 687 428 096 000: ", { _eq: [{ fact: [17] }, 355687428096000] }],
[
"18! == 6 402 373 705 728 000: ",
{ _eq: [{ fact: [18] }, 6402373705728000] },
],
[
"19! == 121 645 100 408 832 000: ",
{ _eq: [{ fact: [19] }, 121645100408832000] },
],
[
"20! == 2 432 902 008 176 640 000: ",
{ _eq: [{ fact: [20] }, 2432902008176640000] },
],
// [
// "21! == 51 090 942 171 709 440 000: ",
// { _eq: [{ fact: [21] }, 51090942171709440000] },
// ], some json and yaml troubles with number `51090942171709440000`
{ calc: ["operand", "+", "operand"] }
]