이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
박성희
가입: 2025년 3월 13일 올린 글: 11
|
올려짐: 2025년5월21일 13:40 주제: [숙제 7] Exercise 1, 2 관련 질문입니다. |
|
|
안녕하세요, 프로그래밍언어 수강 중인 박성희입니다.
과제를 하던 중 CPS 와 관련하여 궁금한 점이 생겨 질문 드렸습니다.
과제 스펙 상 Exercise 1에서 변환 전 프로그램의 결과는 Int로 한정되어 있고, 변환하였을 때 (Int -> Result) -> Result 로 되어 있기 때문에 별 문제가 없을 것 같습니다만,
Exercise 2와 같은 경우에는 각각 tau / (tau -> Result) -> Result로 되어 있으며 프로그램의 결과가 정수인 것만 변환 Input으로 받는다는 내용이 있어 보이지는 않습니다. 이것도 tau = Int라고 생각하면 될까요?
그렇다면 Exercise 2에서 프로그램의 결과가 정수가 아닌 특정 함수가 되는 부분에 대해서도 CPS 변환(?)을 수행해야 한 다는 것인가요?
가령. e를 CPS 변환한 것을 [e]라고 했을 때
[\x.(x+1)](\x.(x 1)) 의 실행 결과가 2가 되도록 맞춰 주여야 하는 지 질문드렸습니다.
파서는 Exercise 1과 동일해서 프로그램이 정수만 받는 것으로 생각해서 문제에 대한 잠정적인 답을 구하긴 했습니다만 혹시나 저게 만족한다면 조금 더 생각해 보아야 할 부분이 생길 것 같아 글을 올렸습니다.
그리고 (Exercise 2의 경우는 xcps 함수가 설탕 없는 프로그램을 얻어야 하는 추가 조건이 있지만) 두 상황 모두 run e == run ([e] (추가적인 할 일 없는))
인 상황에서의 결과값이 같은지만 테스트된다고 보면 될까요?
감사합니다. |
|
위로 |
|
 |
오규혁 Site Admin
가입: 2022년 3월 15일 올린 글: 88
|
올려짐: 2025년5월21일 15:08 주제: |
|
|
안녕하세요,
과제 문서에 나와있는 내용은 변환 전 프로그램이 int인 경우에 변환 후 타입을 설명한 것입니다.
항상 모든 변환 전 프로그램이 int라는 의미는 아닙니다.
채점은 변환 한 프로그램이 옳게 변환된 프로그램인지 확인하는 방식입니다.
결과값이 확인하는 경우도 있지만 다른 방식으로도 테스트하여 채점합니다.
조교드림 _________________ TA 오규혁
e-mail: ghoh@ropas.snu.ac.kr
오규혁 가 2025년5월24일 15:37에 수정함, 총 4 번 수정됨 |
|
위로 |
|
 |
박성희
가입: 2025년 3월 13일 올린 글: 11
|
올려짐: 2025년5월22일 8:59 주제: |
|
|
안녕하세요,
빠른 답변 감사드립니다.
우선 다시 숙제 스펙을 꼼꼼히 읽어 보니 앞쪽 두 문제 모두
인용: | 변환할 프로그램은 항상 정수를 최종적으로 계산하는 프로그램으로 한정한다.
|
라는 것을 확인하였음을 확인하여 최종적으로 들어오는 프로그램에 대한 타입에 대한 의문사항은 해소된 것 같습니다.
'과제 문서 내용이 변환 전 프로그램이 int인 경우에 변환 타입을 설명한 것입니다'와 관련하여 추가적으로 질문이 있어 답글을 드렸습니다.
문제 2에서는 tau라는 타입변수를 활용하여
인용: | 변환된 결과 e 는 e와 타입이 다음과 같이 다르다
e : τ
[e] : (τ → Result)×(τ′ → Result) → Result
|
라는 부분이 있었습니다.
변환 전 프로그램이 함수인 경우에도 마찬가지로 함수 내부의 표현식도 CPS로 녹이는 것이 과제의 의도라고 보여지는데요.
그러면 함수를 CPS한 타입과 관련한 두 개의 해석 중 어떻게 해석하는 것이 적절한 지 궁금합니다.
1. 위의 tau는 정수의 예시이고 함수의 CPS - 변환 식은 [인용]의 꼴에서 약간 달라질 수 있다.
2. 어쨌든 그렇게 재귀적으로 구한 함수의 CPS - 변환 식이 [인용]과 같이
e : tau --> [e] : (tau -> 'a) -> 'a
를 만족하여야 한다.
예를 들어 \x.(x+1) : Int -> Int가 있을 때
[\x.(x+1)] : ((Int -> Int) -> 'a) -> 'a
를 만족시켜야 한다.
저는 전자의 경우로 봤는데, CPS로 재귀적으로 들어가는 형태에서 함수 내부식이 CPS로 타입이 바뀌어 위와 같은 형태로 안 나타날 것 같으면서도 정의를 생각해보면 [\x.(x+1)] \x.(x 1)을 생각해 보면 CPS의 정의에 따르면 2를 계산해야 할 것 같아서 후자가 맞을 수도 있겠다는 생각이 들었고 약간 헷갈려서 질문을 드렸습니다.
감사합니다. |
|
위로 |
|
 |
오규혁 Site Admin
가입: 2022년 3월 15일 올린 글: 88
|
올려짐: 2025년5월23일 16:51 주제: |
|
|
안녕하세요,
함수의 경우에는 1번이 맞습니다. 함수의 CPS 변환 식의 타입은 인용 꼴과 다릅니다.
조교드림 _________________ TA 오규혁
e-mail: ghoh@ropas.snu.ac.kr |
|
위로 |
|
 |
|