My C++ sensible prelude.
1/* ========================================================================
2 *
3 * Filename: main.cpp
4 * Description: Prelude testing file
5 * Author: Diego A. Estrada Rivera
6 * Version: 0.3.0
7 *
8 * ======================================================================== */
9#include "prelude.hpp"
10#include <format>
11#include <span>
12
13/* === examples === */
14fn ack_memo(U128 m, U128 n) noexcept -> U64
15{
16 if (m == 0)
17 return n + 1;
18 if (n == 0)
19 return memoize<U128, U128>(ack_memo)(m - 1, 1);
20 return memoize<U128, U128>(ack_memo)(
21 m - 1, memoize<U128, U128>(ack_memo)(m, n - 1));
22}
23
24fn ack(U64 m, U64 n) noexcept -> U64
25{
26 if (m == 0)
27 return n + 1;
28 if (n == 0)
29 return ack(m - 1, 1);
30 return ack(m - 1, ack(m, n - 1));
31}
32
33proc Main([[maybe_unused]] std::span<const std::string_view> args) noexcept
34 -> I32
35{
36 std::cout << ack_memo(4, 1) << std::endl;
37 std::cout << ack(4, 1) << std::endl;
38
39 return 0;
40}