Computer Science/프로그래밍언어 18

OCaml | Reference call in OCaml

목표 : 아래 표현을 이해하기 let _ = reachable_locs := [] in let _ = loc_id := !loc_id + 1 in OCaml에서는 평소에 포인터를 쓰지 않고도 프로그래밍을 할 수 있다. 명시적 포인터가 필요한 경우는 드물다. 예를 들면, 고전적인 명령형 언어로 설명된 알고리즘을 OCaml로 번역할 때는(지금 내가 하려는 것) 명시적인 포인터가 필요하다. OCaml의 ref type ref 참조를 이용해서 reference call을 할 수 있다. 초기화 ref true ref 0 ref "foo" let eof = ref false in ... 대입 eof := true ref된 값을 업데이트하기 위해 := 연산자를 활용한다. !eof = false !(ref false)..

Garbage Collection의 정의와 알고리즘

메모리 재활용 Garbage Collection을 어떻게 정의할까? function gc(M) = 다음 프로그램 실행에서 쭉 사용되지 않을 메모리 M의 영역들을 재활용한다그러나 미래에 가보지 않고는 어떤 메모리의 영역들이 실행될 것인지 정확하게 알 수 없다. 그래서 대략 맞는 안전한 장치를 만들어낸다. 이때 이름을 통해서 메모리에 접근한다는 사실을 이용한다. M(E(x)), M(E(x)(age))그리고 현재 Env 환경이 이름에 들어있는 내용을 결정한다. 접근할 수 있는 메모리 영역은 현재 Env 환경에서 접근할 수 있는 영역과 같다. 이런 과정을 통해 fun gc는 다음과 같이 정의한다. fun gc(E, M) = E (Env)에서 접근할 수 있는 부분을 제외하고 M을 재활용한다. Mark & Swee..

컴퓨터과학이 여는 세계(이광근, 2015) 노트

컴퓨터과학이 여는 세계 - YES24 컴퓨터과학이 여는 세계 - YES24 컴퓨터/소프트웨어의 근본을 알려주는 교양과학서로 디지털 문명을 탄생시킨 동시대 청년 과학도 이야기이다. 정보이론, 암호, 개인인증 등 컴퓨터과학이 보여주는 풍경 아래 흐르는, 원천 아 www.yes24.com 고민할 부분 1. 알게된 점 2. 느낀 점 3. 떠오르는 질문들 01. 마음의 도구 02. 400년의 축적 컴퓨터의 디자인이 출현한 원조 논문의 배경과 내용(p.20) 컴퓨터는 20세기 수학자들의 큰 꿈이 철저하게 좌절되는 과정에서 나온 부산물이었다(p.25) 도대체 컴퓨터의 모델을 튜링기계라 부르고, 컴퓨터 분야의 노벨상을 튜링상이라고 부르는 연유는 뭘까? (p.27) 크루크 궤델의 불완전성 정리, '기계적인 방식만으론 수..

람다 대수 Lambda Calculus란 무엇인가? (ft. Church Encodings)

(참고) What is Lambda Calculus? (ft. Church Encodings) - YouTube what is lambda calculus 람다 계산법이란, 계산을 이해하는 한 가지 수학적인 모델이다. 람다 계산법은 3개의 간단한 규칙으로 구성된다. 람다 계산법은 Ocaml, Haskel 같은 함수형 프로그래밍 언어에 큰 영향을 주었다. lambda calculus의 규칙들 1. Variable 변수 x, y, z와 같은 변수를 둔다. 2. Abstraction 추상화 λ 람다 기호와 함께 무언가를 함수로 정의한다. 함수의 유일한 기본 데이터 형식은 함수이다. λ를 사용하는 기본적인 방식은 λ parameter.return 형태이다. 즉, λx.x는 f(x) = x를 표현하는 방식이며, ..

Unit Test | 유닛 테스트를 통해 신뢰할 수 있는 프로그램 만들기

참고 50. unittest - 단위테스트 ## 1. 테스트와 단위테스트 - 테스트란? - 소프트웨어가 요구사항에 의해 개발된 산출물이 요구사항과 부합하는지 여부를 검증하기 위한 작업 - 단위 테스트란? - 모듈 ... wikidocs.net [파이썬] 단위 테스트의 기본 (unittest) Engineering Blog by Dale Seo www.daleseo.com 컴공 수업을 들으면서, 신뢰할 수 있는 프로그램을 만드는 것이 중요하다는 걸 배웠다. 이를 위한 주요한 방법이 단위테스트인데, 안그래도 낯선 언어인 OCaml로 하자니 잘 손이 가지 않았다. 그래서 익숙한 언어인 파이썬으로 시작해보려고 한다!! unittest 단위테스트 단위테스트는 모듈이나 개별 코드가 예상대로 작동하는지 확인하는 과정..

참고 자료 | 함수형 언어로 imperative language interpreter 만들기

c0deful/haskal-interpreter: simple imperative language interpreter in Haskell (github.com) GitHub - c0deful/haskal-interpreter: simple imperative language interpreter in Haskell simple imperative language interpreter in Haskell. Contribute to c0deful/haskal-interpreter development by creating an account on GitHub. github.com 여기 보면, memory, env, error, type, main에 대한 내용도 잘 나와있다. Writing an Interp..

Data Structure | Zipper Tree (feat. 함수형 언어)

https://en.wikipedia.org/wiki/Zipper_(data_structure) Zipper (data structure) - Wikipedia A zipper is a technique of representing an aggregate data structure so that it is convenient for writing programs that traverse the structure arbitrarily and update its contents, especially in purely functional programming languages. The zipper was describ en.wikipedia.org 목표 * Zipper 트리 구조 이해 * 그림 / 코드로 표현..

TDD( Test Driven Development )이란?

참고) 테스트 코드와 TDD 🧪(feat. 프론트엔드, 백엔드를 위한 테스트 코드) - YouTube 서론 개발자에게 기능에 해당하는 테스트 작성하는 게 매우 중요한 역량 - 기능 구현 코드 - 코드를 작성하면 된다. => 제대로 구현했는지 어떻게 검증할까? 테스트 코드 테스트 코드를 통해 향상할 수 있는지 리팩토링 기능 구현 + 테스트 작성 본론 > What is Testing 소프트웨어 테스팅 - 제품/서비스의 품질을 확인하고 - 소프트웨어의 버그를 검토 - 제품이 예상하는 대로 동작하는지 확인 > Test의 프로세스 - source code - test code : requirement가 있어야 함 - 패스 여부 -> 리팩토링 > TDD Test-driven development 코드 작성 전에 테..

OCaml Tutorial | String 다루기

- 내가 원하는 것 - 파이썬처럼 f"{variable_name}" + "HI" + " " 하기 OCAML Tutorial 18/33: The String Module in OCAML - YouTube # String.length "String";; - : int = 6 # let s = "we are checking the String module";; val s : string = "we are checking the String module" # String.length s;; - : int = 33 # String.sub s 3 3 ;; - : string = "are" # String.sub s 3 12;; - : string = "are checking" # "this"^" "^"is";; -..