게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

unit 란 무엇인가요?

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4541.664A Program Analysis (Spring 2006)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
김용태
손님





올리기올려짐: 2006년5월30일 17:25    주제: unit 란 무엇인가요? 인용과 함께 답변

인용:
오류: {max_value: int, min_value: int, ...} 타입이어야 하는데
unit 타입입니다.

코드:
          let
                val range : t_range = { min_value = ref 0, max_value = ref 0 }
            in
                case exp of
                    Num(n)   
                    =>
                    (
                        (range.min_value) := n;
                        (range.max_value) := n
                    )


range.min_value 에 n 을 할당 하려는 상황에서 발생하는데요. 타입을 맞춰 준다고 ref n 하면 int 타입이어야 하는데 _a ref 여야 한다고 에러가 나네요.

nML 기본없이 숙제를 하다보니까 이런 부분에서도 막히네요..ㅠㅠ
과연 이 글에 대한 답변을 통해서 숙제를 마무리 지을 수 있을런지

조교님. 미리 일단 감사드립니다.
위로
진민식



가입: 2006년 3월 21일
올린 글: 67

올리기올려짐: 2006년5월30일 19:59    주제: 인용과 함께 답변

전체 코드를 보지 않아서 확실치는 않치만,

(range.min_value) := n;
(range.max_value) := n

의 수행 결과는 unit type이 됩니다.

nML에서는 x := E의 결과 값의 type이 E의 타입이 되는 것이 아니라.
unit이라는 특별한 type이 됩니다.

따라서 아래 코드를 실행한 결과의 type 은 unit이 됩니다.

코드:
          let
                val range : t_range = { min_value = ref 0, max_value = ref 0 }
            in
                case exp of
                    Num(n)   
                    =>
                    (
                        (range.min_value) := n;
                        (range.max_value) := n
                    )


위의 코드가 {max_value: int, min_value: int, ...} 타입을 원하는
expression의 subexpression으로 쓰인 것 같습니다.
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기
김용태
손님





올리기올려짐: 2006년5월30일 20:18    주제: 그렇다면 unit 타입은 어떻게 변형이 가능한지요.. 인용과 함께 답변

조교님 뿐만 아니라, 다른 분들도 혹시 같은 경험 있으시다면 도움 부탁드립니다.

ㅠㅠ

unit -> int 나, ref int 등으로 시원스레 변경할 수 있는 방법 없을까요?
아 너무 답답하네요.ㅠㅠ
위로
진민식



가입: 2006년 3월 21일
올린 글: 67

올리기올려짐: 2006년5월30일 20:57    주제: 인용과 함께 답변

코드:
let
                val range : t_range = { min_value = ref 0, max_value = ref 0 }
            in
                case exp of
                    Num(n)   
                    =>
                    (
                        (range.min_value) := n;
                        (range.max_value) := n
                    )

위의 code의 의도가 expression n을 evaluate하면,
interval [n,n]을 리턴하는 코드라고 하면,

코드:
ai_exp(exp) =
   case exp of
       Num(n)
          => {min_value = n, max_value = n}
       ....
과 같이 작성하면 되지 않나요?

혹시 중간에 reference로 유지한 값을 다른 곳에서 사용한다면,
그래서 현재 코드를 그대로 유지 하고 싶으시다면,

코드:
let
                val range : t_range = { min_value = ref 0, max_value = ref 0 }
            in
                case exp of
                    Num(n)   
                    =>
                    (
                        (range.min_value) := n;
                        (range.max_value) := n;
                        {min_value = !(range.min_value), max_value = !(range.value)}
                         
                    )

위의 코드 처럼, {min_value = !range.min_value, max_value = !range.value} 와 같이

{max_value: int, min_value: int, ...} 타입을 가지는
recode value를 만들어 주셔도 될 것 같습니다.

참고로,

nML에서는 e1;e2;e3 라는 sequence가 있으면 sequence의 전체
type은 e3 의 타입이 됩니다.(참고로 unit type이 아닐 때는
compiler 가 warning을 내기는 합니다,)
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4541.664A Program Analysis (Spring 2006) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay