맨위로가기

로고 (프로그래밍 언어)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

로고는 1967년 볼트, 베라넥 앤드 뉴먼(BBN)에서 개발된 프로그래밍 언어이다. 인공지능, 수리 논리학, 발달 심리학의 영향을 받았으며, 어린이들이 수학적 개념을 배우도록 설계되었다. 터틀 그래픽스를 특징으로 하며, 간단한 명령어를 사용하여 화면에 그림을 그릴 수 있다. 다양한 구현체가 존재하며, 스몰토크, 스크래치 등 여러 프로그래밍 언어에 영향을 미쳤다.

더 읽어볼만한 페이지

  • 리스프 프로그래밍 언어 계열 - 클로저 (프로그래밍 언어)
    클로저는 리치 히키가 개발한 JVM 기반의 함수형 프로그래밍 언어로, 자바와의 호환성을 특징으로 하며 불변 데이터 구조와 STM을 활용한 동시성 관리, 그리고 REPL 환경, 매크로 시스템 등의 기능을 제공한다.
  • 리스프 프로그래밍 언어 계열 - 커먼 리스프
    커먼 리스프는 1980년대 초 여러 리스프 방언 통합 시도에서 시작된 언어로, S-표현식 문법, 다양한 자료형, 일급 함수, 매크로, CLOS를 특징으로 하며, ANSI 표준으로 정의되어 다양한 분야에서 활용된다.
  • 교육용 프로그래밍 언어 - 하스켈
    하스켈은 해스켈 커리의 이름을 딴 순수 함수형 프로그래밍 언어로, 여러 함수형 언어 통합 노력의 결과로 탄생하여 느긋한 계산법, 패턴 매칭, 타입 클래스, 모나드 등의 특징을 가지며 GHC가 표준 구현체로 사용된다.
  • 교육용 프로그래밍 언어 - 파이썬
    파이썬은 귀도 반 로섬이 개발한 객체 지향적 프로그래밍 언어이며, 간결한 문법과 다양한 라이브러리를 통해 웹 개발, 과학 계산, 인공지능 등 다양한 분야에서 활용된다.
로고 (프로그래밍 언어) - [IT 관련 정보]에 관한 문서
기본 정보
이름로고
영어 이름Logo
종류컴퓨터 프로그래밍 언어
패러다임다중 패러다임 프로그래밍: 함수형 프로그래밍, 교육용 프로그래밍 언어, 절차적 프로그래밍, 반사 프로그래밍
계열리스프
설계자월리 퓨어지그, 시모어 페퍼트, 신시아 솔로몬
개발자볼트, 베라넥 앤 뉴먼
발표 연도1967년
타입 시스템동적 타이핑
구현체UCBLogo 외 다수
방언스타로고, 넷로고, 애플로고
영향을 준 언어에이전트시트, 넷로고, 스몰토크, Etoys, 스크래치, 마이크로소프트 스몰 베이직, KTurtle, REBOL, 박서
영향을 받은 언어리스프
코흐 곡선 터틀 그래픽
L-시스템 (코흐 곡선) 터틀 그래픽
LOGO의 출력 예
LOGO의 출력 예

2. 역사

로고는 1967년 매사추세츠 주케임브리지에 있는 연구 기관 볼트, 베라넥 앤드 뉴먼(BBN)에서 와 시모어 페퍼트가 개발했다.[30][31] 인공지능, 수리 논리학, 발달 심리학의 성과를 기반으로 하고 있다. 최초 4년 동안 BBN에서 LOGO 개발과 LOGO에 의한 교육 연구가 이루어졌다.

최초의 콘셉트는 1966년 시모어 페퍼트, 월리 퍼제이그, 사이에서 오간 논의로 생겨났으며, 페퍼트가 본질적인 기능의 세부 사항을 설계하고, 보브로가 프로토타입을 구현했다. 신시아 솔로몬, 리차드 그랜트, 프랭크 프레이저, 폴 웨크셀블랫도 개발에 기여했다.[32] LOGO의 초기 공개 버전은 "Ghost"라는 이름으로, PDP-1의 LISP로 작성되었다.

목표는 아이들이 단어와 문장으로 놀 수 있는 수학 놀이터를 만드는 것이었다.[33] LOGO의 설계에서는, 진입 장벽이 낮고 사용하기 쉬우며, 에러의 원인을 알기 쉬운 점이 중요시되었다. 터틀 (거북이)을 채택한 것은, 시각적인 피드백을 즉시 얻을 수 있고, 디버깅을 즉시 할 수 있기 때문이었다.

LOGO로 조작 가능한 거북이 로봇이 MIT에서 만들어진 것은 1969년의 일이며, 그 이전부터 화면상에서 작동하는 가상적인 터틀이 존재했다. 현대의 LOGO도, 최초의 터틀의 기본 컨셉에서 크게 변하지 않았다. 최초의 거북이 로봇은 유선식이었으며, 무선 조종이나 무선 조종이 아니었다. 후에 BBN은 어빙(Irving)이라는 거북이 로봇을 개발했는데, 그것은 촉각 센서를 가지고 전진, 후진, 회전 등의 움직임을 할 수 있었고, 벨을 울리는 기능도 갖추고 있었다. 1968년부터 69년에 걸쳐, 매사추세츠 주 렉싱턴의 중학교에서 1년간 LOGO 교육이 실시되었다. 가상적인 터틀이나 거북이 로봇을 처음으로 교육에 도입한 것은 같은 렉싱턴의 초등학교(5학년)로, 1970년부터 71년에 걸쳐서였다.

2. 1. 개발 배경

로고는 1967년 매사추세츠주 케임브리지에 위치한 연구소인 볼트, 베라넥 앤 뉴먼(BBN)에서 월리 퓨어자이그, 신시아 솔로몬, 세이모어 페퍼트에 의해 개발되었다.[5] 이들의 지적 기반은 인공지능, 수리 논리, 발달 심리학에 두었다.[5]

