맨위로가기

레지스터 머신

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

레지스터 머신은 유한 개수의 레지스터를 사용하여 데이터를 저장하고 처리하는 추상적인 계산 모델이다. 카운터 머신, 포인터 머신, RAM, RASP 등이 있으며, 각 레지스터는 음이 아닌 정수를 저장한다. 레지스터 머신은 레지스터, 탤리 카운터/마크, 제한된 명령 세트, 상태 레지스터, 레이블이 붙은 명령 목록으로 구성된다. 산술 연산 명령어와 제어 명령어를 통해 계산을 수행하며, 명령 세트는 튜링 등가성을 갖도록 설계된다. 레지스터 머신 모델은 튜링 기계와 유사한 모델을 정의하려는 시도로 시작되었으며, 왕, 민스키, 멜자크, 람벡, 셰퍼드슨-스터지스, 엘고트-로빈슨, 하트마니스, 쿡과 레크호 등의 연구를 통해 발전했다.

더 읽어볼만한 페이지

  • 계산 모형 - 양자 컴퓨터
    양자 컴퓨터는 양자역학적 현상을 이용하여 정보를 처리하는 컴퓨터로, 큐비트를 통해 0과 1을 동시에 표현하여 특정 연산에서 기존 컴퓨터보다 빠른 속도를 보이며 암호 해독, 신약 개발 등 다양한 분야에 혁신을 가져올 것으로 기대된다.
  • 계산 모형 - 양자 회로
    양자 회로는 양자 컴퓨팅에서 양자 논리 게이트들을 연결한 회로로, 큐비트의 양자역학적 특성을 활용하여 계산을 수행하며 양자 계산의 핵심 요소로서 연구가 활발히 진행되고 있다.
레지스터 머신

2. 레지스터 머신의 종류

레지스터 머신은 복잡도에 따라 크게 네 가지로 분류된다. 각 머신은 하나 이상의 "레지스터"를 사용하며, 각 레지스터는 하나의 양의 정수를 저장한다. 이들 모델은 모두 튜링 완전하며, 계산 속도는 모델의 세부 사항에 따라 달라진다.

레지스터 머신의 종류
종류설명특징
카운터 머신가장 원시적인 모델간접 주소 지정 불가, 명령어는 유한 상태 기계에 존재
포인터 머신카운터 머신과 랜덤 접근 기계(RAM)의 중간 형태카운터 머신보다 추상적, 명령어는 유한 상태 기계에 존재
랜덤 접근 기계(RAM)카운터 머신에 간접 주소 지정 기능 추가명령어 집합 확장, 명령어는 유한 상태 기계에 존재
랜덤 접근 저장 프로그램 기계(RASP)명령어와 데이터가 모두 레지스터에 저장폰 노이만 아키텍처 방식, 범용 튜링 머신과 유사, 이상화된 모델


2. 1. 카운터 머신 (Counter Machine)

카운터 머신은 가장 원시적이고 축소된 형태의 레지스터 머신 이론적 모델이다. 간접 주소 지정을 지원하지 않으며, 명령어는 하버드 아키텍처 방식의 유한 상태 기계에 저장된다.[2] 각 레지스터는 하나의 양의 정수를 저장하며, 제한된 수의 레지스터를 가진다. 일반적으로 다음과 같은 단순한 명령어 집합을 갖는다.

  • 레지스터 값 증가
  • 레지스터 값 감소 (값이 이미 0이면 변경 없음)
  • 레지스터 값이 0인지 확인하고, 조건에 따라 분기


카운터 머신은 튜링 완전하지만, 실제 컴퓨터를 모델링하기에는 너무 단순하다.

2. 2. 포인터 머신 (Pointer Machine)

포인터 머신은 카운터 머신과 랜덤 접근 기계(RAM) 모델의 중간 형태이며, 카운터 머신보다는 추상적이다. 명령어는 하버드 아키텍처 방식으로 유한 상태 기계에 저장된다. 포인터를 사용하여 메모리에 접근하는 방식을 모델링한다.

2. 3. 랜덤 접근 기계 (Random Access Machine, RAM)

카운터 머신에 간접 주소 지정 기능을 추가하고 명령어 집합을 확장한 모델이다. 명령어는 하버드 아키텍처 방식으로 유한 상태 기계에 저장되는 특징을 갖는다. 이는 실제 컴퓨터의 메모리 접근 방식을 더 잘 반영한다.[2]

