0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<ul><li><a>Scheme - это…</a><ul><li><a>Ключевые особенности</a></li>
1
<ul><li><a>Scheme - это…</a><ul><li><a>Ключевые особенности</a></li>
2
</ul></li>
2
</ul></li>
3
<li><a>Сферы применения</a></li>
3
<li><a>Сферы применения</a></li>
4
<li><a>Синтаксис</a></li>
4
<li><a>Синтаксис</a></li>
5
<li><a>О реализациях</a></li>
5
<li><a>О реализациях</a></li>
6
<li><a>Базовый синтаксис</a><ul><li><a>Функция repeat</a></li>
6
<li><a>Базовый синтаксис</a><ul><li><a>Функция repeat</a></li>
7
</ul></li>
7
</ul></li>
8
<li><a>Блочная структура</a></li>
8
<li><a>Блочная структура</a></li>
9
<li><a>Как выучить</a></li>
9
<li><a>Как выучить</a></li>
10
</ul><p>Языки программирования предназначены не только для создания игр, бизнес-приложений и иных программ. Они довольно часто применяются в области обработки данных. Это привело к тому, что в мире IT появились совершенно новые виды ЯП. Они специализируются в научной области и предназначаются для выполнения определенных задач. Пример - анализ и визуализация массивов данных.</p>
10
</ul><p>Языки программирования предназначены не только для создания игр, бизнес-приложений и иных программ. Они довольно часто применяются в области обработки данных. Это привело к тому, что в мире IT появились совершенно новые виды ЯП. Они специализируются в научной области и предназначаются для выполнения определенных задач. Пример - анализ и визуализация массивов данных.</p>
11
<p>Огромным спросом в этой сфере пользуется язык Scheme. О нем и зайдет речь далее. Предстоит разобраться с его особенностями, преимуществами и недостатками. Предложенные сведения помогут понять, стоит ли вообще учить The Scheme.</p>
11
<p>Огромным спросом в этой сфере пользуется язык Scheme. О нем и зайдет речь далее. Предстоит разобраться с его особенностями, преимуществами и недостатками. Предложенные сведения помогут понять, стоит ли вообще учить The Scheme.</p>
12
<p>The Scheme - это диалект Lisp. Пользуется огромным спросом у программистов и аналитиков. Минималистичный вариант Лисп, предоставляющий разработчикам компактный базовый язык, а также мощный пакет инструментов для его расширения.</p>
12
<p>The Scheme - это диалект Lisp. Пользуется огромным спросом у программистов и аналитиков. Минималистичный вариант Лисп, предоставляющий разработчикам компактный базовый язык, а также мощный пакет инструментов для его расширения.</p>
13
<p>Появился в 1975 году. Его создателями стали Гай Стил и Джеральд Сассмен. Данный язык имеет стандартизацию IEEE Standard for the Scheme Programming Language 1995 года. Существую несколько фактических стандартов RnRS.</p>
13
<p>Появился в 1975 году. Его создателями стали Гай Стил и Джеральд Сассмен. Данный язык имеет стандартизацию IEEE Standard for the Scheme Programming Language 1995 года. Существую несколько фактических стандартов RnRS.</p>
14
<h3>Ключевые особенности</h3>
14
<h3>Ключевые особенности</h3>
15
<p>The Scheme - один из нескольких популярных диалектов Лисп. Он отличается от них следующими чертами:</p>
15
<p>The Scheme - один из нескольких популярных диалектов Лисп. Он отличается от них следующими чертами:</p>
16
<ol><li>Минималичность. Язык основан на лимбда-исчислениях. Оно применяется для получения основной части синтаксиса (11 из 23 конструкций).</li>
16
<ol><li>Минималичность. Язык основан на лимбда-исчислениях. Оно применяется для получения основной части синтаксиса (11 из 23 конструкций).</li>
17
<li>Область видимости. Она будет статической лексической. Здесь имя переменной будет относиться к самой локальной области видимости, что способствует созданию и интерпретации кода за пределами контекста.</li>
17
<li>Область видимости. Она будет статической лексической. Здесь имя переменной будет относиться к самой локальной области видимости, что способствует созданию и интерпретации кода за пределами контекста.</li>
18
<li>Блоки, выраженные всего тремя конструкциями. К ним относят let, letrec, а также let*.</li>
18
<li>Блоки, выраженные всего тремя конструкциями. К ним относят let, letrec, а также let*.</li>
19
<li>Грамотная хвостовая рекурсия, за счет которой можно вести запись итеративных алгоритмов более идиоматично. Оптимизация будет поддерживать бесконечное множество активных вызовов.</li>
19
<li>Грамотная хвостовая рекурсия, за счет которой можно вести запись итеративных алгоритмов более идиоматично. Оптимизация будет поддерживать бесконечное множество активных вызовов.</li>
20
<li>Продолжения, представленные в виде объектов первого класса. Реализация осуществляется через процедуру call-with-current-continuation.</li>
20
<li>Продолжения, представленные в виде объектов первого класса. Реализация осуществляется через процедуру call-with-current-continuation.</li>
21
<li>Общее пространство, используемое не только для процедур, но и для переменных.</li>
21
<li>Общее пространство, используемое не только для процедур, но и для переменных.</li>
22
</ol><p>Это - отличный вариант Lisp для начинающих. Он достаточно прост в освоении даже теми, кто раньше не имел никаких дел с разработкой.</p>
22
</ol><p>Это - отличный вариант Lisp для начинающих. Он достаточно прост в освоении даже теми, кто раньше не имел никаких дел с разработкой.</p>
23
<h2>Сферы применения</h2>
23
<h2>Сферы применения</h2>
24
<p>The Scheme - узконаправленный диалект Лисп. Он используется в американских ВУЗах и школьных образовательных учреждениях. С его помощью познаются основы процедурной разработки. С другими базовыми языками подобный прием не работает - они не позволят полностью погрузиться в процесс.</p>
24
<p>The Scheme - узконаправленный диалект Лисп. Он используется в американских ВУЗах и школьных образовательных учреждениях. С его помощью познаются основы процедурной разработки. С другими базовыми языками подобный прием не работает - они не позволят полностью погрузиться в процесс.</p>
25
<p>В "обычной" жизни, за пределами обучения, The Schemer (диалект Lisps) не имеет определенной сферы применения. Он используется преимущественно для продолжения проектов студентов или программистов-новичков, а также выпуска пробных релизов в процедурной разработке.</p>
25
<p>В "обычной" жизни, за пределами обучения, The Schemer (диалект Lisps) не имеет определенной сферы применения. Он используется преимущественно для продолжения проектов студентов или программистов-новичков, а также выпуска пробных релизов в процедурной разработке.</p>
26
<p>Причинами данного явления являются следующие моменты:</p>
26
<p>Причинами данного явления являются следующие моменты:</p>
27
<ul><li>размер написанного исходного кода;</li>
27
<ul><li>размер написанного исходного кода;</li>
28
<li>вероятные трудности при отладке и поиске ошибок в приложении;</li>
28
<li>вероятные трудности при отладке и поиске ошибок в приложении;</li>
29
<li>отсутствие функциональных преимуществ по сравнению с другими диалектами Lisp.</li>
29
<li>отсутствие функциональных преимуществ по сравнению с другими диалектами Lisp.</li>
30
</ul><p>В своем первоначальном виде ЯП для опытных программистов не подходит. Можно воспользоваться интерпретаторами Bigloo или Racket, которые расширяют стандартные возможности "Схемы", включая синтаксис. С их помощью удается обогатить функционал, получив доступ к визуализации, работе с массивами и матрицами, взаимодействию с другими языками.</p>
30
</ul><p>В своем первоначальном виде ЯП для опытных программистов не подходит. Можно воспользоваться интерпретаторами Bigloo или Racket, которые расширяют стандартные возможности "Схемы", включая синтаксис. С их помощью удается обогатить функционал, получив доступ к визуализации, работе с массивами и матрицами, взаимодействию с другими языками.</p>
31
<h2>Синтаксис</h2>
31
<h2>Синтаксис</h2>
32
<p>Синтаксис все the language нельзя назвать "стандартным". Он базируется на принципе "действие - предмет". Каждая конечная фраза тут - это объект, окруженный круглыми скобками с двух сторон.</p>
32
<p>Синтаксис все the language нельзя назвать "стандартным". Он базируется на принципе "действие - предмет". Каждая конечная фраза тут - это объект, окруженный круглыми скобками с двух сторон.</p>
33
<p>Если провести аналогию с русским языком, то синтаксис не вызовет затруднений. Последовательности здесь нередки:</p>
33
<p>Если провести аналогию с русским языком, то синтаксис не вызовет затруднений. Последовательности здесь нередки:</p>
34
<ul><li>сложить три и пять;</li>
34
<ul><li>сложить три и пять;</li>
35
<li>найти произведение 1, 2 и 3;</li>
35
<li>найти произведение 1, 2 и 3;</li>
36
<li>купить батон в булочной.</li>
36
<li>купить батон в булочной.</li>
37
</ul><p>Если представить сказанное в the code, написанном на "Схеме", получится следующая запись:</p>
37
</ul><p>Если представить сказанное в the code, написанном на "Схеме", получится следующая запись:</p>
38
<ul><li>(+ 3 5);</li>
38
<ul><li>(+ 3 5);</li>
39
<li>(* 1 2 3);</li>
39
<li>(* 1 2 3);</li>
40
<li>(купить батон в булочной).</li>
40
<li>(купить батон в булочной).</li>
41
</ul><p>Поддерживается и более сложная запись. Пример - купи в булочной батоны: два и еще один. Выглядит это так: (купи в булочной батоны (+ 2 1)).</p>
41
</ul><p>Поддерживается и более сложная запись. Пример - купи в булочной батоны: два и еще один. Выглядит это так: (купи в булочной батоны (+ 2 1)).</p>
42
<p>Переменная в ЯП будет задана по схеме: (define имя <изначальное значение>). Функция имеет такой формат: (define (имя параметр параметр ….) тело_функции).</p>
42
<p>Переменная в ЯП будет задана по схеме: (define имя <изначальное значение>). Функция имеет такой формат: (define (имя параметр параметр ….) тело_функции).</p>
43
<p>The Scheme предлагает несколько готовый "глаголов"-действий:</p>
43
<p>The Scheme предлагает несколько готовый "глаголов"-действий:</p>
44
<ul><li>read - используется для того, чтобы считывать имена;</li>
44
<ul><li>read - используется для того, чтобы считывать имена;</li>
45
<li>display - непосредственное отображение информации на дисплее устройства;</li>
45
<li>display - непосредственное отображение информации на дисплее устройства;</li>
46
<li>newline - вывод перевода строки.</li>
46
<li>newline - вывод перевода строки.</li>
47
</ul><p>Разобраться с The Scheme не так трудно, если постараться. Он с легкостью осваивается теми, кто уже имел дело с Lisp.</p>
47
</ul><p>Разобраться с The Scheme не так трудно, если постараться. Он с легкостью осваивается теми, кто уже имел дело с Lisp.</p>
48
<h2>О реализациях</h2>
48
<h2>О реализациях</h2>
49
<p>Сред разработки изучаемого ЯП достаточно много. Большинство документации по ним идут на английском языке. На русском материалов мало, обычно они являются лишь своеобразным введением в основы разработки.</p>
49
<p>Сред разработки изучаемого ЯП достаточно много. Большинство документации по ним идут на английском языке. На русском материалов мало, обычно они являются лишь своеобразным введением в основы разработки.</p>
50
<p>Наиболее распространенными реализациями являются:</p>
50
<p>Наиболее распространенными реализациями являются:</p>
51
<ol><li>Racket. Наиболее полная реализация. Она предусматривает удобную пользователю среду под названием The Dr.Scheme. Используется на всех популярных компьютерных платформах - Linux, Mac OS и Windows.</li>
51
<ol><li>Racket. Наиболее полная реализация. Она предусматривает удобную пользователю среду под названием The Dr.Scheme. Используется на всех популярных компьютерных платформах - Linux, Mac OS и Windows.</li>
52
<li>Bigloo. Достаточно полный и функциональный вариант. Используется на платформах Линукс и Виндовс.</li>
52
<li>Bigloo. Достаточно полный и функциональный вариант. Используется на платформах Линукс и Виндовс.</li>
53
<li>LispMe. Реализация, которая не слишком популярна среди современных программистов. Является компактной версией для операционных систем Palm OS.</li>
53
<li>LispMe. Реализация, которая не слишком популярна среди современных программистов. Является компактной версией для операционных систем Palm OS.</li>
54
<li>GNU Guile. Распространенный вариант от крупного проекта CNU. Он используется в приложениях, работающих в The GNU Guix. Доступа не только для GNU, но и для Linux. Поддерживает опцию компиляции.</li>
54
<li>GNU Guile. Распространенный вариант от крупного проекта CNU. Он используется в приложениях, работающих в The GNU Guix. Доступа не только для GNU, но и для Linux. Поддерживает опцию компиляции.</li>
55
</ol><p>Наиболее быстрым компилятором является Gambit-C. Выбрать можно любой из перечисленных вариантов реализаций.</p>
55
</ol><p>Наиболее быстрым компилятором является Gambit-C. Выбрать можно любой из перечисленных вариантов реализаций.</p>
56
<h2>Базовый синтаксис</h2>
56
<h2>Базовый синтаксис</h2>
57
<p>Вот базовые конструкции The Scheme, которые должен знать любой, кто хочет писать на данном ЯП:</p>
57
<p>Вот базовые конструкции The Scheme, которые должен знать любой, кто хочет писать на данном ЯП:</p>
58
<p>Задание переменных производится при помощи такой записи: .</p>
58
<p>Задание переменных производится при помощи такой записи: .</p>
59
<p>В качестве дополнительных конструкций в программном коде встречаются формы записей:</p>
59
<p>В качестве дополнительных конструкций в программном коде встречаются формы записей:</p>
60
<p>.</p>
60
<p>.</p>
61
<h3>Функция repeat</h3>
61
<h3>Функция repeat</h3>
62
<p>Отдельно стоит изучить функцию repeat. Она позволяет повторить операцию, которая должна быть реализована несколько раз. Для того, чтобы обработать то или иное действие всего один раз, оно прописывается в коде единожды:</p>
62
<p>Отдельно стоит изучить функцию repeat. Она позволяет повторить операцию, которая должна быть реализована несколько раз. Для того, чтобы обработать то или иное действие всего один раз, оно прописывается в коде единожды:</p>
63
<p>Для двукратного выполнения код повторяется дважды:</p>
63
<p>Для двукратного выполнения код повторяется дважды:</p>
64
<p>Это частные случаи, которые на практике встречаются крайне редко. Обычно операции приходится повторять снова и снова. Для этого используется специальная функция. Она будет носить имя repeat. Включает в себя всего один параметр - количество запросов. Алгоритм функционирования окажется следующим:</p>
64
<p>Это частные случаи, которые на практике встречаются крайне редко. Обычно операции приходится повторять снова и снова. Для этого используется специальная функция. Она будет носить имя repeat. Включает в себя всего один параметр - количество запросов. Алгоритм функционирования окажется следующим:</p>
65
<ol><li>Выполнить операцию.</li>
65
<ol><li>Выполнить операцию.</li>
66
<li>Вызвать функцию repeat с количеством повторов, уменьшенным на единицу.</li>
66
<li>Вызвать функцию repeat с количеством повторов, уменьшенным на единицу.</li>
67
</ol><p>В программном коде это выглядит так:</p>
67
</ol><p>В программном коде это выглядит так:</p>
68
<p>В качестве наглядного примера используется функция возведения в степень. Данная процедура может быть интерпретирована сразу несколькими способами:</p>
68
<p>В качестве наглядного примера используется функция возведения в степень. Данная процедура может быть интерпретирована сразу несколькими способами:</p>
69
<p>(<strong>define</strong>(factorial n)</p>
69
<p>(<strong>define</strong>(factorial n)</p>
70
<p> (<strong>if</strong>(= n 0)</p>
70
<p> (<strong>if</strong>(= n 0)</p>
71
<p> 1</p>
71
<p> 1</p>
72
<p> (* n (factorial (- n 1)))))</p>
72
<p> (* n (factorial (- n 1)))))</p>
73
<p>Но это еще не все, что требуется знать для грамотного применения The Scheme на первых порах. Каждому разработчику необходимо разобраться с блочной структурой.</p>
73
<p>Но это еще не все, что требуется знать для грамотного применения The Scheme на первых порах. Каждому разработчику необходимо разобраться с блочной структурой.</p>
74
<h2>Блочная структура</h2>
74
<h2>Блочная структура</h2>
75
<p>ЯП использует всего три типа блоков. Каждый предусматривает свои ключевые особенности и нюансы. Блоки могут быть вложенными. Они позволяют создавать более сложные блочные структуры согласно потребностям разработки. Такая концепция при работе с локальными привязками снижает риск возникновения конфликта пространств имен.</p>
75
<p>ЯП использует всего три типа блоков. Каждый предусматривает свои ключевые особенности и нюансы. Блоки могут быть вложенными. Они позволяют создавать более сложные блочные структуры согласно потребностям разработки. Такая концепция при работе с локальными привязками снижает риск возникновения конфликта пространств имен.</p>
76
<p>Let* допускает ссылки привязок на переменные, определенные в той же конструкции:</p>
76
<p>Let* допускает ссылки привязок на переменные, определенные в той же конструкции:</p>
77
<p>Letrec используется для обеспечения возможности привязки взаимно рекурсивных процедур друг к другу:</p>
77
<p>Letrec используется для обеспечения возможности привязки взаимно рекурсивных процедур друг к другу:</p>
78
<p>.</p>
78
<p>.</p>
79
<p>Все операции, прописанные в блоке letrec, могут ссылаться друг на друга по имени, на значение ранее определенных переменных. А вариант let-формы, типа named let обладает идентификатором после ключевого слова let. За счет этого происходит связывание переменной с аргументом процедуры, имя которой служит заданным идентификатором. Ее тело - это тело формы let.</p>
79
<p>Все операции, прописанные в блоке letrec, могут ссылаться друг на друга по имени, на значение ранее определенных переменных. А вариант let-формы, типа named let обладает идентификатором после ключевого слова let. За счет этого происходит связывание переменной с аргументом процедуры, имя которой служит заданным идентификатором. Ее тело - это тело формы let.</p>
80
(let loop ((n 1)) (if (> n 10)) ‘() (cons n (loop (+ n 1))) ===> (1 2 3 4 5 6 7 8 9 10)<p>Данный фрагмент - это пример обычного счетчика. Любая процедура, созданная в The Scheme, является объектом первого класса.</p>
80
(let loop ((n 1)) (if (> n 10)) ‘() (cons n (loop (+ n 1))) ===> (1 2 3 4 5 6 7 8 9 10)<p>Данный фрагмент - это пример обычного счетчика. Любая процедура, созданная в The Scheme, является объектом первого класса.</p>
81
<h2>Как выучить</h2>
81
<h2>Как выучить</h2>
82
<p>Рассмотренный ЯП не слишком популярен, но тем, кто занимается функциональной разработкой, он пригодится. Изучить его не слишком трудно. Можно заняться самообразованием и найти<a>видео-уроки</a>, а также документацию на русском языке в Сети (или выучить английский и работать с первоисточниками). В ВУЗах и школах России Scheme не изучается - только за границей. Поэтому лучшим решением станет посещение специализированных компьютерных онлайн курсов. Пример - от образовательного центра OTUS.</p>
82
<p>Рассмотренный ЯП не слишком популярен, но тем, кто занимается функциональной разработкой, он пригодится. Изучить его не слишком трудно. Можно заняться самообразованием и найти<a>видео-уроки</a>, а также документацию на русском языке в Сети (или выучить английский и работать с первоисточниками). В ВУЗах и школах России Scheme не изучается - только за границей. Поэтому лучшим решением станет посещение специализированных компьютерных онлайн курсов. Пример - от образовательного центра OTUS.</p>
83
<p>Преимуществами такого подхода к изучению являются следующие моменты:</p>
83
<p>Преимуществами такого подхода к изучению являются следующие моменты:</p>
84
<ol><li>Образовательный процесс в режиме "онлайн". Смотреть уроки можно с любого устройства через интернет.</li>
84
<ol><li>Образовательный процесс в режиме "онлайн". Смотреть уроки можно с любого устройства через интернет.</li>
85
<li>Сжатые сроки обучения. В зависимости от выбранного направления период учебы длится до 12 месяцев.</li>
85
<li>Сжатые сроки обучения. В зависимости от выбранного направления период учебы длится до 12 месяцев.</li>
86
<li>Постоянное кураторство и продуманные интересные домашние задания.</li>
86
<li>Постоянное кураторство и продуманные интересные домашние задания.</li>
87
<li>Помощь в формировании портфолио, а также богатый практический опыт.</li>
87
<li>Помощь в формировании портфолио, а также богатый практический опыт.</li>
88
<li>Подача материала. Предлагаемая информация с легкостью усваивается даже новичками, далекими от IT.</li>
88
<li>Подача материала. Предлагаемая информация с легкостью усваивается даже новичками, далекими от IT.</li>
89
</ol><p>Дистанционные онлайн курсы - возможность освоить одновременно одну или несколько IT-профессий, научится процедурному и функциональному программированию, а также подтвердить приобретенные навыки специальным электронным сертификатом.</p>
89
</ol><p>Дистанционные онлайн курсы - возможность освоить одновременно одну или несколько IT-профессий, научится процедурному и функциональному программированию, а также подтвердить приобретенные навыки специальным электронным сертификатом.</p>
90
<p><em>Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в <a>Otus</a>!</em> </p>
90
<p><em>Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в <a>Otus</a>!</em> </p>
91
<p>Также, возможно, вам будут интересны следующие курсы:</p>
91
<p>Также, возможно, вам будут интересны следующие курсы:</p>
92
<ul><li><a>Промышленный ML на больших данных</a></li>
92
<ul><li><a>Промышленный ML на больших данных</a></li>
93
<li><a>Data Warehouse Analyst</a></li>
93
<li><a>Data Warehouse Analyst</a></li>
94
<li><a>Data Engineer</a></li>
94
<li><a>Data Engineer</a></li>
95
<li><a>Product Manager</a></li>
95
<li><a>Product Manager</a></li>
96
<li><a>Системный аналитик</a></li>
96
<li><a>Системный аналитик</a></li>
97
</ul>
97
</ul>