최초의 로고는 1966년 시모어 페퍼트, 월리 퍼제이그, 다니엘 G. 보브로 사이에서 오간 논의로 생겨났으며, 페퍼트가 본질적인 기능의 세부 사항을 설계하고, 보브로가 프로토타입을 구현했다. 신시아 솔로몬, 리차드 그랜트, 프랭크 프레이저, 폴 웨크셀블랫도 개발에 기여했다.[32] "Ghost"라고 불린 최초의 로고 구현은 PDP-1에서 LISP로 작성되었다.[6] 로고의 설계 목표에는 접근 가능한 힘과 유익한 오류 메시지가 포함되었으며, 가상 거북이를 사용하여 그래픽 프로그래밍에 대한 즉각적인 시각적 피드백과 디버깅이 가능했다.[6]

1969년에는 매사추세츠 공과대학교(MIT)에서 최초의 터틀 로봇이 만들어졌다. 이 로봇은 컴퓨터에서 내려지는 명령에 따라 실제로 바닥을 움직이며 그림을 그렸다. BBN의 폴 웩슬랫은 터치 센서를 가지고 앞, 뒤로 움직이고 회전하며 벨을 울릴 수 있는 Irving이라는 거북이를 개발했다.

로고를 1년 동안 사용한 최초의 학교는 1968–69년에 매사추세츠주 렉싱턴의 Muzzey Jr. High였다. 가상 및 물리적 거북이는 1970–71년에 같은 도시의 Bridge School에서 5학년 학생들에 의해 처음 사용되었다.

2. 2. 초기 개발

로고는 1967년 매사추세츠주 케임브리지에 있는 연구소인 볼트, 베라넥 앤 뉴먼(BBN)에서 월리 퓨어자이그, 신시아 솔로몬, 세이모어 페퍼트에 의해 개발되었다.[5] 이들은 인공지능, 수리 논리, 발달 심리학의 성과를 기반으로 로고를 개발했다.[30][31] 로고의 지적 기반은 인공지능, 수리 논리, 발달 심리학에 두고 있다.[5]

최초의 로고는 MIT의 인공지능연구소에서 다니엘 G. 밥로우, 월리 포이르츠아이그, 시모어 페퍼트에 의해 교육적인 사용과 건설적 가르침을 위하여 개발되었다.[59] 1966년 시모어 페퍼트, 월리 퍼제이그, 사이에서 최초의 콘셉트에 대한 논의가 이루어졌으며, 페퍼트가 본질적인 기능의 세부 사항을 설계하고, 보브로가 프로토타입을 구현했다. 신시아 솔로몬, 리차드 그랜트, 프랭크 프레이저, 폴 웨크셀블랫도 개발에 기여했다.[32]

처음 4년 동안 로고에 대한 연구, 개발, 교육 활동은 BBN에서 이루어졌다. Ghost라고 불리는 최초의 로고 구현은 PDP-1에서 LISP로 작성되었다.[6] 이후, SDS 960에서 리스프로 쓰여진 것이 최초의 로고가 되었다.

로고의 설계 목표는 어린이들이 단어와 문장으로 놀 수 있는 수학적 영역을 만드는 것이었다.[6][33] LISP를 모델로 한 로고의 설계 목표에는 접근 가능한 힘과 유익한 오류 메시지가 포함되었다. 가상 거북이를 사용하면 그래픽 프로그래밍에 대한 즉각적인 시각적 피드백과 디버깅이 가능했다.

최초의 작동하는 로고 거북이 로봇은 1969년에 만들어졌다. 물리적인 바닥 거북이보다 디스플레이 거북이가 먼저 개발되었다. 현대 로고는 최초의 거북이가 등장하기 전의 기본 개념에서 크게 바뀌지 않았다. 최초의 거북이는 무선 제어나 무선이 아닌, 유선으로 연결된 바닥을 돌아다니는 로봇이었다. BBN에서 폴 웩슬랫은 터치 센서를 가지고 앞, 뒤로 움직이고 회전하며 벨을 울릴 수 있는 Irving이라는 거북이를 개발했다.

로고를 1년 동안 사용한 최초의 학교는 1968–69년에 매사추세츠주 렉싱턴의 Muzzey Jr. High였다. 가상 및 물리적 거북이는 1970–71년에 같은 도시의 Bridge School에서 5학년 학생들에 의해 처음 사용되었다.

2. 3. 터틀 로봇의 등장

MIT의 인공지능연구소에서 다니엘 G. 밥로우, 월리 포이르츠아이그 (Wally Feurzeig), 시모어 페퍼트(Seymour Papert)에 의해 교육적인 사용, 건설적 가르침을 위하여 1967년에 개발되었다.[59] 최초의 로고는 SDS 960에서 리스프로 쓰여졌다.

최초의 터틀 로봇은 1969년에 MIT에서 만들어졌다.[5] 이 로봇은 컴퓨터에서 내려지는 명령에 따라 실제로 바닥을 움직이며 그림을 그렸다. 로고의 가장 잘 알려진 기능은 터틀(원래는 같은 이름의 로봇에서 파생됨)[5]로, 화면상의 "커서"로, 이동 명령과 작은 접이식 펜의 출력을 보여주며, 선 그래픽을 생성한다. 터틀 그래픽은 1960년대 후반 시모어 페퍼트에 의해 로고 언어에 추가되어 페퍼트 버전의 터틀 로봇을 지원했다.



실제로 터틀 기하학을 사용하는 것은 보다 전통적인 모델 대신 터틀 로봇의 실제 이동 논리를 모방한다. 터틀은 자체 위치를 기준으로 하는 명령을 사용하여 이동하며, ''LEFT 90''은 90도 왼쪽으로 회전함을 의미한다. 일부 로고 구현, 특히 동시성 및 여러 터틀의 사용을 허용하는 구현은 충돌 감지를 지원하고 사용자가 터틀 커서의 모양을 재정의할 수 있도록 하여, 본질적으로 로고 터틀이 스프라이트로 작동하도록 한다.

터틀 기하학은 엄격한 좌표 기반 그래픽 시스템의 대안으로 로고 이외의 환경에서도 사용되기도 한다. 예를 들어, 터틀 그래픽의 아이디어는 린덴마이어 시스템에서 프랙탈을 생성하는 데에도 유용하다.

