의사 코드에서 : =의 의미는 무엇입니까?


25

알고리즘 구현 섹션 에는 다음 코드가 있습니다.

// Return RC low-pass filter output samples, given input samples,
 // time interval dt, and time constant RC
 function lowpass(real[0..n] x, real dt, real RC)
   var real[0..n] y
   var real α := dt / (RC + dt)
   y[0] := x[0]
   for i from 1 to n
       y[i] := α * x[i] + (1-α) * y[i-1]
   return y

: = 무엇을 의미합니까?


2
나는 그것이 철학과 논리 표기법에서 배운다는 것을 배웠다. 이것은 ": =로 정의되었다"고 정의하므로 x : = 1은 x는 1로 정의된다.
Patrick Hughes

3
1990 년에 AP 컴퓨터 과학을 전공했을 때 Pascal을 학습 언어로 사용했습니다. 나는 항상 :="같다"라고 발음 했다. 실제로 이상이 선호 =하고 ==있기 때문에 "="자연 언어는 비교 연산자 (또는 진실의 적어도 문.)
TecBrat

답변:


59

: =는 단일 등호 부호 등식 테스트를 사용하는 언어의 대입 연산자입니다. 그 언어 중 가장 잘 알려진 언어는 파스칼입니다. C의 영향으로 인해 대부분의 언어는 할당과 ==로 전환되었습니다. 이러한 스타일로 훈련 된 일부 오래된 텍스트와 저자는 의사 코드에 : =를 사용합니다. 때때로 할당을 위한 화살표 <-도 볼 수 있습니다.

기사에서 :

input: an array a of length n with array elements numbered 0 to n − 1

inc ← round(n/2)
while inc > 0 do:
    for i = inc .. n − 1 do:
        temp ← a[i]
        j ← i
        while j ≥ inc and a[j − inc] > temp do:
            a[j] ← a[j − inc]
            j ← j − inc
        a[j] ← temp
    inc ← round(inc / 2.2)

일부 현대 언어는 화살을 할당에 사용합니다. 특히 R 은 전역 할당에 사용하고 로컬 할당에는 단일 등호 (=)를 사용합니다.

Sebesta의 프로그래밍 언어 개념과 KN King 박사의 수업 노트에서 과제 표준이 C 또는 Pascal보다 훨씬 더 멀리 떨어져 있음을 알게됩니다. Algol이 설계되었을 때 1958 년에 할당을 위해 : =를 사용하기로 결정한 것 같습니다. 위원회는 미국과 유럽 대표들로 구성되었습니다. 위원회의 일부 독일인들은 Konrad Zuse의 Plankalkul 언어 (제 2 차 세계 대전 중 초안 이었지만 1972 년까지 출판되지 않았으며 2005 년까지는 구현되지 않음)에 익숙했고 그 언어의 제안 된 할당 방법을 따르기를 원했습니다.b+c => a여기서 b + c는 a에 할당됩니다. 위원회는 키펀치 라 불리는 시점에 프로그램을 입력하는 방법에 사용할 ">"가 없다는 이유로이를 = :로 변경했습니다. 그래서 그들은 동등한 콜론을 타협했습니다. 그러나 FORTRAN에 익숙한 미국인들은 (1990 년까지는 소문자가 없었 음) FORTRAN이 그렇게했기 때문에 과제가 왼쪽으로 운영되기를 원했습니다.

그래서 그들은 대신 : =로 변경하고 Plankalkul (독일 이외의 거의 알려지지 않은 언어) 대신 FORTRAN (알려진 구현 언어 임) 스타일에서 오른쪽 대신 왼쪽으로 작업을 수행했습니다. . Algol 60은 Pascal과 C를 포함한 모든 주요 후속 명령 언어에 큰 영향을 미쳤습니다. 따라서 Pascal은 ALGOL의 과제 구문을 유지하고 과제의 왼손잡이를 유지했습니다.

ALGOL은 읽기 쉽고 수학 표기법에 가깝게 설계되었습니다. 향후 20 년 이상 저널에 알고리즘을 작성하는 것은 사실상의 기본 표준입니다. 따라서 1960 년부터 1980 년까지 교육받은 강사와 컴퓨터 과학자들은 이러한 스타일의 표기법에 익숙했을 것입니다.

1964 년에 IBM 029 Keypunch 를 릴리스하면 > 및 <문자가 허용되어 C에 포함되도록하였습니다.


1
누락 된 세미콜론 및 함수 반환 유형 외에도이 코드는 PASCAL, MODULA 또는 다른 Wirth 언어처럼 보입니다.
Ingo

7
대부분의 의사 코드 :=는 할당에 사용 합니다. 수학적 배경을 가진 사람들도 이것을 선호 할 것입니다.
oenone