RAM은 다음과 같은 특징을 갖는다.

  • 카운터 머신에 간접 주소 지정 기능이 추가되었다.
  • 일반적으로 명령어 집합이 확장되어 있다.
  • 명령어는 하버드 아키텍처 방식으로 유한 상태 기계에 저장된다.

2. 4. 랜덤 접근 저장 프로그램 기계 (Random Access Stored Program Machine, RASP)

RASP(Random-Access Stored Program Machine, 임의 접근 저장 프로그램 기계)는 RAM과 달리 명령어 자체도 레지스터에 저장되는 폰 노이만 아키텍처 방식이다. 이는 범용 튜링 머신과 유사하며, 튜링 완전하다.[2]

RASP는 사실상 무한한 레지스터를 가정하여 이상화된 모델이다. 현대 컴퓨터의 작동 방식을 가장 유사하게 반영하지만, 명령어 집합은 실제 컴퓨터보다 단순화되어 있다. 예를 들어 명령어 집합의 수와 복잡성은 RISC에 비해서도 더 적다.[1]

3. 레지스터 머신의 형식적 정의

레지스터 머신은 다음 요소들로 구성된다.

# '''레지스터''' : 유한 개(또는 일부 모델에서는 무한 개)의 레지스터 집합(r_0 \ldots r_n)이 있으며, 각 레지스터는 하나의 음이 아닌 정수(0, 1, 2, ...)를 저장한다. 레지스터는 자체 산술 연산을 수행하거나, 특정 레지스터(예: "누산기")가 산술 연산에 사용될 수 있다.

# '''계수기/표시''' : 모델에 사용되는 이산적이고 구별 가능한 객체 또는 표시다. 가장 단순한 카운터 머신 모델에서는 각 산술 연산마다 하나의 객체/표시만 추가되거나 제거된다. 멜작(), 민스키() 등의 일부 카운터 머신 모델과 대부분의 임의 접근 기계(RAM) 및 임의 접근 저장 프로그램 기계(RASP) 모델에서는 한 번의 연산으로 여러 개의 객체/표시를 추가하거나 제거할 수 있다.

# '''제한된 명령어 집합''' : 명령어는 산술 명령어와 제어 명령어로 나뉜다. 명령어 집합은 모델이 튜링 동치가 되도록 구성된다.

## 산술 명령어 : 모든 레지스터 또는 특정 레지스터에서 작동한다.

## 제어 명령어 : 카운터 머신은 선택적으로 { 복사(r_1,r_2) }를 포함한다. RAM 및 RASP는 { 복사(r_1,r_2) } 또는 { 레지스터 r에서 누산기로 로드, 누산기를 r에 저장, 즉시 상수로 누산기 로드 }를 포함한다. 모든 모델은 레지스터 값에 따른 조건부 "점프"(분기, goto)를 최소한 하나 포함한다.

## 레지스터 주소 지정 방식 :

##* 카운터 머신: 간접 주소 지정이 없다.

##* RAM 및 RASP: 간접 주소 지정이 가능하다.

## 입출력 : 모든 모델에서 선택 사항이다.

# '''상태 레지스터''' : 명령어 레지스터(IR)는 실행될 현재 명령어와 명령어 테이블에서의 해당 주소를 저장하며, 유한 상태 기계 내에 있다. RAM 및 RASP는 레지스터 주소를 결정하기 위해 직접 또는 간접 주소 지정을 사용한다. RASP의 프로그램 카운터(PC)는 현재 명령어 번호를 보관하는 레지스터이다.

# '''명령어 목록''' : 명령어는 일반적으로 순차적으로 실행된다. 카운터 머신, 임의 접근 기계(RAM), 포인터 머신은 하버드 아키텍처를 따르고, 임의 접근 저장 프로그램 기계(RASP)는 폰 노이만 아키텍처를 따른다.

3. 1. 레지스터

레지스터 머신은 여러 개의 레지스터를 사용하며, 각 레지스터는 하나의 음이 아닌 정수를 저장한다. 레지스터는 자체적으로 산술 연산을 수행하거나, 특정 레지스터(예: 누산기)가 산술 연산에 사용될 수 있다.

