2017-05-12 9 views
1

일부 온라인 gforth 문서는 겉으로 complete description of base-execute's effects 제공 :gforth베이스 실행 구문

base-execute  i*x xt u – j*x   gforth  “base-execute” 

execute xt with the content of BASE being u, and restoring the 
original BASE afterwards. 

그러나 효과에 대한 구문이 열쇠없이 자물쇠처럼 보인다 - 어떤 i*x xt u – j*x 의미를 설명 아무것도 페이지 링크. 일부 사냥 (u부호없는 숫자하고 xt실행 토큰 것을 우리에게 알려줍니다)을 partial description of the syntax notation를, 비구름하지만 아직 i*x xt u – j*x을 이해하는 것만으로는 충분하지.

base-execute은 어떻게 사용되며 어떤 기능을합니까?

답변

3

base-execute을 이해해야 executeBASE을 이해해야합니다. 또한 스택 효과에서 i*xj*x을 읽는 방법을 설명합니다.

execute은 실행 토큰 xt을 취하여 실행함으로써 작동합니다. ' 1+ execute1+과 동일합니다. 그러나 xt을 미리 선택하지 않아도 스택에 전달할 수 있기 때문에 execute을 사용해야하는 이유가 있습니다. 예를 들어 :

: exec-twice dup >r execute r> execute ; 
2 ' 1+ exec-twice . (this outputs 4) 

BASE 숫자베이스는 입력 및 출력을 위해 사용할 것인지를 제어하는 ​​변수이다. BASE은 초기에 10입니다. 따라서 5 2 BASE ! .101 (기본 2에서 5)을 출력합니다.

base-execute 그들을 함께 넣는다 : 그것은 BASEuxt의 변경을 실행 한 후 이전 값으로 복원 BASE. 그것의 구현은 다음과 같습니다 i*x xt u -- j*x 지금

: squared (n1 -- n2) dup * ; 
: squares (n --) 0 do i squared . loop ; 

10 squares (0 1 4 9 16 25 36 49 64 81) 

: hex-execute (i*x xt -- j*x) 16 base-execute ; 

10 ' squares hex-execute (0 1 4 9 10 19 24 31 40 51) 

10 squares (0 1 ... 81 we're back to decimal) 

: 여기

: base-execute BASE @ >r BASE ! execute r> BASE ! ; 

은 사용 예입니다 당신이 연결

스택 표기 문서에 대한 대부분의 정보를 가지고 당신 그 효과를 읽을 필요가있다. i*x -- j*x무언가가 일 수 있음을 의미하지만 무엇을 지정하지는 않습니다. 이 경우 정확한 스택 효과는 xt에 달려 있습니다.

는 주어진 xt와 스택 효과를 알고 xt의 스택 효과의 양면과 i*xj*x를 교체하십시오. xt 경우

예를 들어, ' . 당신은 n --입니다 .의 스택 효과를 볼 것입니다. 이 경우 base-execute의 스택 효과는 n xt-of-. u --으로 생각할 수 있습니다.

+0

매우 유익하지만 위의 내용에서 * base-execute을 사용하는 방법이 명확하지 않습니다. 대답은 기본적인 샘플 사용법 또는 2 개로 향상됩니다. – agc

+0

좋은 지적, 예제를 추가하겠습니다. –

+0

감사! 그냥 평범한'base-execute'는 재미 있습니다. 즉,'10 '은 3 진법을 3 번 기본 실행하고, 10은'기본 실행 '을 의미합니다. – agc