3
PL / SQL에서 여전히 실용적으로 사용되고 있다고 덧붙여 말하면됩니다.
Jalayn

1
이유를 모르지만 과제로 왼쪽 화살표는 나를 미치게합니다. 9
shabunc

2
Pascal (및 나머지 "Wirth 언어")은 ALGOL에서 가져 왔으며 수학 표기법에서 가져 왔습니다.
메이슨 휠러

18

빠르고 간단한 메모입니다. 의사 코드 는 비공식적이므로 ": ="는 원하는 의미 만 의미합니다. 다른 사람들이 말했듯이, 파스칼과 같은 특정 언어는 동등성을 위해 "="와 혼동을 피하기 위해 할당에 ": ="를 사용하는 반면 다른 언어는 동일한 목적으로 "="와 "=="의 조합을 사용합니다.

실제 의사 코드 와 관련하여 "=", "==", "같음", "지정된", ": =", "has", "수신"또는 보트를 떠 다니는 모든 것을 사용할 수 있습니다. 일관성 있고 의사 코드 내에 사용법과 컨텍스트가있는 한 명확합니다.


6

나는 그것이 할당이라고 생각합니다 (Delphi에서는 할당 연산자라고 생각합니다). y [0] : = x [0]에서 x [0]의 값을 y [0]에 할당합니다.

그러나 AFAIK는 표준 의사 코드 와 같은 것은 없으므로 이론적으로는 아무것도 될 수 있습니다 : =).


8
@loudsight : = 이미 평등이라는 매우 다른 의미를 가지고 있기 때문 입니다. 이미 다른 것으로 이해가 잘되는 연산자를 사용하는 것은 매우 어리석은 일입니다.
Jörg W Mittag

1
@ Jörg W Mittag 글쎄요. 독자가 누구인지에 따라 다릅니다. 대부분의 개발자 (Java, C / C ++ 등)에게는 =가 할당을 의미한다고 생각합니다.

5
@loudsight : 최초의 의사 코드가 작성되었을 때 대부분의 개발자는 태어나지도 않았습니다. 당시는 주로 만드는 알고리즘을 적어 강한 수학적 배경, 사람들이었다 :=수학 표기법에 있기 때문에, 자연 선택 x := v수단 "할 xv반대" x = v"어떤 수단 x과 동일 v"와 것 때문에 혼란의 원인.
back2dos

8
표준 의사 코드가 있다면 많은 의사 의사 코드가 나타납니다.

2
@ back2dos etc 오늘날에도 =할당에 사용 하는 것은 혼란 스럽다. 오래 전에 프로그램을 처음 배웠을 때 얼마나 혼란 스러웠는지 아직도 기억할 수 있습니다 x = x + 1. 기본 고등학교 수학을 배운 후에는 x = x + 1불가능한 모순적인 횡설수설처럼 보입니다. 다음으로 일반 독자 (위해 컴퓨터 과학에 우수한 책을 읽고 내가이를 생각 사용) <-지정을 위해. x <- x + 1이해하기가 훨씬 쉽습니다.
MarkJ

-1

그것은 일반적으로 수학에서와 같은 것을 의미합니다 : 할당.


6
내 지식에 수학에서 "할당"과 같은 것은 없습니다.
Ingo

7
수학에서 :=일반적으로 "정의 된"또는 "정의와 같은"을 의미합니다.
oenone

3
@Ingo : "표현식 x 값의 비트 패턴을 y라는 메모리 위치에 쓰십시오"는 프로그래밍 언어에서의 할당과 완전히 다릅니다. 설명은 할당 문 실행의 가능한 구현입니다.
back2dos

3
@Ingo : 동의하지 않습니다. 사실, 속성의 경우 할당이 호출을 생성하고 코드의 상당 부분이 "현재 아키텍처"에서 직접가 아니라 가상 머신 또는 인터프리터에서 실행된다는 사실뿐만 아니라 변수에 대한 할당도 최적화로 인해 이러한 작업이 필요하지 않습니다. 몇 가지 예외가 있지만 언어는 구현에 대한 일부 가정을 기반으로하지 않고 사양에 따라 사용해야합니다. 변수에 대입 할 때 실제로 말할 수있는 것은 y라는 변수가 표현식 x의 값으로 리바운드된다는 것입니다.
back2dos

3
@ 잉고 : 아니, 말도 안돼. x := 1; y := 2; if (x = 1) y := 3마치 그대로있는 것처럼 컴파일 하는 것이 y := 3합리적인 최적화입니다 (x는 나중에 사용되지 않는다고 가정). 3 개의 할당 중 2 개는 정적 분석을 통해 구현됩니다. 당신의 과제에 대한 "정의"는 포괄적 인 진술로,이 용어에 대한 정의가 의존 할 필요가없는 수많은 가정없이 단순히 언급하지 않습니다.
back2dos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.