값 매핑 함수: 후속 호출에 대해 일관되지 않은 결과안녕하세요,
저는 JMP 16과 JSL을 처음 사용하지만 숙련된 프로그래머입니다.
몇 가지 이유로 "값 매핑" 기능을 사용하고 싶지만 잘못된 결과가 나옵니다.
내가 달성하고 싶은 것은 숫자와 문자열을 포함하는 목록에서 목록으로 제공된 원하지 않는 항목을 제거하는 것입니다.
다음 함수는 na_list(예: {option1, option2,...})에서 {option1, 0, option2, 0, ...} 형식으로 na_values라는 "맵 값" 목록을 구성합니다.
"Filter Each" 및 Map Value" 기능을 사용하여 필터링합니다.
wrap = function({filtered list,na_list}, {Default Local},
na_values={};For Each( {value}, na_list, na_values=Insert(na_values,value);na_values=Insert(na_values,1););
return(Filter Each({value}, filtered list, Map Value(value, na_values, Unmatched(0))==0;));
);그러나 다른 매개변수를 사용하여 함수를 다시 호출하면 잘못된 결과가 나타납니다.
Show(wrap({"b",1, 2, 3},{"b"})); // <-- returns {1,2,3} => OK
Show(wrap({"d",1, 2, 3},{"d"})); // <-- returns {"d",1,2,3} => NOT OK, should be as above {1,2,3]
여기서 무엇이 잘못되었나요? JMP의 버그? 버전 16.0.0(512257)을 사용하고 있습니다.
친애하는,
도마
스크립팅윈도우Re: Map Value 함수: 다른 문자에 대한 잘못된 결과JMP 지원팀에서 답변을 주었습니다. 제가 발견한 결함일 수 있습니다.
그들의 지원은 Associative Array 기능을 사용하여 목록에서 불필요한 항목을 제거하는 원래 문제에 대한 다음 솔루션을 제공했습니다.
filtered list = {"b", 1, 2, 3};
na_list = {"b"};
result = Associative Array(filtered list) << Remove(Associative Array(na_list)) << Get Keys; // {1, 2, 3}Re: Map Value 함수: 다른 문자에 대한 잘못된 결과답장을 보내 주셔서 감사합니다. 첫 번째 호출이 작동한다고 말했듯이 후속 호출은 실패합니다.
이 문제에 대해 JMP 지원팀에 전화하여 이 문제를 기술 지원팀에 전달했습니다. 그것에 대한 소식이 있으면 여기에 게시하겠습니다.
Re: Map Value 함수: 다른 문자에 대한 잘못된 결과귀하의 예에서
Show(wrap({"b",1, 2, 3},{"b"}));
Show(wrap({"d",1, 2, 3},{"d"}));
두 번째 호출에 대해 올바른 결과를 제공하지 않습니다.
그러나 이것은 작동합니다.
Show(wrap({"d",1, 2, 3},{"d"}));
평가판을 사방에 던질 필요가 없다는 것을 암시합니다.
문제는 함수에 대한 첫 번째 호출이 작동하고 후속 호출이 실패한다는 것입니다. 매우 이상합니다.
Re: Map Value 함수: 다른 문자에 대한 잘못된 결과안녕하세요, 맞습니다. 테스트 함수에서 na_values의 초기화를 제거했습니다.
그러나 함수에 na_values의 초기화를 추가하면 문제가 발생합니다.
wrap = function({filtered list,na_list}, {Default Local},
<STRONG>na_values={}</STRONG>;For Each( {value}, na_list, na_values=Insert(na_values,value);na_values=Insert(na_values,1););
return(Filter Each({value}, filtered list, Map Value(value, na_values, Unmatched(0))==0;));
);
Show(wrap({"b",1, 2, 3},{"b"})); // = {1, 2, 3}=> OK
Show(wrap({"d",1, 2, 3},{"d"})); // = {"d", 1, 2, 3} => Not OK ! => expected {1, 2, 3}위의 코드를 직접 시도해 보십시오.
Re: Map Value 함수: 다른 문자에 대한 잘못된 결과먼저 na_value를 빈 목록으로 초기화하지 않고 어떻게 함수가 작동하는지 잘 모르겠습니다.이것은 작동합니다:
names default to here(1);
filtered list = {"d",1, 2, 3};
na_list = {"d"};
na_values = {}; // <--- missing
For Each( {value}, na_list,
na_values=Insert(na_values,value);
na_values=Insert(na_values,1);
);
f = Filter Each({value}, filtered list,
Map Value(value, na_values, Unmatched(0))==0;
);
show(f);Re: Map Value 함수: 다른 문자에 대한 잘못된 결과때로는 JMP/JSL이 표현식을 처리하는 방식이 이상할 수 있습니다. 예를 들어 send 함수에서 인수가 평가되지 않은 상태로 전송되는 경우가 종종 있습니다.여기에는 보내기 기능이 없지만 각각 필터링() 또는 맵 값() 이상한 방식으로 인수를 처리하고 조회를 이상하게 처리합니다.
기본적으로 버그라고 말할 수는 없지만 이상하게 보입니다.내가 당신이라면 JMP 지원팀에 연락하여 첫 번째 호출이 {"비",1,2,3"} 아니면 그 {"d",1,2,3} ) 작동하지만 두 번째는 작동하지 않습니다.버그일 가능성이 있습니다.
해결 방법은 다음과 같습니다.
wrap = Function( {filtered list, na_list},
{Default Local},
na_values = {};
For Each( {value}, na_list,
Insert Into( na_values, value );
Insert Into( na_values, 1 );
);
Eval( Eval Expr( Filter Each( {value}, filtered list, Map Value( value, Expr( na_values ), Unmatched( 0 ) ) == 0 ) ) );
);