Hier ist die Implementierung in Haskell (und ich finde die Implementierung extrem schön):
Code: Select all
pascal 0 = [1]
pascal n = zipWith (+) (0:pascal (n-1)) (pascal (n-1) ++ [0])
Das Folgende ist mein Versuch, es in C++23 zu implementieren:
Code: Select all
#include
#include
#include
namespace stdv = std::views;
std::vector triangle_row(int n);
auto add = [](auto a, auto b) {return a + b; };
std::vector triangle_row(int n) {
if (n == 0) {
return {1};
}
else {
auto left = (triangle_row(n-1)).insert(triangle_row(n-1).begin(), 0);
auto right = (triangle_row(n-1)).insert(triangle_row(n-1).end(),0);
auto tri_row = stdv::zip_transform(add, left, right);
return tri_row;
}
}
Code: Select all
: In function 'std::vector triangle_row(int)':
:17:41: error: no match for call to '(const std::ranges::views::_ZipTransform) (&, __gnu_cxx::__normal_iterator&, __gnu_cxx::__normal_iterator&)'
17 | auto tri_row = stdv::zip_transform(add, left, right);
| ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
...