첫 번째 루프 구조의 아이디어를 누가 만들었습니까?


53
while (1) {
      if (1+1==2) {
             print "Yes, you paid attention in Preschool!";
      } else {
             print "Wait... I thought 1+1=2";
      }
 }

개발자는 모두 루프를 매우 자주 사용해야 합니다. 우리는 알고 있습니다. 내가 궁금했던 것은 누가 루프를 가지고 있다는 생각을 했던가? 어떤 언어가 루프를 도입 했습니까? 첫 번째 루프 구조는 무엇입니까? while루프 였습니까 ? for루프? 기타?


22
Charles Babbage와 Ada Lovelace가 가장 가능성이 높습니다.
mcfinnigan

28
그것은 샴푸 지침, 헹굼, 거품, 반복에서 발명되었습니다. :-)
Guy Sirton 1

13
@GuySirton, 바보하지 마라, 그 재귀이다.
mowwwalker

18
@ user838584-재귀 인 경우 각각 repeat다른 것을 호출합니다 repeat-결코 끝내지 않을 것입니다. 아마 여자들은 그런 식으로 샴푸 지침을 읽을 수 있지만 남자는 그것을 반복으로 읽으며 머리카락을 씻는 데 몇 분 밖에 걸리지 않습니다.
Steve314

3
루프가없는 컴퓨터는 계산기입니다.
starblue

답변:


102

마찬가지로 mouviciel에밀리오 Garavaglia이 언급 개념 컴퓨팅 앞선다. 그러나, 첫 번째 인스턴스 소프트웨어 루프는 루프이었다 에이다 러브 레이스를 계산하는 데 사용 베르누이 번호 에 설명 된대로 참고 G 의 그녀의 번역 찰스 배비지에 의해 발명 된 분석 엔진의 스케치 에 의해, LF Menabrea는 . 분석 엔진의 반복 기능은 Menabrea에 의해 초기에 주목됩니다 :

이를 이해하기 위해 일련의 작업을 시작할 때 바늘 C를 부서 2에, 바늘 B를 부서 5에, 바늘 A를 부서 9에 놓습니다. 다이얼 C의 해머; 두 번 치고 바늘 B가 두 구간을 넘어갑니다. 후자는 숫자 7을 나타내며, 이는 첫 번째 차이 열에서 숫자 5에 성공합니다. 다이얼 B의 해머가 차례대로 치는 것을 허용하면, 바늘 A가 7 개의 분할을 진행하는 동안 7 번 눌릴 것이다. 이것으로 이미 표시된 9에 추가 된 숫자 16은 연속적인 숫자 9입니다. 이제 우리는이 작업을 다시 시작하면 바늘 C로 시작하여 항상 부서 2에 남겨 두어야합니다.

분석 엔진의 루핑 메커니즘은 Menabrea의 회고록에 명시된 것처럼 Joseph Marie Jacquard의 기계식 직기 (1801) 에서 직접 상속됩니다 .

이제 기계 자체가 사람의 손에 의지하지 않고 어떻게 그 자체가 조작에 적합한 연속적인 처분을 가정 할 수 있는지를 물을 것이다. 이 문제의 해결책은 다음과 같은 방식으로 브로케이드 재료 제조에 사용되는 자카드의 장치에서 가져 왔습니다 .—

