 |
|
| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
서상민
가입: 2006년 9월 11일 올린 글: 25
|
올려짐: 2006년9월16일 18:12 주제: hw1 Exercise 5에 관한 질문입니다 |
|
|
문제가 두 2친수를 받아서 2친수의 합에 해당하는 2친수를 내어놓는 함수를 정의하라고 했는데요, 합에 해당하는 2친수의 형태가 여러개 존재할 수 있습니다.
간단한 예를 들면, 합이 1이 될 경우 1에 해당하는 2친수는 쉽게 생각해 +, -+, --+, ---+, ... 이렇게 무수히 존재합니다.
이럴 경우 합으로 나오는 2친수의 형태는 아무거나 되어도 상관없는건가요?
아님 가장 간단한 형태가 되어야 하나요?
(제가 짠 프로그램은 가장 간단한 형태가 안나오네요)
그리고 5번 같은 경우 4번에서 타입 정의한 crazy2를 사용하는데 5.n 파일에 다시 타입 정의를 해야겠죠? (그래야 컴파일이 되니.. -_-a)
성질을 확인하기 위한 crazy2val 함수도 선언해야 하나요?
4.n에 있는 타입 정의 및 함수 정의를 5.n 에서 어떻게 불러서 사용할 수 없는지 궁금합니다.
답변 부탁드립니다. |
|
| 위로 |
|
 |
이준
가입: 2006년 9월 7일 올린 글: 30
|
올려짐: 2006년9월17일 16:33 주제: Re: hw1 Exercise 5에 관한 질문입니다 |
|
|
| 서상민 씀: | 간단한 예를 들면, 합이 1이 될 경우 1에 해당하는 2친수는 쉽게 생각해 +, -+, --+, ---+, ... 이렇게 무수히 존재합니다.
이럴 경우 합으로 나오는 2친수의 형태는 아무거나 되어도 상관없는건가요?
아님 가장 간단한 형태가 되어야 하나요?
(제가 짠 프로그램은 가장 간단한 형태가 안나오네요)
|
간단하게 나오거나 아무거나 나와도 되는것은 아닐꺼라고 생각합니다만..
2친수가 2진수의 변형이라고 보면 계산방식도 2진수와 비슷해야 하지 않을까요?
-0-0+ add 0-0- 하면 2진수의 계산처럼 각각의 자리를 합해 결과값으로
----+ 이라고 나와야 하지 않을까요? 이를 정수형으로 (crazy2val이용하여) 변환할때야 결과가 1이 나오겠지만요..
어디까지나 제 생각이었습니다^^; ( 틀리면 매우 난감합니다..ㅎㅎ)
| 서상민 씀: |
그리고 5번 같은 경우 4번에서 타입 정의한 crazy2를 사용하는데 5.n 파일에 다시 타입 정의를 해야겠죠? (그래야 컴파일이 되니.. -_-a)
성질을 확인하기 위한 crazy2val 함수도 선언해야 하나요?
4.n에 있는 타입 정의 및 함수 정의를 5.n 에서 어떻게 불러서 사용할 수 없는지 궁금합니다.
답변 부탁드립니다. |
이건 저도 잘 몰라서 그냥 두 파일모두 crazy2를 정의했구요,
$use "4.n" 해서 crazy2val을 불러서 써봤거든요? 그랬더니 타입에러뜨더군요..
crazy2를 두번 정의해서( 이미 5.n은 사용중이니까요 ) 그런거 같더군요..
"crazy2 타입이어야 하는데 crazy2타입입니다." 라는 매우 황당한 에러가..;;
그래서 테스트 할때는 아예 5.n에 crazy2val을 다시 정의해서 사용했답니다.
제출할때는 지워야 하지 않을까요? 역시 제 생각이었습니다.  |
|
| 위로 |
|
 |
