Anonymous recursions
This commit is contained in:
@@ -3,6 +3,7 @@ unit Myc.Ast.RTL.Core;
|
||||
interface
|
||||
|
||||
uses
|
||||
Myc.Utils,
|
||||
Myc.Data.Scalar,
|
||||
Myc.Data.Value,
|
||||
Myc.Ast.RTL;
|
||||
@@ -122,7 +123,6 @@ end;
|
||||
class function TRtlFunctions.Memoize(const Args: TArray<TDataValue>): TDataValue;
|
||||
var
|
||||
funcToMemoize: TDataValue.TFunc;
|
||||
cache: TDictionary<Int64, TDataValue>;
|
||||
memoizedFunc: TDataValue.TFunc;
|
||||
begin
|
||||
if Length(Args) <> 1 then
|
||||
@@ -130,8 +130,8 @@ begin
|
||||
if Args[0].Kind <> vkMethod then
|
||||
raise EArgumentException.Create('The argument to Memoize must be a function.');
|
||||
|
||||
var cCache: TManaged<TDictionary<Int64, TDataValue>> := TDictionary<Int64, TDataValue>.Create;
|
||||
funcToMemoize := Args[0].AsMethod();
|
||||
cache := TDictionary<Int64, TDataValue>.Create;
|
||||
|
||||
memoizedFunc :=
|
||||
function(const AArgs: TArray<TDataValue>): TDataValue
|
||||
@@ -151,6 +151,8 @@ begin
|
||||
else
|
||||
key := argScalar.Value.AsInt64;
|
||||
|
||||
var cache: TDictionary<Int64, TDataValue> := cCache;
|
||||
|
||||
if cache.TryGetValue(key, Result) then
|
||||
exit;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user