Scheme


Scheme
Scheme
Lambda lc.svg
Семантика:

функциональный

Тип исполнения:

интерпретатор или компилятор

Появился в:

1975

Автор(ы):

Гай Стил и Джеральд Сассмен

Расширение файлов:

.scm, .ss

Типизация данных:

строгая, динамическая

Основные реализации:

PLT Scheme, MIT Scheme, Scheme48, Guile, JScheme

Диалекты:

T (англ.)

Испытал влияние:

Lisp, ALGOL

Повлиял на:

Common Lisp, JavaScript, R, Ruby, Dylan, Lua, Hop (англ.)русск., Racket (англ.)русск.

Scheme — это функциональный язык программирования, один из двух наиболее популярных в наши дни диалектов языка Лисп (другой популярный диалект — это Common Lisp). Авторы языка Scheme — Гай Стил (англ. Guy L. Steele) и Джеральд Сассмен (англ. Gerald Jay Sussman) из Массачусетского технологического института — создали его в середине 1970-х годов.

Содержание

Введение

При разработке Scheme упор был сделан на элегантность и простоту языка. Философия языка подчёркнуто минималистская. Его цель — не сваливать в кучу разные полезные конструкции и средства, а напротив — удалить слабости и ограничения, вызывающие необходимость добавления в язык новых возможностей. В результате, Scheme содержит минимум примитивных конструкций и позволяет выразить все, что угодно путём надстройки над ними. В качестве примера можно указать, что язык использует 2 механизма организации циклов:

  1. хвостовая рекурсия,
  2. итеративный подход (в котором используются временные переменные для сохранения промежуточного результата).

