33 lines
767 B
Text
33 lines
767 B
Text
#!/usr/bin/a68g --script #
|
|
# -*- coding: utf-8 -*- #
|
|
|
|
# Define some generic vector initialisation and printing operations #
|
|
|
|
COMMENT REQUIRES:
|
|
MODE SCAL = ~ # a scalar, eg REAL #;
|
|
FORMAT scal fmt := ~;
|
|
END COMMENT
|
|
|
|
INT vec lwb := 1, vec upb := 0;
|
|
MODE VECNEW = [vec lwb:vec upb]SCAL; MODE VEC = REF VECNEW;
|
|
FORMAT vec fmt := $"("n(vec upb-vec lwb)(f(scal fmt)", ")f(scal fmt)")"$;
|
|
|
|
PRIO INIT = 1;
|
|
|
|
OP INIT = (VEC self, SCAL scal)VEC: (
|
|
FOR col FROM LWB self TO UPB self DO self[col]:= scal OD;
|
|
self
|
|
);
|
|
|
|
# ZEROINIT: defines the additive identity #
|
|
OP ZEROINIT = (VEC self)VEC:
|
|
self INIT SCAL(0);
|
|
|
|
OP REPR = (VEC self)STRING: (
|
|
FILE f; STRING s; associate(f,s);
|
|
vec lwb := LWB self; vec upb := UPB self;
|
|
putf(f, (vec fmt, self)); close(f);
|
|
s
|
|
);
|
|
|
|
SKIP
|