Иконка (язык программирования) - Icon (programming language) - Wikipedia
Эта статья включает Список ссылок, связанное чтение или внешняя ссылка, но его источники остаются неясными, потому что в нем отсутствует встроенные цитаты.июнь 2013) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Парадигма | мультипарадигма: структурированный, ориентированный на текст |
---|---|
Разработано | Ральф Грисволд |
Впервые появился | 1977 |
Стабильный выпуск | 9.5.1 / 27 сентября 2018 г. |
Печатная дисциплина | динамичный |
Интернет сайт | www |
Основной реализации | |
Значок, Jcon | |
Диалекты | |
Юникон | |
Под влиянием | |
СНОБОЛ, SL5, АЛГОЛ | |
Под влиянием | |
Юникон, Python, Goaldi |
Значок это язык программирования очень высокого уровня с участием целенаправленное исполнение и множество средств для управления струны и текстовые шаблоны. Это связано с СНОБОЛ и SL5, языки обработки строк. Иконка не объектно-ориентированный, но в 1996 году было разработано объектно-ориентированное расширение Idol, которое в конечном итоге стало Юникон.
Базовый синтаксис
Язык иконок происходит от АЛГОЛ -класс структурное программирование языков и, следовательно, имеет синтаксис, аналогичный C или же Паскаль. Icon больше всего похож на Pascal, используя := синтаксис для присвоений, процедура ключевое слово и аналогичный синтаксис. С другой стороны, Icon использует скобки в стиле C для структурирования групп выполнения, и программы запускаются с запуска процедуры, называемой главный.
Во многих отношениях Icon также разделяет функции с большинством языки сценариев (а также СНОБОЛ и SL5, из которого они были взяты): переменные не нужно объявлять, типы приводятся автоматически, а числа можно автоматически преобразовывать в строки и обратно. Другой особенностью, общей для многих языков сценариев, но не для всех, является отсутствие символа окончания строки; в Icon, строки, не заканчивающиеся точкой с запятой, заканчиваются подразумеваемой точкой с запятой, если это имеет смысл.
Процедуры - это основные строительные блоки программ Icon. Хотя они используют именование Pascal, они работают больше как функции C и могут возвращать значения; здесь нет функция ключевое слово в Icon.
Целенаправленное исполнение
Одна из ключевых концепций Icon заключается в том, что управляющие структуры основаны на «успехе» или «неудаче» выражений, а не на логической логике, как в большинстве других языков программирования. Эта функция происходит непосредственно от SNOBOL, в котором любая операция сопоставления с образцом и / или замены может сопровождаться условиями успеха и / или неудачи, в которых указывается метка оператора, на которую необходимо выполнить переход при требуемом условии. В рамках целевой модели ветвления простое сравнение, например если a не означает, «если операции справа оцениваются как истинные», как это было бы в большинстве языков; вместо этого это означает что-то вроде "если операции справа преуспевать". В этом случае оператор <завершается успешно, если сравнение истинно, поэтому конечный результат будет таким же. Кроме того, оператор <возвращает свой второй аргумент в случае успеха, допуская такие вещи, как если a , распространенный тип сравнения, который в большинстве языков должен быть записан как соединение двух неравенств, например если (a .
Icon использует успех или неудачу для всего управления потоком, поэтому этот простой код:
скопирует одну строку стандартный ввод на стандартный вывод. Он будет работать, даже если read () вызовет ошибку, например, если файл не существует. В этом случае заявление a: = читать () выйдет из строя, а писать просто не назовется.
Успех и неудача передаются «наверх» через функции, что означает, что неудача внутри вложенная функция также вызовет сбой вызывающих его функций. Например, вот программа, которая копирует весь файл:
Когда команда read () дает сбой, например, в конце файла, сбой будет передан вверх по цепочке вызовов, и write () также завершится с ошибкой. В то время как структура управления останавливается на неудаче. Аналогичный пример, написанный на псевдокод (с использованием синтаксиса, близкого к Ява ):
пытаться { пока ((а = читать()) != EOF) { записывать(а); } } ловить (Исключение е) { // ничего не делаем, выходим из цикла }
В этом случае требуется два сравнения: одно для конца файла (EOF), а другое для всех других ошибок. Поскольку Java не позволяет сравнивать исключения как логические элементы, как в случае с Icon, длинный попробуй поймать вместо этого должен использоваться синтаксис. Блоки try также приводят к снижению производительности, даже если исключение не генерируется, распределенная стоимость этот Icon избегает.
Значок обозначает это понятие как целенаправленное исполнение, имея в виду способ продолжения выполнения до достижения определенной цели. В приведенном выше примере цель - прочитать весь файл; команда чтения завершается успешно, когда информация была прочитана, и терпит неудачу, если нет. Таким образом, цель кодируется непосредственно на языке, а не путем проверки кодов возврата или аналогичных конструкций.
Генераторы
Выражения в Icon часто возвращают одно значение, например, х <5 выполнит оценку и завершится успешно, если значение x меньше 5, или потерпит неудачу. Однако многие выражения не немедленно вернуть успех или неудачу, возвращая тем временем значения. Это приводит примеры с каждый и к; каждый причины к чтобы продолжать возвращать значения, пока не произойдет сбой.
Это ключевая концепция Icon, известная как генераторы. Генераторы управляют большей частью функциональных возможностей цикла в языке, но без необходимости в явном цикле, сравнивающем значения на каждой итерации.
Выражаясь языком Icon, оценка выражения или функции дает последовательность результатов. Результирующая последовательность содержит все возможные значения, которые могут быть сгенерированы выражением или функцией. Когда последовательность результатов исчерпана, выражение или функция не выполняется. Итерация по последовательности результатов достигается либо неявно с помощью целевой оценки Icon, либо явно с помощью каждый пункт.
Icon включает в себя несколько генераторов-строителей. В генератор синтаксис позволяет последовательно сгенерировать серию элементов, пока один из них не выйдет из строя:
может генерировать «1», «привет» и «5», если x меньше 5. Генераторы во многих случаях могут читаться как «или», например:
запишет значение y, если оно меньше x или же 5. Внутренне Icon проверяет каждое значение слева направо, пока одно из них не будет успешным или список не опустеет, и возвращает ошибку. Функции не будут вызываться, если оценка их параметров не будет успешной, поэтому этот пример можно сократить до:
Другой простой генератор - это к, который генерирует списки целых чисел; каждая запись (от 1 до 10) позвоню записывать() десять раз. В взрыва синтаксис генерирует каждый элемент списка; каждая запись (! aString) выведет каждый символ aString в новую строку.
Эта концепция очень эффективна для строковых операций. В большинстве языков есть функция, известная как найти или же индекс который возвращает расположение одной строки в другой. Например:
Этот код вернет 4, позицию первого вхождения слова «the» (при условии, что индексы начинаются с 0). Чтобы получить следующий экземпляр "the", необходимо использовать альтернативную форму,
5 в конце говорит, что он должен смотреть с позиции 5 и далее. Итак, чтобы извлечь все вхождения «the», необходимо использовать цикл:
Под значком найти Функция является генератором и будет возвращать следующий экземпляр строки каждый раз, когда она возобновляется, прежде чем завершится ошибкой, когда она достигнет конца строки. Такой же код можно написать:
найти будет возвращать индекс следующего экземпляра "the" каждый раз, когда он возобновляется каждый, в конечном итоге достигнув конца строки и потерпев неудачу.
Конечно, бывают случаи, когда нужно найти строку после некоторой точки ввода, например, при сканировании текстового файла, содержащего данные в нескольких столбцах. Здесь также работает целевое исполнение:
Позиция будет возвращена, только если "the" появится после позиции 5; в противном случае сравнение не удастся. Успешные сравнения возвращают результат справа, поэтому важно поместить результат сравнения в правую часть сравнения. Если бы было написано:
тогда вместо результата найти.
Icon добавляет несколько структур управления для циклического прохождения генераторов. В каждый оператор похож на пока, перебирая каждый элемент, возвращаемый генератором, и завершается в случае сбоя:
пока переоценивает первый результат, тогда как каждый дает все результаты. каждый синтаксис фактически вводит значения в функцию аналогично блокам в Болтовня. Например, приведенный выше цикл можно переписать так:
Генераторы можно определить как процедуры, использующие приостановить ключевое слово:
Этот пример повторяется Струна используя find для поиска шаблон. Когда он найден, а позиция нечетная, местоположение возвращается из функции с приостановить. В отличие от возвращаться, приостановить запоминает состояние генератора, позволяя ему продолжить с того места, где он остановился, на следующей итерации.
Струны
Icon имеет функции, упрощающие работу со строками. В сканирование система многократно вызывает функции со строкой:
это краткая форма примеров, показанных ранее. В этом случае предмет из найти Функция помещается вне параметров перед вопросительным знаком. Сигнатуры функции значка идентифицируют параметр объекта, чтобы его можно было поднять таким образом.
Подстроки можно извлечь из строки, используя спецификацию диапазона в скобках. Спецификация диапазона может возвращать точку на один символ или фрагмент строки. Строки можно индексировать как справа, так и слева. Позиции в строке определяются как между персонажи 1А2B3C4 и может быть указан справа −3А−2B−1C0
Например,
Где в последнем примере показано использование длины вместо конечной позиции
Спецификацию нижних индексов можно использовать как lvalue внутри выражения. Это можно использовать для вставки строк в другую строку или удаления частей строки. Например,
Индексы нижнего индекса значка находятся между элементами. Для строки s: = "ABCDEFG" индексы следующие: 1А2B3C4D5E6F7грамм8. Срез s [3: 5] - это строка между индексами 3 и 5, которая является строкой «CD».
Другие конструкции
Icon также имеет синтаксис для построения списков (или массивы):
Элементы в списке могут быть любого типа, включая другие структуры. Для создания более крупных списков Icon включаетсписок генератор; {{{1}}} генерирует список, содержащий 10 копий слова.
Как и массивы на других языках, Icon позволяет искать элементы по позиции, например, {{{1}}}. Как и в случае со строками, индексы находятся между элементами, и фрагмент списка можно получить, указав диапазон, например, aCat [2: 4] составляет список ["полосатый", 2002]. В отличие от строк, фрагмент массива не является lvalue.
В взрыва-синтаксис перечисляет диапазон. Например, каждая запись (! aCat) распечатает четыре строки, каждая с одним элементом.
Значок включает в себя функции, подобные стеку, толкать и поп чтобы позволить массивам формировать базы стеков и очередей.
Icon также включает функции для наборов и ассоциативных массивов с столы:
Этот код создает таблицу, в которой в качестве значения по умолчанию для любого неизвестного ключа будет использоваться ноль. Затем он добавляет в него два элемента с ключами «там» и «здесь» и значениями 1 и 2.
Сканирование строк
Одна из мощных функций Icon - сканирование строк. Оператор строки сканирования, ?, сохраняет текущую среду сканирования строк и создает новую среду сканирования строк. Среда сканирования строк состоит из двух ключевых слов: &предмет
и & pos, где & subject - сканируемая строка, а & pos - курсор или текущая позиция в строке темы.
Например,
произвел бы
Для перемещения по сканируемой строке можно использовать встроенные и определяемые пользователем функции. Многие из встроенных функций по умолчанию будут & subject и & pos (например, найти функция). Следующее, например, запишет все «слова», разделенные пробелами, в строку.
Более сложный пример демонстрирует интеграцию генераторов и сканирования строк в языке.
Идиома expr1 & выражение2 & выражение3 возвращает значение последнего выражения.
Смотрите также
- CLU (язык программирования) Барбара Лисков
- Coroutine
Рекомендации
Окончательная работа Язык программирования иконок (третье издание) Гризвольда и Грисволда, ISBN 1-57398-001-3. Это не издается, но может быть скачано как PDF.
Icon также имеет ко-выражения, обеспечивающие нелокальные выходы для выполнения программы. Видеть Язык программирования иконок а также статью Шамима Мохамеда Ко-выражения в Icon.
внешняя ссылка
- Домашняя страница значка
- Устное историческое интервью со Стивеном Вамплером, Институт Чарльза Бэббиджа, Университет Миннесоты. Wampler обсуждает свою работу по развитию Язык программирования иконок в конце 1970-х в Университете Аризоны под Ральф Грисволд.
- Устное историческое интервью с Робертом Голдбергом, Институт Чарльза Бэббиджа, Университет Миннесоты. Гольдберг обсуждает свое взаимодействие с Ральф Грисволд при работе на Язык программирования иконок в классе в Иллинойсский технологический институт.
- Устное историческое интервью с Кеннетом Уокером, Институт Чарльза Бэббиджа, Университет Миннесоты. Уокер описывает рабочую среду проекта Icon, его взаимодействие с Ральф Грисволд, и его собственная работа над компилятором Icon.
- Страница языка программирования иконок на Сайт проекта задач сравнительного программирования Rosetta Code