두 종류의 실은 보통 직조물로 구별됩니다. 하나는 날실 또는 종 방향 실이고, 다른 하나는 called 또는 횡실로서, 셔틀이라 불리는기구에 의해 이송되고 종 방향 실 또는 날실을 가로 지른다. 브로케이드 된 물건이 필요한 경우, 특정 스레드가 워프를 가로 지르는 것을 방지해야하며, 이는 재현 될 디자인의 특성에 의해 결정되는 연속에 따라 이루어진다. 이전에는이 ​​과정이 길고 어려웠으며, 복사해야 할 디자인에 참석하여 실이 수행해야 할 움직임을 스스로 조절해야한다고 요구했습니다. 그런 다음 특히 다양한 색상의 실이 직물에 들어간 경우 물건에 대한이 설명의 높은 가격이 상승했습니다. 이 제조를 단순화하기 위해 Jacquard는 함께 행동해야 할 각 그룹의 실을 연결하는 계획을 세웠으며, 그 그룹에만 속하는 독특한 레버를 사용했습니다. 이 모든 레버는 막대로 끝나며, 하나의 묶음으로 묶여 있으며 보통 직사각형 받침대와 평행 육면체 형태입니다. 막대는 원통형이며 작은 간격으로 서로 분리되어 있습니다. 따라서, 실을 올리는 과정은 이러한 다양한 레버 암을 필요한 순서로 이동시키는 과정으로 해결된다. 이를 위해, 레버-암 다발의 섹션보다 다소 큰 직사각형의 판지가 취해진 다. 이 시트가 번들의베이스에 적용되고 전진 운동이 페이스트 보드에 전달되면,이 시트는 번들의 모든 막대와 함께 움직입니다. 결과적으로 각각에 연결된 스레드. 그러나 대지가 평평하지 않고 대지와 만나는 레버의 말단에 해당하는 구멍으로 뚫린 경우 각 레버가 후자가 움직일 때 대지를 통과하기 때문에 모두 그대로 유지됩니다. 장소. 따라서 우리는 보드 보드에있는 구멍의 위치를 ​​결정하는 것이 쉽다는 것을 알 수 있습니다. 주어진 순간에 일정한 수의 레버와 결과적으로 실의 소포가 생겨나 고 나머지 부분은 그대로 유지됩니다 이었다. 이 패턴이 실행될 패턴에 의해 지시 된 법칙에 따라 연속적으로 반복된다고 가정하면, 우리는이 패턴이 재료에 재현 될 수 있다고 인식한다. 이를 위해 필요한 법에 따라 일련의 카드를 작성하면됩니다. 순서대로 적절한 순서로 배치하십시오. 그런 다음, 셔틀의 모든 스트로크에 대해 새로운면을 돌릴 수 있도록 연결된 다각형 빔을 통과시켜 레버면 다발에 대해 평행하게 추진됩니다. 스레드는 정기적으로 수행됩니다. 따라서, 브로케이드 조직은 이전에는 구하기 어려운 정밀하고 신속하게 제조 될 수 있음을 알 수있다.

자카드 직기는 반복 출력을 생성하도록 기계를 주문하는 맥락에서 루프를 매우 일찍 적용 하는 것입니다 .

자카드 룸의 기본 개념은 펀치 카드 및 후크 시스템이었습니다. 카드는 매우 두껍게 만들어졌으며 직사각형 구멍이 뚫려 있습니다. 직조에 사용 된 후크 및 바늘은 판지의 이들 구멍에 의해 안내되었다. 고리가 카드에 닿을 때 구멍이 뚫리지 않는 한 고정 된 상태로 유지되었습니다. 그런 다음 후크는 다른 나사산을 삽입하는 바늘로 구멍을 통과하여 원하는 패턴을 형성 할 수있었습니다. 복잡한 패턴은 많은 카드가 차례로 배열되고 /되거나 반복적으로 사용 됨으로써 달성되었습니다.

자카드 직기는 또한 초기 형태의 저장 프로그램으로 인식됩니다 .

지금까지 논의 된 계산 기계 개발의 많은 원동력이 수치 계산에서 비롯된 경우, 가장 초기 형태의 '저장된 프로그램'으로 이어진 동기는 매우 다른 출처, 즉 섬유 산업에서 나왔습니다. 우리는 계산 시스템의 기본 측면 중 하나가 정보를 표현하는 개념이라는 것을 이미 알고 있었지만, 명시 적으로하지 않았지만 지금까지 살펴본 모든 인공물에서이 아이디어의 적용을 식별 할 수 있습니다. 숫자 값에 대한 서면 표현 개발과 그로부터 발생하는 기계적 평행 점 개발. 따라서 주판 프레임에서 자갈의 정렬, 슬라이드 규칙에서 움직이는 스케일의 병치 및 Schickard, Pascal 및 Leibniz의 장치에서 톱니 기어 구성 는 산술 작업의 복잡한 프로세스를 단순화하려는 표현 기법의 모든 예입니다. 그러나, 계산 프로세스가 수행 될 수있는 수 이외의 정보 카테고리 및 그 표현이 존재한다. 1801 년 Joseph-Marie Jacquard가 개발 한 직조 기술은 이러한 범주의 한 예를 보여줍니다.

Charles Babbage는 Jacquard의 보관 절차를 Analytical Engine 에 적용했습니다.

분석 엔진에는 최신 디지털 컴퓨터에서 볼 수있는 많은 필수 기능이 있습니다. 천공 카드를 사용하여 프로그래밍 할 수 있었으며, 직물의 복잡한 패턴을 짜는 데 사용되는 자카드 직기에서 빌린 아이디어입니다. 엔진에는 숫자와 중간 결과를 저장할 수있는 'Store'와 산술 처리가 수행 된 별도의 'Mill'이 있습니다. 그것은 4 개의 산술 함수에 대한 내부 레퍼토리를 가지고 있으며 직접 곱셈과 나눗셈을 수행 할 수 있습니다. 또한 Babbage는이 용어를 사용하지 않았지만 조건부 분기, 반복 (반복), 마이크로 프로그래밍, 병렬 처리, 반복, 래칭, 폴링 및 펄스 형성과 같은 현대적인 이름을 가진 기능도 사용할 수있었습니다. 하드 카피 출력, 펀치 카드,

