Program (named) blocks

Glee Programs are named blocks. That means they are simply blocks (i.e. chunks of coded surrounded by braces {}) which have been given names so they can be found in a namespace and reused. Additionally, they are contrasted from User Defined Operators which are also named blocks. The difference is that Programs take a namespace as a left argument. Operator Blocks have their left and right arguments delivered into a namespace with the names "L__" and "R__". There are many many subtle issues. I think the only way to deal with the subtleties is to thoroughly describe how the interpreter works with these blocks. With that knowledge you can deduce behavior characteristics not specifically given by examples. This will take some iterating on my part as users make their confusions known to me.

Commentary Code Result
Commentary #ns => @;.05=>i;8=>n;
'cmpd'#pgm
  {'i='i'; n='n'; f='(1+i^n)';'};
"<1>============" $;
cmpd:stringv $;
"<2>============" $;
cmpd $;
"<3>============" $;
.1[.i]cmpd $;
"<4>============" $;
cmpd $;
"<5>============" $;
4=>n; cmpd $;
<1>============
Pgm[R2C1:K]
Code:
{'i='i'; n='n'; f='(1+i^n)';'}
<2>============
i=0.05; n=8; f=1.47746;
<3>============
i=0.1; n=8; f=2.14359;
<4>============
i=0.1; n=8; f=2.14359;
<5>============
i=0.1; n=4; f=1.4641;
Commentary #ns => @;
'cmpd'#pgm{
  10=>n; .07=>i; #args;
 'i='i'; n='n'; f='(1+i^n)';'};
cmpd:stringv $;
"<1>============" $;
cmpd $;
"<2>============" $;
.3[.i]cmpd $;
"<3>============" $;
5[.n]cmpd $;
Pgm[R2C1:K]
Code:
{10=>n; .07=>i; #args; 'i='i'; n='n'; f='(1+i^n)';'}
<1>============
i=0.07; n=10; f=1.96715;
<2>============
i=0.3; n=10; f=13.7858;
<3>============
i=0.07; n=5; f=1.40255;
Commentary #ns => @;
'cmpd'#pgm{
  #IX{'Running IX:'$; .05=>i; 8=>n; #args;};
  'i='i'; n='n'; f='(1+i^n)';'};
cmpd:stringv $;
"<1>============" $;
cmpd $;
"<2>============" $;
.3[.i]cmpd $;
"<3>============" $;
5[.n]cmpd $;
Pgm[R2C1:K]
Code:
{#IX{'Running IX:'$; .05=>i; 8=>n; #args;};
  'i='i'; n='n'; f='(1+i^n)';'}
<1>============
Running IX:
i=0.05; n=8; f=1.47746;
<2>============
i=0.3; n=8; f=8.15731;
<3>============
i=0.3; n=5; f=3.71293;
Commentary #ns => @;
'cmpd'#pgm{
  #IX{'Running IX:'$; .05=>i; 8=>n; #args; :<-};
  'i='i'; n='n'; f='(1+i^n)';'};
cmpd:stringv $;
"<1>============" $;
cmpd $;
"<2>============" $;
.3[.i]cmpd $;
"<3>============" $;
5[.n]cmpd $;
Pgm[R2C1:K]
Code:
{
  #IX{'Running IX:'$;.05=>i;8=>n;#args;:<-};
  'i='i'; n='n'; f='(1+i^n)';'}
<1>============
Running IX:

<2>============
i=0.3; n=8; f=8.15731;
<3>============
i=0.3; n=5; f=3.71293;
Commentary #ns => @;
'spca'#pgm{#IX{.08=>i;10=>n;:<-};1+i^n};
'sppw'#pgm{spca/};
'usca'#pgm{spca-1/spca.ns.i};
'sfp'#pgm{usca/};
'cr'#pgm{spca.ns.i*(spca)/(spca-1)};
'uspw'#pgm{cr/};
'spca 'spca $;
'spca 'spca $;
'sppw 'sppw $;
'usca 'usca $;
'sfp 'sfp $;
'cr 'cr $;
'uspw 'uspw $;
spca
spca 2.15892
sppw 0.463193
usca 14.4866
sfp 0.0690295
cr 0.149029
uspw 6.71008
Commentary #ns => @;
$$=================================
'AllInt'#pgm{$$ Main Program
$$defaults ------------------------
#ns => @;.08=>i;10=>n;'ci'=>fn;
#args;$$ loading arguments
$$ Local programs -----------------
$$ output formatting
'fmt'#pgm{'i='i'; n='n'; 'fn'='r'.'$};
$$ compound interest
'ci'#pgm{1+i^n};
$$ --------------------------------
$$ -- Calculation and output ------
$$ Single Payment Compound Amount
'SPCA'(ci)[.fn.r]fmt;
$$ Single Payment Present Worth
'SPPW'(ci/)[.fn.r]fmt;
$$ Uniform Series Compound Amount
'USCA'(ci-1/i)[.fn.r]fmt;
};
$$=================================
'**** Using Defaults' $; AllInt;
'**** Using Arguments' $;
(9..11)(.07)[.n.i]AllInt;
**** Using Defaults
i=0.08; n=10; SPCA=2.15892.
i=0.08; n=10; SPPW=0.463193.
i=0.08; n=10; USCA=14.4866.
**** Using Arguments
i=0.07; n=9 10 11;
  SPCA=1.83846 1.96715 2.10485.
i=0.07; n=9 10 11;
  SPPW=0.543934 0.508349 0.475093.
i=0.07; n=9 10 11;
  USCA=11.978 13.8164 15.7836.