Scheme начинался с попытки понять модель акторов Карла Хьюитта, для чего Стил и Суссман написали «крошечный интерпретатор Лиспа», а затем «добавили механизм создания акторов и посылки сообщений». Scheme был первым диалектом Лиспа, применяющим исключительно статические (а не динамические) области видимости переменных, гарантирующим оптимизацию хвостовой рекурсии и поддерживающим данные булевского типа (#t и #f вместо традиционно неуклюжих T и NIL). Он также был одним из первых языков, непосредственно поддерживающих продолжения. Начиная со спецификации R^5RS, язык приобрел исключительно мощное и удобное средство для записи макросов на основе шаблонов синтаксического преобразования с «соблюдением гигиены» (англ. hygienic macro). В Scheme также реализована «сборка мусора», то есть автоматическое освобождение памяти от неиспользуемых более объектов.

В качестве базовых структур данных язык использует списки и одномерные массивы («векторы»). В соответствии с декларируемым минимализмом, (пока) нет стандартного синтаксиса для поддержки структур с именованными полями, а также средств ООП — все это может быть реализовано программистом по его предпочтению, хотя большинство реализаций языка предлагают готовые механизмы.

Как курьёз, можно отметить, что первоначальное название языка Schemer было изменено на настоящее из-за тогдашнего ограничения на длину имён файлов в ITS.

Примеры

Простые математические операции

(+ 2 (* 2 2))
(+ 1 2 3 4)

Вызов каждой операции (или функции) представляется списком, в котором символ операции (который, в сущности, является именем функции) всегда занимает начальную позицию.

Предикаты типа

(number? 5)
(number? "foo")
(string? "foo")

По соглашению, имена всех предикатов заканчиваются символом ?.

Проверки на равенство

(equal? "foo" "bar")
(eqv? 5 (+ 2 3))
(eq? 'a 'A)

Определение макросов для традиционных операций push/pop

(define-syntax push!
  (syntax-rules ()
    ((push! x l)
     (set! l (cons x l)))))
 
(define-syntax pop!
  (syntax-rules ()
    ((pop! l)
     (let ((x (car l)))
       (set! l (cdr l))
       x))))

Определение функций

;; факториал в (неэффективном) рекурсивном стиле
(define (fact x)
  (if (< x 3)
      x
      (* (fact (- x 1)) x)))
 
;; функция Фибоначчи — требует параллельной рекурсии
(define (fib n)
  (cond ((= n 0) 0)
        ((= n 1) 1)
        (else (+ (fib (- n 1))
                 (fib (- n 2))))))
 
;; сумма элементов списка в характерном для Scheme стиле
;; (вспомогательная функция loop выражает цикл с помощью
;; хвостовой рекурсии и переменной-аккумулятора)
(define (sum-list x)
  (let loop ((x x) (n 0))
    (if (null? x)
        n
        (loop (cdr x) (+ (car x) n)))))
 
(fact 14)
(fib 10)
(sum-list '(6 8 100))
(sum-list (map fib '(1 2 3 4)))

Определение функции должно соответствовать следующему прототипу:

(define имя-функции (lambda (аргументы) (реализация-функции)))

хотя на практике чаще используют сокращённую форму:

(define (имя-функции аргументы) (реализация-функции))

Ввод / Вывод

(write (+ (read) (read)))

Основные реализации

Литература. Учебники

Ссылки

На русском языке
  • ЖЖ-сообществоru_scheme — сообщество в LiveJournal, посвящённое языку Scheme
На английском языке
  • A large collection of Scheme resources. Большая коллекция ресурсов по Scheme.
  • Chez Scheme Бесплатный интерпретатор Scheme, платный компилятор для Microsoft Windows и нескольких UNIX systems.
  • Gauche Интерпретатор Scheme
  • Kawa Программа для Scheme, написанная на Java, которая компилирует тексты Scheme программ в Java bytecode. Любая Java библиотека может быть легко использована в Kawa.
  • Сообщество schemewiki.org

Wikimedia Foundation. 2010.

Смотреть что такое "Scheme" в других словарях:

  • Scheme — Basisdaten Paradigmen: Multi Paradigma: funktional, prozedural, meta Ersche …   Deutsch Wikipedia

  • scheme — [skiːm] noun [countable] 1. an official plan or arrangement that is intended to help people in some way: • a government training scheme for the unemployed 2. FINANCE an arrangement in which the government or an employer provides financial help to …   Financial and business terms

  • Scheme — Información general Paradigma multi paradigma Apareció en 1975 …   Wikipedia Español

  • schème — [ ʃɛm ] n. m. • 1800; « figure de style » 1586; de schéma 1 ♦ Philos. Chez Kant, Représentation qui est l intermédiaire entre les phénomènes perçus par les sens et les catégories de l entendement. Schème transcendantal. ⇒ concept. Schème moteur… …   Encyclopédie Universelle

  • Scheme — Scheme, n. [L. schema a rhetorical figure, a shape, figure, manner, Gr. ?, ?, form, shape, outline, plan, fr. ?, ?, to have or hold, to hold out, sustain, check, stop; cf. Skr. sah to be victorious, to endure, to hold out, AS. sige victory, G.… …   The Collaborative International Dictionary of English

  • Scheme — may refer to:* Scheme (programming language), a minimalist, multi paradigm dialect of Lisp * Scheme (mathematics), an important concept in algebraic geometry * Scheme (linguistics), a figure of speech that changes a sentence s structureystematic… …   Wikipedia

  • scheme — n 1: a combination of elements (as statutes or regulations) that are connected, adjusted, and integrated by design: a systematic plan or program an administrative inspection scheme 2: a crafty, unethical, or fraudulent project a scheme to defraud …   Law dictionary

  • scheme — [skēm] n. [L schema < Gr schēma (gen. schēmatos), a form, appearance, plan, akin to schein, echein, to hold, have < IE base * seĝh , to hold, hold fast, conquer > SCHOOL1, Sans sáhas, power, victory, Goth sigis, Ger sieg, victory] 1. a)… …   English World dictionary

  • Scheme — Scheme, v. t. [imp. & p. p. {Schemed}; p. pr. & vb. n. {Scheming}.] To make a scheme of; to plan; to design; to project; to plot. [1913 Webster] That wickedness which schemed, and executed, his destruction. G. Stuart. [1913 Webster] …   The Collaborative International Dictionary of English

  • Scheme — Scheme, v. i. To form a scheme or schemes. [1913 Webster] …   The Collaborative International Dictionary of English

Книги

Другие книги по запросу «Scheme» >>