1. Альфа и Омега
Схема — это один из старейших диалектов хорошо известного
семейства языков LISP. LISP всегда существенно отличался от других
языков. И не только несколько непривычным синтаксисом, но и
большим изяществом и продуманностью.
Сначала всем кажется, что это ужасный язык с гирляндами
круглых скобок, однако при более подробном знакомстве выясняется,
что это совсем не проблема и плюсы перевешивают этот
единственный минус.
Сразу порекомендую пользоваться нормальным текстовым редактором. Очень
хорошо подойдут vim и emacs. А вот mcedit навсегда
вас отвадит от этого языка.
Это примерно как с поп-музыкой и чем-то другим.
Первая всегда быстро приходит и также быстро уходит, а вторая
не сразу придёт, зато никогда потом не покинет ;)
Всё это разглагольствование отнюдь не означает, что все
остальные языки по боку. Portable Assembler C ещё никто
не смог заменить ;)
Небольшое замечание в сторону Сизифа: там, пожалуй, самая большая
коллекция компиляторов и интерпретаторов схемы. Их пусть
лучше представит их мантейнер. Я же хочу обратить внимание
только на три:
- guile — не самый оптимальный по скорости, но зато непревзойдённый по удобству интеграции с C;
- gambit-c — очень хороший компилятор, но с бедноватым набором готовых библиотек;
- scheme48 — один из лучших интерпретаторов с богатой библиотекой.
2 О порядке слов.
Одно и то же можно рассказать разными способами. Попытаемся
рассказать разными способами про операцию сложения двух чисел.
Способ 1:
2 + 3 (или «к двум прибавить три»).
Не самый удачный способ с точки зрения математики
и языков программирования. Однако нас приучают к нему
с детства, так же как и к десятичной системе
счисления. Гораздо чаще произносится «два плюс три», но это скорее
пословное оглашение записи, строго говоря — лишённое какого либо
смысла, ибо плюсы бывают разными. Да и с точки зрения
языков программирования, например того же C, получается несколько
неудачно, ибо операция прибавления всё-таки обозначается
как +=. А в C++ это вообще может быть оформленно
как маловразумительная конструкция operator+().
Таким языком общается с миром большинство популярных языков программирования.
Способ 2:
2 3 + («два и три сложить»).
Очень непривычный, но удобный способ с точки зрения
математики. Известен также под названием польская нотация (или
польская запись). Математическое удобство превращается в то
что компиляторы и интерпретаторы языков программирования,
использующую такую нотацию получаются чрезвычайно компактными,
что позволяет их «засунуть» в кремний. Таким языком
общается с миром Форт и Постскрипт.
Способ 3:
+ 2 3 («сложить два и три»).
Может быть, не самый лучший с точки зрения науки, зато самый
естественный. «сложить два и три» гораздо понятнее
чем «два плюс три». Это не случайно, ибо это
функциональный подход. Функция сложения применяется к двум
и трём. В общем, то функция, пожалуй одно из самых
основных понятий современного мира.
Таким языком общается с миром всё многочисленное семейство LISP (и ещё много других функциональных языков программирования)
Итак, когда вы захотите что-то сказать на Scheme, сначала
надо назвать функцию, а потом перечислить, к кому её
применить.
Например «вычесть из трёх четыре», «перемножить пять шесть и семь».
Теперь немного о формате вызова.
Стандартный, и известный по школе способ записи результата применения функции к своим аргументам –
f(x). Ещё часто используется в математике бескобочный вариант –
Ax,Fx,...
Но LISP идёт своим путём и описывает вызов как
(f x). Казалось бы это ужасно, однако если функция много-аргументная, то мы экономим на спец. символах.
f(x,y,z)запишется как
(f x y z).
Собственно такая экономность и регулярность в синтаксисе LISP
и отпугивает от него, но как мы увидим дальше,
бедность и регулярность синтаксиса — это ещё
и богатство, если бы не она, то не было бы и
удобного способа описания интерфейса.
Благодаря такому способу записи интерпретатор выражений получается очень простым и компактным не в пример C
++,
где развесистые выражения подчас способны свести с ума
как разработчика, так и компилятор, да и
двусмысленность что в C, что в C++ — тоже
не подарок. К ней же привыкли — привыкните и к
Scheme.
Сразу несколько простейших выражений на Scheme. Комментировать их не буду и так всё понятно:
Считайте что одну четверть Scheme уже выучили – это очень маленький язык.
Продолжение следует....