 |
|
| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
노건일
가입: 2009년 9월 26일 올린 글: 50
|
올려짐: 2009년10월5일 13:25 주제: 사용자로부터 값을 입력받는 방법 |
|
|
OCaml에서 사용자 input은 어떻게 처리할 수 있나요?
이것저것 열심히 들여다보니, scanf가 유력해보이는데..
scanf 종류도 굉장히 많더라고요.
어떻게 사용하는 것인지도 전혀 감이 오질 않아서
조교님께 도움을 청합니다. |
|
| 위로 |
|
 |
허기홍
가입: 2007년 9월 27일 올린 글: 231
|
올려짐: 2009년10월5일 14:20 주제: |
|
|
숙제에는 모든 입력은 int라고 되어있습니다.
| 코드: | | read_int : unit -> int |
를 써보세요.
참고로 저런 기본 함수들은
pervasives 모듈에 정의되어 있습니다.
pervasives 모듈은 다른 모듈과 달리 모듈명.값 이라고 적을 필요없이 값만 쓰시면 됩니다. |
|
| 위로 |
|
 |
노건일
가입: 2009년 9월 26일 올린 글: 50
|
올려짐: 2009년10월5일 21:17 주제: |
|
|
매번 감사합니다 조교님
그래도 아직 넘어야할 산들이 너무 많은것 같네요 -_-;;
let f(x) = match x with
A -> a
| B -> b
와 같은 식으로 코딩을 했는데,
A와 B 조건을 각각 OCaml 실행기로 실행해보면 잘 돌아갑니다.
(즉, match x with
. A -> a 만 돌리고, 또 B만 돌려보고~)
그런데 A와 B를 한꺼번에(위와 같이) 써놓고 돌리면
match에 잘못된 type이 들어갔다는 에러가 나오네요...
뭐가 문제일까요? 진짜 몇시간째 고민하고 있습니다ㅠ
------------- 아래는 제 코드와 에러메시지 입니다.-------------
let rec expval (mem, env, expr) = (* expval : mem * env * expression -> value * mem * env *)
match expr with
ADD(e1, e2) -> match expval(mem, env, e1) with
(val1, mem1, env1) -> match expval(mem1, env1, e2) with
(val2, mem2, env2) -> ((Num (value_int val1 + value_int val2)), mem2, env2)
| SUB(e1, e2) -> match expval(mem, env, e1) with
(val1, mem1, env1) -> match expval(mem1, env1, e2) with
(val2, mem2, env2) -> ((Num (value_int val1 - value_int val2)), mem2, env2)
---------------
Characters 529-540:
| (ADD(e1, e2) : exp) -> match expval(mem, env, e1) with
^^^^^^^^^^^
Error: This pattern matches values of type exp
but is here used to match values of type 'a * 'b * 'c |
|
| 위로 |
|
 |
허기홍
가입: 2007년 9월 27일 올린 글: 231
|
올려짐: 2009년10월5일 22:00 주제: |
|
|
아.. 이런
중첩된 매치를 쓰셔서 ocaml 컴파일러가 헷갈려하네요.
괄호를 써서 구분해주세요.
| 코드: |
let rec expval (mem, env, expr) = (* expval : mem * env * expression -> value * mem * env *)
match expr with
ADD(e1, e2) ->
(
match expval(mem, env, e1) with
(val1, mem1, env1) -> match expval(mem1, env1, e2) with
| (val2, mem2, env2) -> ((Num (value_int val1 + value_int val2)), mem2, env2)
)
| SUB(e1, e2) ->
(
match expval(mem, env, e1) with
(val1, mem1, env1) -> match expval(mem1, env1, e2) with
| (val2, mem2, env2) -> ((Num (value_int val1 - value_int val2)), mem2, env2)
)
|
|
|
| 위로 |
|
 |
|
|
새로운 주제를 올릴 수 없습니다 답글을 올릴 수 없습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group Translated by kss & drssay
|