let x = [
[[1.0, 2.0], [3.0, 4.0]],
[[5.0, 6.0], [7.0, 8.0]]
];let row_sums[..batch, i] = sum[j](x[..batch, i, j]);
let loss = sum[..batch, i](row_sums[..batch, i] * row_sums[..batch, i]);
let dloss_dx = @loss / @x;
Einlang also supports recurrence. You can write codes like
let alpha = 0.25;
let x[0] = 8.0;
let x[k in 1..6] = {
let prev = x[k - 1];
let loss = prev * prev;
let g = @loss / @prev;
prev - alpha * g
};