12template<std::
size_t N,
typename T =
double>
15 static constexpr std::size_t
arity_v = N + 1;
18 constexpr Var() noexcept = default;
20 [[nodiscard]] constexpr T
eval(std::span<T const> args) const noexcept {
21 assert(args.size() > N &&
"Not enough arguments for variable");
25 [[nodiscard]] [[deprecated(
"use eval() instead")]]
26 constexpr T
evaluate(std::span<T const> args)
const noexcept {
31 template<std::
size_t Dim>
32 [[nodiscard]]
constexpr auto derivative() const noexcept {
33 if constexpr (Dim == N) {
41 return "x" + std::to_string(N);
45template<
typename T =
double>
48template<
typename T =
double>
51template<
typename T =
double>
54template<std::
size_t N,
typename T =
double>
Expression layer for composable calculus.
constexpr Var< N, T > arg
static constexpr std::size_t arity_v
constexpr auto derivative() const noexcept
constexpr T evaluate(std::span< T const > args) const noexcept
std::string to_string() const
static constexpr std::size_t index_v
constexpr T eval(std::span< T const > args) const noexcept
constexpr Var() noexcept=default