ВУЗ:
Составители:
Рубрика:
5
Введение
В предисловии к одной из лучших монографий, посвящен-
ных Прологу [1], И. Братко писал: «В средние века знание латин-
ского и греческого языков являлось существенной частью образо-
вания любого ученого. Ученый, владеющий только одним языком,
неизбежно чувствовал себя неполноценным, поскольку он был
лишен той полноты восприятия, которая возникает благодаря воз-
можности посмотреть
на мир сразу с двух точек зрения. Таким же
неполноценным ощущает себя сегодняшний исследователь в об-
ласти искусственного интеллекта, если он не обладает основатель-
ным знакомством как с Лиспом, так и с Прологом – этими двумя
основополагающими языками искусственного интеллекта, без
знания которых невозможен более широкий взгляд на предмет
исследования».
С
полной уверенностью могу добавить к этим языкам и Icon,
который прост и могуч во многом потому, что наследует идеоло-
гию мощного семейства языков SNOBOL, первые представители
которых появились еще в начале 60-х. Название языка не имеет
ничего общего с «иконками», а является сокращением от слова
«iconoclastic» (иконоборец) [1], используемом в смысле борьбы с
конформизмом
в разработке языков программирования.
Настоящий материал следует рассматривать как введение в
программирование на Icon’е. Это – не учебник по программирова-
нию, он рассчитан на студентов, уже имеющих опыт программи-
рования на Си или Паскале. «Императивная» внешность Icon’а
способствует быстрому усвоению языка. Простота синтаксиса,
небольшое, но функционально мощное множество структур дан-
ных делают
его очень удобным языком быстрого прототипирова-
ния, т. е. за более короткое время, чем программирование на Си,
можно написать и отладить программу, при помощи которой про-
веряются основные идеи концепции.
Сохраняя внешне стиль императивных языков, на самом де-
ле Icon имеет много инструментов, роднящих его с языками логи-
ческого программирования. Например, «
бэктрекинг», или генера-
торы. Christopher [2] пишет: «Самое большое различие между
Icon'ом и другими языками программирования – это то, что выра-
6
жения Icon'а – генераторы». Выражения генерируют последова-
тельности значений, используя «бэктрекинг».
Пример
использования генератора:
procedure main()
L:=["mmm","nnnnn","oooooo"] # Список строк
every writes(" ",! L)
end
Выход: mmm nnnnn oooooo
Icon не является строго типизированным (тип имеют кон-
станты, но не переменные). Это и не плохо и не хорошо, но чаще
всего удобно. Будьте внимательны и следуйте модульному стилю
программирования.
Icon обладает мощными встроенными типами данных для
организации сложно структурированной информации: ассоциатив-
ные таблицы, списки, записи
, множества по модулю 2 (автомати-
чески исключающие дублирование), символьные множества. Поч-
ти любой тип из этого перечня может быть элементом другого ти-
па. Например, элементами таблиц могут быть списки. Списки мо-
гут состоять из записей и т. п. Только не надо специально услож-
нять структуры. Все должно быть ЦЕЛЕСООБРАЗНЫМ. («Красо-
та –
это целесообразность» – Иван Ефремов (?)).
Процедуры в Icon'е «относятся к величинам первого класса
(first class values, что означает возможность присваивания перемен-
ным значений самих процедур, а не результатов их выполнения).
В Icon встроен механизм «совыражений» (co-expression) –
почти независимо выполняющихся частей программы, что дает
возможность как создавать классические сопрограммы, так и реа-
лизовывать произвольные псевдопараллельные алгоритмы.
Icon поддерживает
автоматическую конверсию типов.
Icon включает кросс-платформенные графические возмож-
ности.
Мой собственный опыт подтверждает, что программы на
Icon'е быстро разрабатываются, быстро и надежно работают. Я
даже стал задумываться: а не изменить ли моей старой любви –
Prolog'у?! (Тем более что Icon распространяется свободно (не для
коммерческого использования!) и Вы можете свободно распро
-
Введение жения Icon'а – генераторы». Выражения генерируют последова- тельности значений, используя «бэктрекинг». В предисловии к одной из лучших монографий, посвящен- Пример использования генератора: ных Прологу [1], И. Братко писал: «В средние века знание латин- procedure main() ского и греческого языков являлось существенной частью образо- L:=["mmm","nnnnn","oooooo"] # Список строк вания любого ученого. Ученый, владеющий только одним языком, every writes(" ",! L) неизбежно чувствовал себя неполноценным, поскольку он был end лишен той полноты восприятия, которая возникает благодаря воз- Выход: mmm nnnnn oooooo можности посмотреть на мир сразу с двух точек зрения. Таким же Icon не является строго типизированным (тип имеют кон- неполноценным ощущает себя сегодняшний исследователь в об- станты, но не переменные). Это и не плохо и не хорошо, но чаще ласти искусственного интеллекта, если он не обладает основатель- всего удобно. Будьте внимательны и следуйте модульному стилю ным знакомством как с Лиспом, так и с Прологом – этими двумя программирования. основополагающими языками искусственного интеллекта, без Icon обладает мощными встроенными типами данных для знания которых невозможен более широкий взгляд на предмет организации сложно структурированной информации: ассоциатив- исследования». ные таблицы, списки, записи, множества по модулю 2 (автомати- С полной уверенностью могу добавить к этим языкам и Icon, чески исключающие дублирование), символьные множества. Поч- который прост и могуч во многом потому, что наследует идеоло- ти любой тип из этого перечня может быть элементом другого ти- гию мощного семейства языков SNOBOL, первые представители па. Например, элементами таблиц могут быть списки. Списки мо- которых появились еще в начале 60-х. Название языка не имеет гут состоять из записей и т. п. Только не надо специально услож- ничего общего с «иконками», а является сокращением от слова нять структуры. Все должно быть ЦЕЛЕСООБРАЗНЫМ. («Красо- «iconoclastic» (иконоборец) [1], используемом в смысле борьбы с та – это целесообразность» – Иван Ефремов (?)). конформизмом в разработке языков программирования. Процедуры в Icon'е «относятся к величинам первого класса Настоящий материал следует рассматривать как введение в (first class values, что означает возможность присваивания перемен- программирование на Icon’е. Это – не учебник по программирова- ным значений самих процедур, а не результатов их выполнения). нию, он рассчитан на студентов, уже имеющих опыт программи- В Icon встроен механизм «совыражений» (co-expression) – рования на Си или Паскале. «Императивная» внешность Icon’а почти независимо выполняющихся частей программы, что дает способствует быстрому усвоению языка. Простота синтаксиса, возможность как создавать классические сопрограммы, так и реа- небольшое, но функционально мощное множество структур дан- лизовывать произвольные псевдопараллельные алгоритмы. ных делают его очень удобным языком быстрого прототипирова- Icon поддерживает автоматическую конверсию типов. ния, т. е. за более короткое время, чем программирование на Си, Icon включает кросс-платформенные графические возмож- можно написать и отладить программу, при помощи которой про- ности. веряются основные идеи концепции. Мой собственный опыт подтверждает, что программы на Сохраняя внешне стиль императивных языков, на самом де- Icon'е быстро разрабатываются, быстро и надежно работают. Я ле Icon имеет много инструментов, роднящих его с языками логи- даже стал задумываться: а не изменить ли моей старой любви – ческого программирования. Например, «бэктрекинг», или генера- Prolog'у?! (Тем более что Icon распространяется свободно (не для торы. Christopher [2] пишет: «Самое большое различие между коммерческого использования!) и Вы можете свободно распро- Icon'ом и другими языками программирования – это то, что выра- 5 6