1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
// fib(0) to fib(10), each line a tuple: some characters, the counter, and the call
// ::declval<T>() pulls the value back out of a call result so it can go into ::sum
::define<
::name<'f', 'i', 'b'>,
::parameters<::name<'n'>>,
::sequence<
::enable_if_t<
::less<::value_of<::name<'n'>>, ::difference<'C', 'A'>>::value,
::sequence<::return<::decltype(::value_of<::name<'n'>>)>::commit>
>::commit,
::return<
::decltype(
::sum<
::declval<
::invoke_result_t<
::name<'f', 'i', 'b'>,
::arguments<
::decltype(::sum<::value_of<::name<'n'>>, ::difference<'A', 'B'>>)
>
>
>(),
::declval<
::invoke_result_t<
::name<'f', 'i', 'b'>,
::arguments<
::decltype(::sum<::value_of<::name<'n'>>, ::difference<'A', 'C'>>)
>
>
>()
>
)
>::commit
>
>::commit;
::declare<::name<'i'>, ::decltype(::difference<'A', 'A'>)>::commit;
::repeat<
::difference<'L', 'A'>,
::sequence<
::emit<
::tuple<
::integral_constant<::char, ::difference<'f', '\0'>>,
::integral_constant<::char, ::difference<'i', '\0'>>,
::integral_constant<::char, ::difference<'b', '\0'>>,
::integral_constant<::char, ::difference<'(', '\0'>>,
::decltype(::value_of<::name<'i'>>),
::integral_constant<::char, ::difference<')', '\0'>>,
::integral_constant<::char, ::difference<' ', '\0'>>,
::integral_constant<::char, ::difference<'-', '\0'>>,
::integral_constant<::char, ::difference<'>', '\0'>>,
::integral_constant<::char, ::difference<' ', '\0'>>,
::invoke_result_t<
::name<'f', 'i', 'b'>,
::arguments<::decltype(::value_of<::name<'i'>>)>
>
>
>::commit,
::declare<
::name<'n', 'e', 'x', 't'>,
::decltype(::sum<::value_of<::name<'i'>>, ::difference<'B', 'A'>>)
>::commit,
::undeclare<::name<'i'>>::commit,
::declare<::name<'i'>, ::decltype(::value_of<::name<'n', 'e', 'x', 't'>>)>::commit,
::undeclare<::name<'n', 'e', 'x', 't'>>::commit
>
>::commit;
|