프로그래밍 기능(또는 기능을 생성하는 기능)내가 원하는 해결책은 함수를 사용하여 다른 함수를 생성하는 것입니다. 여기 장난감의 예가 있습니다. 나는 그것이 [3,4,5]를 반환할 것으로 예상합니다. 전달된 인수(오프셋)를 반환된 익명 함수에 사용할 수 없기 때문에 예상한 대로 작동하지 않습니다. 내 생각엔 대체를 사용하여 이 작업을 수행할 수 있는 방법이 있을 것 같은데, 알아낼 수 없었습니다.
funWrapper = Function({array, fun},
fun(array);
);
funFunctional = Function({offset},
Function({x},
x + offset;
);
);
funWrapper([1,2,3], funFUnctional(2));고급 통계 모델링실험 설계품질 및 프로세스 엔지니어링Re: 프로그래밍 기능(또는 기능을 생성하는 기능)여기에 이중 게시해서 죄송하지만 실제로는 기능 수정만 필요한 더 나은 방법이 있습니다.
funWrapper = Function({array, fun},
fun(array);
);
funFunctional = Function({offset},
Eval( Substitute(
Expr(
Function({x},
x + _offset_;
)
)
,
Expr( _offset_ ), offset
) )
);
funWrapper([1,2,3], funFUnctional(2));Re: 프로그래밍 기능(또는 기능을 생성하는 기능)@SDF1 , 다음과 유사하게 함수가 0인 매개변수의 값을 찾으려고 합니다. 유니루트 R의 함수 비슷한 JMP 기능이 있는지 모르겠습니다. 어쨌든 그렇게 하기 위해 코드를 훔쳤기 때문에 충분히 쉬웠습니다 
Re: 프로그래밍 기능(또는 기능을 생성하는 기능)JMP14 클래스는 완벽하게 작동하지 않으며 너무 많이 의존하면 화상을 입을 수 있습니다. 그러나 JMP12+에서는 네임스페이스와 일부 메타 프로그래밍을 사용하여 클래스(상속, 생성자, 소멸자 등 포함)를 생성할 수 있습니다.
OP의 초기 질문에 대답하려면 스크립트를 최소한으로 편집하여 목표를 달성할 수 있습니다. JSL 함수의 반환 값은 반환되기 전에 (Eval() 문을 사용하여) 평가됩니다.따라서 마지막 문이 평가되지 않은 표현식(예: Expr( Function( _definition_ ) )인 경우 의도한 대로 함수를 반환합니다.함수를 호출하려면 두 번째 함수에서 약간의 트릭만 필요합니다("fun = fun" 문).
funWrapper = Function({array, fun},
fun = fun;
fun(array);
);
funFunctional = Function({offset},
Substitute(
Expr(
Function({x},
x + _offset_;
)
)
,
Expr( _offset_ ), offset
)
);
funWrapper([1,2,3], funFUnctional(2));Re: 프로그래밍 기능(또는 기능을 생성하는 기능)안녕 @미트만 ,
방정식(이 경우에는 JSL Function()이 아닌 함수)의 근을 풀려고 하는 것 같군요. 맞나요?
Minimize() 함수의 시작점과 함께 함수를 전달하여 최적화 루틴을 시작할 수 있는 Minimize()라는 내장 JSL 함수가 있습니다. 이를 위해 자체 JSL Function()을 작성하는 것보다 더 쉬운 경로가 될 수 있습니다. 이에 대한 블로그 게시물을 읽을 수 있습니다. 여기 .
도움이 되길 바랍니다!,
DS
Re: 프로그래밍 기능(또는 기능을 생성하는 기능)안녕 @SDF1 , 답장을 보내 주셔서 감사합니다. 그러나 이것은 실제 사용 사례에서는 작동하지 않습니다. 0을 찾는 함수에 임의의(단조적인) 함수를 인수로 전달할 수 있기를 원합니다. 각 함수를 명시적으로 정의하면 충분히 간단하지만 매개변수화된 클래스에서 함수의 인스턴스를 생성하는 함수를 작성하려고 할 때 문제에 부딪혔습니다. 저는 실제로 OO는 아니지만 범위 지정 규칙에 따라 원래 게시물에 있었던 것과 같은 코드를 허용하는 R에서 자랐습니다.
- EM
Re: 프로그래밍 기능(또는 기능을 생성하는 기능)안녕 @미트만 ,
이것이 정확히 원하는 것인지 확실하지 않지만 최소한 원본 게시물에 제공한 예제를 해결하는 데는 효과적입니다.
Names Default to Here (1);
fWrap = Function({array, offset}, fFun(array offset));
fFun = Function({x, offset}, x + offset);
fWrap([3, 4, 5, 6], 5 );그러면 [8, 9, 10, 11]이 반환됩니다.
살펴보는 것은 흥미로운 문제입니다. 왜 이런 식으로 해야 하는지 공유할 수 있다면 매우 궁금합니다.
도움이 되었기를 바랍니다!,
DS
Re: 프로그래밍 기능(또는 기능을 생성하는 기능)통찰력 있는 내용을 공유해 주셔서 감사합니다, Craige.
두 가지 접근 방식을 모두 사용하는 솔루션은 다음과 같습니다. 클래스는 나에게 더 직관적으로 느껴집니다(그리고 "this"는 확실히 네임스페이스(expr(ns<
JMP 14 Pro와 JMP 12 Pro에서 모두 테스트되었습니다. JMP 12 Pro에서는 수업을 사용할 수 없습니다.
funOffsetAdder = Function({offset},
ns = NewNamespace();
ns:offset = offset;
ns:theMethod = EvalExpr(
Function({x},
this = namespace(expr(ns<<GETNAME></GETNAME>Re: 프로그래밍 기능(또는 기능을 생성하는 기능)나는 몇 가지 실험을 했습니다: 클래스 정의를 사용하는 방법 그리고 JSL 객체를 사용한 함수형 프로그래밍
퍼즐에 대해 더 자세히 알아내면 다시 게시해 주세요. 현재로서는 JSL 클래스를 많이 사용하지 않지만 원하는 작업을 수행하는 가장 좋은 방법일 수 있습니다. 네임스페이스는 일부 하위 클래스 개념이 없어도 동일할 수 있습니다. 어느 쪽이든 함수와 데이터를 함께 패키지화하고 참조를 통해 패키지를 다른 함수에 전달할 수 있습니다.