본문으로 이동
주 메뉴
주 메뉴
사이드바로 이동
숨기기
둘러보기
대문
최근 바뀜
요즘 화제
임의의 문서로
sitesupport
사용자 모임
사랑방
사용자 모임
관리 요청
편집 안내
소개
도움말
정책과 지침
질문방
한울위키
검색
검색
보이기
로그인
개인 도구
로그인
스킴 (프로그래밍 언어) 문서 원본 보기
문서
토론
한국어
읽기
원본 보기
역사 보기
도구
도구
사이드바로 이동
숨기기
동작
읽기
원본 보기
역사 보기
일반
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
보이기
사이드바로 이동
숨기기
←
스킴 (프로그래밍 언어)
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
일반 사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
{{Infobox programming language | name = 스킴 | logo = [[파일:Lambda lc.svg|100px]] | paradigms = [[프로그래밍 패러다임|다중 패러다임]]: [[함수형 프로그래밍|함수형]], [[명령형 프로그래밍|명령형]], [[메타프로그래밍|메타]] | family = [[리스프]] | year = {{시작 날짜와 나이|1975}} | designers = [[Guy L. Steele]], [[Gerald Jay Sussman]] | latest release version = R7RS | latest release date = {{시작 날짜와 나이|2013}} | latest test version = | latest test date = | typing = [[자료형 체계|동적]], [[레이턴트 타이핑|레이턴트]], [[스트롱 타이핑|스트롱]] | scope = [[변수 영역]] | operating system = | license = | website = | file_ext = .scm, .ss | implementations = 다수 | dialects = [[래킷 (프로그래밍 언어)|래킷]], [[T (프로그래밍 언어)|T]], [[멀티리스프]] | influenced by = [[알골 (프로그래밍 언어)]], [[리스프]], [[MDL (프로그래밍 언어)|MDL]] | influenced = [[클로저 (프로그래밍 언어)]], [[커먼 리스프]], [[Dylan]], [[EuLisp]], [[하스켈]], [[Hop]], [[자바스크립트]], [[줄리아]], [[루아]], [[R (프로그래밍 언어)|R]], [[루비 (프로그래밍 언어)|루비]], [[러스트 (프로그래밍 언어)|러스트]], [[S (프로그래밍 언어)|S]], [[스칼라]] | wikibooks = Scheme }} '''스킴'''(Scheme)은 [[함수형 프로그래밍]]과 [[절차적 프로그래밍]]을 지원하는 [[다중패러다임 프로그래밍 언어]]로 [[리스프]](LISP)의 방언(변종 언어)이다. 스킴은 1970년대에 가이 루이스 스틸 주니어(Guy Lewis Steele Jr.)와 제럴드 제이 서스먼(Gerald Jay Sussman)이 개발했다. 다른 LISP 방언과 비교할 때 단순함이 특징이다. 전통적인 LISP과 가장 큰 차이점은 [[변수 영역#동적 영역 규칙|동적 영역 규칙]] 대신 [[변수 영역#정적 영역 규칙|정적 영역 규칙]]을 사용하고 있다는 것이다. 반복문을 지원하지 않기 때문에 [[재귀함수]]를 이용하여 반복 계산을 처리한다. 따라서 대부분의 스킴 구현은 꼬리호출 최적화(tail-call optimization)를 수행한다. == 구문과 의미 == 스킴 구문은 S식(S-expression)뿐이다. S식은 아톰(atom)이나 리스트(list) 중 하나이며 이 중에서 리스트는 공백으로 분리된 여러 S식을 괄호로 묶은 것이다. S식이 하나도 없는 리스트는 빈 리스트라고 하여 <code>()</code>로 나타낸다. 함수 호출도 S식으로 나타낸다. 예를 들어 함수 호출 <code>(f a1 a2 ... an)</code>은 C 언어의 <code>f(a1, a2, ..., an)</code>에 해당한다고 볼 수 있다. S식 <code>(f a1 a2 ... an)</code>는 함수 호출 결과 계산된 값을 의미하는데 이 함수 호출을 계산하는 방법은 먼저 함수 부분 <code>f</code>와 각 인수 <code>a1</code>부터 <code>an</code>까지 값을 구한 후에 함수 <code>f</code>를 인수에 적용하는 것이다. 이런 의미에서 스킴의 계산 모델을 ‘계산 후 적용 모델’(eval-apply model)이라고 부르기도 한다. 스킴에는 몇 가지 특수 구문이 존재하는데 이들 구문도 S식 형태를 이루고 있지만 특수한 방식으로 수행된다. 대표적인 특수 구문으로는 <code>quote</code>, <code>cond</code>, <code>let</code>, <code>define</code>, <code>lambda</code>가 있다. 차례로 간단히 설명하면 <code>quote</code>는 인수로 주어진 식의 값을 계산하지 않으며 <code>cond</code>는 이후 주어진 각 조건에 따라 다른 값을 계산한다. <code>let</code>은 [[지역 변수]]를 생성하며 <code>define</code>은 [[변수 (컴퓨터 과학)|변수]]의 값을 정의한다. <code>lambda</code>가 스킴의 핵심이라고 할 수 있는데 함수 값을 정의하는 구문이다. 예컨대 인수 값의 두 배를 돌려주는 함수는 <code>(lambda (n) (+ n n))</code>으로 나타낼 수 있다. == 변수 == [[변수 (컴퓨터 과학)|변수]]는 동적 선언형이고 그 범위는 <code>define</code>, <code>let</code> 표현 그리고 몇 가지 스킴 형태 내에서 정의된다. 최상위 수준에 정의된 변수를 [[전역 변수]]라 한다. == 예제 프로그램 == 다음은 0 이상의 정수 n에 대하여 [[팩토리얼|n!]]을 돌려주는 스킴 함수를 정의한 것이다. <syntaxhighlight lang="scheme"> (define fac (lambda (n) (if (= n 0) 1 (* n (fac (- n 1)))))) </syntaxhighlight> == 같이 보기 == * [[래킷 (프로그래밍 언어)]] == 외부 링크 == * {{위키공용분류-줄}} * {{공식 웹사이트}} * {{언어링크|en}} [http://www.r6rs.org/final/r6rs.pdf R<sup>6</sup>RS: The revised<sup>6</sup> Report on the Algorithmic Language Scheme] * {{언어링크|en}} [https://conservatory.scheme.org/schemers/Documents/Standards/R5RS/r5rs.pdf R<sup>5</sup>RS: The revised<sup>5</sup> Report on the Algorithmic Language Scheme] * {{언어링크|en}} [http://www.swiss.ai.mit.edu/projects/scheme/ The Scheme Programming Language] - MIT/GNU Scheme뿐만 아니라 다른 스킴 구현들도 링크되어 있다. * {{ISBN|0262510871}} * {{ISBN|978-89-91268-32-6}} {{주요 프로그래밍 언어}} {{전거 통제}} {{위키데이터 속성 추적}} {{토막글|프로그래밍 언어}} [[분류:함수형 프로그래밍 언어]] [[분류:절차적 프로그래밍 언어]] [[분류:1975년 개발된 프로그래밍 언어]] [[분류:다중 패러다임 프로그래밍 언어]] [[분류:리스프 프로그래밍 언어 계열]] [[분류:동적 타입 프로그래밍 언어]]
스킴 (프로그래밍 언어)
문서로 돌아갑니다.
검색
검색
스킴 (프로그래밍 언어) 문서 원본 보기
새 주제