레지스터는 다음과 같이 구성된다.

  • '''유한 개수의 레지스터''': 유한 개수(또는 모델에 따라 무한 개수)의 레지스터가 있으며, 각 레지스터는 하나의 음이 아닌 정수를 저장한다.


레지스터는 모델에 따라 다음과 같은 특징을 가진다.

  • 자체 산술 연산이 가능하다.
  • 누산기와 같은 특정 레지스터가 산술 연산에 사용될 수 있다.
  • 주소 레지스터로 사용될 수 있다.

3. 2. 카운터/표시

카운터/표시는 모델에 따라 사용되는 이산적이고 구별 가능한 객체 또는 표시다. 가장 단순한 카운터 머신 모델에서는 각 산술 연산마다 하나의 객체/표시가 추가되거나 제거된다. 일부 카운터 머신 모델(예: 멜작(Melzak), 민스키(Minsky))과 대부분의 임의 접근 기계(RAM) 및 임의 접근 저장 프로그램 기계(RASP) 모델에서는 "덧셈"과 "뺄셈"(일반적으로)을 통해 한 번의 연산으로 여러 개의 객체/표시를 추가하거나 제거할 수 있다. 때로는 "곱셈" 및/또는 "나눗셈"도 사용된다. 일부 모델에는 한 번의 동작으로 레지스터 간에 객체/표시 "덩어리"를 이동시키는 "복사"(또는 "이동", "로드", "저장")와 같은 제어 연산이 있다.

3. 3. 명령어 집합

레지스터 머신의 명령어는 크게 산술 명령어와 제어 명령어로 나뉜다. 이 명령어 집합은 모델이 튜링 완전성을 갖도록 구성된다.

레지스터 머신 명령어 집합
구분카운터 머신RAM / RASP
산술 명령어
제어 명령어



산술 명령어는 레지스터의 값을 변경하고, 제어 명령어는 프로그램의 실행 흐름을 제어한다. RAM과 RASP는 최소 구성과 확장 구성으로 나뉘며, 확장 구성은 최소 구성의 명령어에 추가적인 명령어들을 포함한다.

3. 3. 1. 산술 명령어

카운터 머신은 다음 명령어 집합을 가진다: { 증가(r), 감소(r), 0으로 지우기(r) }

RAM과 RASP는 최소 구성으로 다음 명령어 집합을 가진다: { 증가(r), 감소(r), 0으로 지우기(r), 즉시 상수 k 로드, 더하기(r_1, r_2), 정상적인 빼기(r_1, r_2), 누산기 증가, 누산기 감소, 누산기 지우기, 레지스터 r의 내용을 누산기에 더하기, 레지스터 r의 내용을 누산기에서 정상적으로 빼기 }

RAM과 RASP는 확장 구성으로 최소 구성 명령어 집합에 다음을 추가로 포함한다: { 곱하기, 나누기, 다양한 부울 비트 단위 연산 (왼쪽 시프트, 비트 테스트 등) }

3. 3. 2. 제어 명령어

카운터 머신에서는 { 복사(r1, r2) }를 선택적으로 포함할 수 있다. 임의 접근 기계(RAM)과 임의 접근 저장 프로그램 기계(RASP) 모델에서는 대부분 { 복사(r1, r2) } 또는 { 레지스터 r에서 누산기로 로드, 누산기를 r에 저장, 즉시 상수로 누산기 로드 }를 포함한다. 모든 모델은 최소한 하나의 조건부 "점프" (분기, goto) 명령어를 포함하는데, 이는 레지스터 테스트에 따라 { 0이면 점프, 0이 아니면 점프 (즉, 양수이면 점프), 같으면 점프, 같지 않으면 점프 }와 같은 형태를 띤다. 모든 모델은 선택적으로 무조건 프로그램 점프 (goto) 명령어를 포함할 수 있다.

3. 4. 레지스터 주소 지정 방식


  • 카운터 머신: 간접 주소 지정을 지원하지 않으며, 고도로 원자화된 모델에서는 즉시 피연산자를 사용할 수 있다.
  • 임의 접근 기계(RAM) 및 임의 접근 저장 프로그램 기계(RASP): 간접 주소 지정이 가능하며, 즉시 피연산자는 일반적이다.

3. 5. 입출력

