게시판 인덱스

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

OCaml 궁금한점 질문 받습니다.

 
글 쓰기   답변 달기     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2013)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
강동옥



가입: 2009년 9월 18일
올린 글: 602

올리기올려짐: 2013년9월11일 14:16    주제: OCaml 궁금한점 질문 받습니다. 인용과 함께 답변

오늘 튜토리얼 시간이 짧아서 많은 내용을 소화하지 못했을듯 합니다.

사소한거라도 잘 안되거나 궁금한거 있으면 답글로 달아주세요~ Idea

let~in 에 대한 부연설명

OCaml 파일의 가장 상위 let은 in을 붙이지 않습니다. scope는 자동으로 정의한 위치 아래쪽 전체가 됩니다.
let 하위에 정의할때 in을 씁니다.

아래와같이 정의하면 x,y는 a를 정의하는 동안에만 1과 2가 됩니다.
a는 3이 되겠죠. d는 x가 "a"인 scope이므로 "ab"가 됩니다.
코드:

let x = "a"
let a=
  let x = 1 in
  let y = 2 in
  x+y
let d = x^"b"


실행기 다루기
ocaml -init test.ml 을 하면 test.ml을 단순히 실행하지 않고
인터프리터를 실행시켜줍니다.

ledit ocaml 과같이 ledit을 붙여서 실행시키면 인터프리터내에서 방향키나 백스페이스 등을 사용할 수 있습니다.

OCaml에서 main?
OCaml에서 main함수는 없고 단지 다음과같이
let _ 구문을 이용하면 됩니다.
코드:
let msg = "abc"

let _ =
  print_endline msg


숙제 제출하실때 이렇게 할 필요는 없습니다. 테스트할때만 활용하고
숙제 제출시에는 함수 정의만 제출하시면 됩니다.

여러개의 reference 사용

세미콜론( ; )을 활용합니다.

코드:
let a = ref 0

let b =
  let c = !a in
  a:= c +1 ;
  a:=!a +2 ;
  !a


fun이 아니고 function 뭐지?
function도 역시 fun과 같이 익명함수를 만듭니다.
다만 function은 match with의 기능이 함게 들어있습니다.

코드:
fun x ->
  match x with
  | A -> a
  | B -> b


코드:
function
  | A -> a
  | B -> b

와같이 표현할 수 있습니다.

타입 명시
OCaml은 자동으로 타입을 찾아주기 때문에 타입을 명시해줄 필요가 없습니다.
그러나 코드 가독성을 위해 타입을 명시하고 싶다면 다음과같이 콜론 ( : )을 사용할 수 있습니다.

코드:
let add : int -> int -> string =
  fun x y ->
    string_of_int (x+y)


물론 동일하게 타입이 맞는지 여부를 OCaml이 확인합니다.


강동옥 가 2013년12월3일 11:27에 수정함, 총 1 번 수정됨
위로
사용자 정보 보기 비밀 메시지 보내기
김민석



가입: 2012년 9월 15일
올린 글: 40

올리기올려짐: 2013년9월18일 3:07    주제: 인용과 함께 답변

서로 호출하는 함수를 정의할 땐 어떻게 해야 하나요?

let h x =
g x ...
let g x =
h x ...

위와 같이 g에선 h를, h에선 g를 호출하는 경우는 어떻게 하나요? 앞에서 선언 안된 함수는 호출이 안되는것 같은데 방법이 궁금합니다
위로
사용자 정보 보기 비밀 메시지 보내기
최준원



가입: 2007년 3월 30일
올린 글: 149

올리기올려짐: 2013년9월18일 11:24    주제: 인용과 함께 답변

인용:
서로 호출하는 함수를 정의할 땐 어떻게 해야 하나요?

"and" 키워드를 사용하시면 됩니다.
mutually recursive functions 가 아니더라도 rec 을 붙여야 제대로 동작합니다.
아래 예제를 참고하세요 Smile

코드:
let rec f x = g x
and g x = x;;
위로
사용자 정보 보기 비밀 메시지 보내기
강동옥



가입: 2009년 9월 18일
올린 글: 602

올리기올려짐: 2013년9월29일 22:43    주제: 인용과 함께 답변

타입 정의시에 type constructor는 중복되면 안됩니다


즉, 다음과같이 사용할 수 없습니다.

코드:
type food = Cake | Coffee of string

type dessert = Cookie | Coffee of string | Ade


다음과같이 unique하게 사용해야 합니다.


코드:
type food = Cake | Coffee of string

type dessert = Cookie | CoffeeAsDessert of string | Ade
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
글 쓰기   답변 달기     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2013) 시간대: GMT + 9 시간(한국)
페이지 11

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


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