2. 4. 초기 교육 현장에서의 활용

로고는 1967년 매사추세츠주 케임브리지에 위치한 연구소인 볼트, 베라넥 앤 뉴먼(BBN)에서 월리 퓨어자이그, 신시아 솔로몬, 세이모어 페퍼트에 의해 개발되었다.[5][30][31] MIT의 인공지능연구소에서 다니엘 G. 밥로우, 월리 포이르츠아이그, 시모어 페퍼트교육적인 사용과 건설적 가르침을 위하여 개발한 것이다.[59]

로고는 인공지능, 수리 논리학, 발달 심리학에 지적 기반을 두고 개발되었다.[5] 처음 4년 동안 로고에 대한 연구, 개발, 교육 활동은 BBN에서 이루어졌다. 최초의 로고 구현은 "Ghost"라는 이름으로, PDP-1에서 LISP로 작성되었다. 설계 목표에는 접근 가능한 힘과 유익한 오류 메시지가 포함되었으며, 가상 거북이를 사용하여 그래픽 프로그래밍에 대한 즉각적인 시각적 피드백과 디버깅이 가능했다.[6]

1969년에는 MIT에서 최초의 터틀 로봇이 만들어졌다. 이 로봇은 컴퓨터 명령에 따라 바닥을 움직이며 그림을 그렸다. BBN의 폴 웩슬랫은 터치 센서를 가지고 앞, 뒤로 움직이고 회전하며 벨을 울릴 수 있는 Irving이라는 거북이를 개발했다.

로고를 1년 동안 사용한 최초의 학교는 1968–69년에 매사추세츠주 렉싱턴의 Muzzey Jr. High였다. 1970–71년에는 같은 도시의 Bridge School에서 5학년 학생들이 가상 및 물리적 거북이를 처음으로 사용했다.

2. 5. 한국에서의 로고

로고는 1967년 매사추세츠주 케임브리지에 위치한 연구소인 볼트, 베라넥 앤 뉴먼(BBN)에서 월리 퓨어자이그, 신시아 솔로몬, 세이모어 페퍼트에 의해 개발되었다.[5] 로고의 지적 기반은 인공지능, 수리 논리, 발달 심리학에 두고 있으며, 처음 4년 동안 BBN에서 연구, 개발, 교육 활동이 이루어졌다.[5][6]

최초의 로고는 SDS 960에서 리스프로 쓰여진 것이었다. Ghost라고 불리는 최초의 로고 구현은 PDP-1에서 LISP로 작성되었다.[6]

최초의 터틀 로봇은 1969년에 MIT에서 만들어졌다. 이 로봇은 컴퓨터에서 내려지는 명령에 따라 실제로 바닥을 움직이며 그림을 그렸다. 폴 웩슬랫은 터치 센서를 가지고 앞, 뒤로 움직이고 회전하며 벨을 울릴 수 있는 Irving이라는 거북이를 개발했다.[5]

로고를 1년 동안 사용한 최초의 학교는 1968–69년에 매사추세츠주 렉싱턴의 Muzzey Jr. High였다. 가상 및 물리적 거북이는 1970–71년에 같은 도시의 Bridge School에서 5학년 학생들에 의해 처음 사용되었다.[5]

3. 주요 특징

3. 1. 터틀 그래픽스



로고에서 가장 잘 알려진 기능은 터틀이다.[5] 터틀은 화면상의 커서로, 이동 명령과 작은 접이식 펜의 출력을 보여주며 선 그래픽을 생성한다.[34] 터틀은 전통적으로 삼각형 또는 터틀 아이콘으로 표시되었지만, 어떤 아이콘으로든 표현될 수 있다. 터틀 그래픽스는 1960년대 후반 시모어 페퍼트에 의해 로고 언어에 추가되었으며, 페퍼트 버전의 터틀 로봇을 지원했다. 이 로봇은 사용자의 워크스테이션에서 제어되는 간단한 로봇으로, 로봇 몸체에 내장되거나 부착된 작은 접이식 펜을 사용하여 할당된 그리기 기능을 수행하도록 설계되었다.

터틀은 자체 위치를 기준으로 하는 명령을 사용하여 이동한다. 예를 들어 ''LEFT 90''은 90도 왼쪽으로 회전함을 의미한다. 일부 로고 구현, 특히 동시성 및 여러 터틀의 사용을 허용하는 구현은 충돌 감지를 지원하고 사용자가 터틀 커서의 모양을 재정의할 수 있도록 하여, 로고 터틀이 스프라이트로 작동하도록 한다.

터틀 기하학은 엄격한 좌표 기반 그래픽 시스템의 대안으로 로고 이외의 환경에서도 사용되기도 한다. 예를 들어, 터틀 그래픽스의 아이디어는 린덴마이어 시스템에서 프랙탈을 생성하는 데에도 유용하다.

거북이는 꼬리에 펜을 단 형태의 비유로 사용되는 경우가 많다. 다음은 파선을 그리는 예시이다.

```

FD 20 ; 직선을 그리면서 거북이가 이동한다

PENUP ; 펜을 올린다. 따라서 그려지지 않게 된다

FD 20 ; 이동하지만, 선은 그려지지 않는다

PENDOWN ; 펜을 내리므로, 다시 그려지게 된다

FD 20 ; 직선을 그리면서 거북이가 이동한다

PENUP ; 펜을 올린다. 따라서 그려지지 않게 된다

FD 40 ; 이동하지만, 선은 그려지지 않는다

PENDOWN ; 펜을 내리므로, 다시 그려지게 된다

RT 20 ; 오른쪽(시계 방향)으로 20도 회전

```

로고의 설계는 "진입 장벽은 낮고, 천장은 없다"는 정신으로 관철되어 있으며, 초보자에게는 접근하기 쉽지만 숙련된 사용자가 사용하면 고도의 작업도 가능하다. UCBLogo에서는 PENERASE (PE)라는 명령으로 이미 그려진 것을 거북이가 지울 수 있다. 그 상태에서 FD 명령을 사용하면, 거북이가 지나간 자리에 따라 이미 그려져 있던 것이 지워진다. 다시 그리기 상태로 하려면 PENPAINT (PPT) 명령을 사용한다.

