anchor.diff:    result.FParams[1] := Param2;
   end;
   
  +class function Expr.NaryFunc.Create(const Name: string; const Body, Param1,
  +  Param2, Param3: Expr): NaryFunc;
  +begin
  +  result.FName := Name;
  +  SetLength(result.FBody, 1);
  +  result.FBody[0] := Body;
  +  result.FParamCount := 3;
  +  SetLength(result.FParams, result.FParamCount);
  +  result.FParams[0] := Param1;
  +  result.FParams[1] := Param2;
  +  result.FParams[2] := Param3;
  +end;
  +
   function Expr.NaryFunc.GetBody: Expr;
   begin
     result := FBody[0];
  
positive.code:       private
          class function Create(const Name: string; const Body, Param: Expr): NaryFunc; overload; static;
          class function Create(const Name: string; const Body, Param1, Param2: Expr): NaryFunc; overload; static;
          function GetBody: Expr;
          function GetParam(const Index: integer): Expr;
          function GetIsBuiltIn: boolean;
  
negative.code:     end;
  end;
  
  function Func3(const Name: string; const FuncBody: Expr): Expr.Func3;
  begin
    result :=
      function(const Param1, Param2, Param3: Expr): Expr.NaryFunc
      begin
        result := Expr.NaryFunc.Create(Name, FuncBody, Param1, Param2, Param3);
      end;
  end;
  
  function _1: Expr.LambdaParam;
  begin
    result := Expr.LambdaParam.Create('_1');
  