Jacquard에서 영감을 얻은 기계식 루프 및 보관 절차와 결합 된 Analytical Engine의 조건부 분기는 특히 Babbage의 프린터print "...";부품에 추가하는 경우 귀하의 예와 개념적으로 개념적으로 유사 합니다 .

분명히 기계식 루프는 자카드 직기보다 먼저 시작되었습니다. 루프 방식 으로 작동하는 최초의 알려진 장치 인 안티 키 테라 메커니즘 (100 BCE)이며, 역사를 더 자세히 살펴보면 (그리고 끔찍한 주제에서 벗어나면) 해시계 는 아마도 가장 오래된 사람이 만든 메커니즘 일 것입니다 물론 태양과 다른 항성 궤도의 반복 패턴에 따라 고리에 대한 이해가 분명합니다.

그러나 컴퓨팅 (및 계산 등)의 맥락에서 분석 엔진 및 Ada의 Bernoulli 숫자 계산 알고리즘은 루프를 도입하고 자 쿠드 직기와 적어도 일부 신용을 공유하며 그것.


3
자카드 직기 전에 벨이 실린더회전에 의해 제어되는 브뤼헤의 것과 같은 카리용에서 기계적 루프를 찾을 수 있습니다 .
mouviciel

6
@mouviciel 나는 당신의 종 괴물을보고 당신에게 Antikythera 메커니즘을 올립니다. ; P
yannis

2
2000 년 컴퓨터를 포함하여 백과 사전 답변에 +1!
mouviciel

2
이 아름다운 대답은 제가 그 질문을 가장 좋아하게 만들었습니다. 그것은 질문에 대답 할뿐만 아니라 "질문에 대답하는 방법"의 예입니다. 잘 하셨어요.
Chani

이 답변은 결정적이고 백과 사전이었고 평범하기 때문에 훌륭했습니다!
다이내믹

50

루프는 컴퓨팅 이전의 것입니다. 당신은 그레고리력이 노래하는 것처럼 음악 표기법 으로 빨리 찾을 수 있습니다 .

반복 표시


2
좀 더 자세한 내용을 추가하면 훌륭한 답변이 될 수 있습니다. 그래도 잘 했어
동적

더 많은 참고 자료를 제공하십시오 (루프 / 반복 구성을 특징으로하는 가장 빠른 날짜, 가장 빠른 음악 표기법)
Skippy Fastol

@SkippyFastol 해당 기사에 있습니다 : en.wikipedia.org/wiki/Repeat_sign#Other_notation
cwallenpoole

32

"다시해라"라는 개념은 어떻게 든 인간의 인식에 "원시적"이다. 자연어를 최소한으로 이해 한 어린이에게 이것을 말할 수 있습니다.

불연속 시스템에서는 이전 의 상태에 도달 할 수 있음을 인정하면 모든 유한 상태 머신에서 루프가 발견됩니다 .

가장 간단한 루프는 두 상태 (클럭) 사이의주기입니다. 더 많은 수의 상태가 카운트로 인해 발생할 수 있다고 가정하면, 더 복잡한 모든 머신은 특정 조합 연산을 나타내는 특정 플래그에서 "점프"를 만들 수있는 클럭만큼 증가 된 "카운터"에 구성됩니다. 이것은 모든 마이크로 프로세서 기반 컴퓨터가 기반으로하는 Von Neumann 머신의 핵심입니다.

머신 코드에서 점프는 코딩됩니다 JP-Z-nnnn(여기서 Z는 조건을 기반으로하는 whatefer 플래그입니다). 높은 수준의 언어에서 이것은 거의 즉시

if(z) goto x;

루프는 gotox 레이블이 goto 명령어 자체보다 우선 하는 위치에 지나지 않습니다 .

(수행을위한 등 동안) 다른 모든 배합 그냥 "문법적"더 나은하는 것입니다 길들이다 야생 의 매우 일반적인 경우 고토 일이 일어날 때까지 반복을


4

루핑의 개념은 완전한 컴퓨터와 간단한 계산 기계를 구별하는 것 중 하나입니다. 시스템이 루핑을 지원하지 않으면 튜링이 완료 되지 않아 컴퓨터가 아닙니다.

