INT n = 4, k = 2; MODE R = REAL; MODE V = [n]REAL; OP - = (V a, b)V: (V r; FOR j TO n DO r[j] := a[j] - b[j] OD; r); OP * = (REAL a, V v)V: (V r; FOR j TO n DO r[j] := a*v[j] OD; r); OP + = (V a, b)V: (V r; FOR j TO n DO r[j] := a[j] + b[j] OD; r); OP +:= = (REF V a, V b)REF V: (a := a+b; a); PROC ip = (V a, b)R: (R s := 0; FOR j TO n DO s +:= a[j]*b[j] OD; s); PROC prj = ([]V r, V v)V: (V s; FOR j TO n DO s[j]:=0 OD; FOR j TO UPB r DO s +:= ip(v, r[j])*r[j] OD; s); PROC length = (V v)R: sqrt(ip(v, v)); PROC gs = ([]V v)[]V: (INT kl = UPB v; [kl]V s; FOR j TO kl DO V p = v[j] - prj(s[:j-1], v[j]); s[j] := (1/length(p))*p OD; s); ([][]R a = gs(((1,0,0,0), (0,1,0,0))); [][]R b = gs(((1,0,.1,0), (0,1,0,.2))); PROC dp = (V v)V: prj(a, prj(b, v)); print((dp(a[1]), newline, dp(a[2])))); ([][]R a = gs(((2,3,5,6), (4,-2,3,7))); [][]R b = gs(((2,1,4,3), (3,3,5,4))); PROC dp = (V v)V: prj(a, prj(b, v)); print((dp(a[1]), newline, dp(a[2])))); SKIP