스냅(프로그래밍 언어)
SNAP (programming language)| 패러다임 | 명령적 |
|---|---|
| 설계자 | 마이클 바넷, 윌리엄 루삼 |
| 첫 등장 | 1970; 전 ( |
SNAP는 스타일링, 자연, 절차의 줄임말로 1968년 RCA에서 근무하면서 마이클 바넷이 고안한 교육용 프로그래밍 언어로, 이후 컬럼비아 대학에서 인문학의 프로그래밍을 가르치기 위해 사용되었다.그것은 1960년대의 많은 언어와 마찬가지로 필수적인 프로그래밍 언어지만, 고의적으로 장황하게 설명되어, 하이퍼텍스트와 후기 언어의 유행에 있어서 회화 영어처럼 보이려고 시도했다.그 시대의 다른 교육 언어와 달리, SNAP는 상호작용을 의도하지 않았고 펀치 카드를 통해 프로그램되도록 설계되었다.카드를 아끼기 위해 모든 카드에 기간으로 구분된 여러 문구를 쓸 수 있었기 때문에 결과 코드는 종종 하나의 단락처럼 보였다.
역사
1964년 마이클 바넷은 루돌프 헬로부터 허가받은 포토타입 기술을 상용화하기 위해 결성된 RCA의 새로운 그래픽 시스템 부서에 합류했다.원래 디지셋으로 알려졌던 RCA는 이 시스템을 비디오콤프라는 이름으로 팔았다.약 50개의 비디오콤프 시스템이 그것의 역사에 걸쳐 팔렸다.[1]
1964년과 1965년에 바넷은 Videocomp 출력을 초래한 프로그램을 작성하기 위해 PAGE-1로 알려진 페이지 설명 언어를 개발했는데, 이는 후기 PostScript 언어가 레이저 프린터에서 페이지를 생산하는 방식과 유사하다.[2]이 제도의 초기 적용 분야 중 하나는 H.[3] W. 윌슨 회사의 사회과학 지수를 발행하는 것이었다.
이로 인해 바넷은 사회과학에 관심을 갖게 되었고, H. W. 윌슨과 컬럼비아 대학의 인문학과와의 상호작용이 증가하게 되었다.바넷은 1969년 H. W. 윌슨에 자리를 잡았다.그는 또한 컬럼비아 도서관 서비스대학에서 도서관 자동화 강좌를 가르치기 시작했고, 1970년에는 인문학에서 컴퓨터 프로그래밍을 시작했다.[4]그는 1975년에 콜롬비아 교수진에 정규직으로 입사했다.
첫 번째 버전의 SNAP는 OS-360의 IBM 360용 버전도 제작되었지만, FORTRAN IV의[5] RCA의 William Ruhsam이 RCA Spectrum 70을 위해 작성했다.[a]1967년 또는 1968년 어느 [6][b]때이 언어는 특히 1970년대 초반에 상당한 양의 논평을 냈지만 후기 언어에 직접적인 영향을 미친 것은 거의 없는 것으로 보인다.[7]
설명
일반개념
SNAP는 한 줄에 여러 개의 문을 배치할 수 있도록 허용하고 그 기간을 문 구분자로 사용했다.이것은 영어 문장처럼 보이는 코드를 만들었고, 일반적으로 단락처럼 보이는 블록으로 구성되었다.[8]
SNAP는 편집에 라인 번호를 사용하지 않고 대신 FORTRAN의 경우와 같이 지점 대상의 코드 내 라벨을 사용했다. SNAP에서는 텍스트 이름을 괄호 안에 둘러서 코드의 아무 곳에나 라벨을 붙일 수 있었다.(FIRST LABEL). 라벨은 별개의 문장이 아니었고, 그 뒤에 기간이 필요 없었다.[9]
변수 이름에는 공백이 포함될 수 있는데, 이는 오늘날에도 비교적 드물다.변수는 문자열이나 숫자를 포함할 수 있지만 각 변수를 할당하는 데 다른 구문을 사용했다.숫자의 경우, 간단한 구문이 사용되었고,SET I TO 1. SET또한 수학적 연산을 수행하는 데 사용되었다.SET I TO THE PRODUCT OF 10 AND J.보다 일반적인 증가 및 감소 작업에 대해 더 간단한 구문이 제공되었다.INCREASE M BY 1.또는DECREASE M BY 2.[9]
문자열의 경우 일반적으로 긴 구문이 사용되었고,CALL "THIS IS A STRING" THE NEWSTRING.예를 들어, 서수 위치를 참조하여 하이퍼토크 유사 구문을 사용하여 서브스트링에 액세스했다.CALL THE J-TH CHARACTER OF NEWSTRING THE NEWCHAR.또는CALL THE M-TH THROUGH N-TH CHARACTERS OF THE INPUT THE OUTPUT.[9]
SNAP는 또한 "lists"로 알려진 어레이와 유사한 컬렉션을 제공했다.내부적으로는 쉼표로 구분된 문자열로 저장되었다.대부분의 문자열 관련 명령은 추가함으로써 이러한 명령과 함께 사용할 수 있다.THE ... LIST.끝까지예를 들어, 사람들은 다음과 같이 일련의 카드를 읽을 수 있다.READ THE CARD LIST.각 카드를 CARD 변수에 별도의 문자열로 읽는다.예를 들어, 목록 내의 항목은 동일한 서수 구문을 사용하여 액세스되었다.PRINT THE 5-TH CARD또는COPY "NEW STRING" AND CALL IT THE 7-TH CARD.다음을 사용하여 숫자 목록을 만들 수 있음SET THE NUMBER LIST TO 1,2,3,4,5.[10]
문자열 변수는 목록 또는 배열로도 사용될 수 있다.이 작업은 동일한 서수 위치 구문을 사용하되 변수 이름을 참조하는 대신CHARACTER예를 들어,CALL "HELLO" THE 1-ST PART. CALL "WORLD" THE 2-ND PART.두 개의 문자열이 있는 PART라는 배열을 만들 것이다.[9]
SNAP 시스템의 중요한 점은CALL문은 정적이 아니다; KEY를 코드에서 마주칠 때 위치 J에서 문자로 정의하지 않지만, 다음 코드가 KEY에 접근할 때 문장은 KEY를 정의한다.예를 들어.SET J TO 1. PRINT KEY. INCREASE J BY 1. PRINT KEY.두 개의 다른 문자열이 인쇄될 수 있다.이런 식으로CALLBASIC 프로그래밍 언어와 더 많은 공통점이 있음DEF FN 에 대해 수행하는 것보다 사용자 정의 기능SET정적인 문구.[11]
문자열의 정적 복사본은 다음에 의해 만들어질 수 있다.COPY OLDSTRING, AND CALL IT NEWSTRING.기타 문자열 기능 포함APPEND one string TO another string.,OVERWRITE string-expression ON THE M-TH [AND SUBSEQUENT] CHARACTER[S] OF string-name.,DELETE THE M-TH [THROUGH N-TH] CHARACTER[S] OF string-name.그리고INSERT string-expression (BEFORE AFTER) THE M-TH CHARACTER OF string-name.[12]
무조건적인 지점은 다음을 사용하여 호출되었다.CONTINUE예를 들어.CONTINUE WITH THE FIRST LABEL.대체 형태도 있었다.REPEAT THE FIRST LABEL.. 비록 주위 코드의 문맥이 일반적으로 한 형태나 다른 형태는 읽기에 더 자연스럽다는 것을 의미하긴 했지만, 그들 사이에는 아무런 차이도 없었다.또한 이 프로그램의 시작을 다음과 같이 언급할 수 있다.CONTINUE FROM THE BEGINNING."다음과 같이"는 다음 문장을 가리키는 데 사용될 수 있다.CONTINUE AS FOLLOWS.가지를 명확히 하기 위해 사용될 수 있다.[13]
조건부 분기는 if-then(-else) 구조를 사용했다.
IF J IS LES TEN 80 증가 J BY 1, AND 반복 From 그 퍼스트 라벨, 그렇지 않으면 계속 AS 팔로우. 대부분의 언어에서와 같이OTHERWISE섹션은 선택 사항이었다.의 사용에 유의하십시오.AND블록 구조를 제공하는 복합 문구를 작성한다.문자열 비교의 경우 사용된 문자열IS또는 선택 사항IS THE SAME AS.[12]
SNAP는 단순히 통사당을 위해 첨가된 그들 자신의 행동이 없는 많은 다른 키워드를 포함했다.그들 중에는 있었다.THE,A,FROM구문을 더 읽기 쉽게 만들기 위해 프로그래머가 많은 위치에 추가할 수 있다.일반적인 용도를 포함됨READ A RECORD그리고REPEAT FROM THE LOOP START.[13]
진술들
A Natural Language에서.[6]변수와 표현은 이탤릭체로 되어 있다.선택적 형태는 세로 막대로 구분되며, 가새들은 선택적 품목을 둘러싸는 반면, 각도-브래킷은 둘 이상의 양식을 가진 필수 품목을 둘러싸고 있다. 값은 숫자 상수 또는 변수, 따옴표로 구분된 문자열 상수 또는 문자열 변수를 가리킨다.
흐름 제어:
(string constant)- 프로그램 라벨을 정의하다
<CONTINUE REPEAT> [WITH FROM] <label THE BEGINNING [OF THE PROCEDURE] THE NEXT SENTENCE AS FOLLOWS>- 명명된 레이블로 이동하거나 프로그램의 시작 또는 다음 문장으로 계속 이동
IF value string <IS ARE> [THE SAME AS] value string expression[,AND expression...] [, OTHERWISE expression[,AND expression...]]- if-then-ten-den-tency 구성(그 때 및 그 밖의 섹션 내에 임의 개수의 식 포함)
- -string 비교를 통해 다음과 같은 하위 문자열 테스트가 가능
IS THE value[-TH] AND [SUBSEQUENT PRECEDENT] CHARACTERS OF string - -평균 비교 포함
EQUAL TO,LESS THAN,GREATER THAN,UNEQUAL TO,GREATER THAN OR EQUAL TO,LESS THAN OR EQUAL TO - -파일 종료를 테스트할 수 있음
IF THE INPUT IS EXHAUSTED.
- -string 비교를 통해 다음과 같은 하위 문자열 테스트가 가능
- if-then-ten-den-tency 구성(그 때 및 그 밖의 섹션 내에 임의 개수의 식 포함)
TERMINATE- 프로그램을 중지하다
EXECUTE- 프로그램을 운영하다지정된 레이블에서 실행을 시작할 수 있도록 확장되었지만 참조에 설명된 버전에서는 구현되지 않음
수학:
SET numeric variable TO value- 숫자 변수에 값을 할당SET numeric variable TO THE [SUM DIFFERENCE PRODUCT QUOTIENT REMAINDER CEILING GREATER LESSER] OF value AND value- 두 개의 연산자로 수학 함수를 수행하다.
INCREASE variable BY value- 덧셈을 위한 표기법 단순화DECREASE variable BY value- ...그리고 뺄셈.
문자열 조작:
CALL string [THE] string variable- 문자열 함수 생성[FORM A] COPY [OF] string AND CALL IT [THE] string variable- 한 변수의 문자열을 다른 변수에 복사APPEND string TO string variable- 문자열 변수를 다른 문자열과 함께 추가LINK string TO string- 첫 번째 문자열을 두 번째 문자열에 추가하지만 복사하지 않음, 두 번째 문자열에 대한 향후 변경 사항은 다음과 같이 추적됨CALLDELETE THE value[-TH] [THROUGH value [-TH]] CHARACTER[S] OF string variable- 선택한 문자 또는 지정된 범위에서 문자열을 자름OVERWRITE string ON THE value[-TH] [AND SUBSEQUENT PRECEDENT] CHARACTER[S] OF string variable- 문자열의 한 문자를 다른 문자로 바꾸거나, 해당 문자 및 선택한 위치에서 앞으로 또는 뒤로 실행되는 문자로 바꿈.
입력/출력 관련:
SELECT number [FOR <INPUT OUTPUT>]- 다른 입력/출력 작업을 위한 장치를 선택하는 데 사용
READ [A THE] string variable- 펀치 카드 한 장을 읽다
REQUEST [A THE] string variable- 콘솔에서 사용자 입력 요청
FETCH [A THE] string variable- 가장 최근의 레코드를 한 권 읽다.
SELECT에드 장치
- 가장 최근의 레코드를 한 권 읽다.
PRINT [A THE] variable- 라인 프린터로 출력 전송
TYPE [A THE] variable- 콘솔에 출력을 전송하다
PUNCH [A THE] variable- 카드 펀치로 출력을 전송하다
PERFORATE [A THE] variable- 출력물을 종이 테이프에 보내다
WRITE [A THE] variable- 데이터를 최후까지 전송하다
SELECT에드 장치
- 데이터를 최후까지 전송하다
기타:
CONTROL various- 새로운 기능이 추가됨에 따라 언어를 제어하는 데 사용되는 임시 명령어
RESERVE SPACE FOR number <CHARACTERS IN variable ELEMENTS IN [THE] variable LIST- 와 비슷한
DIMBASIC의 문, 문자열을 보유하기 위해 지정된 메모리 양을 설정하거나 목록에서 지정된 문자열 수를 설정한다.사용.RESERVE문자열 또는 목록이 빌드되고 성능이 향상됨에 따라 메모리 작업 방지
- 와 비슷한
예
다음은 카드에서 문자열을 읽은 다음 카드에서 발견된 개별 단어를 출력하는 [14]SNAP에서 주어진 실제 프로그램의 가장 큰 예다.
읽다 A 기록하다. 세트 I 토 1. 세트 J 토 1. 호출 그 J-TH 캐릭터 OF 그 기록하다 그 키. (루프 시작) IF 그 키 IS" " 계속 와 함께 그 지원하다. IF 그 키 IS"" 계속 와 함께 그 지원하다. IF 그 키 IS"." 계속 와 함께 그 지원하다. IF J IS LES TEN 80 증가 J BY 1, AND 반복 From 그 루프 시작, 그렇지 않으면 계속 와 함께 그 출력 액션. (지원하다) 감소하다 J BY 1. (출력 액션) 프린트 그 I-TH 스루 J-TH 성격. OF 그 기록하다. IF J IS LES TEN 79 증가 J BY 2, 세트 I 토 J, AND 반복 From 그 루프 시작, 그렇지 않으면 반복 From 그 시작. 실행 명확히 하기 위해, 다음 버전은 단순히 문장의 공간을 별도의 행에 띄우고 적절한 공백을 추가한다.
읽다 A 기록하다. 세트 I 토 1. 세트 J 토 1. 호출 그 J-TH 캐릭터 OF 그 기록하다 그 키. (루프 시작) IF 그 키 IS" " 계속 와 함께 그 지원하다. IF 그 키 IS"" 계속 와 함께 그 지원하다. IF 그 키 IS"." 계속 와 함께 그 지원하다. IF J IS LES TEN 80 증가 J BY 1, AND 반복 From 그 루프 시작, 그렇지 않으면 계속 와 함께 그 출력 액션. (지원하다) 감소하다 J BY 1. (출력 액션) 프린트 그 I-TH 스루 J-TH 성격. OF 그 기록하다. IF J IS LES TEN 79 증가 J BY 2, 세트 I 토 J, AND 반복 From 그 루프 시작, 그렇지 않으면 반복 From 그 시작. 실행 프로그램READs 단일 카드에서 찾은 문자열 데이터를 명명된 변수에 할당RECORD그리고 두 개의 포인터를 설치한다.I그리고J.라는 함수KEY이다CALL의 Jth 문자를 반환하는 EdRECORD.
그런 다음 Jth 문자를 검사하여 그것이 단어를 깨는 문자인지 아니면 문자열의 끝에서 벗어난 문자인지 확인한다.이 두 가지 모두 사실이 아니면 다음 문자로 옮겨 다시 시도한다.이 루프는 80번째 글자에서 단어 깨는 캐릭터를 찾거나 카드 끝에서 떨어질 때까지 계속된다.카드 끝에 맞았으면 끝까지 뛴다.OUTPUT ACTION.
단어를 깨는 캐릭터를 찾으면, 로 뛰어든다.BACKUP방금 검사한 구두점을 건너뛰기 위해 한 문자를 백업한다.그리고 나서 그것은 자연스럽게 그 속으로 빠져든다.OUTPUT ACTION그 코드는 시작 위치 사이의 끈을I의 현 위치로J.
카드 끝에 도달하지 못한 경우 이동하십시오.J이전에 피했던 문장 부호를 건너뛰고 포인터를 다음(반복) 단어의 시작 부분으로 이동하기 위해 두 글자씩 앞으로 이동하십시오.그 다음 설정I로J다음 단어의 시작 위치를 여기서부터 정하고, 다시 로 돌아가다LOOP START만약 우리가 카드의 끝에 있다면, 전체 프로그램을 다시 시작하고 다른 카드를 읽으세요.
메모들
참조
인용구
- ^ Belzer, Jack; Holzman, Albert; Kent, Allen, eds. (December 1976). "Computer-Aided Composition". Encyclopedia of computer science and technology. CRC Press. p. 350. ISBN 9780824722555.
- ^ Pierson, John (1972). Computer composition using PAGE-1. Wiley Interscience. p. vi. ISBN 9780471689553.
- ^ "Obituary of Michael Barnett (1929-2012)". Physics Today. 29 March 2012. doi:10.1063/PT.4.1776.
- ^ Barnett, Michael (1971). "Computer hardware and software for librarians". In Fasana, P.J.; Veaner, A. (eds.). Collaborative library systems development. MIT Press.
- ^ Barnett & Ruhsam 1968, 페이지 47.
- ^ a b c Barnett & Ruhsam 1968, 페이지 48.
- ^ Raskin, Jeffrey (January 1971). "Programming Languages for the Humanities". Computers and the Humanities. 5 (3): 155–158. doi:10.1007/BF02402180. S2CID 61028443.
- ^ 바넷 1970, 225 페이지
- ^ a b c d 바넷 1970, 228 페이지
- ^ Barnett & Ruhsam 1968, 페이지 49.
- ^ 바넷 1970, 페이지 231.
- ^ a b 바넷 1970, 232 페이지
- ^ a b 바넷 1970, 페이지 230.
- ^ 바넷 1970, 페이지 229.
참고 문헌 목록
- Barnett, Michael; Ruhsam, William (May 1969). Harrison Fuller (ed.). SNAP: an experiment in natural language programming. AFIPS '69, Spring Joint Conference. Boston. pp. 75–87. doi:10.1145/1476793.1476815.
- Barnett, Michael; Ruhsam, William (August 1968). "A Natural Language Programming System for Text Processing". IEEE Transactions on Engineering Writing and Speech. 11 (2): 45–52. doi:10.1109/TEWS.1968.4322334. JSTOR 30199362. S2CID 51670564.
- Barnett, Michael (March 1970). "SNAP: A Programming Language for Humanists". Computers and the Humanities. 4 (4): 225–240. doi:10.1109/TEWS.1968.4322334. JSTOR 30199362. S2CID 51670564.
추가 읽기
- Barnett, Michael (1969). Computer Programming in English. Harcourt, Brace & World. OL 5754250M.