첫 번째 Turing-complete 디자인은 Babbage의 Analytical Engine 이므로 루핑 개념이 있어야합니다. 그러나 루프가 있지만 튜링이 완료되지 않은 시스템이 있습니다 (다른 것을 생략하기 때문에). Babbage의 작업은 아마도 좋은 출발점이 될 것입니다.


6
람다 미적분에는 루프가 없으며 조건이나 점프가 없지만 튜링이 완료되었습니다. 재귀는 반복만큼 강력합니다.

3
루프를 재귀 함수로 재 작성하고 루프를 제거 할 수 있습니다.
ratchet freak

5
루프에 대한 위키 백과 기사는 재귀를 완전히 관련이없는 개념이 아니라 루프를 표현하는 방법으로 설명합니다. en.wikipedia.org/wiki/Program_loop#Loops 루프가없는 CPU의 경우, 그것들을 구현하는 데 필요한 도구가 있습니다 (임의의 메모리 주소로 점프)
GordonM

8
정확하게 재귀 를 사용하여 루프 를 표현할 수 있습니다 . 그것은 이다 그들이 서로 동형에도 불구하고 전혀 다른 개념. 커피 머그잔은 도넛이 아닙니다. 단지 지질 학자들이 그것들을 혼동하기 때문입니다.

4
사실, 모든 튜링 완료 시스템은 동일한 시퀀스를 여러 번 수행한다는 개념을 표현해야합니다. 메커니즘은 재귀 또는 명령 목록에서 뒤로 점프하거나 동일한 효과를 달성하는 다른 요소가 될 수 있습니다. 시스템이 일련의 명령어를 반복하는 방법을 제공하지 않으면 (목록의 명령어를 물리적으로 반복하는 것 제외) 튜링이 완료되지 않을 수 있습니다. 분석 엔진은 튜링이 완료되었으므로 어떤 형태로든 루핑을 구현해야합니다.
GordonM

3

현대 텍스트 컴퓨터 프로그래밍 언어를 의미한다고 가정하십시오.

Algol60 에는 "FOR", "DO", "UNTIL"및 "WHILE"이 있으므로 1960 년 이전입니다.

레트로 컴퓨팅 박물관은 몇 가지 언어 1960 프리 있습니다.

스웨덴 핵 잠수함을 프로그래밍하기위한 50 년대의 언어 인 Kvikkalkul 은 GOTO 만 가지고 있습니다. (그러나 Kvikkalkul은 거의 확실히 90 년대의 가짜 언어이며 실제 역사적인 언어는 아닙니다.)

Konrad Zuse의 Plankalkül 는 내가 찾을 수있는 가장 빠른 것입니다. "für"구문이 있습니다.


Plankalkül은 최근까지 출판되지 않았으며 Kvikkalkul은 오랫동안 사기로 소문이났습니다. 그런 관점 에서 볼 때 1957 년 현장에서 컴파일러를 운영 하고있는 John Backus와 FORTRAN 팀에게 DO루프를 제공해야합니다.
로스 패터슨

2

Liebniz와 Newton의 작업에는 루프 구문이 포함 된 알고리즘이 포함되어 있습니다. Liebniz는 기계식 계산기를 구축하고보다 정교한 분석을 수행하기 위해 Lovelace가 몇 년 후 기계에 대해 추측했습니다. 이 아이디어에 대한 그의 노트는 스케치이지만, 루프가있는 구조화 된 논리를 설명합니다.

그러나 반복 시퀀스와 카운트 제어 루프에 대한 아이디어뿐만 아니라 루프 라고 부르는 알고리즘은 9 세기의 Muhammad ibn Musa al-Khwarizmi 라는 알고리즘의 이름을 가진 사람의 연구에서 논의됩니다 . 그의 두 번째 책인 al-Kitab al-mukhtasar fi hisab al-jabr wa'l-muqabala (الكتاب المختصر في حساب الجبر والمقابلة) (완료 및 밸런싱에 의한 계산에 대한 요약)는 Newton, Liebniz, Babbage, Lovelace 등에 게 알려졌습니다. .

물론 알 -Khwarizmi는 고대 그리스인들에게 부분적으로 의존했다. 어느 시점에서 우리는 아마 아담과 이브의 헹굼, 거품, 반복으로 돌아갑니다.

Al-Khwārizmī와 그의 작업에 대한 자세한 내용은 다음을 참조하십시오.

http://www-groups.dcs.st-andrews.ac.uk/history/Mathematicians/Al-Khwarizmi.html

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.