송수현
가입: 2006년 9월 4일 올린 글: 25
|
올려짐: 2006년9월17일 18:10 주제: |
|
|
서상민 씀:
간단한 예를 들면, 합이 1이 될 경우 1에 해당하는 2친수는 쉽게 생각해 +, -+, --+, ---+, ... 이렇게 무수히 존재합니다.
이럴 경우 합으로 나오는 2친수의 형태는 아무거나 되어도 상관없는건가요?
아님 가장 간단한 형태가 되어야 하나요?
(제가 짠 프로그램은 가장 간단한 형태가 안나오네요)
저도 처음에 이걸 가지고 여러모로 생각을 해 봤는데(가장 간단한 형태라면, 5같은 경우 +0+, -++의 2가지가 있게 됩니다) 문제 자체에 나와있는
| 인용: | 위의 crazy2add는 다음의 성질이 만족되야 한다: 임의의 2친수 z과 z'에 대해서
| 코드: | | crazy2val (crazy2add(z,z')) = crazy2val(z) + crazy2val(z'). |
|
를 봐서, 결국은 저 성질만 만족되면 모두 정답일 듯 합니다.
또한, TA page - 숙제 제출 유의사항 - 반드시 지켜주실 것들 을 보면
| 인용: | 3. nmlc 로 컴파일되는 올바른 nML 프로그램을 냅니다.
컴파일되지 않는 프로그램은 내지 않은 것과 똑같이 처리됩니다. 군더더기를 포함하지 않는 것은 좋지만, 파일 자체로 돌아가는 프로그램을 내셔야 합니다. 특히 타입정의는 숙제에 있다라든가, 무슨 무슨 함수 정의는 숙제에 나와있는대로다라는 식으로 주석만 다는 것은 무효입니다. 가령, nML 바로실행 컴파일러의 입력 내용을 파일에 담아 제출하는 경우가 있는데, 이는 올바른 nML 프로그램이 아닙니다. nml 1.n과 같이 실행하여 올바른 결과를 내는 1.n 파일을 제출하십시오. |
이라 되어있네요. 하여, 5.n에도 type을 명시해 주시는게 좋을 듯 합니다.  |
|
| 위로 |
|
 |
박대준
가입: 2005년 10월 7일 올린 글: 245
|
올려짐: 2006년9월18일 13:26 주제: |
|
|
| 송수현 씀: | 서상민 씀:
간단한 예를 들면, 합이 1이 될 경우 1에 해당하는 2친수는 쉽게 생각해 +, -+, --+, ---+, ... 이렇게 무수히 존재합니다.
이럴 경우 합으로 나오는 2친수의 형태는 아무거나 되어도 상관없는건가요?
아님 가장 간단한 형태가 되어야 하나요?
(제가 짠 프로그램은 가장 간단한 형태가 안나오네요)
저도 처음에 이걸 가지고 여러모로 생각을 해 봤는데(가장 간단한 형태라면, 5같은 경우 +0+, -++의 2가지가 있게 됩니다) 문제 자체에 나와있는
| 인용: | 위의 crazy2add는 다음의 성질이 만족되야 한다: 임의의 2친수 z과 z'에 대해서
| 코드: | | crazy2val (crazy2add(z,z')) = crazy2val(z) + crazy2val(z'). |
|
를 봐서, 결국은 저 성질만 만족되면 모두 정답일 듯 합니다.
|
네, 송수현님의 말씀하신 것 처럼, 위의 성질만 만족되면 됩니다.
구현에 따라 얼마든지 다른 표현방식이 존재하기 때문입니다.
하지만, 짧게 표현할 수 있는 값을 길게 표현하는 것은 최적화 관점에서 보면 바람직하지 않지요.
원하신다면, 주어진 2친수값을 가장 짧게 표현하도록(unique하지 않습니다.)하는 치환하는 루틴 등을 사용해서 최적화된 결과값을 리턴하도록 하셔도 무방합니다.
단, 이때, 주석으로 그러한 사실과 알고리즘을 기술해 주실 경우, 구현의 정확도에 따라서 추가점수를 드리도록 하겠습니다.
| 송수현 씀: | 또한, TA page - 숙제 제출 유의사항 - 반드시 지켜주실 것들 을 보면
| 인용: | 3. nmlc 로 컴파일되는 올바른 nML 프로그램을 냅니다.
컴파일되지 않는 프로그램은 내지 않은 것과 똑같이 처리됩니다. 군더더기를 포함하지 않는 것은 좋지만, 파일 자체로 돌아가는 프로그램을 내셔야 합니다. 특히 타입정의는 숙제에 있다라든가, 무슨 무슨 함수 정의는 숙제에 나와있는대로다라는 식으로 주석만 다는 것은 무효입니다. 가령, nML 바로실행 컴파일러의 입력 내용을 파일에 담아 제출하는 경우가 있는데, 이는 올바른 nML 프로그램이 아닙니다. nml 1.n과 같이 실행하여 올바른 결과를 내는 1.n 파일을 제출하십시오. |
이라 되어있네요. 하여, 5.n에도 type을 명시해 주시는게 좋을 듯 합니다.  |
네, 맞습니다.
"5.n" 파일에도 type정의와 crazy2val같이 필요한 모든 함수를 추가해주셔야 합니다.
즉, 5.n파일 하나만있어도 crazy2add가 잘 수행되도록 해주셔야 합니다.
덧붙여, (5번 숙제 제출시에는 이렇게 하시면 안됩니다만 )
다른 파일에서 정의된 함수를 불러 사용하시려면, 그 함수가 모듈로 감싸져있어야 합니다.
그리고 사용하는 파일에서는 모듈이름을 앞에 붙여 사용하시면 됩니다.
예를 들어,
a.n파일이 다음과 같을 때,
| 코드: | structure Crazy2val = struct
type crazy2 = NIL | ...
val rec crazy2val : crazy2 -> int = fn x => ...
end
|
b.n파일을 다음과 같이 작성하신 후,
| 코드: | val rec crazy2add : (Crazy2val.crazy2 * Crazy2val.crazy2) -> Crazy2val.crazy2 = fn (x,y) => ...
|
컴파일 시, 다음과 같이 하시면 됩니다.
| 코드: | nmlc -c a.n
nmlc -c b.n
nmlc -o crazy a.cmo b.cmo
|
|
|
| 위로 |
|
 |
|
|
새로운 주제를 올릴 수 없습니다 답글을 올릴 수 없습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group Translated by kss & drssay
|