WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 | 3 | 4 |
УДК 519.682 Министерство образования и науки Российской Федерации ББК 32.973-018я73 Омский государственный университет им. Ф.М. Достоевского Ч 188 Рекомендовано к изданию в качестве учебного пособия учебно-методическим советом математического факультета Рецензенты:

канд. физ.-мат. наук, доцент С.В. Зыкин, канд. физ.-мат. наук, доцент А.Л. Агафонов Чанышев О.Г.

Ч 188 Основные элементы языка программирования Icon:

Учебное пособие. – Омск: Изд-во ОмГУ, 2004. – 55 с.

О.Г. Чанышев ISBN 5-7779-0523-4 Пособие является первой публикацией на русском языке, Основные элементы посвященной мощному средству быстрой разработки программ языка программирования Icon для систем ИИ, особенно для автоматического анализа естественно-языковых текстов – языку Icon. В основу положена книУчебное пособие га Thomas W. Christopher «Icon Programming Language Handbook», однако данное пособие – не перевод. Автор опирается на собственный опыт работы с языком; примеры программ в подавляющем большинстве оригинальны.

Для студентов математического факультета.

УДК 519.682 ББК 32.973-018я73 Изд-во Омск © Чанышев О.Г., 2004 ISBN 5-7779-0523-4 © Омский госуниверситет, 2004 ОмГУ 2004 2 10. Процедуры ОГЛАВЛЕНИЕ 10.1. Вызов процедур............................................................................. 36 10.2. Выход из процедуры...................................................................... 38 Введение......................................................................................................... 5 11. Основные функции для работы с файлами..................................... 39 1. О синтаксисе, переменные, декларации............................................ 11 12. Немного о совыражениях – coexpression.......................................... 41 2. Генераторы 13. Графический интерфейс 2.1. Every, to, every do............................................................................. 13.1. Атрибуты окна............................................................................... 2.2. !e – генерация элементов................................................................. 13.2. Текст – запись в окно и чтение из................................................ 2.3. Оператор & – and............................................................................. 13.3. Диалоги........................................................................................... 2.4. Backtracking и неуспех.................................................................... 13.4. Создание меню............................................................................... 2.5. Проверка на &null............................................................................ 13.5. Чтение и запись изображений...................................................... 2.6. Альтернатива |.................................................................................. Заключение.................................................................................................. 2.7. Повторы с ограничением. Функция генерации Задачи для закрепления материала........................................................ последовательностей.................................................................................... Список используемой литературы.......................................................... 2.8. Coevaluation – «Совычисления»..................................................... 2.9. Множественные арифметические операции сравнения............... 3. Управляющие структуры 3.1. if......................................................................................................... 3.2. case of................................................................................................ 3.3. while do............................................................................................. 3.4. until do............................................................................................... 3.5. repeat – повторять до бесконечности............................................. 4. Символьные множества 4.1. Операции с множествами символов............................................... 4.2. Принадлежит ли символ множеству Функция any..................... 5. Строки..................................................................................................... 5.1. Подстроки......................................................................................... 5.2. Операторы для работы со строками............................................... 5.3. Функции для преобразования строк............................................... 5.4. Функции сканирования строк......................................................... 5.5. Более мощные варианты функций сканирования......................... 6. Списки 6.1. Создание списков............................................................................. 6.2. Индексированный доступ к элементам списков........................... 6.3. Операции со списками..................................................................... 6.4. Функции для работы со списками.................................................. 6.5. Списки как стеки или очереди........................................................ 7. Таблицы................................................................................................... 7.1. Сортировка таблиц.......................................................................... 7.3. Некоторые другие функции............................................................ 8. Множества............................................................................................... 9. Записи....................................................................................................... 3 жения 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 странять собственные выполняемые модули (exe – файлы), в от- "The vertical bar, "|", read "«or»", looks like a binary operator личие от PDC Visual Prolog.) but does not behave like one".

Другой пример: символ "\" в выражениях "\x" и "|(z to y)\x" Приведем несколько «программулек» для иллюстрации:

