DRAKON.SU

Текущее время: Четверг, 28 Март, 2024 22:22

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 18 ] 
Автор Сообщение
 Заголовок сообщения: ДРАКОН и лямбда-выражения
СообщениеДобавлено: Пятница, 04 Январь, 2013 18:38 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 585
Уважаемые коллеги!
Требуется ваше мнение о том, как лучше всего изображать лямбда-выражения в ДРАКОН-схемах.

Зачем они нужны?
С одной стороны, лямбда-выражения вредны как мощное средство запутывания кода. Они порождают вложенные друг в друга алгоритмы. Такие алгоритмны требуют дополнительных усилий для понимания.
С другой - в функциональном программировании лямбда-выражения могут быть весьма полезны. Иногда они неизбежны.
Конечно, вместо лямбда-выражения иногда можно передать указатель на функцию. Но создавать маленькую функцию на каждый вызов функции высшего порядка неудобно. Трудно понять алгоритм, который похож на лоскутное одеяло из-за множества "одноразовых" функций. Приходится слишком часто переключаться между ними.

Получается следующее противоречие:
1. лямбда-выражения затрудняют чтение алгоритма;
2. лямбда-выражения необходимы.

Давайте разрешим данное противоречие визуализаций лямбда-выражений.
Вот только как это сделать?

Предлагаю два варианта:
1. Цикл ДЛЯ.
2. Хвост, приклеенный к правому боку иконы ДЕЙСТВИЕ.

Вот примеры на языках C# и Erlang.
Вот маленькое лямбда-выражение в текстовом виде:
Вложение:
Комментарий к файлу: Текстовое представление лямбда-выражений.
text.png
text.png [ 12.24 КБ | Просмотров: 17369 ]


Вот то же самое выражение между иконами Цикл ДЛЯ:
Вложение:
Комментарий к файлу: Лямбда-выражения в виде цикла ДЛЯ.
dlya.png
dlya.png [ 12.14 КБ | Просмотров: 17369 ]


Вот вариант этого выражения в виде хвоста справа:
Вложение:
Комментарий к файлу: Лямбда-выражения в виде хвоста.
hvost.png
hvost.png [ 16.84 КБ | Просмотров: 17369 ]


Лямбда-выражение может содержать ветвление (икону ВОПРОС):
Вложение:
Комментарий к файлу: Икона ВОПРОС в лямбда-выражении.
if.png
if.png [ 24.3 КБ | Просмотров: 17369 ]


Прошу высказываться по данным вариантам и предлагать свои.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ДРАКОН и лямбда-выражения
СообщениеДобавлено: Суббота, 05 Январь, 2013 00:24 

