Sanscript
- Парадигма:
- Типизация:
- Реализации и версии (свернуть все | развернуть все):
Sanscript — потоковый визуальный язык программирования, используемый через его “родную” среду разработки. Он был создан Northwoods Software в качестве простого визуального скриптового языка. Его основное назначение — действия с файловой системой, взаимодействие с другими приложениями и выполнение функций DDE (Dynamic Data Exchange), поэтому язык предоставляет обширный набор библиотечных функций для этих целей. Sanscript работает только на платформе Windows.
Среда разработки Sanscript разделена на три основные части: Overview, Catalog и Canvas.
Окно Overview (слева) показывает список доступных каталогов, сгруппированных в General (библиотеки стандартных функций), Examples и Templates (примеры программ и функций, входящие в дистрибутив и готовые к запуску) и USER (пользовательские программы).
Окно Catalog (снизу) показывает содержимое выбранного каталога: функции и программы. Функции можно перетаскивать на Canvas для дальнейшего использования, а программы — открывать и редактировать. Следует отметить, что функция может быть не только библиотечной, а и определенной пользователем.
Окно Canvas (главное) содержит редактируемую диаграмму потоков.
Минимальной программной единицей в Sanscript является функция — сущность, получающая некие входные данные, обрабатывающая их и возвращающая некие выходные данные. Выглядит функция как блок со схематическим изображением его назначения и стандартным названием, которое можно изменить на более информативное. У этого блока есть входные и выходные контакты, обозначающие входящие и исходящие потоки данных, и использующиеся для соединения функции с другими блоками.
У некоторых функций есть только выходные контакты: такие функции используются для генерации данных для программы. Самым частым примером является функция “Constant”, содержащая заданную константу. Даже у функции “Prompt”, предлагающей пользователю ввести значение и возвращающей его, есть входной контакт для задания текста приглашения.
У других функций, напротив, есть только входные контакты: они, как “Display Message”, используются в основном для вывода результатов вычислений.
У большинства команд управления потоком выполнения программы, существующих в других языках, есть свой эквивалент в Sanscript. Так, циклы реализуются при помощи функции “Repeat” (прерывание цикла называется “Stop Repeat”); условные переходы заменяются на “Pick One”.
Sanscript предоставляет простые типы данных: целые и дробные числа, текст (эквивалент строк в других языках), логические величины и pathname (путь к файлу). Кроме того, есть два сложных типа данных — список List и запись Record, а также набор функций для их обработки.
Ссылки:
Примеры:
Hello, World!:
Пример для версий Sanscript 2.2Диаграмма функций для этого примера состоит из двух функций — константы “Hello, World!” и “Display Message”, которая выводит эту константу на экран.
Hello, World! на Sanscript
Факториал:
Пример для версий Sanscript 2.2Первый скриншот показывает главную диаграмму потоков. Ее основной частью является функция Repeat
(аналог циклов в других языках), которая рассчитывает факториалы чисел и записывает их в список. У этой функции две пары входных и выходных контактов, которые соответствуют глобальным переменным в других языках, — factorial
(хранит текущее значение факториала) и message
(список строк текста (n)! = (n!)). Кроме того, есть еще один входной контакт N
, который задает нужное количество итераций.
Входные контакты инициализируются константами и пустым списком, и цикл начинается. После конца вычислений message
нужно вывести на печать. Это можно сделать при помощи функции Write List as Text
, которая конкатенирует элементы списка в одну строку с заданным разделителем. Разделитель задается входным контактом sep
; в данном случае это символ новой строки, сгенерированный функцией Char
, которая преобразует ASCII-код в соответствующий символ. Наконец, полученная строка показывается функцией Display Message
.
Второй скриншот демонстрирует внутренности функции Repeat
. Элемент, обозначенный как “1, 2 …”, — счетчик цикла, начинающийся с 1 и увеличивающийся на 1 каждую итерацию. На каждой итерации factorial
умножается на значение счетчика (функция Times
). После этого новое значение конкатенируется со счетчиком и константой "! = "
(функция Append Text
). Наконец, полученная строка добавляется в список message
(функция Add Last Item
).
Факториал на Sanscript - главная диаграмма потоков
Факториал на Sanscript - блок Repeat
Числа Фибоначчи:
Пример для версий Sanscript 2.2Числа Фибоначчи вычисляются так же, как факториал: цикл-Repeat
вычисляет список чисел, начиная с двух первых, после чего список конкатенируется в выводимое сообщение. Внутри цикла текущее число добавляется к списку и заменяется на следующее, а следующее — на сумму текущего и следующего.
Числе Фибоначчи на Sanscript - главная диаграмма потоков
Числе Фибоначчи на Sanscript - блок Repeat
Квадратное уравнение:
Пример для версий Sanscript 2.2Этот пример содержит много условных переходов, а в Sanscript каждая ветвь описывается отдельной диаграммой.
Квадратное уравнение - главная диаграмма потоков
Квадратное уравнение - условие A=0
Квадратное уравнение - условие A=default
Квадратное уравнение - условие D=0
Квадратное уравнение - условие D=default (!=0)
Квадратное уравнение - условие D>0
Квадратное уравнение - условие D<0
CamelCase:
Пример для версий Sanscript 2.2На первой диаграмме текст, введенный пользователем, переводится в нижний регистр и передается в цикл посимвольной обработки. На второй — блок Split Text
используется для выделения очередного символа строки, который затем сравнивается со строками-ограничителями (ASCII-коды которых равны a-1 и z+1), и результат сравнения передается в блок выбора действия. На третьей — если символ является буквой, то в зависимости от значения lastSpace
к результату добавляется либо сам символ, либо он же, переведенный в верхний регистр; кроме того, значение lastSpace
устанавливается в FALSE
. На четвертой — если символ не является буквой, то только изменяется значение lastSpace
.
CamelCase - главная диаграмма потоков
CamelCase - блок Repeat
CamelCase - обработка символа-буквы
CamelCase - обработка символа-разделителя
Комментарии
]]>blog comments powered by Disqus
]]>