프로그래밍 언어가 할당에 =를 사용하기 시작한 이유는 무엇입니까?


13

대부분의 초기 알고리즘 책에서는 <-할당과 =비교를 참조했습니다. 그러나 현재 =할당에 사용하지 않는 언어 는 Pascal ( :=)과 COOL 과 같은 장난감 언어 뿐입니다 . 현대 프로그래밍 언어가 =수학 평등이라는 의미 대신에 과제 할당 으로 바뀌는 원인은 무엇입니까 ?


8
나를 시작하지 마십시오 ===...
사슴 사냥꾼

1
알고리즘 작업에서 일반적으로 유지됩니다. 알고리즘을 작성할 때 할당하는 세 가지 일반적인 표기법 중 하나입니다 (다른 것들은 :==). 프로그래머가 모든 것을 사용 =한다고해서 수학자가 모두 떨어 졌다는 의미는 아닙니다 .
cpast

@DeerHunter ===는 괜찮습니다.
Darth Egregious

1
나는 중학생 소녀가 울부 짖었다. 소개에서 나는 가르쳤다. 이것은 컴퓨터의 근본적인 기이함입니다. 변수는 본질적으로 존재하지 않으며, 우주의 다른 것과는 다릅니다.

1
User251748 : 내 지갑은 여러 동전 세트, 지폐 및 가끔씩의 종이 조각을 포함하는 실제 변수입니다.
gnasher729 '10

답변:


14

Wikipedia 에 따르면 1949 년에서 1951 년 사이에 디자인 된 Heinz Rutishauser의 언어 슈퍼 플랜에 할당에 등가를 사용하면 Fortran이 특히 대중화했습니다.

나쁜 생각에 대한 악명 높은 예는 과제를 나타내는 등호의 선택이었습니다. 1957 년 포트란으로 돌아가서 언어 디자이너 군대에 의해 맹목적으로 복제되었습니다. 왜 나쁜 생각입니까? “=”가 평등에 대한 비교를 나타내도록하는 것은 100 년의 전통을 넘어 설 것이기 때문에, 참 또는 거짓 인 술어입니다. 그러나 포트란은 그것이 평등의 집행이라는 임무를 의미하게했다. 이 경우 피연산자는 동일하지 않은 기초에 있습니다. 왼쪽 피연산자 (변수)는 오른쪽 피연산자 (표현식)와 동일해야합니다. x = y는 y = x와 같은 의미가 아닙니다.

—Niklaus Wirth, 유리를 통해 좋은 아이디어

Konrad Zuse는 또한 컴파일러가 고안되지 않았지만 Rukalishauser의 Superplan 에 영감을 준 Plankalkul에 등호를 사용 했습니다. 왜 등호를 선택 했습니까? 물어봐야 할 것 같아


4
글쎄, 더 나쁜 아이디어가 있었다. 결국 수학 텍스트 =는 술어와 변수를 정의하는 데 사용 됩니다 (예 :“Let x = 4”에서 y = 4이면 √ (x-y)는 0 임). 이것은 수학 표기법을 명령 적으로 해석하기보다는 선언적으로 이해해야하기 때문에 효과가 있습니다. 기능적 프로그래밍 언어 (예 : ML 제품군)는 변경할 수없는 변수를 기본값으로 사용하므로 =아무런 문제없이 계속해서 이중 역할을 수행 할 수 있습니다. 또는 더 정확하게 말하면 =연산자이자 let구문의 일부입니다 .
amon

2
@amon : 수학의 이중 의미에 동의하지 않습니다. "Let 4 = x"는 "Let x = 4"와 마찬가지로 유효합니다.
에서 오는

4
@COMEFROM "Let 4 = x"는 사용자 이름을 사용하는 INTERCAL 문만큼 부자연 스럽습니다. "x"가 이전에 언급 된 적이없는 경우, "Let x = {something}"또는 "Let x be a {widget}"은 값을 지정하는 것 외에도 변수를 도입하며 이는 규칙에 따라 변수를 먼저 배치합니다. 적어도 직관의 관점에서 이것은 "가치가 같다 ..."라고 말하는 것과는 다른 것이기 때문입니다.

