Chris@10: module fvector; Chris@5: Chris@9: import java.util: Arrays; Chris@9: Chris@20: zeros n = Chris@20: new double[n]; Chris@20: Chris@36: consts m n = Chris@20: (a = zeros n; Chris@20: for [0..n-1] do i: Chris@36: a[i] := m; Chris@20: done; Chris@20: a); Chris@5: Chris@36: ones = consts 1.0; Chris@36: Chris@8: vector l is list? -> ~double[] = Chris@8: (arr = array(l); Chris@8: len = length arr; Chris@10: v = zeros len; Chris@20: for [0..len-1] do i: Chris@20: v[i] := arr[i]; Chris@20: done; Chris@8: v); Chris@8: Chris@20: list' a is ~double[] -> list = Chris@20: list a; Chris@5: Chris@20: length' = Chris@20: length . list'; Chris@5: Chris@51: floats a is ~double[] -> ~float[] = Chris@51: (len = length' a; Chris@51: f = new float[len]; Chris@51: for [0..len-1] do i: Chris@51: f[i] := a[i]; Chris@51: done; Chris@51: f); Chris@51: Chris@23: equal v1 v2 = Chris@23: list' v1 == list' v2; Chris@23: Chris@20: copyOf v is ~double[] -> ~double[] = Chris@20: Arrays#copyOf(v, list' v |> length); Chris@9: Chris@26: rangeOf v start len is ~double[] -> number -> number -> ~double[] = Chris@20: Arrays#copyOfRange(v, start, start + len); Chris@12: Chris@24: resizedTo n v is number -> ~double[] -> ~double[] = Chris@24: Arrays#copyOf(v, n); Chris@24: Chris@35: concat vv is list?<~double[]> -> ~double[] = Chris@35: (len = sum (map length' vv); Chris@35: vout = zeros len; Chris@35: var base = 0; Chris@35: for vv do v: Chris@35: vlen = length' v; Chris@35: for [0..vlen-1] do i: vout[base + i] := v[i] done; Chris@35: base := base + vlen; Chris@35: done; Chris@35: vout); Chris@26: Chris@5: { Chris@36: zeros, consts, ones, Chris@20: vector, Chris@20: length = length', Chris@20: list = list', Chris@51: floats, Chris@23: equal, Chris@26: copyOf, rangeOf, resizedTo, Chris@27: concat, Chris@5: } Chris@5: