
                /**  Automatic memo definition  **/
 
/*K: dynamic programming; look-up */
 
/*A: Tim Shaw */
/*D: July 1981 */
/*U: May 1985 by John Gottschalk, University of Western Australia. */
 
/*: MSet[$expr,$val] or $expr ::: $val
        assigns the value $val to the projection $expr in such a way
        as to store explicitly each form of $expr requested. */
 
	#$_:Gen
        MSet_:Tier
        _MSet[Smp]:0
        _MSet[Pr][[$expr,$val]] :: Sx[" ::: ",{$expr,$val},4]
        Sxset[":::",MSet,4]
        $expr ::: $val :: $expr :: $expr : $val 
        $f[$$x] ::: $val :: Ap[$f[$$x] :: #$ : $val,{S[$f[$$x],$y_=$z->$y]}]
/*W: Redefines #$ to be generic, this causes problems if #$ appears in 
	$f[$$x] or $val. */

_XMSet[Loaded] : 1

/*E:
#I[1]::  <XMSet

#I[2]::  f[0] : f[1] : 1

#O[2]:   1

#I[3]::  f[$x] ::: $x f[$x-2]

#O[3]:   ' f[$x] : $x f[$x - 2]

#I[4]::  f

#O[4]:   {[0]: 1, [1]: 1, [$x]:: f[$x] : $x f[$x - 2]}

#I[5]::  f[6]

#O[5]:   48

#I[6]::  f

#O[6]:   {[6]: 48, [4]: 8, [2]: 2, [0]: 1, [1]: 1,

		[$x]:: f[$x] : $x f[$x - 2]}

#I[7]::  f[11]

#O[7]:   10395

#I[8]::  f

#O[8]:   {[11]: 10395, [9]: 945, [7]: 105, [5]: 15, [3]: 3, [6]: 48, [4]: 8,

		[2]: 2, [0]: 1, [1]: 1, [$x]:: f[$x] : $x f[$x - 2]}

#I[9]::  g[$x_=Intp[$x],$y] ::: {$x,$y}

#O[9]:   ' g[$x,$y] : {$x,$y}

#I[10]::  g[4,3]

#O[10]:   {4,3}

#I[11]::  g

#O[11]:   {[4]: {[3]: {4,3}},

		 [$x _= Intp[$x]]:: {[$y]:: g[$x,$y] : {$x,$y}}}
*/
