2016-12-15 3 views
2

drracket에 label, goto, jump 명령을위한 패키지가 있습니까? 그래서 루프를 사용하는 옵션이 없습니다 재 작성,레이블, drracket의 goto 명령

(let ([x 1]) 
    (let/ec return 
     (begin/goto 
     (label l1) 
     (set! x (+ x 1)) 
     (when (= x 10000000) 
      (return x)) 
     (goto l1) 
     2))) 

goto: undefined;

cannot reference undefined identifier

는 LLVM IR 코드를 실행하기위한 라벨, 고토/점프를 시뮬레이션해야합니다

Control 패키지는 다음과 같은 오류를 제공합니다.

+0

루프를 사용하여 다시 작성 하시겠습니까? –

+0

'goto'에서 'loop'로의 변환이 자동화 될 수 없으므로 내 목적에 맞지 않습니다. – sinhayash

+0

컨트롤 패키지가 업데이트되었습니다. 시도해보십시오. 작동하지 않는 경우 알려주십시오 (Github에서 패키지 서버로 업데이트하는 데 약간의 지연이있을 수 있습니다). 라켓이 "최근에"새로운 매크로 확장기로 전환되었습니다. 제어 패키지는 다소 오래되었으므로 새 확장 프로그램이 아니라 이전 확장 프로그램에서 작동하는 트릭을 사용하고있었습니다. – soegaard

답변

3

첫 번째 : soegaard의 제어 패키지가 올바르게 작동하지 않는 것은 확실합니다. 지난 몇 년 동안 구문 시스템에 대한 업데이트가 있었기 때문에 추측 할 수 있습니다.

두 번째 : LLVM을 시뮬레이트하는 경우 레이블 및 흠목이 필요하지 않습니다. 코드를 기본 블록으로 분해하고 각 기본 블록을 함수로 모델링하십시오. 그런 다음 모든 goto가 함수 호출이됩니다. 이것을 확실히 자동화 할 수 있습니다.

간결하게되어서 죄송합니다. 더 자세한 정보가 필요하면 알려주세요.

+0

사람들을 어떻게 태그 지정합니까? soegaard? @ soegaard? + soegaard? grr ... –

+0

예 - 새로운 확장기가 있어야합니다. 내가 한번 볼게. 또한 태그 지정은 이미 토론에 참여한 사람들에게만 적용됩니다 (아는 한). – soegaard