function Filter(vv:integer):boolean; begin result := vv mod 2= 0; end; type TFilter=function(v:integer):boolean; function FilteredArray(const x:TBoundArray;p:TFilter):TBoundArray; var Idx: Integer; v : Integer; begin setlength(result,high(x)+1); Idx := 0; for v in x do if p(v) then begin result[Idx] := v; inc(Idx); end; setlength(result,Idx); end; [...] y := FilteredArray(x,@Filter);