[Computation] 01 Basic Elements of Programming

2 minute read

Published:

In this post, 01 Computation lecture is introuduced.

1.1.1 Computational Process

  • 컴퓨터 안에 사는 추상적 존재 (컴퓨터의 영혼?)
  • 전개되면서 데이터라 부르는 또다른 추상적 존재를 조작
  • 프로그램: 계산적 과정의 전개를 지시하는 규칙의 패턴

1.1.2. 프로그래밍의 기본요소

  • 단순한 아이디어를 조합해서 좀 더 복잡한 아이디어로 만드는 데 사용하는 프로그래밍 언어의 메커니즘
  • R 해석기(interpreter)에 표현식(expression)을 입력하면 해석기는 이를 평가(evaluate)하여 결과를 표시.
  • Read-eval-print loop (REPL) : 해석기의 기본 사이클, R(및 Scheme)에서는 모든 문장(statement)이 값(value)를 가진다. 해석기는 항상 값을 출력한다.
  1. 원초 표현식(primitive expressions): 언어가 다루는 가장 단순한 대상
    • 원초 표현식의 예: 수(number)
  2. 조합 수단(means of combination): 단순한 원소로부터 복합적인 원소를 만드는 방법
    • 표현식을 원초 함수(+, * 등)로 결합 -> 복합 표현식
  3. 추상화 수단(means of abstraction): 복합적인 원소에 이름을 붙이고 하나의 단위로 다루는 방법

1.1.3. 이름붙이기와 환경

1.1.3.1 이름붙이기

  • 계산적 개체(computational objects)를 이름 짓고 그 이름으로 지칭 — 프로그래밍 언어의 필수 요소
  • 이름은 값이 개체인 변수(variable)와 동일시된다.
  • 이름 짓기를 평가한 결과는 따로 표시되지 않는다.
(size <- 2) # if you insist on seeing the value

1.1.3.2 환경(environment)

  • (이름, 개체) 쌍을 보관하는 메모리 공간
  • 이름과 값을 연관짓고 이름으로부터 값을 조회할 수 있으려면 이러한 메모리 공간이 반드시 필요
  • 3장에서 자세히 다룸

1.1.4. 조합 평가하기

  • 주어진 조합을 평가하기 위해

    1. 조합의 하위 표현식(subexpressions)들을 평가한다

    2. (전위 표기법 기준) 가장 왼쪽 하위 표현식의 값인 함수를 다른 하위 표현식들의 값인 전달인수(arguments)에 적용한다.

      `*`(`+`(2, `*`(4, 6)), `+`(3, 12))
      

      조합평가

  • 평가는 재귀적(recursive).

1.1.4.1 원초 표현식의 평가

  • 단계 1을 반복하다 보면 원초 표현식을 평가해야 하는 지점에 도달
    • 수치, 원초 함수, 이름 등
  • 평가 규칙
    • 수의 값은 해당 숫자가 나타내는 값 자체
    • 원초 함수의 값은 해당 연산을 수행하는 일련의 기계 명령
    • 이름의 값은 환경에서 그 이름과 연관된 개체

1.1.4.2 조합 평가 규칙의 예외

x <- 2
`<-`(x, 2)  # prefix form
  • 함수 <-를 전달인자 2개에 적용하지 않음
  • 만일 그런다면 기호 x의 값을 평가해야 함(!)
  • “특수형”(special forms)

1.1.5. 복합함수

1.1.5.1 함수 안의 함수

sum_of_squares <- function(x, y) {
  square(x) + square(y)
}
sum_of_squares(3, 4)

1.1.6 함수 적용의 치환 모형

1.1.6.1 적용 순서 평가와 정상 순서 평가

  • 위에서 배운 조합 평가 방식 은 어떤 식(expression)을 평가할 때, 하위 표현식(subexpression) 을 먼저 평가한 후, 최상위 함수(연산자)를 적용하는 방식이고 그 방식을 함수 인자에 대입하여 생각했을 때, 적용 순서 평가와 정상 순서 평가로 나뉨.

  • 적용 순서 평가 (applicative-order evaluation)

    • 인자로 전달된 식을 먼저 전부 계산한 뒤, 함수에 전달
  • 정상 순서 평가 (normal-order evaluation): 완전 전개 후 축약

    • 함수 호출 시 인자를 계산하지 않고 그대로 대입한 뒤, 실제로 필요할 때 계산.

    조합평가2

    • 정상 순서 평가를 하게 되면 위 예시에서 5+1 을 2번 계산해야 한다. 하지만 적용 순서 평가에서는 한 번만 계산하면 된다.

Leave a Comment