입출력은 모든 레지스터 머신 모델에서 선택 사항이다.

3. 6. 상태 레지스터

명령어 레지스터(IR)는 실행될 현재 명령어와 명령어 테이블에서 해당 주소를 저장한다. 이 레지스터는 관련된 테이블과 함께 유한 상태 기계 내에 있다. IR은 모든 모델에서 접근할 수 없다.

RASP의 경우, 프로그램 카운터(PC)는 누산기와 유사하지만, RASP의 현재 레지스터 기반 명령어의 번호를 보관하기 위해 특별히 예약된 또 다른 레지스터이다. 따라서 RASP는 두 개의 "명령어/프로그램" 레지스터를 가지고 있다: (i) IR (유한 상태 기계의 명령어 레지스터) 및 (ii) PC (프로그램 카운터).

3. 7. 명령어 목록

레지스터 머신의 명령어는 일반적으로 순차적으로 실행되며, 분기(점프)가 성공하지 않는 한 순서대로 실행된다. 레지스터 머신은 명령어 저장 방식에 따라 하버드 아키텍처와 폰 노이만 아키텍처로 나뉜다.

  • 하버드 아키텍처: 명령어는 유한 상태 기계의 테이블에 저장된다. 카운터 머신, 임의 접근 기계(RAM), 포인터 머신이 이에 해당한다.
  • 폰 노이만 아키텍처: 명령어는 레지스터에 저장된다. 임의 접근 저장 프로그램 기계(RASP)가 이에 해당한다.


레지스터 머신의 명령어는 크게 산술 명령어와 제어 명령어로 나뉜다.

구분카운터 머신축소된 RAM, RASP확장된 RAM, RASP
산술 명령어증가(r), 감소(r), 0으로 지우기(r)증가(r), 감소(r), 0으로 지우기(r), 즉시 상수 k 로드, 더하기(r_1, r_2), 정상적인 빼기(r_1, r_2), 누산기 증가, 누산기 감소, 누산기 지우기, 레지스터 r의 내용을 누산기에 더하기, 레지스터 r의 내용을 누산기에서 정상적으로 빼기축소된 명령어 + { 곱하기, 나누기, 다양한 부울 비트 단위 연산 (왼쪽 시프트, 비트 테스트 등) }
제어 명령어선택적으로 { 복사(r_1, r_2) }대부분 { 복사(r_1, r_2) } 또는 { 레지스터 r에서 누산기 로드, 누산기를 r에 저장, 즉시 상수로 누산기 로드 }
모든 모델: { 0이면 점프, 0이 아니면 점프(즉, 양수이면 점프), 같으면 점프, 같지 않으면 점프 }와 같은 레지스터 테스트에 따른 최소한 하나의 조건부 "점프" (분기, goto)
모든 모델은 선택적으로 { 무조건적인 프로그램 점프 (goto) }
(RAM, RASP와 동일)
레지스터 주소 지정 방식간접 주소 지정 없음, 고도로 원자화된 모델에서 즉시 피연산자 가능간접 주소 지정 가능, 즉시 피연산자 전형적(RAM, RASP와 동일)


참고:


  • 람벡(1961)과 민스키(1961)의 abacus 모델은 각 명령어에 다음 명령어 식별자를 포함하며, 조건부 분기 명령어는 두 개의 식별자를 갖는다.
  • abacus 모델은 감소와 조건부 분기를 결합한 JZDEC 명령어({ INC ( r, z ), JZDEC ( r, ztrue, zfalse ) })를 사용한다.

4. 레지스터 머신 모델의 역사적 발전

1950년대 초, 컴퓨터를 튜링 기계로 특징짓고, 튜링 동등성을 가진 컴퓨터와 유사한 모델을 정의하려는 두 가지 경향이 나타났다. 이러한 연구는 에밀 포스트의 "태그" 문제와 힐베르트의 문제 중 디오판토스 방정식 문제 해결을 위한 노력의 일환이었다. 연구자들은 덜 논리적이고 더 산술적인 튜링 동등 모델을 찾고자 했다.