Зарегистрирован: Воскресенье, 04 Ноябрь, 2007 23:01
Сообщения: 511
+1 за "for", но, имхо, ключевые слова ("lambda", "fun", "=>"..) со схемы лучше убрать и в шапке оставить только параметры.
Вложение:
lambda.png
lambda.png [ 16.47 КБ | Просмотров: 17332 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ДРАКОН и лямбда-выражения
СообщениеДобавлено: Суббота, 05 Январь, 2013 12:35 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Степан Борисович, по данному вопросу я не обладаю необходимыми знаниями.

Тем не менее, Ваш вопрос меня очень заинтересовал. И я попытаюсь кое-что сказать, рискуя допустить ошибку. Если я ошибусь, просьба не судить строго и объяснить, в чем моя ошибка.

=======================================

1. Я исхожу из того, что цикл for всегда можно преобразовать в обычный цикл (цикл со стрелкой). Но не всегда это целесообразно.

2. В данном случае мне кажется, что цикл ПОКА будет более прозрачным и понятным.

3. Но. Я вижу, что Вы думаете по-другому. Потому что Вы предложили «Хвост, приклеенный к правому боку иконы ДЕЙСТВИЕ». Такое предложение мне не нравится, так как Вы ввели новую графическую конструкцию.
А зачем новую? Давайте попробуем обойтись уже существующей. Например, циклом ПОКА.

4. Предложив «Хвост, приклеенный к правому боку иконы ДЕЙСТВИЕ», тем самым Вы утверждаете, что "хвост" — это не цикл. Или не совсем цикл. Или какой-то очень странный цикл. Или это некоторая загогулина, которую (в приличном обществе) неудобно называть циклом.

5. Возможно, Вы правы. Тем не менее, я рискну превратить Ваш «Хвост, приклеенный к правому боку иконы ДЕЙСТВИЕ» в цикл ПОКА. Как это сделать? За два шага.

Шаг 1. Ваш прямоугольник c текстом
Цитата:
SelectedValues = lists:map(lambda key, keys)
надо превратить в икону вопрос и превратить всю конструкцию в цикл ПОКА.

Шаг 2. Получилось не очень логично. Тем более, что Рэйлвэй Каген предложил вынести подобный текст за пределы цикла. Хорошо. Не меняя конструкцию цикла ПОКА, удалим текст из иконы вопрос. Пусть она будет совсем без текста. Совсем пустая. Но при этом давайте подумаем: что бы такое (умное и понятное) написать внутри этой иконы.

Степан Борисович! В этом месте я хотел бы остановиться. И послушать Ваш комментарий.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ДРАКОН и лямбда-выражения
СообщениеДобавлено: Понедельник, 07 Январь, 2013 17:34 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 585
Владимир Даниелович, спасибо, что откликнулись.

Чтобы выбрать наилучший метод визуализации лямбда-выражений, нужно выяснить, как они обычно используются:
1. Общий случай - это передача алгоритма вместе с данными. Причём с данными, захваченными из тела текущей функции.
2. Частный случай - это передача алгоритма вместе с данными в типовые алгоритмы обработки списков: map, filter, fold, sort и прочие.
Причём что интересно, эти типовые алгоритмы встречаются в функциональных программах очень часто. Фактически, это рекомендуемый метод организации циклов.
Второй способ создания циклов - это рекурсия. Но прибегать к рекурсии следует, когда стандартные алгоритмы обработки списков неприменимы.

Поэтому, говоря о визуализации лямбда-выражений, имеет смысл делать упор на наиболее частый метод их употребления. То есть на вызов стандартных циклических алгоритмов.

А значит, применять конструкции типа цикла ДЛЯ или цикла ПОКА имеет смысл.
Раз уж усложнение графического алфавита ДРАКОНА нежелательно, можно остановиться на одном из этих двух вариантов.

Лично мне цикл ДЛЯ нравится больше.
Обоснование: цикл ПОКА включает в себя икону ВОПРОС. А мы ведь никаких вопросов не задаём. Мы передаём маленький подалгоритм в другую функцию. Возможно, чтобы организовать цикл. Поэтому цикл ДЛЯ предпочтительнее.
Изначально цикл ДЛЯ занимается похожим делом: он выделяет кусок алгоритма и выполняет его несколько раз.

С другой стороны, иногда всё-таки лямбды не подразумевают цикл. Тогда стандартные циклические макро-иконы ДРАКОНА будут сбивать читателя с толку. Именно по этой причине я и предложил ввести дополнение в ДРАКОН (хвост с правой стороны иконы ДЕЙСТВИЕ).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ДРАКОН и лямбда-выражения
СообщениеДобавлено: Понедельник, 07 Январь, 2013 19:39 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Степан Митькин писал(а):
1. применять конструкции типа цикла ДЛЯ или цикла ПОКА имеет смысл.

2. Лично мне цикл ДЛЯ нравится больше.
Обоснование: цикл ПОКА включает в себя икону ВОПРОС. А мы ведь никаких вопросов не задаём.

3. стандартные циклические макро-иконы ДРАКОНА будут сбивать читателя с толку. Именно по этой причине я и предложил ввести дополнение в ДРАКОН (хвост с правой стороны иконы ДЕЙСТВИЕ).


Степан Борисович, спасибо за пояснения.

1. Если Вам нравится цикл ДЛЯ, пусть так и будет.

2. Пользуясь случаем, хочу предложить конструкцию "Выноска".

          2.1. Форма выноски может быть разной, например, овальной и др.

          2.2. Выноска красивее, чем правый или левый комментарий. Вместо них лучше использовать выноску.

          2.3. Выноску трудно рисовать. Но может быть, Вы что-нибудь придумаете? (Я-то рисовал ее в КорелДро).

          2.4. Показываю пример использования выноски для лямбда-выражения (вместо Вашего хвоста). Как Ваше мнение? Есть ли у выноски шанс быть включенной в состав графического алфавита ДРАКОНа?

Вложение:
Комментарий к файлу: Выноска впридачу к ПУСТОЙ иконе вопрос
12. Лямбда-выражение   .png
12. Лямбда-выражение .png [ 36.28 КБ | Просмотров: 17252 ]


3. Вы предложили ввести дополнение в ДРАКОН (хвост с правой стороны иконы ДЕЙСТВИЕ).
Это нехорошо, так как увеличивает графический алфавит, добавляя в нее новую незнакомую смысловую конструкцию. Мне кажется, что добавление выноски эквивалентно Вашему "хвосту", но является более "мягким" шагом. Преимущества таковы:

          3.1. Выноска устраняет сомнение, связанное с тем, что
          Цитата:
          "А мы ведь никаких вопросов не задаём".


          3.2. Выноска устраняет еще одно сомнение, связанное с тем, что
          Цитата:
          стандартные циклические макро-иконы ДРАКОНА будут сбивать читателя с толку


          3.3. Указатель выноски дает пояснение, направленное точно в указанное место.

          3.4. Почему выноска ЛУЧШЕ, чем правый или левый комментарий? Потому что она заключена внутри замкнутого контура.

          3.5. Выноска вносит красоту в дракон-схему. А правый или левый комментарий захламляют дракон-схему; они эстетически неприятны, поскольку не обладают замкнутым контуром.

          3.6 По этой причине я категорически запретил себе пользоваться правым и левым комментариями. Их нет ни в одной моей книге.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ДРАКОН и лямбда-выражения
СообщениеДобавлено: Понедельник, 07 Январь, 2013 21:43 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 585
Рэйлвэй Каген писал(а):
+1 за "for", но, имхо, ключевые слова ("lambda", "fun", "=>"..) со схемы лучше убрать и в шапке оставить только параметры.
Вложение:
lambda.png

Спасибо за ответ, г-н Каген.
Видимо, придётся остановиться на цикле ДЛЯ.
Но вот ключевое слово убрать не получится. Его роль - указать, в какой именно аргумент функции передаётся лямбда-выражение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ДРАКОН и лямбда-выражения
СообщениеДобавлено: Вторник, 08 Январь, 2013 13:21 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 145
Откуда: Москва
Степан!

Ваши темы о ФП очень интересны, обязательно двигайтесь дальше в этом направлении. Перекликающиеся вещи были и у меня, готов сказать про свои подходы (завтра выйду на работу), если интересно. Пока вкратце так:

-Введение-
Схема не есть программа, а пишется как инструкция на человеческом языке, при этом иконка может содержать в себе детализацию в виде переменных связи с внешним миром, объектов, процедур. И, что важно, человек воспринимает одну иконку как один шаг.

-1-
Переменные связи с внешним миром - механизм событий по изменению значения переменной (тогда я привязывал через Tcl_GetVar). Просто сгенеренный текст программы ведь никому не нужен, а нужны связи с графикой, middleware, СУБД.

-2-
Я имел дело с технологическими процессами и понадобились объекты "параметр возрастет" или скорость изменения за 1 час. Пришлось включить в интерпретатор объекты.

-3-
Процедуры "proc myproc args {}" получались иногда сложные, и они именовались, для привязки к шагам(там не было лямбда-функций). Даже простенькая схема иногда раскрывала сложное содержание.

-Заключение-
Все равно получался гибрид: схема с инструкцией на человеческом русском языке, встроенный интерпретатор и программы "за кадром". Но одно несомненное преимущество было - схема отражала степень детализации человеческой мысли, а не степень детализации для компьютера.

Использование языков ФП внутри схем очень хорошо именно тем, что приблизит компьютерную детализацию к человеческой, ибо ничего компактнее ЯФП вроде еще не придумали. Это - главное. Лямбда-функция - это частность (у меня была одна из трех). Интересно решать в целом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ДРАКОН и лямбда-выражения
СообщениеДобавлено: Вторник, 08 Январь, 2013 17:52 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 585
Дмитрий Дагаев писал(а):
Перекликающиеся вещи были и у меня, готов сказать про свои подходы (завтра выйду на работу), если интересно.

Конечно, интересно! Поделитесь, пожалуйста. Это статью уже прочитал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ДРАКОН и лямбда-выражения
СообщениеДобавлено: Среда, 09 Январь, 2013 09:55 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 145
Откуда: Москва
-Введение- Схема как инструкция на человеческом языке
Степан Митькин писал(а):
лямбда-выражения вредны как мощное средство запутывания кода

истинно так, а еще в моем случае инструкции были разработаны до меня и не для программиста, а для оперативного персонала управления реактором, поэтому схема показывалась на человеческом языке, а код был спрятан. На рисунке приведен снимок экрана из системы http://forum.oberoncore.ru/viewtopic.php?f=62&t=3355 и ниже код к ней.
Question A-0//1 -main 1 \
-orient left \
-upflags {1 0 1 0} \
-flags {3 15 7 0} \
-dnflags {1 1 1 0} \
-htsplit 4t \
-subscr1 "Реактор остановлен?" \
-subscr2 "Nакнп->0, ОРСУЗ-НКВ"
A-0//1 htext {
Проверьте - РЕАКТОР ОСТАНОВ-
ЛЕН
- Уменьшается нейтронная
мощность реактора;
%%
Graph $v(0) -height 200
GraphCfg yaxis -title "Мощность, проц."
GraphCfg element $v(0) -label "нейтр. мощн."
%%
%%
Table tmp6__1_RANGE -left "мощность:"
%%

- Органы регулирования
СУЗ на НКВ;
%%
Table {tmp6__1_NUM tmp6__1_MFLIST} -left {"кол. ОР СУЗ на НКВ" \
"ОР СУЗ не на НКВ"}
%%

- Перемещение ионизацион-
ных камер АКПН ДИ и ПД-
вверх;


- Переключение диапазонов
измерения нейтронной
мощности реактора.}
A-0//1 dp yu0049
A-0//1 dc yu0049 -during 12 -speedzone 0
for {set i 1; set tmp6s1rd ""} {$i <= 61} {incr i} {
lappend tmp6s1rd rdvalue($i)
}
eval [concat A-0//1 dp $tmp6s1rd]
A-0//1 check proc6__1
A-0//1 goto A-0//1.1 А-0//2


и процедуры к ней
proc proc6__1_A {} {
foreach i {rdvalue tmp6__1_NUM tmp6__1_MFLIST var6__1} {
variable $i
}
for {set i 1; set tmp6__1_NUM 61; set tmp6__1_MFLIST ""} \
{$i <= 61} {incr i} {
if {$rdvalue($i) != 0 && $rdvalue($i) != 11} {
incr tmp6__1_NUM -1
lappend tmp6__1_MFLIST $var6__1($i)
}
}
expr {$tmp6__1_NUM>55}
}
proc proc6__1 {} {
variable yu0049
variable tmp6__1_RANGE
if {$yu0049 < 1e-4} {
set tmp6__1_RANGE "диапазон источника"
} elseif {$yu0049 > 0.02} {
set tmp6__1_RANGE "энегргетич. диапазон"
} else {
set tmp6__1_RANGE "пром. диапазон"
}
uplevel 1 expr {[proc6__1_A] && [yu0049 decreasing or 0]}
}


Обращаю внимание, что:
1. В иконке (единица, подсвеченная синим в центре экрана) только краткое описание:
"Реактор остановлен? Nакнп->0, ОРСУЗ-НКВ" - нет ни процедур, ни переменных
2. В левой части - уже полное описание инструкции: "Проверьте - РЕАКТОР ..."
3. Код - по сути программа на Itcl - содержащий объект A-0//1 и процедуру proc6__1 вообще нигде не показывается.

Вывод Для реальных задач нужен не редактор, как Drakon Editor, а вьюер, встроенный в систему. А схема должна быть многослойной, один слой - для непрограммиста, другой - для программиста.

Продолжение следует...


Вложения:
step1.png
step1.png [ 115.43 КБ | Просмотров: 17158 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ДРАКОН и лямбда-выражения
СообщениеДобавлено: Среда, 09 Январь, 2013 10:36 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 145
Откуда: Москва
-1- Переменные связи с внешним миром

В любом неэлементарном примере возникает проблема получения данных от внешнего мира: GUI, сети, СУБД, и проч. И по ним выполнить операцию ВОПРОС или ДЕЙСТВИЕ. Данные должны быть доступны к моменту обработки. В моем примере переменные - это история yu0049 и текущие значения rdvalue(1)..rdvalue(61). Шаг инструкции может выполняться, только когда данные доступны, т.е. их значения получены по сети и из архива.
Таким образом, в иконке вопрос два условия:
1. Условие охраны, означающее может ли шаг выполняться
2. Логическое условие самого вопроса.

Условие охраны подразумевает и механизм передачи сообщения шагу, после обработки которого можно продолжить. Сообщение может инициироваться:
1. Сетью, если пришли новые данные (в моем примере)
2. Пользовательским интерфейсом, например, оконным вводом key в примере Степана value = dict:fetch(key, somedict)
3. Таймером (как сообщением, так и остановом треда), пример - таймаут.

Следствие: в Драконе все иконки таймеров не нужны как класс. А нужен механизм сообщений и охран.

Тем, кто считает мой пример с инструкцией для реактора экзотическим, привожу пример из Паронджанова "Как улучшить работу ума".
Если Вы попытаетесь написать программу по указанной схеме, то придется делать клавиатурный ввод:
Помогло? Окно ввода: Да, Нет, Cancel (еще не знаю, помогло или нет). И событие как результат клавиатурного ввода.

И еще. Переменные связи в автоматике содержат обычно три поля: значение, качество, метка времени. Качество как минимум означает достоверность или недостоверность. Беру смелость утверждать, что качество понадобится для всех переменных связи с внешним миром. И выражение value = dict:fetch(key, somedict) должно возвращать пустышку если key.quality = bad.


Вложения:
cure28.png
cure28.png [ 31.67 КБ | Просмотров: 17153 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ДРАКОН и лямбда-выражения
СообщениеДобавлено: Среда, 09 Январь, 2013 11:02 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 145
Откуда: Москва
-2- Объекты и не только

Тут уже ближе к объектам и функциям.
Я встраивал объекты и делал методы, например для параметра yu0049 вызов
[yu0049 decreasing or 0] означает убывает или ноль.
Объект имеет встроенный массив значений, предварительно запрошенных, и из них делает вывод об убывании или нет.

Здесь я уверен, что можно придумать более изящное решение, чем реализовывать C-библиотеку и вставлять в интерпретатор. Может быть, лучше написать функции-методы для операции возрастает, убывает, стабильно.
Опять напомню, что условие Заболел? в примере из Паронджанова распадается на несколько симптомов, например, температура высокая или возрастает.

Следует отметить, что вычисления внутри функций, да и вся арифметика должна учитывать качество и метки времени, например:

z:=x+y; означает
z.value = x.value+y.value
z.quality = MIN(x.quality, y.quality) # минимальное качество означает более недостоверное
z.timestamp = MAX(x.timestamp, y.timestamp)

Напрашивается создание отдельной библиотеки даже элементарных функций.

Продолжение следует...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ДРАКОН и лямбда-выражения
СообщениеДобавлено: Среда, 09 Январь, 2013 12:28 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 145
Откуда: Москва
-3- Процедуры, которые использовались только как функции.
В моем примере proc6__1 поименована как первая процедура инструкции 6. Вполне можно заменять лямбда-функцией. Которая вызывает другую функцию proc6__1_A и библиотечный метод-функцию yu0049 decreasing or 0.

Мой подход хорош для отдельно взятого приложения и плох для расширения на другие области. Потому что не гарантируется отсутствие побочных эффектов в процедурах. Использование ФП гарантирует отсутствие побочных эффектов. Один набор входных данных дает всегда идентичное значение на выходе.
А то в процедурах можно навставлять хоть висячих указателей с освобождением на предыдущем шаге, хоть простыню из ассемблерного кода с полной невозможность проверки отсутствия состояний.

Вывод 1: Целесообразно иконку ВОПРОС представить в виде 2 функций ЯФП:
1. Условие охраны
2. Логическое условие вопроса
А иконку ДЕЙСТВИЕ представить в виде N+1 функций ЯФП:
1. Условие охраны
2..N+1. Y:= function(X1,..,Xm) либо Y:=expression(X1,..,Xm)
Другие варианты запретить, гарантируя чисто функциональное содержание иконок.

Вывод 2: Такое построение обеспечивает гарантию корректности реализации такой штуки как lazy evaluation http://en.wikipedia.org/wiki/Lazy_evaluation. Можно сделать серьезный оптимизатор кода, т.к. функцию нужно будет вызывать только тогда, когда изменятся входные параметры. Такое преимущество при обработке больших объемов сигналов!

-Заключение-
Но варианты построения могут быть разные. Естественно, мне нравится вариант с интеграцией графики в BlackBox, кодогенерацией/компиляцией на-лету и расширенной проверкой функций и динамической подгрузкой как модулей-схем, так и модулей-наборов функций.

-Конец опуса-


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ДРАКОН и лямбда-выражения
СообщениеДобавлено: Четверг, 10 Январь, 2013 08:59 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1443
Насчёт взаимодействия через сообщения. Видимо, здесь что-то похожее: http://www.rsdn.ru/forum/philosophy/4946164.1. Как и в подходах Усова и Донского к объектному моделированию...
Только ведь сообщение нужно как отправить, так и принять?..

Насчёт качества данных согласен. Овчинников вообще говорит о полном применении таких оценок (называя их "мнениями").

Насчёт охран выполнимости - да. На допрограммном уровне вообще-то можно обозначать через связывание в участвующих шагах, как говорилось здесь: viewtopic.php?p=75882#p75882. И решение в операторных схемах бывает удобно...
Пример здесь для алгопроцесса "Разобрать неполностью" (связывание, выходящее за пределы одного шага, выделено зелёным).
Кстати, это надо и для таких случаев, как описан здесь: viewtopic.php?p=75149#p75149. Дабы "соединять" не столько элементы маршртута, сколько действия и их результаты (в даннм случае видимые состояния программы).

Насчёт слоёв модели - имеется в виду переключение языков, как здесь: http://forum.easyelectronics.ru/viewtop ... #p204947?..
А вьюер - это в смысле "явителя" данных текущего состояния модели? А сами данные, если не редактированием, как формируются?

И ещё. Что Вы думаете о ситуации, описанной в начале этого пункта, с вычислениями значений для проверки?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ДРАКОН и лямбда-выражения
СообщениеДобавлено: Четверг, 10 Январь, 2013 14:14 
Аватара пользователя

Зарегистрирован: Вторник, 04 Октябрь, 2011 17:45
Сообщения: 585
Цитата:
-Введение- Схема как инструкция на человеческом языке
Вывод Для реальных задач нужен не редактор, как Drakon Editor, а вьюер, встроенный в систему.

Под "реальными задачами" вы имеете в виду такие вот программы, которые помогают оператору-человеку выполнять инструкции? Тогда да.
Вообще мне этот реакторный мега-визард очень даже понравился. Надо будет его "спостулировать".

Или же вы говорите, что и другие виды программ должны задействовать этот принцип?
То есть вести диалог с пользователем и при этом графически вести его по диаграмме?

Цитата:
А схема должна быть многослойной, один слой - для непрограммиста, другой - для программиста.

Хорошо этот принцип задействовать и для сред разработки...

Цитата:
-1- Переменные связи с внешним миром
Следствие: в Драконе все иконки таймеров не нужны как класс. А нужен механизм сообщений и охран.


1. Иконки таймеров - понятие более высокоуровневое, чем сообщения и охраны.
Иконка типа таймер может быть реализована при помощи сообщений и охран. А может и иначе.

2. Механизм сообщений уже и так есть. Это иконы ВВОД и ВЫВОД.
ВЫВОД посылает сообщение во внешний мир (в среду выполнения).
ВВОД останавливает выполнение алгоритма до получения сообщения из внешнего мира.

То есть ДРАКОН поддерживает программирование, основанное на акторах.

Другое дело, что программы-помощники, вроде вашей, должны останавливаться на каждой иконе, ожидая ответа пользователя. Тогда, конечно, охрана должна быть внутри икон.

Цитата:
-3- Процедуры, которые использовались только как функции.
Вывод 1: Целесообразно иконку ВОПРОС представить в виде 2 функций ЯФП:
1. Условие охраны
2. Логическое условие вопроса

Функции должны принимать в том числе переменные, связанные с внешней средой?

Цитата:
А иконку ДЕЙСТВИЕ представить в виде N+1 функций ЯФП:
1. Условие охраны
2..N+1. Y:= function(X1,..,Xm) либо Y:=expression(X1,..,Xm)
Другие варианты запретить, гарантируя чисто функциональное содержание иконок.

Всё-таки нужно иногда и влиять на окружающий мир. Сообщения посылать наружу.
Опять пригодится икона ВЫВОД!


Последний раз редактировалось Степан Митькин Четверг, 10 Январь, 2013 17:01, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ДРАКОН и лямбда-выражения
СообщениеДобавлено: Четверг, 10 Январь, 2013 15:45 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 145
Откуда: Москва
Цитата:
Или же вы говорите, что и другие виды программ должны задействовать этот принцип?

Я вот продал-таки заказчику "мега-визард", а редактор продать не мог, и даже не доделал тогда. Ибо редактор рассчитан на разработчика, а вьюер на пользователя

Цитата:
1. Иконки таймеров - понятие более высокоуровневое, чем сообщения и охраны.
Иконка типа таймер может быть реализована при помощи сообщений и охран. А может и иначе.

Точно, sleep и блокировкой треда. Но, заметьте:
A) Я ввожу только BOOL переменную-условие, и одна и та же схема при одних опциях кодогенератора сгенерится в код с обработчиками сообщений (напр, для Windows-приложений), а при других опциях сгенерится в код с nanosleep задержками, а с третьими - вообще в код прерыванием от таймера.
В) Тут еще есть композиция сообщений: ожидание ввода и таймаут, ожидание данных по сети и override действиями оператора.
Так что предлагаемое решение наиболее простое и исключающее как таймы, так и ВВОД/ВЫВОД.

Цитата:
Другое дело, что программы-помощники, вроде вашей, должны останавливаться на каждой иконе, ожидая ответа пользователя. Тогда, конечно, охрана должна быть внутри икон.

Я тоже сначала думал, что делал экзотические вещи.
Но: Как только мы показываем пользователю вьюер, мы должны отображать динамику "со скоростью мысли", т.е. 1 иконку в секунду.
И еще: Десятки примеров с остановками можно найти в книгах Паронджанова. Просто никому в голову не приходило работать со схемой типа "Заболел"
Цитата:
Функции должны принимать в том числе переменные, связанные с внешней средой?

Да, должны. А у меня еще и историю, и достоверности.

Цитата:
Всё-таки нужно иногда и влиять на окружающий мир. Сообщения посылать наружу.
Опять пригодится икона ВЫВОД!

Tcl_TraceVar(interp, "y",...); set y $x;
ну и событие по изменению.
Кстати, в отличие от вывода, можно посылать, если только по изменению. Посылать событие в графическую оболочку, например.
А ВВОД/ВЫВОД оставить как printf. Иногда пригодится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ДРАКОН и лямбда-выражения
СообщениеДобавлено: Пятница, 11 Январь, 2013 16:09 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1443
Угу. Всё-таки send/receive - это другое несколько... а в файл/из файла - третье...
Насчёт вьюинга стало понятно, что имеется в виду, очевидно, что-то вроде этого: viewtopic.php?p=51945#p51945. Дело хорошее... Изначально можно было понять, что предлагается имитомоделирование по типу описанного здесь: viewtopic.php?p=74705#p74705. Что тоже м.б. полезно...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ДРАКОН и лямбда-выражения
СообщениеДобавлено: Понедельник, 14 Январь, 2013 11:58 

Зарегистрирован: Воскресенье, 01 Ноябрь, 2009 05:13
Сообщения: 1443
Да, и ещё. Вот здесь: viewtopic.php?p=40318#p40318 способ определения по-разному содержания действия Наполнить какое-то отношение к лямбдам имеет?..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ДРАКОН и лямбда-выражения
СообщениеДобавлено: Понедельник, 01 Март, 2021 00:43 
Аватара пользователя

Зарегистрирован: Пятница, 19 Февраль, 2021 14:48
Сообщения: 128
В ДраконКод вышеуказанный код на Erlang будет выглядеть так:


Вложения:
IMG_20210301_004502_655.jpg
IMG_20210301_004502_655.jpg [ 22.92 КБ | Просмотров: 6016 ]
IMG_20210301_004120_387.jpg
IMG_20210301_004120_387.jpg [ 39.35 КБ | Просмотров: 6016 ]
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2008-2024, участники конференции «DRAKON.SU», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB