package Ġio . github . ps he g ger . a oc . common Ċ Ċ class ĠM emo ize 1 < in ĠT , Ġout ĠR >( val Ġf : Ġ( T ) Ġ-> ĠR ) Ġ: Ġ( T ) Ġ-> ĠR Ġ{ ĊĠĠĠ Ġprivate Ġval Ġvalues Ġ= Ġmutable Map Of < T , ĠR >() ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( x : ĠT ): ĠR Ġ= ĊĠĠĠĠĠĠĠ Ġvalues . get Or Put ( x , Ġ{ Ġf ( x ) Ġ}) Ċ } Ċ Ċ class ĠM emo ize 2 < in ĠT 1 , Ġin ĠT 2 , Ġout ĠR >( val Ġf : Ġ( T 1 , ĠT 2 ) Ġ-> ĠR ) Ġ: Ġ( T 1 , ĠT 2 ) Ġ-> ĠR Ġ{ ĊĠĠĠ Ġprivate Ġval Ġvalues Ġ= Ġmutable Map Of < Pair < T 1 , ĠT 2 >, ĠR >() ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( p 1 : ĠT 1 , Ġp 2 : ĠT 2 ): ĠR Ġ= ĊĠĠĠĠĠĠĠ Ġvalues . get Or Put ( Pair ( p 1 , Ġp 2 ), Ġ{ Ġf ( p 1 , Ġp 2 ) Ġ}) Ċ Ċ } Ċ Ċ class ĠM emo ize 3 < in ĠT 1 , Ġin ĠT 2 , Ġin ĠT 3 , Ġout ĠR >( val Ġf : Ġ( T 1 , ĠT 2 , ĠT 3 ) Ġ-> ĠR ) Ġ: Ġ( T 1 , ĠT 2 , ĠT 3 ) Ġ-> ĠR Ġ{ ĊĠĠĠ Ġprivate Ġval Ġvalues Ġ= Ġmutable Map Of < Triple < T 1 , ĠT 2 , ĠT 3 >, ĠR >() ĊĊĠĠĠ Ġoverride Ġfun Ġinvoke ( p 1 : ĠT 1 , Ġp 2 : ĠT 2 , Ġp 3 : ĠT 3 ): ĠR Ġ= ĊĠĠĠĠĠĠĠ Ġvalues . get Or Put ( Triple ( p 1 , Ġp 2 , Ġp 3 ), Ġ{ Ġf ( p 1 , Ġp 2 , Ġp 3 ) Ġ}) Ċ Ċ } Ċ Ċ fun Ġ< T , ĠR > Ġ(( T ) Ġ-> ĠR ). memo ize (): Ġ( T ) Ġ-> ĠR Ġ= ĠM emo ize 1 ( this ) Ċ fun Ġ< T 1 , ĠT 2 , ĠR > Ġ(( T 1 , ĠT 2 ) Ġ-> ĠR ). memo ize (): Ġ( T 1 , ĠT 2 ) Ġ-> ĠR Ġ= ĠM emo ize 2 ( this ) Ċ fun Ġ< T 1 , ĠT 2 , ĠT 3 , ĠR > Ġ(( T 1 , ĠT 2 , ĠT 3 ) Ġ-> ĠR ). memo ize (): Ġ( T 1 , ĠT 2 , ĠT 3 ) Ġ-> ĠR Ġ= ĠM emo ize 3 ( this ) Ċ