@@ -24,87 +24,11 @@ namespace meevax
24
24
{
25
25
inline namespace kernel
26
26
{
27
- template <auto N, typename T>
28
- auto get (T&& x) -> decltype(auto )
29
- {
30
- if constexpr (std::is_same_v<std::decay_t <T>, pair::iterator>)
31
- {
32
- return std::get<N>(*x.current );
33
- }
34
- else if constexpr (std::is_same_v<std::decay_t <T>, object>)
35
- {
36
- return std::get<N>(x.template as <pair>());
37
- }
38
- else
39
- {
40
- return std::get<N>(x);
41
- }
42
- }
43
-
44
- inline auto car = [](auto && x) -> decltype (auto )
45
- {
46
- return get<0 >(std::forward<decltype (x)>(x));
47
- };
48
-
49
- inline auto cdr = [](auto && x) -> decltype (auto )
50
- {
51
- return get<1 >(std::forward<decltype (x)>(x));
52
- };
53
-
54
- inline constexpr auto caar = compose(car, car);
55
- inline constexpr auto cadr = compose(car, cdr);
56
- inline constexpr auto cdar = compose(cdr, car);
57
- inline constexpr auto cddr = compose(cdr, cdr);
58
-
59
- inline constexpr auto caaar = compose(car, caar);
60
- inline constexpr auto caadr = compose(car, cadr);
61
- inline constexpr auto cadar = compose(car, cdar);
62
- inline constexpr auto caddr = compose(car, cddr);
63
- inline constexpr auto cdaar = compose(cdr, caar);
64
- inline constexpr auto cdadr = compose(cdr, cadr);
65
- inline constexpr auto cddar = compose(cdr, cdar);
66
- inline constexpr auto cdddr = compose(cdr, cddr);
67
-
68
- inline constexpr auto caaaar = compose(car, caaar);
69
- inline constexpr auto caaadr = compose(car, caadr);
70
- inline constexpr auto caadar = compose(car, cadar);
71
- inline constexpr auto caaddr = compose(car, caddr);
72
- inline constexpr auto cadaar = compose(car, cdaar);
73
- inline constexpr auto cadadr = compose(car, cdadr);
74
- inline constexpr auto caddar = compose(car, cddar);
75
- inline constexpr auto cadddr = compose(car, cdddr);
76
- inline constexpr auto cdaaar = compose(cdr, caaar);
77
- inline constexpr auto cdaadr = compose(cdr, caadr);
78
- inline constexpr auto cdadar = compose(cdr, cadar);
79
- inline constexpr auto cdaddr = compose(cdr, caddr);
80
- inline constexpr auto cddaar = compose(cdr, cdaar);
81
- inline constexpr auto cddadr = compose(cdr, cdadr);
82
- inline constexpr auto cdddar = compose(cdr, cddar);
83
- inline constexpr auto cddddr = compose(cdr, cdddr);
84
-
85
- template <typename T, typename U, REQUIRES(std::is_convertible<T, object>,
86
- std::is_convertible<U, object>)>
87
- auto operator |(T&& x, U&& y) -> decltype (auto )
88
- {
89
- return make<pair>(std::forward<decltype (x)>(x), std::forward<decltype (y)>(y));
90
- }
91
-
92
- inline auto cons = [](auto &&... xs) constexpr
93
- {
94
- return (std::forward<decltype (xs)>(xs) | ...);
95
- };
96
-
97
27
inline auto list = [](auto &&... xs) constexpr
98
28
{
99
29
return (std::forward<decltype (xs)>(xs) | ... | unit);
100
30
};
101
31
102
- inline auto xcons = [](auto && x, auto && y) constexpr
103
- {
104
- return cons (std::forward<decltype (y)>(y),
105
- std::forward<decltype (x)>(x));
106
- };
107
-
108
32
auto make_list (std::size_t , object const & = unit) -> object;
109
33
110
34
auto iota (std::size_t , object const & = e0 , object const & = e1 ) -> object;
0 commit comments