initial commit
This commit is contained in:
72
vector.nim
Normal file
72
vector.nim
Normal file
@@ -0,0 +1,72 @@
|
||||
from oomacro import class
|
||||
from utils import `...`
|
||||
from sequtils import newSeqWith
|
||||
from math import sqrt
|
||||
|
||||
type Vector*[T] = seq[T]
|
||||
|
||||
#SVector*[S : static[int], T] = array[1..S,T]
|
||||
|
||||
proc newVector*[T](size : int, init: T=0) : Vector[T] =
|
||||
result = newSeq[T](size)
|
||||
for i in 0...len(result):
|
||||
result[i] = init
|
||||
|
||||
proc `+`*[T](v1 : Vector[T], v2:Vector[T]) : Vector[T] =
|
||||
result = newVector[T](len(v1))
|
||||
for i in 0...len(v1):
|
||||
result[i] = v1[i] + v2[i]
|
||||
|
||||
proc `-`*[T](v1 : Vector[T], v2:Vector[T]) : Vector[T] =
|
||||
result = newVector[T](len(v1))
|
||||
for i in 0...len(v1):
|
||||
result[i] = v1[i] - v2[i]
|
||||
|
||||
proc `*`*[T](v1 : Vector[T], v2:Vector[T]) : T =
|
||||
result = 0
|
||||
for i in 0...len(v1):
|
||||
result += v1[i] * v2[i]
|
||||
|
||||
proc `+=`*[T](v1 : var Vector[T], v2 : Vector[T]) =
|
||||
for i in 0...len(v1):
|
||||
v1[i] += v2[i]
|
||||
|
||||
proc `-=`*[T](v1 : var Vector[T], v2 : Vector[T]) =
|
||||
for i in 0...len(v1):
|
||||
v1[i] -= v2[i]
|
||||
|
||||
proc `+=`*[T](v : var Vector[T], value : T) = v.add(value)
|
||||
|
||||
proc createVector*[T](elems : varargs[T]) : Vector[T] =
|
||||
result = newSeq[T]()
|
||||
for elem in items(elems):
|
||||
result += elem
|
||||
|
||||
proc norm*[T](v : Vector[T]) : T =
|
||||
for value in v:
|
||||
result += v * v
|
||||
|
||||
proc abs*[T](v : Vector[T]) : T =
|
||||
return math.sqrt(v.norm)
|
||||
|
||||
# let vec = createVector(10,1)
|
||||
|
||||
# echo $vec
|
||||
# var vec2 = newVector[int](10, 1)
|
||||
|
||||
# echo vec2
|
||||
|
||||
# type Foo[T, S] = object of RootObj
|
||||
# data : S
|
||||
|
||||
# proc `+`[T,S](v1 : Foo[T,S], v2 : Foo[T,S]) : Foo[T,S] =
|
||||
# result = Foo[T,S]()
|
||||
# for i in range(len(v1.data)):
|
||||
# result[i] = v1.data[i] + v2.data[i]
|
||||
|
||||
|
||||
# type Bar[T] = Foo[T, array[3,T]]
|
||||
|
||||
# var bar = Bar[int]()
|
||||
# bar.data[1] = 4
|
||||
# bar.data[1] = 4
|
Reference in New Issue
Block a user