3
@delnan "Let x = 4"는 "Let x ∈ ℤ and x = 4"의 줄임말입니다. 컨텍스트 는 새로운 변수를 도입 한 =다음 다른 곳에서 사용되는 것과 같은 술어 일뿐입니다. 문맥에 따라 "Let x = 4"는 "Let x ∈ ℝ 및 x = 4"를 의미 할 수도 있습니다.
Doval

2
@RobertHarvey 우리는 C 프로그래밍이 아니라 수학적 작문에 대해 이야기하고 있습니다. COME FROM : 예전처럼 분명하게 잘린 것이 아니라는 것을 인정하지만, 수학적 산문은 관습에 기반을두고 있기 때문에 변호사가 "let 4 = x"를 허용하도록 규정 할 수있는 사양이 없습니다. "let x = 4"만큼 유효 하지 않습니다 . 최소한 독자를 혼란스럽게하기 때문에 산문의 주요 목적은 실패한다 .

7

하지만 학교에서 수학을 할 때 "let x = 123"

일반적인 문구였습니다. 초기 버전의 Basic은 "let"키워드를 사용하기 전에 주장했습니다. 따라서 기본적으로 "보자"하는 삶은 이해됩니다.

일반적으로 고려하지 않았지만 실제로 입력 한 시점에서 매우 중요한 핵심 드라이버입니다.

두 가지 가능한 입력 장치가있었습니다.

  • 표준 텔레타이프 머신을 사용하여 종이 리본에 작은 구멍을 뚫어 컴퓨터에서 읽을 수있는 "텔레 타입"입니다. 대문자와 소문자의 표준 aplphabet과 키보드의 맨 윗줄에있는 대부분의 문자를 지원했기 때문에 이것은 나쁘지 않았습니다.
  • 펀치 카드-대기업에서 분류기, 타블 레이터 및 프린터의 사용이 일반적 이었기 때문에 많은 펀치 카드 기계가 걸려있었습니다. 이는 매우 제한된 문자 집합을 지원하며 대문자 만 알파벳과 제한된 수의 "특수"문자를 지원합니다.

텔레타이프는 학술 및 군사 상점, 더 많은 상업 상점에서 카드 펀치에 사용되는 경향이 있습니다. 따라서 파스칼과 같은 학문적 언어는 소문자 식별자와 ": ="와 같은 "현상적인"표기법을 지원했습니다. 보다 상업적인 청중을 목표로하는 언어는 펀치 카드가 주요 입력 형식이 될 것이라고 가정했으며, 따라서 표준 키펀치에서는 사용할 수 없었던 ":;> <"문자에 대한 지원이 제한되는 FORTRAN 및 COBOL과 같은 대문자 만 지원됩니다.

또한 "=". LT. ",".LE. ",".EQ. ",".GE "를 사용하여 비교할 때"= "FORTRAN 초기에 할당에 사용되는 것에 대한 모호성은 없었습니다. ".GT" 통사론.


그러나 나는 어떤 종류의 과제보다 let x = 123더 유사합니다 assert(x == 123).
AKHolland

1
PS 당신이 pedantic을 얻는다면, COBOL "MOVE"구문은 컴퓨터가 실제로하고있는 것에 대한 가장 정확한 설명입니다. "복사"가 훨씬 정확하지만.
제임스 앤더슨

값이 123 인 경우

C ++은 이동 생성자를 발명 한 이후 COBOL "MOVE"가 훨씬 이상하게 들립니다.
gnasher729 오전

나는 항상 LET이 평등 테스트와는 별도로 과제를 만들 것이기 ​​때문에 BASIC에서 의무적으로 유지되어야한다고 생각했습니다. COBOL-ish 속기의 일종. 문제는 소스에 또 다른 토큰을 가져다 줄 것입니다. 그래서 그들은 떨어 뜨 렸습니다.
척 아담스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.