обозначает различные операторы (в первом случае проверяется, procedure main() имеет ли значение переменная x, а во втором – является ли огра#Перезапись файла ничителем генерируемых значений).

f:=open("x.txt","r")|stop("cannot open x.txt") У Icon’а есть сложности с кириллицей. Он «не понимает» f2:=open("y.txt","w")|stop("cannot open y.txt") кириллические имена файлов при стандартном открытии # Классический стиль f:=open(“имя_моего_файла”,”rt”) либо когда имя файла передается while s:=read(f) do write(f2,s) в командной строке close(f) icon_prog.exe имя_моего_файла close(f2) procedure main(args)) end f:=open(args[1],”rt”) ……………………….

В стиле Icon'а подчеркнутые элементы кода заменит выраend жение Чтобы обойти эту сложность, следует работать в графичеevery write(f2,!f) ском режиме и обращаться к соответствующему «диалогу».

link graphics Большинство проблем при парсировании кириллического procedure main() текста Вы можете обойти, создав собственное множество симво# Простейший вариант открытия графического окна:

лов:

WOpen("size=400,300") | stop("can't open window") allRus:='АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЫЭ Font("Times New Roman,18") # Устанавливаем шрифт ЮЯабвгдеёжзийклмнопрстуфхцчшщьъыэюя' L:=["Линия 1","Линия 2","Линия 3"] И при необходимости можете создать объеденное множество:





case SelectDialog("Выберите линию",L,L[1]) of allLetters:= &ascii++allRus { ………………………………………………………………..

"Okey":

Теперь несколько слов о математических возможностях { Icon’а (которые меня не очень интересуют и в дальнейшем излоGotoRC(1,1) жении специально не рассматриваются). Язык обладает вполне WWrite(dialog_value) # Печатаем выбранную строку достаточным набором операторов и функций для того, чтобы быть WDone() алгоритмически полным и в «вычислительном» смысле. Он рабо} тает с целыми и реальными числами. Имеет специальные средства "Cancel": {} для манипулирования коплексными и рациональными числами.

} Бинарные операторы:

end * – умножение / – деление Может быть, единственное, что мне не нравится в Icon'е, это % – остаток (5%2=1) семантическая многозначность операционных символов (разре+ – сложение шаемая контекстно). Вот цитата из Cristophera [2, с. 41]:

- – вычитание 7 Следует помнить, что звездочка (*), используемая как пре- и Idol (объектно-ориентированное раширение Icon. – О.Ч.), расфиксный оператор, возвращает длину объекта. пространяемые в исходных текстах. В любом случае изучение Информацию о языке, а также дистрибутивы самого языка этих языков доставит удовольствие и вооружит вас мощнейшим можно получить по адресу http://www.cs.arizona.edu/icon. Устано- инструментом как быстрого прототипирования сложных провите Icon (и «пропишите»!). Для написания простых программ грамм, так и "реактивного" создания целого класса очень нужных (файл с исходным текстом должен иметь расширение.icn) можете приложений, для которых любой другой инструментарий не подпользоваться любым текстовым редактором. ходит из-за слишком больших трудозатрат».

Если у Вас сложный проект, состоящий из нескольких icn- файлов, то предварительно компилируются отдельные части про- граммы:

wicont –c <имя_файла>.icn Затем для компиляции и получения исполняемого модуля:

wicont <имя_главного_файла>.icn Главный icn-файл содержит procedure main(…) и декларативы link с именами файлов проекта:

link <имя_1>.icn ………………… link <имя_N>.icn ………………….

procedure main(…) …… end procedure p1(…) ……… end procedure pn(…) ……… end Некоторые книги на английском языке доступны в pdfформате по адресу http://www.cs.arizona.edu/icon/books.htm. Литературные источники по данной теме на русском языке мне не известны, за исключением сотни строк в статье А. Зубинского [2], цитатой из которой я и завершу введение: «Заинтересовавшимся… можно порекомендовать отличную online-версию книги Icon Programming Language Handbook Томаса Кристофера (пригодный к чтению на любых платформах pdf-формат) и сами системы Icon 9 global – создание переменной, известной всем процедурам 1. О синтаксисе, переменные, декларации (global x,y).

procedure <имя_процедуры> – начинает объявление процеВозможно, Вы уже обратили внимание на то, что синтаксис дуры.

языка Icon очень прост. Операторы языка разделяются либо симrecord <имя_записи>(<список_имен_полей>) – создает волом перевода строки, либо точкой с запятой (;). Например:

структуру данных, называемых «записью» (record r(x,y,z)).

every {writes(" ",1 to 5);writes(" ",6 to 10)} link <имя_внешней_процедуры> указывает редактору, что или данная программа использует внешнюю процедуру.

every invocable <имя_процедуры> – позволяет обращаться к про { цедуре по имени-строке ("f"(x)).

writes(" ",1 to 5) Декларации global, record, link, invocable должны появляться writes(" ",6 to 10) только в начале программы (в преамбуле), до первого объявления } какой-либо процедуры.

Запятая используется для разделения элементов в разного Договоримся на дальнейшее, что, следуя Christopher'у, ларода перечислениях. Группы операторов, например, в выражениях тинской e или ei, где i – целое, будем обозначать произвольные if {} then {} else выражения.

ограничиваются фигурными скобками. Квадратные скобки [] служат, преимущественно, для индексирования выражений (L[3] обозначает третий элемент некоторой структуры). В круглые скобки обычно заключается список параметров или выражения в «совычислениях» – coavaluation. Объявления процедуры начинаются со слова procedure, за которым следует либо main(...), либо <имя_процедуры>(p1,...,pn) с формальными параметрами.

Процедура заканчивается словом "end". Процедуры не могут быть вложенными. Все ключевые слова пишутся с маленькой латинской буквы.

Имена переменных могут состоять из латинских букв, цифр и знаков подчеркивания. Имена переменных, буквы которых набраны в различных регистрах – разные имена (naMe и name, Name – разные имена).

Декларации local – создание переменной, известной только внутри процедуры и существующей до выхода управления из данной процедуры (local x,y).

static – создание переменной, известной только внутри процедуры и сохраняющей последнее присвоенное значение в течение выполнения программы в целом (static x,y).

11 Оператор to может генерировать серию значений. Напри2. Генераторы мер, в случае 100 to 103 мог бы сгенерировать значения 100, 101, 102, 103, если ему это позволят.

Генераторами называются операторы (и выражения), произВ случае write(10 to 20) печатается единственное значение водящие множество значений в контексте генерации. Чтобы по10.

нять, как работают генераторы, следует иметь в виду:

Но every write(1 to 3) напечатает 123.

во-первых, общую для всех языков основную последоваВариант to by очевиден, by задает шаг.

Pages:     || 2 | 3 | 4 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.