Scheme

Scheme
Семантика: функциональный
Тип исполнения: интерпретатор или компилятор
Появился в: 1970 г.
Автор(ы): Гай Стил и Джеральд Сассмен
Типизация данных: строгая, динамическая
Основные реализации: PLT Scheme, MIT Scheme, Scheme48, Guile
Диалекты: множество
Создан под влиянием: Lisp, ALGOL
Оказал влияние на: Common Lisp

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

Содержание

Введение

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

Scheme был первым диалектом Лиспа, применяющим исключительно статические (а не динамические) области видимости переменных. Он также был одним из первых языков, непосредственно поддерживающих продолжения (англ. continuations). В Scheme также реализована «сборка мусора» (англ. garbage collection), т.е автоматическое освобождение памяти от неиспользуемых объектов.

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

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

Примеры

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

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

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

Запросы типа

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

По соглашению, имена всех функций-запросов (в том числе и типа) заканчиваются символом ?.

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

(eq? "foo" "bar")
(eq? 5 (+ 2 3))
(eq? (eq? 2 3) (eq? 3 4))

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

(define fact (lambda (x) (if (= x 1) 1 (* x (fact (- x 1))))))
(define fib (lambda (n) 
    (cond 
       ((= n 0) 0)
       ((= n 1) 1)
       (else (+ (fib (- n 1)) (fib (- n 2))))
    )
))
(define sum (lambda (x)
    (cond
       ((null? x) 0)
       (else (+ (car x) (sum (cdr x))))
    )
))
(fact 14)
(fib 10)
(sum '(6 6 6 100))
(sum (map fib '(1 2 3 4)))

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

(define имя_функции (lambda (список_аргументов) (реализация_функции))),

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

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

Ввод/Вывод

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

Русскоязычные ссылки

Англоязычные ссылки

  • A large collection of Scheme resources. Большая коллекция ресурсов по Scheme.
  • MIT/GNU Scheme Бесплатная (GPL-licensed) реализация для x86 архитектуры. Работает на GNU/Linux, FreeBSD, IBM OS/2, и Microsoft Windows.
  • Chez Scheme Бесплатная реализация интерпретатора Scheme и коммерческий Scheme компилятор для Microsoft Windows и нескольких UNIX systems.
  • Chicken
  • Guile официальный «язык расширений» в рамках GNU project’s. Этот интерпретатор Scheme реализован как библиотека, позволяющая приложениям создавать внутренний интерпретатор (Scripting).
  • The PLT Scheme suite Пакет программ для Scheme, для Windows, Mac, и Unix платформ. Включает интерпретатор (MzScheme), графические утилиты (MrEd), учебно-ориентированный графический редактор (DrScheme), и ряд других компонентов, в том числе COM и ODBC библиотеки.
  • Kawa Программа для Scheme, написанная на Java, которая компилирует тексты Scheme программ в Java bytecode. Любая Java библиотека может быть легко использована в Kawa.
  • Community Scheme Wiki Вики ресурсы по языку Scheme.

Учебники на английском:


 
Начальная страница  » 
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 Home