JMP Expr()의 이상한 점을 설명할 수 있는 사람이 있나요?이것은 대부분 'IF' 표현식에 'IF' 표현식을 삽입할 때 발생하는 다음과 같은 불일치에 대한 불만스러운 게시물입니다.프로그래밍 언어는 일관성이 없으면 아무 의미가 없다는 것이 내 생각입니다. 그리고 저는 JMP의 다른 많은 불일치도 알고 있습니다. 단지 이 불일치가 제게는 전혀 이해가 되지 않는다는 것뿐입니다.
/*
What I want is to generate an expression such as the one below programmatically. There of course is a straight-forward work around, I just don't like dealing with special cases especially when they make no sense.
Expr( If( a, If( b, c) ) )<BR />
*/
expr = Expr( If( a ) );
Insert Into( expr, Expr( If( b, c ) ) );
Show( Name Expr( expr ) );
/*
If( a, b, c)
*/
expr = Expr( not an If( a ) );
Insert Into( expr, Expr( If( b, c ) ) );
Show( Name Expr( expr ) );
/*
not an If( a, If( b, c) )
*/
통찰력이 있는 사람이 있거나 특히 '평가 삽입'이나 문자열을 사용하지 않고 다른 표현식에 표현식을 안정적으로 삽입하는 방법을 알고 있다면 정말 좋을 것입니다!감사해요!
고급 통계 모델링Re: JMP Expr()의 이상함을 설명할 수 있는 사람이 있습니까?요청한 작업을 수행하기 위한 해결 방법이 있지만 실제 질문은 다음과 같습니다. 왜?!? 아직 답변이 없습니다.
에 추가됨 Jmp와 JSL의 작은 함정
Re: JMP Expr()의 이상함을 설명할 수 있는 사람이 있습니까?일부 가설을 쉽게 반증하고 추가 통찰력을 추가하는 추가 예:
expr = Expr( If( a, x ) );
Insert Into( expr, Expr(If( b,c )) );
Show( Name Expr( expr ) ); // if(a,x,b,c)
expr = Expr( If( a ) );
Insert Into( expr, Expr(If( b )) );
Show( Name Expr( expr ) ); // if(a,b)
expr = Expr( List( a ) );
Insert Into( expr, Expr(List( b )) );
Show( Name Expr( expr ) ); // List(a,b)
expr = Expr( Graph Builder( a ) );
Insert Into( expr, Expr(Graph Builder ( b )) );
Show( Name Expr( expr ) ); // Graph Builder(a,b)
expr = Expr( Head( a ) );
Insert Into( expr, Expr(Head( b )) );
Show( Name Expr( expr ) ); // Head(a,b) (!)
expr = Expr( Not( a ) );
Insert Into( expr, Expr(Not( b )) );
Show( Name Expr( expr ) ); // Not(a) (!!)
Re: JMP Expr()의 이상함을 설명할 수 있는 사람이 있습니까?안녕하세요,
확실하지는 않지만, 이 동작은 "IF ( a )" 조각이 올바른 형식의 JSL 표현식이 아니기 때문인지 궁금합니다. 즉, 함수 IF는 하나가 아닌 2개의 인수를 취합니다. JMP는 "notAnIf( a )"가 올바른 표현인지 알 방법이 없으므로 아마도 어깨를 으쓱하고 ( ? ) 전체 추측을 진행합니다.
다음이 의도한 대로 작동한다는 사실은 이 아이디어에 일부 지원을 추가하는 것처럼 보이지만 이것이 이유를 설명하지는 않습니다. @ben_ph 누락된 부분에 REPLACE_ME를 성공적으로 삽입했기 때문에 님의 아이디어가 효과가 있습니다.
expr = Expr( If( a, . ) );
Substitute Into( expr, expr(.), expr( If( b, c ) ) );
Show( Name Expr( expr ) );

건배,
브래디
Re: JMP Expr()의 이상함을 설명할 수 있는 사람이 있습니까?문자열을 사용하지 않는 해결 방법으로 다음과 같은 작업을 수행할 수 있습니다.
expr = Expr( If( a ) );
Insert Into( expr, Expr( REPLACE_ME ) );
Substitute Into( expr, Expr( REPLACE_ME ), Expr( If( b, c ) ) );
Name Expr( expr );
// If( a, If( b, c ) )
Re: JMP Expr()의 이상함을 설명할 수 있는 사람이 있습니까?이것은 밀접하게 관련되어 있다 같은 목록을 다른 목록에 삽입하는 방법 . 귀하의 질문으로 인해 이제 이러한 동작을 보여주는 내장 함수 이름에 대한 특별한 예외가 있는 것으로 의심됩니다.
expr = Expr( not an If( a ) );
와 같다
expr = Expr( NotAnIf( a ) );
NotAnIf(또는 if가 아닌)를 함수 이름으로 만들기 JMP는 내장된 것으로 인식하지 않습니다. { list } 예에서 {...}는 List(...)와 동일하며 ~이다 내장 함수 이름.
expr = Expr( sum( a ) );
Insert Into( expr, Expr( sum( b, c ) ) );
표시( 이름 Expr( expr ) );
/*:
이름 Expr(expr) = Sum(a, b, c);
//:*/
expr = Expr( sum1( a ) );
Insert Into( expr, Expr( sum1( b, c ) ) );
표시( 이름 Expr( expr ) );
/*:
이름 Expr(expr) = sum1(a, sum1(b, c));
나도 그것을 좋아하지 않는다.
@XanGregg