프로그래밍 함수 (또는 함수를 생성하는 함수)원하는 솔루션이 함수를 사용하여 다른 함수를 생성하는 문제가 있습니다. 다음은 장난감 예입니다. [3,4,5]를 반환 할 것으로 예상합니다. 반환되는 익명 함수에 전달 된 인수 (오프셋)를 사용할 수 없기 때문에 원하는대로 작동하지 않습니다. 내 생각 엔 대체로 이것을 할 수있는 방법이 있지만 나는 그것을 알아낼 수 없었다.
funWrapper = Function({array, fun},
fun(array);
);
funFunctional = Function({offset},
Function({x},
x + offset;
);
);
funWrapper([1,2,3], funFUnctional(2));스크립팅Re : 프로그래밍 함수 (또는 함수를 생성하는 함수)몇 가지 실험을했습니다. 클래스 정의 사용 방법 과 JSL 객체를 사용한 함수형 프로그래밍
퍼즐에 대해 더 많이 알아 내면 다시 게시하십시오. 이 시점에서는 JSL 클래스를 많이 사용하지 않지만 원하는 작업을 수행하는 가장 좋은 방법 일 수 있습니다. 네임 스페이스는 일부 하위 분류 아이디어없이 동일 할 수 있습니다. 둘 중 하나를 사용하면 함수와 데이터를 함께 패키징하고 참조를 통해 패키지를 다른 함수에 전달할 수 있습니다.
Re : 프로그래밍 함수 (또는 함수를 생성하는 함수)이 통찰력있는 비 네트를 공유 해주셔서 감사합니다, Craige.
다음은 두 가지 방법을 모두 사용하는 솔루션입니다. 클래스는 나에게 더 직관적 인 느낌이 듭니다 (그리고 "this"는 namespace (expr (ns << get name)))보다 확실히 입력하기가 더 쉽습니다).
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 : 프로그래밍 함수 (또는 함수를 생성하는 함수)안녕 뿡뿡 ,
이것이 정확히 원하는 것인지 확실하지 않지만 최소한 원본 게시물에서 제공 한 예제를 해결하는 데 효과적입니다.
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 : 프로그래밍 함수 (또는 함수를 생성하는 함수)안녕 안녕하세요. , 답장을 보내 주셔서 감사합니다. 그러나 실제 사용 사례에서는 작동하지 않습니다. 0을 찾는 함수에 임의의 (단조) 함수를 인수로 전달할 수 있기를 원합니다. 각 함수를 명시 적으로 정의하면 간단하지만 매개 변수가있는 클래스에서 함수 인스턴스를 만드는 함수를 작성하려고 할 때 문제가 발생했습니다. 나는 R에서 자랐는데 실제로 OO는 아니지만 범위 지정 규칙이 원래 게시물에서와 같은 코드를 허용하는 곳입니다.
-EM
Re : 프로그래밍 함수 (또는 함수를 생성하는 함수)안녕 뿡뿡 ,
방정식 (이 경우 JSL Function ()이 아닌 함수)의 근을 풀려고하는 것 같습니다. 맞습니까?
Minimize () 함수가 최적화 루틴을 시작하기위한 시작점과 함께 함수를 전달할 수있는 Minimize ()라는 내장 JSL 함수가 있습니다. 이것은 자신의 JSL Function ()을 작성하는 것보다 쉽게 내려갈 수있는 경로 일 수 있습니다. 그것에 대한 블로그 게시물을 읽을 수 있습니다. 여기 .
도움이 되었기를 바랍니다!,
DS
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));