HTML Diff
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 имя &lt;изначальное значение&gt;). Функция имеет такой формат: (define (имя параметр параметр ….) тело_функции).</p>
42 <p>Переменная в ЯП будет задана по схеме: (define имя &lt;изначальное значение&gt;). Функция имеет такой формат: (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 (&gt; n 10)) ‘() (cons n (loop (+ n 1))) ===&gt; (1 2 3 4 5 6 7 8 9 10)<p>Данный фрагмент - это пример обычного счетчика. Любая процедура, созданная в The Scheme, является объектом первого класса.</p>
80 (let loop ((n 1)) (if (&gt; n 10)) ‘() (cons n (loop (+ n 1))) ===&gt; (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>