rfi-p> exec opstyp relfun rfi-p> % Typed RelFun Operations on N-Tuples of Numeric Elements rfi-p> % ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ rfi-p> % Harold Boley 10-Oct-00 rfi-p> rfi-p> rfi-p> miser-level 0 rfi-p> destroy rfi-p> rfi-p> rfi-p> % Calls of Primitive Arithmetic Functions in Prefix Syntax rfi-p> rfi-p> +(3.5, 4.75) 8.25 rfi-p> rfi-p> -(3.5, 4.75) -1.25 rfi-p> rfi-p> *(3.5, 4.75) 16.625 rfi-p> rfi-p> /(3.5, 4.75) 0.7368421 rfi-p> rfi-p> pause() relfun rfi-p> bye true rfi-p> rfi-p> % Nested Binary and Ternary Calls of "+" and "*" Functions rfi-p> rfi-p> +( *(3,3), *(2,3,4), *(4,4) ) 49 rfi-p> rfi-p> % Variable (Single-)Assignments Followed by Nested Calls rfi-p> rfi-p> A .= 3, B .= 4 & +( *(A,A), *(2,A,B), *(B,B) ) 49 A = 3 B = 4 rfi-p> rfi-p> pause() relfun rfi-p> bye true rfi-p> rfi-p> % Integer-Typed Assignments Followed by Nested Calls rfi-p> rfi-p> A:$integerp .= 3, B:$integerp .= 4 & +( *(A,A), *(2,A,B), *(B,B) ) 49 A = 3 B = 4 rfi-p> rfi-p> A:$integerp .= 3.5, B:$integerp .= 4.75 & +( *(A,A), *(2,A,B), *(B,B) ) unknown rfi-p> rfi-p> pause() relfun rfi-p> bye true rfi-p> rfi-p> % Float-Typed Assignments Followed by Nested Calls rfi-p> rfi-p> A:$floatp .= 3, B:$floatp .= 4 & +( *(A,A), *(2,A,B), *(B,B) ) unknown rfi-p> rfi-p> A:$floatp .= 3.5, B:$floatp .= 4.75 & +( *(A,A), *(2,A,B), *(B,B) ) 68.0625 A = 3.5 B = 4.75 rfi-p> rfi-p> pause() relfun rfi-p> bye true rfi-p> rfi-p> % Number-Typed Assignments Followed by Nested Calls rfi-p> rfi-p> A:$numberp .= 3, B:$numberp .= 4 & +( *(A,A), *(2,A,B), *(B,B) ) 49 A = 3 B = 4 rfi-p> rfi-p> A:$numberp .= 3.5, B:$numberp .= 4.75 & +( *(A,A), *(2,A,B), *(B,B) ) 68.0625 A = 3.5 B = 4.75 rfi-p> rfi-p> pause() relfun rfi-p> bye true rfi-p> rfi-p> % The Built-in Number Subtaxonomy Over Types numberp, integerp, floatp rfi-p> % rfi-p> % numberp rfi-p> % / \ rfi-p> % / \ rfi-p> % integerp floatp rfi-p> rfi-p> pause() relfun rfi-p> bye true rfi-p> rfi-p> % A User-Defined Untyped Arithmetic Function ... rfi-p> rfi-p> % ... as "%"-Commented, "="-Infixed Mathematical Equation rfi-p> rfi-p> % ab2(a,b) = +(*(a,a), *(2,a,b), *(b,b)) rfi-p> rfi-p> % ... as "az"-Asserted, "!&"-Infixed RelFun Equation rfi-p> rfi-p> az ab2(A,B) !& +(*(A,A), *(2,A,B), *(B,B)). rfi-p> rfi-p> % Calling ab2 rfi-p> rfi-p> ab2(3,4) 49 rfi-p> rfi-p> ab2(3.5,4.75) 68.0625 rfi-p> rfi-p> pause() relfun rfi-p> bye true rfi-p> rfi-p> % A User-Defined Typed Arithmetic Function ... rfi-p> rfi-p> % ... as "%"-Commented, "="-Infixed Mathematical Equation rfi-p> rfi-p> % ab2t(a:number,b:number) = +(*(a,a), *(2,a,b), *(b,b)) rfi-p> rfi-p> % ... as "az"-Asserted, "!&"-Infixed RelFun Equation rfi-p> rfi-p> az ab2t(A:$numberp,B:$numberp) !& +(*(A,A), *(2,A,B), *(B,B)). rfi-p> rfi-p> % Calling ab2t rfi-p> rfi-p> ab2t(3,4) 49 rfi-p> rfi-p> ab2t(3.5,4.75) 68.0625 rfi-p> rfi-p> ab2t(three,four) unknown rfi-p> rfi-p> pause() % 0 relfun rfi-p> bye true rfi-p> rfi-p> rfi-p> % (Nested) N-Tuples Can be Constructed by tup Calls Over Element Calls rfi-p> rfi-p> tup(+(3.5, 4.75), -(3.5, 4.75), *(3.5, 4.75), /(3.5, 4.75)) % prefix all [8.25, -1.25, 16.625, 0.7368421] rfi-p> rfi-p> pause() relfun rfi-p> bye true rfi-p> rfi-p> tup(+(3.5, 4.75), tup(-(3.5, 4.75), *(3.5, 4.75), /(3.5, 4.75))) % nest [8.25, [-1.25, 16.625, 0.7368421]] rfi-p> rfi-p> pause() relfun rfi-p> bye true rfi-p> rfi-p> tup(+(3.5, 4.75) | tup(-(3.5, 4.75), *(3.5, 4.75), /(3.5, 4.75))) % flat [8.25, -1.25, 16.625, 0.7368421] rfi-p> rfi-p> pause() % 1 relfun rfi-p> bye true rfi-p> rfi-p> rfi-p> % Defining Scalar Product ... rfi-p> rfi-p> % ... as "%"-Commented, "="-Infixed Typed Mathematical Equations rfi-p> rfi-p> % smultup(r:number,[]) = [] for N=0 rfi-p> rfi-p> % smultup(r:number,[a1:number, a2:number, ..., aN:number]) = rfi-p> % [r*a1, r*a2, ..., r*aN] for N>0 rfi-p> rfi-p> % ... as "az"-Asserted, "!&"-Infixed Typed RelFun Equations rfi-p> rfi-p> az smultup(R:$numberp,[]) !& []. % recursive call rfi-p> az smultup(R:$numberp,[A1:$numberp | A2toN]) !& tup(*(R,A1) | smultup(R,A2toN)). rfi-p> rfi-p> % Calling Scalar Product rfi-p> rfi-p> smultup(3, []) [] rfi-p> smultup(3.5, [1.12, 4.75, 0.81]) [3.92, 16.625, 2.835] rfi-p> smultup(three, [1.12, 4.75, 0.81]) unknown rfi-p> smultup(3.5, [1.12, fourpointsevenfive, 0.81]) unknown rfi-p> rfi-p> pause() % 2 relfun rfi-p> bye true rfi-p> rfi-p> trace smultup % recurse down to the empty tuple [] rfi-p> smultup(-1, [3.14, -2.48, 7.02]) >2 smultup(-1, [3.14, -2.48, 7.02]) :- & >2 smultup(-1, [-2.48, 7.02]) :- & >2 smultup(-1, [7.02]) :- & >1 smultup(-1, []) :- & <1 smultup(-1, []) :-& [] <2 smultup(-1, [7.02]) :-& [-7.02] <2 smultup(-1, [-2.48, 7.02]) :-& [2.48, -7.02] <2 smultup(-1, [3.14, -2.48, 7.02]) :-& [-3.14, 2.48, -7.02] [-3.14, 2.48, -7.02] rfi-p> notrace smultup % and induce up to the result 3-tuple