여기서 뭐가 잘못됐어? Formula()의 표현식 문제주의 - JMP가 충돌합니다!!!
Names Default To Here( 1 );
f = Function( {},
/* .... */
ID = Associative Array( {{Name Expr(), 1}, {Expr(), 2}, {Function(), 3}}, 0 );<BR />/* .... */
);
f();
목록에서 function()을 제거하면 오류가 해결됩니다.
외부 함수 에서 연관 배열을 꺼내면 오류가 해결됩니다.
[편집] 이것이 도움이 될 수 있는 동기:
표현식의 일부에 대한 조회 테이블로 - Head() 및 Type()을 통해 식별됨:
myID = ID[Expr(function())]; // expected: 3
code = Expr(g = function ({x},1));
Head(Arg(code,2)); // function()
myID = ID[Head(Arg(code,2))]; // expected: 3자동화 및 스크립팅Re: 여기서 뭐가 문제인가요?JMP를 정말 날려버립니다. 방금 JMP 세션에서 나가는 새로운 빠른 방법을 발명했습니다......
이건 JMP 지원으로 가야 해! 이런 일은 일어나서는 안 돼.
Re: 여기서 뭐가 문제인가요?또 하나 있어요:
주의 - JMP가 충돌합니다!!!
x = Expr(Function());
Show(name Expr(x) == Expr(Function()));
Print("not dead");
f = function({arg},
name Expr(arg) == Expr(Function()))함수 밖에서 x와 Function() 을 비교하는 것은 괜찮습니다.
함수 내부에서 JMP는 명령을 접하는 순간 이미 충돌이 발생하므로 f를 호출할 필요가 없습니다.
Re: 여기서 뭐가 잘못된 거지?JMP 지원(TS-00166834):
잘못된 함수를 다른 함수에서 사용하면 JMP가 충돌하는 알려진 문제가 있습니다.
따라서 근본 원인은 다음과 같이 좁혀질 수 있습니다.
주의 - JMP가 충돌합니다!!!
f = Function( {}, Expr(Function()));
... 참 순진해 보이네요.
잘못된 함수 정의 - 네. 하지만 JSL 표현식은 "잘 구성된" 표현식입니다.
@조셉_모건 / JSL을 사용하여 효율적이고 견고한 애플리케이션 개발(EU 2018 415) .
그러니 JMP가 이런 상황에서 살아남을 수 없다는 건 놀라운 일이죠.
Function 내부의 Function 이 JMP Expr()의 이상한 점을 떠올리게 하는데, 누가 설명해 줄 수 있을까요? / @ErraticAttack .
사용자 외에도 JMP에서도 표현식이 여러 레벨에 나타날 때 문제가 발생합니다. 그렇다면 삽입 위치: Flatten(0|1) 이나 @Substitute First Occurence가 JMP에 도움이 될 수 있을까요?

JMP 지원의 제안:
충돌을 방지하기 위해 할 수 있는 몇 가지 다른 방법이 있습니다. 하나는 내부 함수에 중괄호({})를 필수 인수로 넣는 것입니다. 또 다른 하나는 내부 함수에서 Function 뒤에 있는 괄호를 제거하는 것입니다.
안타깝게도 위의 적용 사례에 대한 도움은 없습니다.
Re: 여기서 뭐가 문제인가요?해결 방법:
f = Function( {},
/* .... */
ID = Associative Array( {{"Name Expr()", 1}, {"Expr()", 2}, {"Function()", 3}}, 0 );
/* .... */
);
f();
code = Expr(g = function ({x},1));
myID=ID[Char(Head(Arg(code,2)))]
하지만 조금 "아프다"...

Re: 여기서 뭐가 문제인가요?저는 이거 훨씬 더 좋아요:
f = Function( {},
/* .... */
Eval (Eval Expr(ID = Associative Array( {{Name Expr(), 1}, {Expr(Parse("Expr()")), 2}, {Expr(Parse("Function()")), 3}}, 0 )));
/* .... */
);
f;
code = Expr(g = function ({x},1));
myID=ID[Head(Arg(code,2))];
작동할 수 없습니다. 평가 표현식 이후에는 이전과 거의 같을 것입니다...
... 우와!
참고: Expr()은 Eval Expr 에서 살아남지 못하므로 보호되어야 합니다.
Re: 여기서 뭐가 문제인가요?-
Re: 여기서 뭐가 잘못됐어? Formula()의 표현식 문제사실 저는 며칠 전에 이 버그 보고서를 제출했습니다! 함수 내부에서 Expr(Function())을 사용하면 충돌이 발생한다는 것을 발견했습니다. 저는 이것을 다음의 맥락에서 사용했습니다.
Substitute(my_expr, Expr(Function()), Expr(Method()))
하지만 대신 Expr(Function)을 사용하면 해결되었습니다.
문제의 경우 문자열을 구문 분석하지 않으려는 경우 가능한 또 다른 해결책은 다음과 같습니다.
y = Function({head_key},
ID = Associative Array( EvalList({{Name Expr(), 1}, {Expr(), 2}, EvalList({Head(Expr(Function({},1))), 3})}), 0 );
ID[NameExpr(head_key)]
);
Show(y(Expr(Function())));그래도 아직은 '예쁘지'는 않지만요.
Re: 여기서 뭐가 잘못됐어? Formula()의 표현식 문제Head(Expr(Function()))
멋진!
특히 Joseph의 Eval( ... Parse( ... 를 인용한 후보다 훨씬 더 좋습니다.
