Re: expr()로 선언된 변수의 type()에 대한 질문명심해야 할 주요 사항은 인쇄() , 쓰다() 그리고 보여주다() 인수를 대부분의 함수와 약간 다르게 취급합니다. 압축을 풀지만 평가하지는 않습니다. 따라서 인쇄( c ) 인쇄할 것입니다 씨 is -- 표현입니다. 유형() 압축을 풀고 인수를 평가한 다음 유형을 반환합니다. 네가 원한다면 유형() 처럼 행동하다 인쇄() , 다음 사용 이름 Expr() , 처럼 유형( 이름 Expr( c ) )
Re: expr()로 선언된 변수의 type()에 대한 질문고맙습니다 @ErraticAttach
나는 당신이 설명하는 것을 명확하게 이해합니다.
하지만 질문이 있습니다.
만약에 유형 () 압축을 풀고 평가한 다음 특급 (a + b)는 경우 4에서 평가되며 반환 값으로 Number가 반환되어서는 안 됩니다. 유형 () 사례 3에서와 같이?Unpacking 후 타입을 평가하는 과정에서 인수를 변수로 지정했는지 함수로 지정했는지에 따라 처리가 달라지나요?
Re: expr()로 선언된 변수의 type()에 대한 질문C 및 C++와 같은 언어는 호출 전에 함수 호출에 대한 인수를 평가합니다. C 및 C++에는 표현식 데이터 유형이 없습니다. 표현식은 컴파일 타임에 코드로 컴파일되기 때문입니다. 실행 속도는 더 빠르지만 문제 해결에 대해 생각할 수 있는 몇 가지 방법이 제한됩니다.
JSL에는 문자열을 가져와 표현식 트리로 바꾸는 parse() 함수가 있습니다. eval() 함수는 트리를 평가합니다. 트리는 특별히 살펴보기 위해 주의를 기울이지 않는 한 할당의 오른쪽으로 액세스할 때 자동으로 평가됩니다.변수에 저장된 표현식을 실수로 평가하지 않고 엿보고 싶은 경우에만 사용해야 하는 nameExpr() 함수가 있습니다. 어떤 이유에서인지, 시간이 지나고 수정하기에는 너무 늦었을 수 있습니다. 인수가 단순 변수인 경우 인수를 평가하기 위한 호출 없이 인쇄/표시/쓰기가 작성되었습니다. 좋아, 그 당시에는 eval(c)에 대한 오버헤드가 있고 c의 값을 얻는 데 약간의 오버헤드가 있기 때문에 아마도 속도가 빨라진 것처럼 보였습니다. 그러나 인자는 단순 변수가 아니기 때문에 print(c+0)은 인자를 평가할 것이고 print(eval(c))는 인자를 평가할 것입니다.
Re: expr()로 선언된 변수의 type()에 대한 질문@Craige_Hales 확실히 맞습니다 -- 포장 풀기는 좋은 용어가 아닙니다. 혼란을 드려 죄송합니다!내가 설명하려고 했던 동작은 문서화되어 있습니다 -- 이 링크를 확인하십시오: https://www.jmp.com/support/help/en/15.2/index.shtml#page/jmp/expressions.shtml
관련 비트는 다음과 같습니다.

Re: expr()로 선언된 변수의 type()에 대한 질문감사합니다!! 당신은 매우 도움이되었습니다! 
Re: expr()로 선언한 변수의 type() 관련 질문입니다.고맙습니다! 많은 도움이 되었습니다.
Re: expr()로 선언한 변수의 type() 관련 질문입니다.a = 1;
b = 2;
type( a + b );
"숫자"
내부적으로 type은 add( a, b )와 같은 표현식 트리를 받았습니다. 트리는 숫자로 평가됩니다.
a = 1;
b = 2;
type( expr( a + b ) );
"표현"
내부적으로 type은 expr( add( a, b ) ) 와 같은 식 트리를 받았습니다. 다시, 트리가 평가됩니다. 트리의 expr() 노드는 인수를 식으로 반환합니다.
a = 1;
b = 2;
c = expr( a + b );
type( c );
"숫자"
내부적으로 type은 c와 같은 식 트리를 받았습니다. 다시한번 평가합니다. c는 c가 평가될 때마다 a와 b의 현재 값을 사용하는 표현식 add(a,b)입니다.c는 트리에 expr() 노드가 없습니다.
"포장 풀기"는 JSL에서 잘 정의된 아이디어가 아닙니다. 모든 내장 함수는 초기에 인수를 식 트리로 봅니다. 일부 함수는 인수를 먼저 보지 않고 인수를 평가합니다. 다른 함수는 절대 평가하지 않습니다. 일부 함수는 표현식의 루트 노드가 eval() 또는 expr() 또는 send()인지 확인하고 다른 작업을 수행합니다. (send()는 << 연산자입니다. 특수 인수를 식별하기 위해 인수 목록에 단항 사용법이 있습니다. 종종 생성 중인 디스플레이 상자로 실제 메시지가 전송됩니다. 인수를 평가해서는 안 된다고 가정합니다. 수식 주위에 eval()을 추가하면 수식(...)이 인수를 엿보기 때문에 eval이 됩니다. 대안은 항상 인수를 평가하는 것이었고 일반 사용 사례에서는 수식 주위에 expr()이 필요합니다(expr(...) 평가는 해당 인수를 반환하기 때문입니다.)
expr()로 선언된 변수의 type()에 대한 질문안녕
저는 'expr()'을 사용하고 있는데 몇 가지 질문이 있습니다.
댓글에 적힌 번호대로 질문 드리겠습니다.
1) c가 그대로 실행되면 eval()이 적용된다고 볼 수 있나요?
2) -
3) expr()로 선언된 변수 c의 타입을 체크하면 왜 Number가 나오나요?
type()이 인자를 실행하여 type을 인식하고 결과를 출력하면 4)의 경우 왜 Expression인지 궁금하다.
4) -
a = 1;
b = 2;
c = expr(a + b);
c; // 1) Result : 3
print(c); // 2) Result : a + b
type(c); // 3) Result : Number
type(expr(a + b)); // 4) Result : Expression
감사합니다 
품질 및 프로세스 엔지니어링Re: expr()로 선언된 변수의 type()에 대한 질문인수의 유형에 따라 write가 다른 일을 한다는 것을 보는 것이 흥미롭네요.
그 반대의 기능을 하는 함수도 있습니다. 간단한 이름을 찾지만, 더 복잡한 표현식은 평가하지 않습니다.
누구든지 "look up", "unpack", "evaluate" ....라는 인수를 사용하기 전에 어떤 함수가 수행하는지 전체 목록을 가지고 있습니까?
얼마나 많은 사례를 고려해야 합니까?
첫 번째 인수가 목록인지 확인하는 for each 와 같은 몇 가지 특수한 경우가 있다는 것을 알았습니다.
x= Expr(Print(2));
y = "hello";
Write(x); // ->Print(2)
Write(y || " world"); // hello world
Head(x); // Print()
Type(x); //-> 2
...