섬네일

3. 2. 언어적 특징

대문자와 소문자를 구분하지 않지만, 출력에서는 대문자/소문자를 유지한다. 표준 규격은 존재하지 않지만, '''UCBLogo'''가 높게 평가받고 있다. 교육용 언어이지만, 리스트 처리 능력이 뛰어나 실용적인 스크립트를 매우 쉽게 작성할 수 있다.[35]

수식은 전위 표기법을 기본으로 하며, `sum :x :y, product :x :y, difference :x :y, quotient :x :y`와 같이 표기한다. 중위 표기법도 가능하다.

키워드에 대한 설명은 `help` 명령어로 표시할 수 있다. 이때 키워드 앞에 큰따옴표가 필요하다.

LOGO는 재귀 호출이 가능하며, 프로시저 정의 내에서 해당 프로시저 자체를 호출할 수 있다.

```

to spiral :size

if :size > 30 [stop] ; 탈출 조건

fd :size rt 15 ; 본체 처리

spiral :size *1.02 ; 재귀 호출 (인수는 중위 표기법의 수식)

end

spiral 10

```

재귀와 그리기 기능을 통해 코흐 곡선이나 힐베르트 곡선, 이진 트리 등과 같은 재귀적인 도형을 자연스럽게 그릴 수 있다는 점도 LOGO의 큰 특징이다. 교육적으로는, 아이들에게 각자 원하는 도형을 정의하게 하고, 도형에 숨겨진 규칙성을 깨닫게 하는 지도 방식이 이루어지고 있다.

원 설계자들이 영어 사용자였기 때문에 영어 기반으로 설계되었지만, 다른 언어를 기반으로 한 명령어로의 대체가 활발하게 이루어지고 있는 언어이기도 하다. 예를 들어 일본어화된 명령어를 가진 LOGO에서는 `FORWARD`를 'まえへ(앞으로)', `RIGHT`를 'みぎへ(오른쪽으로)' 등으로 사용한다.

=== 데이터 타입 ===

UCB 로고에는 다음과 같은 3가지 종류의 자료형이 있다.

  • 워드 (LISP의 atom에 해당)
  • 리스트 (LISP의 cons에 해당)
  • 배열


수는 워드의 특수한 경우로 해석된다.

정적 타입이 아니고, 자료형은 실행에 의해 검사된다.

