컴공지식/프로그래밍언어론
-
pure function이란?(순수 함수)컴공지식/프로그래밍언어론 2024. 11. 16. 18:13
동일한 입력(저장소 포함)으로 항상 동일한 결과를 생성하는 순수 함수이라고 한다.setbox와 같은 상태를 변경하는 연산은 함수형 프로그래밍 관점에서 순수하지 않다고 할 수 있다.입력으로 동일한 박스와 동일한 값이 들어오더라도, 외부 저장소가 업데이트되기 때문에 상태(state)가 달라질 수 있기 때문이다.순수 함수형 프로그래밍은 보통 immutable(불변) 데이터를 선호하지만, 박스 같은 구조를 활용하면 함수형 스타일로 상태를 관리할 수 있는 방법을 제공한다.
-
vs문 이해 예시컴공지식/프로그래밍언어론 2024. 11. 10. 16:22
주의할 점은 BoxV를 쓰는 곳이 Box를 생성하는 부분이라는 점그리고 Box가 메모리 주소 1번을 간접 참조한다는 점
-
-
{with {fac {fun {n} {with {facX {fun {facY} {fun {n} {if0 n 1 {* n {{facY facY} {- n 1}}}}}}} {{facX facX} n}}}} {fac 5}}컴공지식/프로그래밍언어론 2024. 11. 7. 01:24
{with {fac {fun {n} {with {facX {fun {facY} {fun {n} {if0 n 1 {* n {{facY facY} {- n 1}}}}}}} {{facX facX} n}}}} {fac 10}}도저히 맨정신으로는 이걸 이해할 수 없어서 따로 글을 적으며 이해해보려고 한다.{with {fac {fun {n} {with {facX {fun {facY} {fun {n} {if0 n 1 {* n {{facY facY} {- n 1}}}}}}} {{facX facX} n}}}} {fac 5}} 최상위 with 구문with {fac {fun {n} {with {facX {fun {facY} ..
-
JVM은 일종의 인터프리터컴공지식/프로그래밍언어론 2024. 11. 3. 14:57
자바 가상 머신(Java Virtual Machine, JVM)은 일종의 인터프리터라고 볼 수 있다.왜냐면 바이트코드라는 중간 언어를 받아서 그걸 실행하기 때문이다.자바 소스 코드를 컴파일하면 기계어로 바로 바뀌는 게 아니라, 바이트코드라는 형태로 변환된다.그리고 이 바이트코드를 JVM이 하나씩 읽으면서 실행하는 거다.이런 방식이 인터프리터랑 비슷하다. 다만, 요즘 JVM은 JIT(Just-In-Time) 컴파일러도 사용해서 일부 코드를 실행 중에 기계어로 변환해서 성능을 높이기도 한다.그래도 기본적으로 JVM이 바이트코드를 읽고 실행하는 부분은 인터프리터적인 역할을 한다고 볼 수 있으니까,일종의 인터프리터라는 말은 맞는 표현이다.
-
Box 데이터 구조컴공지식/프로그래밍언어론 2024. 11. 2. 17:18
1. Box 데이터 구조란?Box는 하나의 값을 저장할 수 있는 뮤터블 데이터 구조로, 저장된 값을 수정할 수 있어 함수형 언어에서 상태 변화를 관리할 수 있는 기초 구조가 된다. Box는 특정 값을 초기화한 후 필요할 때 값을 수정할 수 있으며, 이를 통해 뮤터블 데이터 구조의 역할을 할 수 있다.2. BFAE 문법: Box 기능 추가Box 기능을 기존 FAE(Functional Arithmetic Expressions) 언어에 추가한 BFAE(Basic FAE + Box) 문법은 다음과 같다:{newbox }: 새 Box를 생성하고 초기화할 수 있다.{setbox }: Box에 저장된 값을 변경할 수 있다.{openbox }: Box에 저장된 값을 추출하여 반환할 수 있다.{seqn }: 두 표현..
-
재귀로 인해 추가된 코드 부분컴공지식/프로그래밍언어론 2024. 10. 27. 17:07
trait Expr case class Num(n: Int) extends Expr case class Add(lhs: Expr, rhs: Expr) extends Expr case class Sub(lhs: Expr, rhs: Expr) extends Expr case class Id(name: String) extends Expr case class Fun(param: Id, body: Expr) extends Expr case class App(funExpr: Expr, argExpr: Expr) extends Expr case class If0(testExpr: Expr, thenExpr: Expr, elseExpr: Expr) extends Expr case class Rec(fname: Id,..