한스 헤르메스(1954), 로자 페테르(1958), 하인츠 카펭스트(1959)는 컴퓨터를 튜링 머신으로 특징짓는 첫 단계를 밟았고, 하오 왕(1954, 1957)은 튜링 머신과 동등한 컴퓨터와 유사한 모델을 정의하는 두 번째 단계를 시작했다. 이후 즈디슬라우 알렉산더 멜자크(1961), 요아힘 람벡(1961), 마빈 민스키(1961, 1967)가 이 연구를 발전시켰다.

유리 마티야세비치는 레지스터 머신이 디오판토스 방정식 구성에 특히 적합하며, 튜링 머신처럼 기본적인 명령으로 숫자를 다룬다고 언급했다. 람벡, 멜자크, 민스키, 셰퍼드슨, 스터지스는 거의 동시에 같은 아이디어를 독립적으로 발견했다.

4. 1. 왕 (Wang, 1954, 1957) 모델: 포스트-튜링 머신

에밀 포스트의 1936년 논문을 기반으로 한 하오 왕의 연구는 왕이 4개의 원자 명령어로 구성된 2-기호 포스트-튜링 기계 계산 모델인 Wang B-machine을 정의하게 했다.

  • { LEFT, RIGHT, PRINT, JUMP_if_marked_to_instruction_z }


왕(1954, 1957)과 C. Y. Lee(1961)는 이 네 가지 명령에 포스트 집합의 다른 명령 { ERASE }와 포스트의 무조건 점프 { JUMP_to_ instruction_z } (또는 더 쉽게, 조건부 점프 JUMP_IF_blank_to_instruction_z) 또는 둘 다를 추가했다. Lee는 이를 "W-machine" 모델이라고 명명했다.

  • { LEFT, RIGHT, PRINT, ERASE, JUMP_if_marked, [maybe JUMP or JUMP_IF_blank] }


왕은 그의 모델이 튜링 기계 이론과 컴퓨터의 실제 세계 사이의 "화해"가 되기를 희망했다.

왕의 연구는 매우 큰 영향을 미쳤다. 마빈 민스키(1961, 1967), Melzak(1961), Shepherdson과 Sturgis(1963)에 의해 인용되었다. 실제로 Shepherdson과 Sturgis(1963)는 다음과 같이 언급한다.

:"'…우리는 Wang이 제안한 계산의 실제적 측면과 이론적 측면 사이의 '화해'를 한 단계 더 발전시키려고 노력했다.'"

마틴 데이비스는 결국 이 모델을 (2-기호) 포스트-튜링 기계로 발전시켰다.

4. 2. 민스키 (Minsky), 멜자크-람벡 (Melzak-Lambek), 셰퍼드슨-스터지스 (Shepherdson-Sturgis) 모델

튜링 기계의 테이프를 여러 개의 "레지스터"로 나누는 아이디어가 제시되었다. 민스키와 셰퍼드슨-스터지스는 괴델 수 인코딩을 사용하면 하나의 테이프로도 튜링 동등성을 가질 수 있음을 증명했다. 멜자크의 모델은 조약돌을 구멍에 넣고 빼는 방식으로 레지스터를 모델링했다. 람벡은 멜자크의 모델을 민스키 모델과 동일한 두 개의 단항 명령(INC, DEC-with-test)으로 단순화했다.

4. 3. 엘고트-로빈슨 (Elgot-Robinson, 1964)과 RASP 문제

RASP(임의 접근 프로그램 내장 기계)는 레지스터에 프로그램을 구성하는 명령어를 저장하는 카운터 머신으로 시작되었다. 유한 상태 기계 내의 명령어 레지스터와는 별도로, 프로그램 카운터(PC)와 현재 명령어를 나타내는 수를 저장하는 임시 레지스터가 필요하다. 유한 상태 기계의 명령어 테이블은 (1) 실행해야 할 명령어를 적절한 레지스터에서 가져오고, (2) 해당 명령어를 분석하고, (3) 해당 명령어의 피연산자로 지정된 레지스터를 가져오고, (4) 해당 명령어를 실행한다.

그러나 카운터 머신 기반 RASP는 모든 μ 재귀 함수를 계산할 수는 없다는 문제가 있었다. 이 모델은 본질적으로 유한 상태 기계가 가진 명령어 세트에 제한된다. 카운터 머신 기반 RASP는 임의의 원시 재귀 함수(예: 곱셈)는 계산 가능하지만, 모든 μ 재귀 함수 (예: 아커만 함수)는 계산할 수 없다.