다음 두 기호는 중요한 의미를 갖는다.

  • 콜론 (:) 은 "-의 내용 (값)"을 의미한다. 이것은 변수가 실제로 메모리의 특정 위치를 가리킨다는 것을 어린이에게 인식시키는 데 도움이 된다.
  • 쌍따옴표 (") 는 "그 워드를 그 자체로 평가한다" 또는 "그것을 평가한 후의 값은 이전과 같다"를 의미한다. 다른 프로그래밍 언어에서는 쌍따옴표를 인용 부호로 두 개를 조합하여 사용하지만, 로고에서는 그러한 대응이 없다.


수는 그 점에서 특별하며, 사실 쌍따옴표를 붙여서 써야 하지만, '''2''' 도 '''"2''' 도 동일하게 취급된다.

변수에의 대입 (예를 들어, x := y + 3) 은, 로고에서는 make 명령으로 수행한다. 예를 들어, 다음 두 문장은 등가이다.

```

make "x sum :y 3

make "x sum :y "3

```

make는 두 개의 매개변수를 취하며, 이 예에서 두 번째 매개변수는 sum :y "3 이다. sum 은 두 개의 매개변수를 취하는 연산 (operation)이며, 두 매개변수의 합을 계산한다. "3 을 평가하면 3 이 되고, :y 는 y 라고 불리는 것의 내용을 취한다. 그 결과, 양자를 가산한 합이 수로서 얻어진다.

make 는 두 번째 매개변수를 평가한 결과를 첫 번째 매개변수에 저장한다. 프로그래밍 관점에서 보면, make의 첫 번째 매개변수는 참조 전달이고, 두 번째 매개변수는 값 전달이다.

=== 변수와 스코프 ===

일반적으로 변수를 사용하기 전에 선언하지 않으며, 변수 스코프는 전역적이다.

`local`로 선언된 변수의 스코프는 선언된 프로시저 및 해당 프로시저를 호출하는 임의의 프로시저로 한정된다(동적 스코프의 일종). 입력(인수)이 있는 프로시저에서는 실제 인수(아규먼트)의 값을 보존하는 로컬 변수가 생성된다(가인수(파라미터)).

=== 리스트 처리 ===

LISP와 유사한 리스트가 있으며, 주요 데이터 구조로 빈번하게 사용된다. 배열도 제공한다.

단어 열을 리스트로 변환하는 연산, 리스트 군을 배열로 변환하는 연산, 그리고 그 반대 연산이 존재한다.

리스트는 배열과 달리 무한히 확장 가능하다는 이점이 있다. first, butfirst, last, butlast, butmember, member, item과 같은 연산으로 리스트에서 데이터를 가져올 수 있다. 데이터 요소를 리스트에 추가할 때는 fput 또는 lput 문을 사용한다.

리스트는 로 취급할 수도 있으며, 이를 위한 queue와 dequeue 연산이 있다. 또한, 스택으로 취급하기 위한 push와 pop 연산도 있다.

리스트를 처리할 때는 루프가 아닌 재귀를 사용하는 것이 자연스럽다.

=== 제어 구조 ===

LOGO에는 if문, while문, do-while문, 횟수 지정 루프와 같은 몇 가지 일반적인 제어 구조를 갖추고 있다. 일반적으로 LOGO에서는 루프보다 재귀를 선호하여 사용한다.

또한, 리스트 기반의 제어 구조도 있다. 기본적인 생각은 다음과 같이 두 개의 리스트를 사용한다.

```

OPERATION [ 명령 리스트 ] [ 데이터 리스트 ]

```

그러면, 명령어 그룹이 리스트의 개별 항목에 적용된다. MAP, APPLY, FILTER, FOREACH, REDUCE, CASCADE와 같은 템플릿 명령어가 있다. 템플릿 반복은 explicit-slot, named-procedure, named-slot(또는 Lambda), procedure-text의 4가지 유형으로 분류된다.

루프용 명령어는 3가지가 있다. 그 중 하나가 REPEAT이며, 다음 예는 정사각형을 그린다.

```

REPEAT 4 [FD 100 LEFT 90]

```

이 경우, FD 100 LEFT 90 명령어를 4번 실행한다. 근사적으로 원을 그리려면, REPEAT 360 [FD 1 RIGHT 1]처럼 1도씩 회전하여 1단위만큼 그리는 명령어를 360번 반복하면 된다. 루프는 중첩이 가능하며, 다음과 같은 작은 코드로 재미있는 도형을 그릴 수 있다.

```

REPEAT 36 [RT 10 REPEAT 360 [FD 1 RT 1]]

FD 25

RT 90

```

다음 또한 루프 중첩의 예이다.

```

REPEAT 36 [REPEAT 4 [FD 100 RT 90] RT 10]

```

=== 프로시저 ===

LOGO에서 프로시저는 `TO`와 `END`로 둘러싸인 코드로 정의할 수 있다.

```

TO CHAIR

REPEAT 4 [FD 100 RT 90]

FD 200

END

```

`EDALL`과 같은 명령으로 에디터를 호출할 수 있다. 에디터에서는 프로시저를 여러 줄로 작성할 수 있으며, 완료 후에 해석된다.

새롭게 정의한 프로시저는 이름에 해당하는 단어(위의 예에서는 CHAIR)로 저장되지만, LOGO의 세션이 종료되면 잊혀진다. 위의 예의 경우, 프로시저를 정의한 후 `CHAIR`라고 입력하면 `REPEAT 4 [FD 100 LEFT 90] FD 200`이라는 코드가 실행된다. 즉, `CHAIR`라는 단어는 명령어처럼 사용할 수 있으며, 예를 들어 `REPEAT 4 [CHAIR]`라고 하면 `CHAIR`의 조작이 4번 반복된다.

```

EDALL ; 에디터 모드로 들어가, 그 후 실제 프로시저를 작성한다

TO ERASECHAIR

PE

BK 200 REPEAT 5 [FD 50 RT 144]

PPT

END

CS CHAIR WAIT 200 ERASECHAIR

```

`CS`는 그래픽스 윈도우를 지우는 명령어, `WAIT`는 지정한 시간만큼 대기하는 명령어이다. 다음과 같이 하면 애니메이션이 가능하다.

```

CS REPEAT 20 [CHAIR WAIT 200 ERASECHAIR FD 20]

```

LOGO에서는 프로시저에 추가 정보를 전달하고, 프로시저가 정보를 반환할 수 있다. 추가 정보를 사용하는 프로시저는 정의 시에 그것들에 이름을 붙인다. 그 경우, 이름 앞에 콜론을 붙인다. 정보는 값 전달이며, 콜론은 "-의 값"을 의미한다. 다음 예시처럼 CHAIR 200과 같은 형태로 프로시저를 호출하면, :thesize에 200이라는 값이 설정되고, FD :thesize를 통해 FD에 200이라는 값을 지정하여 실행하게 된다.

```

EDALL ;

TO CHAIR :thesize

REPEAT 4 [FD :thesize RT 90]

FD :thesize

END

CS

REPEAT 9 [CHAIR 50 RT 20 CHAIR 100 WAIT 50 RT 20]

```

명령은 파스칼에서 값을 반환하지 않는 "프로시저"와 유사하며, 연산은 파스칼에서 값을 반환하는 "함수"와 유사하다.

3. 2. 1. 데이터 타입

UCB 로고에는 다음과 같은 3가지 종류의 자료형이 있다.

  • 워드 (LISP의 atom에 해당)
  • 리스트 (LISP의 cons에 해당)
  • 배열


수는 워드의 특수한 경우로 해석된다.

정적 타입이 아니고, 자료형은 실행에 의해 검사된다.

다음 두 기호는 중요한 의미를 갖는다.

  • 콜론 (:) 은 "-의 내용 (값)"을 의미한다. 이것은 변수가 실제로 메모리의 특정 위치를 가리킨다는 것을 어린이에게 인식시키는 데 도움이 된다.
  • 쌍따옴표 (") 는 "그 워드를 그 자체로 평가한다" 또는 "그것을 평가한 후의 값은 이전과 같다"를 의미한다. 다른 프로그래밍 언어에서는 쌍따옴표를 인용 부호로 두 개를 조합하여 사용하지만, 로고에서는 그러한 대응이 없다.


수는 그 점에서 특별하며, 사실 쌍따옴표를 붙여서 써야 하지만, '''2''' 도 '''"2''' 도 동일하게 취급된다.

변수에의 대입 (예를 들어, x := y + 3) 은, 로고에서는 make 명령으로 수행한다. 예를 들어, 다음 두 문장은 등가이다.

make "x sum :y 3

make "x sum :y "3

make는 두 개의 매개변수를 취하며, 이 예에서 두 번째 매개변수는 sum :y "3 이다. sum 은 두 개의 매개변수를 취하는 연산 (operation)이며, 두 매개변수의 합을 계산한다. "3 을 평가하면 3 이 되고, :y 는 y 라고 불리는 것의 내용을 취한다. 그 결과, 양자를 가산한 합이 수로서 얻어진다.

make 는 두 번째 매개변수를 평가한 결과를 첫 번째 매개변수에 저장한다. 프로그래밍 관점에서 보면, make의 첫 번째 매개변수는 참조 전달이고, 두 번째 매개변수는 값 전달이다.

3. 2. 2. 변수와 스코프

일반적으로 변수를 사용하기 전에 선언하지 않으며, 변수 스코프는 전역적이다.

`local`로 선언된 변수의 스코프는 선언된 프로시저 및 해당 프로시저를 호출하는 임의의 프로시저로 한정된다(동적 스코프의 일종). 입력(인수)이 있는 프로시저에서는 실제 인수(아규먼트)의 값을 보존하는 로컬 변수가 생성된다(가인수(파라미터)).

3. 2. 3. 리스트 처리

LISP와 유사한 리스트가 있으며, 주요 데이터 구조로 빈번하게 사용된다. 배열도 제공한다.

단어 열을 리스트로 변환하는 연산, 리스트 군을 배열로 변환하는 연산, 그리고 그 반대 연산이 존재한다.

리스트는 배열과 달리 무한히 확장 가능하다는 이점이 있다. first, butfirst, last, butlast, butmember, member, item과 같은 연산으로 리스트에서 데이터를 가져올 수 있다. 데이터 요소를 리스트에 추가할 때는 fput 또는 lput 문을 사용한다.

리스트는 로 취급할 수도 있으며, 이를 위한 queue와 dequeue 연산이 있다. 또한, 스택으로 취급하기 위한 push와 pop 연산도 있다.

리스트를 처리할 때는 루프가 아닌 재귀를 사용하는 것이 자연스럽다.

3. 2. 4. 제어 구조

LOGO에는 if문, while문, do-while문, 횟수 지정 루프와 같은 몇 가지 일반적인 제어 구조를 갖추고 있다. 일반적으로 LOGO에서는 루프보다 재귀를 선호하여 사용한다.

또한, 리스트 기반의 제어 구조도 있다. 기본적인 생각은 다음과 같이 두 개의 리스트를 사용한다.

OPERATION [ 명령 리스트 ] [ 데이터 리스트 ]

그러면, 명령어 그룹이 리스트의 개별 항목에 적용된다. MAP, APPLY, FILTER, FOREACH, REDUCE, CASCADE와 같은 템플릿 명령어가 있다. 템플릿 반복은 explicit-slot, named-procedure, named-slot(또는 Lambda), procedure-text의 4가지 유형으로 분류된다.

루프용 명령어는 3가지가 있다. 그 중 하나가 REPEAT이며, 다음 예는 정사각형을 그린다.

REPEAT 4 [FD 100 LEFT 90]

이 경우, FD 100 LEFT 90 명령어를 4번 실행한다. 근사적으로 원을 그리려면, REPEAT 360 [FD 1 RIGHT 1]처럼 1도씩 회전하여 1단위만큼 그리는 명령어를 360번 반복하면 된다. 루프는 중첩이 가능하며, 다음과 같은 작은 코드로 재미있는 도형을 그릴 수 있다.

REPEAT 36 [RT 10 REPEAT 360 [FD 1 RT 1]]

FD 25

RT 90

다음 또한 루프 중첩의 예이다.

REPEAT 36 [REPEAT 4 [FD 100 RT 90] RT 10]

3. 2. 5. 프로시저

LOGO에서 프로시저는 `TO`와 `END`로 둘러싸인 코드로 정의할 수 있다.

```

TO CHAIR

REPEAT 4 [FD 100 RT 90]

FD 200

END

```

`EDALL`과 같은 명령으로 에디터를 호출할 수 있다. 에디터에서는 프로시저를 여러 줄로 작성할 수 있으며, 완료 후에 해석된다.

새롭게 정의한 프로시저는 이름에 해당하는 단어(위의 예에서는 CHAIR)로 저장되지만, LOGO의 세션이 종료되면 잊혀진다. 위의 예의 경우, 프로시저를 정의한 후 `CHAIR`라고 입력하면 `REPEAT 4 [FD 100 LEFT 90] FD 200`이라는 코드가 실행된다. 즉, `CHAIR`라는 단어는 명령어처럼 사용할 수 있으며, 예를 들어 `REPEAT 4 [CHAIR]`라고 하면 `CHAIR`의 조작이 4번 반복된다.

```

EDALL ; 에디터 모드로 들어가, 그 후 실제 프로시저를 작성한다

TO ERASECHAIR

PE

BK 200 REPEAT 5 [FD 50 RT 144]

PPT

END

CS CHAIR WAIT 200 ERASECHAIR

```

`CS`는 그래픽스 윈도우를 지우는 명령어, `WAIT`는 지정한 시간만큼 대기하는 명령어이다. 다음과 같이 하면 애니메이션이 가능하다.

```

CS REPEAT 20 [CHAIR WAIT 200 ERASECHAIR FD 20]

```

LOGO에서는 프로시저에 추가 정보를 전달하고, 프로시저가 정보를 반환할 수 있다. 추가 정보를 사용하는 프로시저는 정의 시에 그것들에 이름을 붙인다. 그 경우, 이름 앞에 콜론을 붙인다. 정보는 값 전달이며, 콜론은 "-의 값"을 의미한다. 다음 예시처럼 CHAIR 200과 같은 형태로 프로시저를 호출하면, :thesize에 200이라는 값이 설정되고, FD :thesize를 통해 FD에 200이라는 값을 지정하여 실행하게 된다.

```

EDALL ;

TO CHAIR :thesize

REPEAT 4 [FD :thesize RT 90]

FD :thesize

END

CS

REPEAT 9 [CHAIR 50 RT 20 CHAIR 100 WAIT 50 RT 20]

```

명령은 파스칼에서 값을 반환하지 않는 "프로시저"와 유사하며, 연산은 파스칼에서 값을 반환하는 "함수"와 유사하다.

4. 다양한 구현체



IBM LCSI 로고의 소스 코드 및 출력


로고는 다양한 구현체와 파생 언어를 가지고 있으며, 2020년 3월 기준으로 308개의 구현체 및 방언이 존재했다.[8] 이들 대부분은 더 이상 널리 사용되지 않지만, 일부는 여전히 개발 중이다. 학교에서 널리 사용되는 상용 구현에는 마이크로월드 로고와 이매진 로고가 있다.

합의된 표준은 없지만, 언어의 핵심 측면에 대한 광범위한 합의가 있다.
1980년대에 처음 출시된 구현체:

  • 애플 로고: Logo Computer Systems, Inc.(LCSI)에서 개발했으며, 애플 II 플러스 및 애플 IIe용으로 출시되었다. 1980년대 초중반에 가장 널리 사용된 초기 로고 구현 중 하나였다.
  • 아쿠아리우스 로고: 1982년 매텔에서 아쿠아리우스 가정용 컴퓨터용 카트리지로 출시되었다.
  • 아타리 로고: Atari, Inc.에서 아타리 8비트 컴퓨터용 카트리지로 출시되었다.
  • 컬러 로고: 1983년 탠디에서 TRS-80 컬러 컴퓨터용 카트리지(26–2722)와 디스크(26–2721)로 출시되었다.
  • 코모도어 로고: 코모도어 인터내셔널에서 "학습을 위한 언어"라는 부제를 붙여 출시되었다. MIT 로고를 기반으로 Terrapin, Inc.에서 향상시켰다. 코모도어 64 버전(C64105)은 1983년 디스켓으로, Plus/4 버전(T263001)은 1984년 카트리지로 출시되었다.[9][10]
  • 익스퍼트로고: 1985년 Expertelligence Inc.에서 매킨토시 128K용 디스켓으로 출시되었다.
  • 핫-로고: 1980년대 중반 EPCOM에서 MSX 8비트 컴퓨터용으로 브라질 포르투갈어로 자체 명령 집합과 함께 출시되었다.
  • TI 로고(TI-99/4A 컴퓨터용): 초등학교에서 사용되었으며, 초보 프로그래머에게 컴퓨팅 기본 사항을 가르치는 데 로고의 유용성을 강조했다.
  • 스프라이트 로고: Logo Computer Systems Inc.에서 개발했으며, 독립적인 프로세스로 실행할 수 있는 10개의 거북이를 가지고 있었다. 애플 II 컴퓨터에서 스프라이트 카드를 통해 실행되었다.
  • IBM 로고: IBM에서 자체 버전의 로고(P/N 6024076)를 출시했으며, Logo Computer Systems, Inc.(LCSI)에서 공동 개발했다.
  • 오브젝트로고: 객체 지향 프로그래밍 확장이 있고 어휘 범위가 있는 로고의 변형이다. 버전 2.7은 Digitool, Inc.에서 판매했다.[11]
  • 닥터 로고: 디지털 리서치에서 개발하여 IBM PCjr, 아타리 ST, 암스트라드 CPC를 포함한 컴퓨터와 함께 배포되었다.[13][14][15]
  • 아콘소프트 로고: 1985년에 출시된 8비트 BBC 마이크로 및 아콘 일렉트론 컴퓨터용 로고의 상용 구현이다.[16] 여러 화면 거북이와 4채널 사운드를 특징으로 하며, 16kB 롬 두 개로 제공되었다.[17]

1990년대에 처음 출시된 구현체:

  • 일렉트론 유저 "말하는 거북이": 1990년 2월 티모시 그랜섬이 아콘 일렉트론용으로 구현한 간단한 로고이다.[18]
  • 코메니우스 로고: 코메니우스 대학교 수학, 물리학 및 정보학부에서 개발한 로고의 구현이다. 1991년 12월에 개발을 시작했으며, 다른 국가에서는 슈퍼로고, 멀티로고 및 메가로고로도 알려져 있다.[19]
  • 레고 로고: 컴퓨터에 연결된 로봇 레고 블록을 조작할 수 있는 로고의 버전이다.[20] 애플 II에서 구현되었으며, 1980년대 후반과 1990년대 초반에 미국 및 기타 초등학교에서 사용되었다.[21] 스크래치의 전신이다.[22]
  • UCB 로고 (버클리 로고): 2009년에 마지막으로 출시된 표준 로고의 무료, 크로스 플랫폼 구현이다.[38]

2000년 이후 처음 출시된 구현체:

  • aUCB 로고: UCB 로고를 다시 작성하고 향상시킨 것이다.
  • 이매진 로고: 2000년에 구현된 코메니우스 로고의 후속작이다.[24] 영어 버전은 2001년 Logotron Ltd.에서 출시되었다.[25]
  • 리브레로고: 일부 버전의 리브레오피스에 대한 확장 기능이다. 2012년에 출시되었으며, 파이썬으로 작성되었다.
  • 로고3D: 로고의 삼차원 버전이다.
  • POOL: 2014년에 구현된 객체 지향 확장이 있는 로고의 방언이다. 마이크로소프트 윈도우의 그래픽 IDE에서 컴파일되고 실행된다.
  • Q 로고: 하드웨어 가속 그래픽을 사용하는 UCB 로고의 오픈 소스 및 크로스 플랫폼 재작성이다.
  • 링스: Logo Computer Systems Inc.에서 개발한 로고의 온라인 버전이다. 많은 수의 거북이를 실행하고, 애니메이션, 병렬 프로세스 등을 지원한다.
  • 로고모어: 자바스크립트와 p5.js를 기반으로 한 오픈 소스 온라인 3D 로고 인터프리터이다.
  • LbyM: 소노마 주립 대학교의 ''만들면서 배우기'' 프로그램을 위해 자바스크립트를 기반으로 만들어졌으며 (2021년 현재) 적극적으로 개발 중인 오픈 소스 온라인 로고 인터프리터이다.[26]


일부 현대적인 로고 파생 언어는 수천 개의 독립적으로 움직이는 거북이를 허용한다. 매사추세츠 공과대학교(MIT)의 스타로고[41][42]와 노스웨스턴 대학교 연결 학습 센터(CCL)의 넷로고[43]는 출현 현상을 탐구할 수 있게 해주며, 에이전트 기반 시뮬레이션에 널리 사용된다.

일본어판이 출시된 LOGO로 드리틀, FindOut, GLOGO, 로고 라이터, Microworlds 등이 있다.

5. 영향 및 파생 언어

로고는 리스프로부터 영향을 받았다.[27][28][51][52][53][54][55][56][57] 로고는 스몰토크 프로그래밍 언어에 주요한 영향을 미쳤으며, 객체 지향이 터틀 그래픽스에서 유래되었다는 것은 잘 알려져 있다. 스몰토크에서 파생된 스퀵으로 작성된 프로그래밍 교육 환경 이토이즈도 LOGO의 영향을 강하게 받았다.

로고는 Boxer의 기반 언어가 되었으며, Boxer는 캘리포니아 대학교 버클리매사추세츠 공과대학교의 공동 개발 프로젝트로, "리터러시 모델"에 기초한 마이크로 월드의 일종이다.

KDE 환경을 위해 Qt에서 구현된 KTurtle은 로고를 기반으로 한 변형이다. 로고의 영향으로 인한 또 다른 결과는 스칼라의 변형인 Kojo와 웹 브라우저에서 실행되는 시각적 드래그 앤 드롭 언어인 스크래치이다.

참조

[1] 간행물 Logo Manual https://dspace.mit.e[...] 1974-12
[2] 뉴스 Logo – A Cultural Glossary https://archive.org/[...] 1982-08
[3] 문서 CSLS Vol 1, Preface .pxvi, Harvey 1997
[4] 서적 Computer Science Logo Style http://www.cs.berkel[...] MIT Press 2013-07-04
[5] 웹사이트 Logo Foundation http://el.media.mit.[...] 2011-04-07
[6] 웹사이트 logothings https://logothings.w[...]
[7] 웹사이트 Tartapelago http://www.maecla.it[...] 2005
[8] 웹사이트 The Logo Tree Project https://pavel.it.fmi[...] 2020-03-25
[9] 웹사이트 Canonical List of Commodore Products http://www.zimmers.n[...] 2017-12-03
[10] 웹사이트 Logo – Software Details http://plus4world.po[...] 2017-12-03
[11] 웹사이트 Object Logo http://www.digitool.[...] 2008-04-30
[12] 웹사이트 Object Logo ordering page http://www.digitool.[...] 2008-03-04
[13] 웹사이트 Catalog Search | Computer History Museum https://www.computer[...]
[14] 웹사이트 Amstrad CPC 6128 - Computer - Computing History http://www.computing[...]
[15] 웹사이트 es:manual_del_amstrad_pcw_8256_8512_ingles [PcwWiki] https://www.habisoft[...]
[16] 서적 LOGO on the BBC computer and Acorn Electron Macmillan
[17] 뉴스 Four Logos for the BBC Micro http://www.nostalgia[...] The Micro User 2012-02-20
[18] 웹사이트 Talking Turtle http://www.acornelec[...] 1990-02
[19] 웹사이트 History of Comenius Logo http://www.input.sk/[...] 2022-10-12
[20] 간행물 Behavior Construction Kits https://web.media.mi[...] 2022-01-05
[21] 웹사이트 The Laboratory Schools LEGO-LOGO Project http://www.ucls.uchi[...]
[22] 간행물 Thinking about computational thinking: Origins of computational thinking in educational computing
[23] 웹사이트 MSWLogo, An Educational programming language https://softronix.co[...] 2022-01-05
[24] 서적 Imagine... a new generation of Logo : programmable pictures http://worldcat.org/[...]
[25] 웹사이트 Imagine {{!}} Press Release http://logo.com/pres[...] 2022-10-12
[26] 웹사이트 Learning by Making ¦ Make@SSU https://make.sonoma.[...] 2022-01-08
[27] 웹사이트 Boxer - EduTech Wiki https://edutechwiki.[...] 2024-04-10
[28] 웹사이트 The KDE Education Project – KTurtle http://edu.kde.org/k[...]
[29] 문서 Harvnb Harvey 1997a、Harvnb Harvey 1997b、Harvnb Harvey 1997c
[30] 웹사이트 Logo Foundation http://el.media.mit.[...]
[31] 서적 思考のための道具 異端の天才たちはコンピュータに何を求めたか? パーソナルメディア株式会社 1988-08-10
[32] 웹사이트 Origine du langage LOGO https://logoplus.pag[...]
[33] 웹사이트 Cynthia Solomon https://logothings.w[...]
[34] 웹사이트 Logo Foundation http://el.media.mit.[...]
[35] 웹사이트 Logo Programming Language at the Logo Foundation website http://el.media.mit.[...]
[36] 문서 The Logo Tree Project http://elica.net/dow[...]
[37] 웹사이트 Welcome to LCSI http://www.microworl[...]
[38] 웹사이트 Berkeley Logo (UCBLogo) http://www.cs.berkel[...]
[39] 웹사이트 MSWLogo, An Educational programming language https://softronix.co[...]
[40] 웹사이트 Home - FMSLogo https://fmslogo.sour[...]
[41] 웹사이트 StarLogo http://education.mit[...]
[42] 웹사이트 StarLogo http://mas.kke.co.jp[...]
[43] 웹사이트 NetLogo Home Page https://ccl.northwes[...]
[44] 웹사이트 Elica http://www.elica.net[...]
[45] 웹사이트 Lhogho: The Real Logo Compiler https://fmslogo.sour[...]
[46] 웹사이트 Crikets http://llk.media.mit[...]
[47] 웹사이트 Object Logo http://www.digitool.[...]
[48] SourceForge Logo3D SourceForge
[49] 웹사이트 E-Slate http://e-slate.cti.g[...]
[50] 웹사이트 GLOGO http://www.osakac.ac[...]
[51] 웹사이트 早過ぎた孤独な予言者 - @IT自分戦略研究所 https://jibun.atmark[...]
[52] 웹사이트 http://www.h6.dion.n[...]
[53] 웹사이트 Scratch - Imagine, Program, Share https://scratch.mit.[...]
[54] 웹사이트 Alice – Tell Stories. Build Games. Learn to Program. https://www.alice.or[...]
[55] 웹사이트 Boxer http://www.soe.berke[...]
[56] 웹사이트 'The programming language used in KTurtle is loosely based on Logo.' http://edu.kde.org/k[...]
[57] 웹사이트 KTurtle http://www.kde.gr.jp[...]
[58] 웹인용 LOGO http://www.computern[...] 2010-04-22
[59] 웹인용 보관된 사본 http://el.media.mit.[...] 2010-05-15



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com