33 typedef typename compositor_t::function function_t;
35 compositor_t compositor;
38 function_t(
"is_prime")
44 " case x <= 1 : return [false]; "
45 " case frac(x) != 0 : return [false]; "
46 " case x == 2 : return [true ]; "
49 " var prime_lut[81] := "
51 " 2, 3, 5, 7, 11, 13, 17, 19, 23, "
52 " 29, 31, 37, 41, 43, 47, 53, 59, 61, "
53 " 67, 71, 73, 79, 83, 89, 97, 101, 103, "
54 " 107, 109, 113, 127, 131, 137, 139, 149, 151, "
55 " 157, 163, 167, 173, 179, 181, 191, 193, 197, "
56 " 199, 211, 223, 227, 229, 233, 239, 241, 251, "
57 " 257, 263, 269, 271, 277, 281, 283, 293, 307, "
58 " 311, 313, 317, 331, 337, 347, 349, 353, 359, "
59 " 367, 373, 379, 383, 389, 397, 401, 409, 419 "
62 " var upper_bound := min(x - 1, trunc(sqrt(x)) + 1); "
64 " for (var i := 0; i < prime_lut[]; i += 1) "
66 " if (prime_lut[i] >= upper_bound) "
68 " else if ((x % prime_lut[i]) == 0) "
72 " var lower_bound := prime_lut[prime_lut[] - 1] + 2; "
74 " for (var i := lower_bound; i < upper_bound; i += 2) "
87 const std::string primes_via_naive_method_program =
88 " for (var i := 1; i < 10000; i += 1) "
92 " println(i, ' is prime'); "
98 symbol_table_t& symbol_table = compositor.symbol_table();
99 symbol_table.add_function(
"println",println);
101 expression_t expression;
102 expression.register_symbol_table(symbol_table);
105 parser.compile(primes_via_naive_method_program,expression);