I think this is an unnecessary use of macros here. Here is my version without
them.
type
mtcars = object
data : array[11,float64]
const cols : array[11,string] =
["mpg","cyl","disp","hp","drat","wt","qsec","vs","am","gear","carb"]
echo(@cols)
proc `-` (x:mtcars,y: mtcars): mtcars =
for i in low(result.data) .. high(result.data):
result.data[i] = x.data[i] - y.data[i]
proc sqr (x:mtcars): mtcars =
for i in low(result.data) .. high(result.data):
result.data[i] = x.data[i] * x.data[i]
proc difsqrsm (x:mtcars): float =
for i in low(x.data) .. high(x.data):
result = result + x.data[i]
proc distance (x:mtcars,y: mtcars): float =
var dif = x - y
dif = sqr(dif)
result = difsqrsm(dif)
unfortunately your csv reader depended on the layout with the named values and
my change broke that. I am sorry that I don't have a solution for this at the
moment. If you would have a good math library with vectors like those from e.g.
Matlab or Eigen (c++) then you could use vector arithmetic and wouldn't even
need to write a single loop. But I don't feel in position to recommend you a
specific one from the current Nim options, I guess you would have to evaluate
on your own. I changed your mtcars to contain float64 values only. I don't know
if the `int` type is essential to you algorithm, I ignorantly assumend it is
not (sorry if I might be wrong here).