문제

Pierce의 Tapl Pork의 195 페이지의 경우, 일부 종류의 동적 유형 테스트로 다운 캐스트 연산자를 대체 할 수 있음을 나타냅니다. 그런 다음 그는 다음 규칙을 제공합니다.

t- typetest :

$ \ dfrac {\ gamma \ vdash t_1 : s \; \; \ gamma, x : t \ vdash t_2 : u \; \; \ gamma \ vdash t_3 : u} {\ gamma \ vdash \ text {if} t_1 \ text {} t \ text {그 다음} x \ to t_2 \ text {else} t_3 \ to t_3 : u} $

e-typeTest1 :

$ \ dfrac {\ vdash v_1 : t} {\ text {if} v_1 \ text {in} t \ text {그 다음} x \ to t_2 \ text {else} T_3 \ ~ [x \ mapsto v_1] t_2} $

e-typetest2 :

$ \ dfrac {\ nvdash v_1 : t} {\ text {if} v_1 \ text {in} t \ text {그 다음} x \ t_2 \ text {else} T_3 \ to T_3} $

더 이상 설명은 없으며 이러한 규칙을 해석하는 방법을 알지 못합니다. 그 (것)들을 검토하고, 나는 첫 번째 규칙이며, 두 번째 및 세 번째는 평가 규칙임을 깨닫는다. 그러나 구문은 약간 이상합니다. if의 각 지점에있는 화살표는 무엇입니까? 왜 IF에 insyntax가 포함되어 있습니까?

도움이 되었습니까?

해결책

첫 번째 규칙 t- typetest는 유형 검사 규칙입니다. 그것을 함께 읽도록 해 봅시다. 첫째, $ \ gamma $ 은 중요하지 않습니다 (최초의 읽기). 우리는 다음과 같은 구내를 가지고 있습니다 :

  1. $ T_1 $ $ s $
  2. $ x $ $ T $ 다음 $ T_2 $ $ u $
  3. 를 가지고 있습니다.
  4. $ T_3 $ $ u $
  5. 결론은 $ u $ (transcription을 가져야한다 " $를 가져야한다고 생각한다고 생각한다고 생각합니다. : $ \ ~ t_3 $ 에있는 대신 u $ "결론 : $$ \ MATHRM {IF} \; T_1 \; \ mathrm {in} \; t \; \ mathrm {그 다음} \; x \ to_2 \; \ mathrm {else} \; T_3 \ 태그 {1} $$ 이 표현의 의미는 작은 단계의 운영상의 의미 인 다른 두 가지 규칙을 보면서 항해 할 수 있습니다. 여기에 잘못된 설명이 있습니다.

    1. $ t_1 $ $ T $ (1) < SPAN 클래스="수학 컨테이너"> $ T_2 $ $ x $ $ T_1 $ < / span>. 이것은 "downcast", 즉 $ T_1 $ $ s $ 에서 에서 downcast입니다. SPAN 클래스="Math-Container"> $ T $ , Downcast 값은 $ x $ $ T_2 $ 이 실행됩니다.

    2. $ T_2 $ 은 유형 $ T $ (1) 평가 $ T_3 $ . 이것은 다운 캐스트가 불가능할 때 사용하는 "기본값"입니다.

    3. $ T_1 $ 대신 $ v_1 $ 을 사용해야하기 때문에 위의 설명이 잘못되었습니다. 작성자가 귀하에게 알려주고있는 것은 $ T_1 $ $ V_1 $ 으로 평가 한 다음 다운 캐스트를 수행합니다. .

      상상의 OO 언어에서도 똑같은 일이 이렇게 쓸 수 있습니다 :

      S t1 = ...;
      ...
      if (t1 instanceof T) {
        T x = (T)t1;
        t2;
      } else {
        t3;
      }
      
      .

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 cs.stackexchange
scroll top