Computer Science/프로그래밍언어

OCaml | Reference call in OCaml

토마토. 2022. 5. 12. 19:42

목표 : 아래 표현을 이해하기

let _ = reachable_locs := [] in
let _ = loc_id := !loc_id + 1 in

OCaml에서는 평소에 포인터를 쓰지 않고도 프로그래밍을 할 수 있다. 

명시적 포인터가 필요한 경우는 드물다. 

예를 들면, 고전적인 명령형 언어로 설명된 알고리즘을 OCaml로 번역할 때는(지금 내가 하려는 것)

명시적인 포인터가 필요하다. 

 

OCaml의 ref type

ref 참조를 이용해서 reference call을 할 수 있다. 

 

<1> 초기화

ref true
ref 0
ref "foo"
let eof = ref false in ...

 

 

<2> 대입

eof := true

ref된 값을 업데이트하기 위해 := 연산자를 활용한다. 

 

!eof = false

!(ref false) = false

와 같은 표현은

할당하는 것이 아니라, 값이 같은지를 확인하는 문장이다. 

 

<3> 값

!eof
!n

 


예제

let eof = ref false in
	while not !eof do
    	let len = input chan buffer 0 size in
        	if len > 0 then
            	print_string (String.sub buffer 0 len)
            else 
            	eof := true
    done

참고 ) DLDC OCaml Class 1: References (uchicago.edu)