엘고트-로빈슨(Elgot-Robinson)은 RASP 모델에서 프로그램 명령어를 "자기 수정"하는 가능성을 연구했다. 이 아이디어는 폰 노이만 등 (1946-7)에 의해 제안되었고, Melzak (1961)은 이를 "계산된 고투(computed goto)"라고 칭했지만, 실제로는 그 대신 간접 지정을 사용했다. 계산된 고투(Computed goto)는 RASP 프로그램에서 조건부 분기 또는 무조건 분기의 분기 대상을 계산을 통해 구하는 것이다.

하지만 이는 (적어도 괴델 수에 의존하지 않는 한) 해결책이 되지 않는다. 필요한 것은 유한 상태 기계의 명령어 레지스터나 명령어 테이블의 한계를 넘어 명령어를 가져오는 방법이었다.

예를 들어 4개의 무한 길이 레지스터를 가진 카운터 머신을 생각해 보자. 두 수 (m, n)의 곱셈을 하려면 m이나 n의 크기와 관계없이 약 20개의 명령어가 필요하다. 따라서 4개밖에 레지스터가 없는 RASP에서는 이 프로그램을 레지스터에 저장할 수 없다. 프로그램을 괴델 수화하여 하나의 레지스터에 저장할 수 없는 한, 이 RASP는 만능이라고 할 수 없다.

민스키(Minsky, 1967)는 { CLR (r), INC (r), RPT (명령 m을 n에 대해 "a"회 실행) }라는 명령어를 갖춘 카운터 머신을 제시했다. 문제의 해결책은 제시되지 않았지만, 그는 다음과 같이 말했다.

: "…프로그램 카운터는 RPT가 앞으로 몇 번 명령어를 실행해야 하는지를 기억해야 하며, 이것이 유한한 컴퓨터의 제한된 기억 장치를 소비할 수 있다. RPT 명령어 자체는 유한 개수의 레지스터만 필요하지만, 일반적으로 다른 명령어와는 취급 방법을 변경해야 할 것이다." (p. 214)

엘고트와 로빈슨은 이 문제를 해결했다. 그들의 P0 RASP는 인덱스된 명령어 세트로 보강되었다. 이는 더 복잡하지만 더 유연한 간접 지정 방식이다. 해당 모델에서는 레지스터를 지정할 때, 기본 레지스터와 인덱스가 되는 즉시 값 (또는, 기본 즉시 값과 인덱스 레지스터)이 사용된다. 즉, 인덱스된 명령어에서는 피연산자가 하나 더 늘어난다.

4. 4. 하트마니스 (Hartmanis, 1971)

1971년, 유리스 하르토마니스는 자신의 RASP 모델에서 사용하기 위해 인덱싱을 간접 참조로 단순화했다. 간접 지정이란, 포인터 레지스터를 사용하여 명령이 실제로 이용하는 레지스터를 (번호 또는 주소로) 지정하는 것이다. 포인터 레지스터에 제한이 없다면, RAM이나 RASP는 튜링 등가가 된다. 간접 지정되는 레지스터는 명령 형식상 지정되는 위치에 따라 연산의 입력에도 출력 대상에도 된다.

즉, 유한 상태 기계는 대상 레지스터의 주소를 명시적으로 나타낼 필요가 없다. 어떤 포인터 레지스터가 가리키고 있는 레지스터의 내용을 사용하여, xyz라는 연산을 한다. 명령에서는 포인터 레지스터는 명확하게 이름으로 지정해야 하지만, 그 내용이 무엇인지는 알 필요가 없다.

4. 5. 쿡과 레크호 (Cook and Reckhow, 1973)의 RAM

쿡과 레크호(Cook and Reckhow, 1973)는 하트마니스(Hartmanis, 1971)의 모델을 단순화하여 임의 접근 기계(RAM)을 정의했다. 이 RAM은 간접 주소 지정 방식과 하버드 아키텍처를 가진 기계이다. 어떤 의미에서 멜자크(Melzak, 1961) 모델로 돌아갔지만, 훨씬 단순해졌다.

참조

[1] 서적 Structure and Interpretation of Computer Programs MIT Press 1996
[2] 서적 Structure and Interpretation of Computer Programs MIT Press 1996



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com