이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
황재동
가입: 2014년 9월 2일 올린 글: 80
|
올려짐: 2014년11월1일 22:53 주제: 5-3 구현을 하였는데 Not Implemented 라고 뜹니다. |
|
|
5-3 구현을 하였는데 Not Implemented 라고 뜹니다.
module 바깥에 구현을 하였는데 이를 안에 넣어야 하나요?
과거에는 module이 sig.만 있는것과 struct가 있는 것이 있어서 struct 있는것 안에다 작성을 하였는데 이번에는 struct만 있네요. 그래서 안에 넣었더니 make 만들 때 Cannot find file evalute.cmo 라고 뜹니다.
또한, type을 정의하거나 다른 함수를 만들어 사용하는 것이 안되나요?
(안될 거 같지는 않은데,,,,)
만약 새 함수를 만들어서 그곳에서도 lexp를 사용한다면
코드: | let rec myfunction : Lambda.lexp * int * int -> Lambda.lexp =
블라블라 |
이런식으로 작성하여야 하나요? |
|
위로 |
|
 |
강동옥
가입: 2009년 9월 18일 올린 글: 602
|
올려짐: 2014년11월2일 17:09 주제: |
|
|
인용: | module 바깥에 구현을 하였는데 이를 안에 넣어야 하나요? |
라는 질문이 잘 이해가 가지 않습니다. 제공해 드린 뼈대 코드에서, reduce 함수는 module Evaluator 안에 선언되어 있지 않나요? 해당 함수를 구현하시면 됩니다. sig~end가 생략되어 있는 것은 문제가 되지 않을 것입니다.
인용: | 그래서 안에 넣었더니 make 만들 때 Cannot find file evalute.cmo 라고 뜹니다. |
죄송하지만 이러한 현상은 조교 팀이 가지고 있는 모범답안 코드로 재현이 되지 않아서 어떤 상황인지 파악하기가 힘드네요. 제 환경에서는 문제 없이 컴파일됩니다. 다만 에러 메시지에 evaluate.cmo가 아니라 evalute.cmo로 오타가 나 있는 것으로 볼 때, 실수로 Makefile 내용을 건드리신 것이 아닐까 추측해 봅니다.
정리하자면, module Evaluator 안의 reduce함수를 구현하시면 되고, make도 문제 없이 잘 되어야 합니다. 혹시 문제가 지속되면 메일 등을 통해 상세한 증상과 함께 질문해 주셔야 할 것 같습니다.
인용: | 또한, type을 정의하거나 다른 함수를 만들어 사용하는 것이 안되나요? |
네, type이나 함수를 추가적으로 정의하셔도 괜찮습니다. module Evaluator 안에서 정의하시면 됩니다. 새 함수에서 lexp를 사용하시는 방법도 생각하시는 방법이 맞습니다 |
|
위로 |
|
 |
황재동
가입: 2014년 9월 2일 올린 글: 80
|
올려짐: 2014년11월2일 19:03 주제: |
|
|
지금 보니 make 도중에 에러가 나서 그랬던 것이었네요.
그래도 여전히 not imp~가 해결되지 않습니다.
제가 궁금한 것은 다음과 같습니다.
1.
코드: | let reduce : Lambda.lexp -> Lambda.lexp
= fun exp -> raise (Error "not implemented") |
는 reduce에 exp라는 인자가 들어오는 것인가요?
그렇다면 다른함수 solve를 호출한다고 하면
코드: | let reduce : Lambda.lexp -> Lambda.lexp
= fun exp -> raise (Error "not implemented")
solve(exp,[])
|
이렇게 하면 되나요?
2. solve라는 함수를 구현할 때
코드: | let rec solve : Lambda.lexp * ('a * 'b) list -> Lambda.lexp |
가 맞는 방법이라 하셨는데 그렇다면 이 두인자에 대한 변수를 각각 exp, out라 하면
코드: | let rec solve : Lambda.lexp * ('a * 'b) list -> Lambda.lexp = fun exp * out ->
solve 함수의 내용
|
이렇게 바로 붙여서 쓰면 되나요?
module의 사용법에 대하여 잘 이해가 가지 않아서 혼란스럽습니다.
감사합니다.[/code] |
|
위로 |
|
 |
황재동
가입: 2014년 9월 2일 올린 글: 80
|
올려짐: 2014년11월2일 19:06 주제: |
|
|
해결되었습니다...
raise ("not Implemented")
를 지웠어야 했네요..
ㅠㅠ....
2일을 꼬박 고민했는데 허탈합니다.. |
|
위로 |
|
 |
강동옥
가입: 2009년 9월 18일 올린 글: 602
|
올려짐: 2014년11월2일 20:08 주제: |
|
|
네, raise (...) 문을 지우셔야 합니다.. 이 부분을 작성하신 코드로 '대체' 하는 것이 뼈대코드의 의도였는데 명확하지 않았던 것 같네요;;
함수 정의와 관련해서 조금 더 정보를 드리자면, 타입을 명시하지 않을지 명시할지에 따라 두가지 방법으로 정의할 수 있습니다.
(1)
let <함수이름> <함수인자들> =
<함수내용>
(2)
let <함수이름> : <함수타입> = fun <함수인자들> ->
<함수내용>
첫번째 방법은 많이 사용해 오셨을텐데, 두번째 방법에 아무래도 익숙하지 않으신 것 같습니다. 예시로 든 solve함수를 두번째 방법으로 정의하면 아래와 같습니다. (fun(exp,out) -> ... 로 써야 하는 부분을 틀리신 것 같네요)
코드: |
let rec solve : Lambda.lexp * ('a * 'b) list -> Lambda.lexp =
fun (exp, out) ->
<함수내용>
|
이러한 함수 정의와 관련된 문법은 module과는 무관합니다. module은 서로 연관 있는 type정의 및 값(함수 포함) 정의를 묶어놓는 역할을 수행하는 것 뿐입니다.
더 궁금한 점 있으면 질문해 주시기 바랍니다. |
|
위로 |
|
 |
|