icon.ppt
- Количество слайдов: 39
Язык программирования Icon. Целый мир в одном every. . . Выполнил: Бахарев Олег
Язык программирования Icon – мультипарадигменный тексториентированный сверхвысокоуровневый язык программирования. Icon был создан Ральфом Грисволдом в 1974 г
Особенности языка Динамическая типизация данных; Автоматическая конверсия типов; Встроенный уборщик мусора; “Все конструкции языка являются генераторами”; Наличие мощных средств работы со строками; Кросс-платформенная реализация графических функций (Linux & Windows);
Особенности языка Отсутствие ООП-системы; Backtracking (перебор с возвратом) и целенаправленное выполнение; Огромная библиотека функций (IPL – Icon Programming Library); Компиляция программ/библиотек в собственный формат высокоэффективного байт-кода (icode – для программ и ucode- для библиотек)
Известные реализации Icon (cs. arizona. edu/icon/) – классический “аризонский” Icon. Является эталонной реализацией. Unicon (unicon. sourceforge. net)– мощная реализация Icon со своей собственной IDE. Имеет в своем составе ООП-систему, специально адаптированную под Icon. Расширена относительно классического Icon. Object. Icon (code. google. com/p/objecticon) – Мощный ООП-язык программирования на основе Icon. Форк Unicon. Имеет полностью переработанную стандартную библиотеку (модификация IPL).
Редакторы, имеющие подсветку синтаксиса Icon Jedit; Notepad++ ( устанавливается отдельно); Crimson. Editor (устанавливается отдельно); Kate (устанавливается отдельно); Con. Text Editor (только в составе IDP); Nano (устанавливается отдельно)
Программные комплекты для работы с Icon. Development. Package (Icon. Devel. Pack, IDP) - программный комплект для работы с кодом на Icon. Включает в себя: Con. Text Editor (редактор исходного кода), WINICON (дистрибутив Icon под Windows), upx (упаковщик программ), g. Icont (графический фронт-энд для компилятора) и два кратких пособия по Icon. Проект доступен на code. google. com/p/icondevelopment-package/
Концепция генераторов Генератор – выражение, способное возвращать более одного значения. В Icon практически каждое выражение является генератором и потенциально способно выдавать любое количество значений (в том числе, и ни одного) Например: что выведет следующая строка ? write(1 to 100)
Концепция генераторов Данная строка выведет только 1, поскольку генератор 1 to 100 получит управление только один раз. . . Чтобы вывести всю последовательность чисел, нужно задать соответствующий контекст для генерации (т. е заставить генератор получить управление более раза), для чего нужно вставить ключевое слово every: every write(1 to 100)
Целенаправленное выполнение С помощью генераторов в Icon реализуется концепция целенаправленного выполнения. Каждое выражение Icon помимо, собственно, производимых значений могут производить успех (succeed) или неудачу (fail), которые могут быть использованы в управляющих конструкция вместо булевых значений.
Целенаправленное выполнение Именно благодаря этому мы можем написать: if a: =read() then write(a) Или можем написать более сокращенную форму этого выражения: while write(read()) Поскольку внешние функции также могут возвращать значение “неуспех”.
Цепочечные сравнения Операторы <, > и им подобные также могут производить успех (т. е дают второй аргумент) и неуспех (т. е ничего не возвращается) и поэтому возможно писать вот такие выражения: if a
Основные элементы синтаксиса Синтаксис Icon очень напоминает C и Pascal, но является более высокоуровневым. Основным смысловым блоком программы является процедура. (Стоит отметить, что процедуры в Icon, могут возвращать значения, подобно функциям). Точкой входа в программу является процедура main
Процедуры Общий синтаксис процедуры выглядит так: procedure <имя процедуры>(аргумент1, аргумент2, . . . , аргумент. N) … … end При этом расположение процедур не имеет значения, а выполнение всегда начинается с main
Процедуры Общий синтаксис процедуры выглядит так: procedure <имя процедуры>(аргумент1, аргумент2, . . . , аргумент. N) … … end При этом расположение процедур не имеет значения, а выполнение всегда начинается с main
Функции в Icon Ключевого слова function в Icon нет, однако, процедуры в Icon могут возвращать значения. Возврат значения из процедуры производить с помощью ключевого слова return : procedure square() return x*x end При этом, функция может быть с любым количеством аргументов (в том числе, и с переменным количеством аргументов)
Процедура main Программа на Icon обязательно должна иметь процедуру main, имеющей следующий синтаксис: procedure main() …. . . end Программа может не иметь процедуры main только в одном случае : если программа компилируется в ucode и будет использоваться в качестве библиотеки процедур
Переменные в Icon Local – локальные переменные процедур. Существуют только внутри поцедур, в которых были определены. Static – статические переменные. Существуют внутри процедур, в которых были определены, но сохраняют последнее значение в течение выполнения всей программы в целом. Global – глобальные переменные, известные всем процедурам. Определяются в любом месте программы, однако, предпочтительнее определить их в начале программы перед объявлением процедур
Типы данных В Icon явно не указывается тип переменной, однако, несмотря на это существует достаточно развитая система типов с автоматическим приведением к нужному типу. При этом существует 4 фундаментальных типа и 6 структуральных типов. Для 4 фундаментальных типов специально выведены различные операторы сравнения, однако, в большинстве случаев из-за конверсии типов можно не задумываться о том, верный ли тип сравнения был использован.
Типы данных В Icon существуют следующие основные типы: целое число (integer); действительное число (real); строковый тип (string); символьное множество (cset); список (list); запись (record); таблица (table); файл (file); процедура (procedure) ковыражение (coexpression) пустой тип (&null)
Операторы присваивания Классический оператор присваивания в Icon выглядит так : = (подобно присваиванию в Pascal), однако существует несколько вариаций оператора присваивания. Например, распространенные во многих языках: a+: =b a-: =b a*: =b a/: =b a%: =b Есть и более экзотические варианты, например: a>: =b, a<: =b, a|||: =b и т. д
Операторы сравнения Для сравнения числовых и строковых (а также символьных множеств) существуют разные операторы сравнения. Операторы для сравнения числовых типов: <, >, =, <=, >=, ~= Для символьных типов: <<, >>, ==, ~==, <<=, >>= Также есть два особых оператора, которые можно условно считать операторами сравнения: (переменная определена? ) и / (переменная неопределена? т. е равна &null). Эти операторв используются в префиксной нотации
Другие операторы ! - генерация элементов из некой структуры. (например, символов строки или элементов списка). Является префиксным оператором. Например: a: =[1, 2, 3, 4] every write(!a) ? - генерация случайного элемента структуры. Является префиксным оператором. Например: a: =[1, 2, 3, 4] write(? a)
Другие операторы * - размер структуры (строки, списка и т. д). Префиксный оператор. Например: a: = «test» write(*a) & - and. Логическое «И» . Возвращает успех в случае успешности обоих выражений. Например: if a>0 & b=2 then … Условие выполниться лишь в том случае, если переменная a больше нуля, а переменная b равна 2
Встроенные функции В Icon большое количество встроенных функций, которые можно поделить на несколько классов: математические функции; функции работы со строками; структурные функции; системные функции Также есть подкласс специфических операторов для работы с определенными структурными типами
Математические функции Встроенных математических функций довольно немного, но этого вполне хватает для построения сложных вычислительных программ. В Icon есть следующие типовые функции: abs, asin, acos, atan, exp, cos, log, sin, sqrt, tan Также есть специфические функции: iand, ixor, ishift, dtor, rtod,
Строковые функции Самый мощный класс функций (благодаря наличию этих функций – Icon считается мощным текст-ориентированным языком). Имеет множество функций для разбора строк неограниченной длины. Самые распространенные функции этого класса: reverse, trim, find, map, many, upto.
Структурные функции Самый многочисленный класс встроенных функций. Имеет в своем составе: функции для работы со списками (put, pop, get, push, sort b т. д); функции приведения типов; определения принадлежности к последовательностям (member, type) обобщенные функции манипулирования структурами (image, copy, delete, seq и т. д)
Системные функции Достаточно обширный класс, содержащий функции ввода/вывода, обращения к файлам и некоторые процедуры управления ходом программы. Самыми распространенными функциями этого класса являются следующие функции: read, write, seek, system, exit, stop, runerr.
Условия и сопоставление с образцом Условный оператор в Icon представлен единственной конструкцией: if … then … else Которая очень напоминает инструкции из других языков программирования, однако, работает на основе парадигмы целенаправленного выполнения. В язык встроен оператор сопоставления с образцом: case … of { <образец1> : … … default : … }
Условия и сопоставление с образцом Условный оператор в Icon представлен единственной конструкцией: if … then … else Которая очень напоминает инструкции из других языков программирования, однако, работает на основе парадигмы целенаправленного выполнения. В язык встроен оператор сопоставления с образцом: case … of { <образец1> : … … default : … }
Цикл с целочисленным счетчиком создается на основе генератора последовательности целых чисел I to j, который выглядит так: every I: =a to b do { …. } Иногда требуется приращение отличное от 1, и тогда генератор целых чисел дополняется словом by с указанием шага приращения: every I: =a to b by c do {. . . }
Циклы while и until Когда точно неизвестно сколько шагов нужно пройти в цикле (а есть лишь условие окнчания цикла) или для организации цикла с нецелым приращением, удобно применить цикл while: while … do { … } Цикл until похож на while, только итерации цикла выполняются пока условие в цикле неуспешно, а вслучае успеха цикла прерывается: until … do { … }
Бесконечный цикл в Icon организуется очень просто: repeat { …. } Прервать бесконечный цикл можно с помощью оператора break внутри тела бесконечного цикла, или же с помощью оператора завершения всей программы exit()
Интересные возможности Icon Слайсинг – выборка (срез) любых элементов из структуры (чаще всего из строки или списка). Это очень удобная нотация: s[i: j] – выделяет элементы с i по j; s[i+: j] – выделяет j элементов начиная c I; s[i: *s] – выдедяет элементы с I b до конца строки; Также возможно присвоение срезам строки значений
Интересные возможности Icon Работа со строками – самая основная «фишка» Icon. В частности есть оператор сканирования строк ? , который принимает строку и выражение по которому она сканируется. Также очень остроумно реализована конкатенация строк, которая может давать специфический оператор присваивания: a: =a||s 2 a||: =s 2 Эти два выражения абсолютно эквивалентны. Причем похожий оператор существует и для списков.
Библиотечные и invocableпроцедуры Для Icon существует огромная библиотека (поставляется вместе с ним), в которой существует много полезных функций. Для того, чтобы использовать библиотечные функции нужно в начале программы применить такую конструкцию: link <имя файла> Также существует возможность вызова процедуры, если ее имя задано в строковой форме ( «sin» (12), например). Чтобы это осуществить в начале программы нужно выполнить следующую инструкцию: invocable «имя_процедуры»
Материалы по Icon Множество материалов доступно здесь: icon-programming. tk/ vk. com/icon_programming/ aqirbis. 0 fees. net/
Спасибо за внимание !!!


