Expression모든 프로그래밍 언어는 수식을 갖고 있을 수 밖에 없다. (프롤로그조차도 포함했으니)수식을 통해 계산한 결과 값을 assignment statement를 통해 변수에 저장한다. Arithmetic Expression수식 중에 제일 간단한 것은 산술 수식이다.산수식은 operator, operand, 괄호, 함수 호출로 구성된다. 대부분의 언어에서 이항연산자는 infix 지만, 일부 언어에서는 prefix 를 사용하기도 한다. (LISP)당연히 postfix를 사용하는 언어도 있다.. 연산자는 크게 단항(unary), 이항(binary), 삼항(ternary) 연산자로 구분된다.피연산자 개수가 12개가 될 수도 있고, 행렬이 될 수도 있고.. 언어마다 다양하다. Arithmetic Exp..
Logic Programming Language기호 논리(symbolic logic) 에 기반을 두고 있는 프로그래밍 언어다.논리적으로 맞는 답을 도출하는 것이 목표이다.논리를 선언하는 것에 신경을 쓰고 (Declarative) 그 도출과정은 신경쓰지 않는다. (procedural)(답이 뭐가 나와야 한다고만 할 뿐, 어떻게 내는지는 신경쓰지 않는다.) 논리형 프로그래밍 언어는 다음과 같은 것들로 구성된다. Proposition (명제)logical statement 로, 참 / 거짓으로 분류가 된다.오브젝트와 오브젝트 간 관계로 구성되어 있다. 오브젝트는 상수, 변수로 구성된다.상수는 오브젝트 자체를 나타내는 기호이다.변수는 명령형 언어의 변수보다, 함수형 언어의 변수에 가깝다. 다른 시점에 다른 오브..
명령형 언어는 변수가 중요하다.이때 변수는 6가지 속성을 가질 수 있었다.address, name, value, type, scope, lifetime 이다.이번 글에서는 이 중 type 에 대해 자세히 정리하려고 한다. Data Type데이터 오브젝트와, 그 오브젝트들에 대해 미리 정의된 연산들을 모은 collection을 정의한 것을 말한다.descriptor는 변수의 attributes 의 collection을 말한다.하나의 오브젝트는 사용자 정의 타입의 인스턴스를 나타낸다. 모든 데이터 타입에 대한 설계시 문제는 어떤 연산들을 정의해야 하는지, 그리고 이들의 동작을 어떻게 명시할 것인지가 중요하다.과연 이것이 필요한 데이터 타입인가, 어떤 오퍼레이션이 필요한가, 어떻게 이들을 정확하게 표시할 것인..
함수형 언어함수형 언어에서 말하는 '함수'는 수학에서 말하는 '함수'를 가지고 프로그램을 만들어보자는 아이디이에서 시작되었다. 우리가 흔히 사용하는 C, C++ 과 같은 언어들은 모두 명령형 언어(imperative languages) 이다.명령형 언어들은 모두 폰 노이만 아키텍쳐에 직접적인 기반을 두고 있다.즉, 폰 노이만 구조를 어떻게 쉽게 사용할 지가 목표인 언어였다.쉽게 사용한다는 말은 효율성이 높다는 의미이다.효율성이 우선 고려사항이었기 때문에, 소프트웨어 개발에 대한 언어의 적합성을 고려하지 않았다. 함수형 언어(functional languages) 는 수학적 함수에 기반을 둔 언어로서, 프로그램이 실행되는 아키텍쳐가 아니라 사용자에게 더 친숙한 이론적 기반을 사용하는 것에 중점을 둔 언어이..
변수 (Variables)우리가 지금 고민하고 있는 언어는 명령형 언어이다.명령형 언어는 '프로세서'와 '메모리'로 구성된 폰 노이만 구조의 컴퓨터에서 실행된다.그리고 프로세스가 한 일의 결과는 메모리에 저장된다. 명령형 언어에서 메모리를 대표하는 것은 변수다.즉, 변수는 메모리 cell 에 대한 추상화이다. 변수 설계시 고려 요소와 특성변수를 설계할 때 고려하는 여러가지 요소가 있다.- 범위 (scope) : 프로그램 내에서 변수가 유효한 범위 (공간)- 수명 (lifetime) : 프로그램 내에서 변수가 유효한 시간, 범위와 수명은 항상 겹치지는 않는다.- 타입 (type) :변수 값의 범위와 사용 가능한 연산자의 집합을 결정한다.변수를 설계할 때는 타입을 확인하는 방법도 필요하다. (type che..
Matching물체를 비교해서 동일한지 비교하는 것을 매칭이라고 한다.보통 두 오브젝트 사이의 유사도 거리를 비교한다. 만약 3개 이상의 매칭 페어가 발견되면, 그 물체의 위치와 방향을 결정할 수 있다. 일반적인 매칭 과정은 간단하다.특징점들 (관심 포인트) 사이의 유사도를 계산한 뒤, 가장 큰 값을 갖는 것을 대응 쌍으로 결정한다.또는 일치하는 관심 포인트 사이의 거리를 계산하여 가장 작은 거리를 갖는 것을 대응쌍으로 결정할 수도 있다. 하지만 매칭과정에서 현실적인 문제가 있다.예를 들어 서로 다른 특징을 매칭쌍으로 결정하거나 (false-positive), 유사도 점수가 낮아 동일한 객체의 특징이 매칭되지 않을 수도 있다. (false-negative) 이 경우, 전형적인 해결책은 많은 매칭 쌍을 찾..
1. hazard 고려하지 않은 회로도 내부에 파이프라인 레지스터만 그려두었다. 1. Fetch branch, jump 는 고려하지 않았다. (사실 파이프라인 회로도에서는 점프를 고려하지 않은 회로도만 있다.)PC + 4, 명령어 주소값을 IF/ID 파이프라인 레지스터로 전달한다.(instruction memory는 실수로 뺐다... 맨 뒤에 추가될 예정이다. 원래 이 단계에서 그리는 것이 맞다.) 2. Decode 우선 R-Format만 고려하여 위와 같이 작성하였다.위 부분에서 잘못된 부분이 아직은 많다. 1. RegWrite은 나중에 파이프라인으로 넘겼다가 나중에 받아와야 하고2. write address 는 rd로 받는게 아니라 rd/rt 중에 골라야 하는데3. 이것도 MEM/WB까지 넘겼다가 받..
Local Feature Extraction서로 다른 이미지에서 물체를 매칭하기 위해서, 각 물체의 '특징'을 추출해야 한다.현대에는 특징점 추출 연산으로 SIFT, SURF 와 같은 연산자를 사용하며, 이들은 스케일 (크기 변봐) , 방향, 밝기 변화에도 불구하고 같은 특징을 갖는 (불변한 값을 갖는) 특징점을 찾는 것을 목표로 한다. 사실 이미지의 특징으로 사용할 수 있는 것 중에 지난 글에서 정리한 방법대로 검출했던 '엣지' 가 있다.하지만 엣지가 제공하는 정보는 강도와 방향, 2가지에 한정된다.보다 다양한 정보를 특징으로 사용하기 위해 엣지대신 gray scale 이미지로부터 추출되는 local feature 를 사용하는 방법이 등장했다. 이 이미지는 같은 물체를 서로 다른 방향에서 찍은 이미지..
Distance VectorBellman-FordDistance Vector 는 벨만포드 알고리즘 기반의 라우팅 알고리즘이다. 벨만포드 알고리즘은 DP 기반의 알고리즘인데, 위와 같은 점화식을 사용한다.나(x)로부터 목적지(y)까지 가는데, 필요한 최단 경로는 나의 이웃 노드 v가 알려준 Dv(y) 값들과 내가 알고있는 v까지의 거리 Cx,v 로부터 최소값을 계산해서 얻는다는 아이디어다.(이때 기존의 Dx(y) 값은 사용하지 않는다. 링크의 비용이 증가하는 쪽으로 갱신되어 최소값도 증가했다면, 증가한 것으로 계산해야 되기 때문이다.) Link State 에서 사용했던 예제 그림에 벨만포드를 그대로 적용해보자.u에서 z로 가는 최단 경로를 찾고자 한다. u와 인접한 v, x, w 로 부터 각각 그 노드(..
Link State링크 스테이트 방식은 말 그대로 각 라우터가 자신이 알고있는 '링크 정보' = '링크 스태이트' 를 모두 공유해서 같은 네트워크 맵을 보는 상태를 만들고, 이 맵을 input으로 다익스트라 알고리즘을 돌려서 최단 경로를 얻는 방법이다. 다익스트라 알고리즘은, 시작점이 고정되어있을 때, 그 시작점으로부터 다른 모든 목적지까지의 최단경로를 구하는 알고리즘이다.따라서 각각의 라우터는 자신을 시작점으로 해서 다익스트라를 돌리면 다른 모든 라우터까지의 최단 경로를 알 수 있다.이를 통해 포워딩 테이블을 만든다. LS 알고리즘을 설명할 때 위와 같은 노테이션을 사용한다.Cxy는 x에서 y로 가는 비용을 말하며, 직접 연결된 링크가 없으면 무한대 값을 갖는다.D(v)는 현재 측정한 v까지 가는 최..