Q&A

  • 함수의 파라미터로 또다른 함수를 넣을수 있는지요?
죄송합니다. 정말 왕왕초보입니다.



몇일전 질문의 핵심을 제대로 표현할줄몰라서 엉성하게

질문하였는데도 여러 고수님들이 성실하게 답변해주셔셔

감탄하였습니다.

진심으로 감사드립니다.





저번과 같은 질문인데 의사전달이 제대로 안된것같아

고수님들이 지도해주신 것을 바탕으로 다시 한번 정리하였습니다.



예를들어 "AVERAGE(FUNCTION(a,b,c),50)"라는 함수를 만들려고합니다.



이함수는 (50일간의) a,b,c라는 변수를 이용하여 또다른 함수로구한값(FUNCTION(a,b,c))을 50으로 이동평균하라는 함수를 뜻합니다.



그런데 문제는 또다른 함수인 "FUNCTION(a,b,c)"이 정해진 식이 아니라

이 함수를 이용하는 USER들이 함수내의 함수인 "FUNCTION(a,b,c)"를

마음대로 바뀌가면서 이용할수 있어야한다는 것입니다



즉 함수내의 함수가 무한대로 바뀐다는 것입니다.



또한 여기서 변수인 a,b,c도 어떤경우에는 새로운 함수가 될수도 있습니다.







어떤 고수님께서는 함수내의 parameter를 구문parsing 하여야 한다고

그러십니다.

parsing해야만 이 문제가 해결된다면 이 parsing한다는 것이 얼마나 어려운

일인 (쉬운일인지) 잘모르겠습니다.



만약 굉장히 어려운 일이라면 제가 어디에 의뢰해야할지, 대략 개발기간이나 비용은

얼마나 예상해야 되는 것인 좀 가르쳐주십시요.



혹시 parsing말고 좀도 간편한 방법이 있으지도 궁금합니다.





저는 어떠한 일이 있어도 이 문제를 급히 해결해야 할 처지에 있습니다.

좋은 의견부탁드립니다.

고맙습니다.







2  COMMENTS
  • Profile
    밥벌레 2000.08.07 22:56
    아마 이걸루 몽땅 해결이 되실것 같습니다..

    함수 포인터 + Variant 형으로 인자도 제멋대로 넘기는 예제임다..

    자세한것은 Variant 형의 헬프를 참고하셔요..

    그럼 도움이 되시길..^^



    type

    TMyFunction = function(Value: Variant): double of object;



    TForm1 = class(TForm)

    procedure FormShow(Sender: TObject);

    private

    public

    function foo(value: Variant): double;

    function goo(value: Variant): double;

    procedure average(MyFunction: TMyFunction; Value: Variant; f: double);

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    procedure TForm1.FormShow(Sender: TObject);

    begin

    average(foo, VarArrayOf([1, 2, 3]), 0);

    average(goo, VarArrayOf([1]), 0);

    // 원하시는게 이런거 하고싶으신거 맞지요??

    end;



    function TForm1.foo(value: Variant): double;

    begin

    Result := value[0] + value[1] + value[2];

    end;



    function TForm1.goo(value: Variant): double;

    begin

    Result := value[0];

    end;



    procedure TForm1.Average(MyFunction: TMyFunction; Value: Variant;

    f: double);

    begin

    ShowMessage(FloatToStr(MyFunction(Value) + f));

    end;

  • Profile
    최용일 2000.08.07 21:23
    안녕하세요. 최용일입니다.



    이제 문제가 이해가 가네요. 저번 질문에는 요지를 정확히 알수가 없었는데...



    간단하네요. 델파이에도 함수 파라매터를 지원합니다. 또 포인터를 이용해도 되구요.



    인자로 들어가는 함수의 파라매터가 일정하다면 그냥 함수 파라매터를 사용하시고



    인자로 들어가는 함수의 파라매터가 다양하다면 포인터와 타입캐스트, 오픈배열등을



    이용하시면 하실 수 있습니다.



    type

    TProcType = procedure(A, B, C: Integer);

    // 함수형 TFuncType = function(A, B, C: Integer): Integer;



    procedure ProcA(A, B, C: Integer);

    begin

    ......

    end;



    procedure ProcB(A, B, C: Integer);

    begin

    ......

    end;



    procedure Average(Proc: TProcType; A, B, C, Count: Integer);

    begin

    ......

    Proc(A, B, C);

    ......

    end;



    예)

    Average(ProcA, A, B, C, 50); // 함수 ProcA를 이용

    Average(ProcB, A, B, C, 50); // 함수 ProcB를 이용



    ^^ 항상 즐코하세요.



    brucehan wrote:

    > 죄송합니다. 정말 왕왕초보입니다.

    >

    > 몇일전 질문의 핵심을 제대로 표현할줄몰라서 엉성하게

    > 질문하였는데도 여러 고수님들이 성실하게 답변해주셔셔

    > 감탄하였습니다.

    > 진심으로 감사드립니다.

    >

    >

    > 저번과 같은 질문인데 의사전달이 제대로 안된것같아

    > 고수님들이 지도해주신 것을 바탕으로 다시 한번 정리하였습니다.

    >

    > 예를들어 "AVERAGE(FUNCTION(a,b,c),50)"라는 함수를 만들려고합니다.

    >

    > 이함수는 (50일간의) a,b,c라는 변수를 이용하여 또다른 함수로구한값(FUNCTION(a,b,c))을 50으로 이동평균하라는 함수를 뜻합니다.

    >

    > 그런데 문제는 또다른 함수인 "FUNCTION(a,b,c)"이 정해진 식이 아니라

    > 이 함수를 이용하는 USER들이 함수내의 함수인 "FUNCTION(a,b,c)"를

    > 마음대로 바뀌가면서 이용할수 있어야한다는 것입니다

    >

    > 즉 함수내의 함수가 무한대로 바뀐다는 것입니다.

    >

    > 또한 여기서 변수인 a,b,c도 어떤경우에는 새로운 함수가 될수도 있습니다.

    >

    >

    >

    > 어떤 고수님께서는 함수내의 parameter를 구문parsing 하여야 한다고

    > 그러십니다.

    > parsing해야만 이 문제가 해결된다면 이 parsing한다는 것이 얼마나 어려운

    > 일인 (쉬운일인지) 잘모르겠습니다.

    >

    > 만약 굉장히 어려운 일이라면 제가 어디에 의뢰해야할지, 대략 개발기간이나 비용은

    > 얼마나 예상해야 되는 것인 좀 가르쳐주십시요.

    >

    > 혹시 parsing말고 좀도 간편한 방법이 있으지도 궁금합니다.

    >

    >

    > 저는 어떠한 일이 있어도 이 문제를 급히 해결해야 할 처지에 있습니다.

    > 좋은 의견부탁드립니다.

    > 고맙습니다.

    >

    >

    >