Попытаемся вместо "деревьев решений" в качестве альтернативы применить "наколенные таблицы решений" или "схематические таблицы" (по ссылке ранее), но по-драконовски, а точнее в контексте всё того же условного ДАЛВЯЗ.
Воспользуемся отмеченным выше примером функции "Tree_itemClick":
https://forum.drakon.su/viewtopic.php?f=228&t=6666#p103696Пусть текстовый (и графический) язык не позволяет goto (особая гибкость -- пусть для особых случаев, о чём далее). Построим код с применением "сопоставления с образцом" ("pattern matching") в виде оператора "CASE":
Код:
PROC Tree_itemClick(machine, item, event)
VAR now;
BEGIN
  IF event.button === 0 THEN
    now = getUnixTime();
    CASE
        item.lastClick,
              (now - item.lastClick > DoubleClickThreshold),
                    (machine.state === "expanding")
    OF
    |   TRUE, TRUE, TRUE
    |   FALSE,   _, TRUE: SKIP
    |   TRUE, TRUE, FALSE
    |   FALSE,   _, FALSE:
          item.lastClick = now;
          IF event.ctrlKey THEN
            Tree_ctrlClick(machine, item)
          ELSE
            IF item.leaf THEN
              Tree_singleClick(machine, item, event)
            ELSE
              Tree_clearSelection(machine);
              Tree_selectItem(machine, item);
              Tree_toggleExpand(machine, item, event);
            END    
          END
    |   TRUE, FALSE, TRUE:
          machine.postponedDClick = item.id
    |   TRUE, FALSE, FALSE:
          Tree_doubleClick(machine, item, event)
    END
  END
END;
Сопоставлять можно как угодно:
Код:
CASE cond OF TRUE...
CASE TRUE OF cond...
CASE FALSE OF cond...
В общем, традиционный pattern matching -- любые предусмотренные семантикой образцы, с константами, переменными, символами игнорирования, с деструктивным разбором структуры-образца на элементы и т.д.
Как, напр., и в функциональных языках предполагаем, что оператор "IF" есть всего лишь частный случай оператора "CASE":
Код:
CASE cond OF
| TRUE: ...
| FALSE: ...
END
Графическая попытка:
Вложение:
			 20191025132014.png [ 36.61 КБ | Просмотров: 16894 ]
			20191025132014.png [ 36.61 КБ | Просмотров: 16894 ]
		
		
	 Для любого "сопоставления" используется один оператор ("вопрос"). В полной форме осуществляется сопоставление образца с "операндами" -- якобы закруглённые прямоугольники -- по мотивам граф/штрих-схем (ранее в теме) и "схематических таблиц":
https://forum.drakon.su/viewtopic.php?f=228&t=6666#p103717В простой форме сопоставления -- как оператор "if" -- подразумевается неявный операнд "TRUE", всегда справа. Снизу -- всегда FALSE, где линия имеет разрыв или ее нет (при соединении с последующими иконами).
На схеме на маршруте под "CASE"-условиями мог бы быть вариант "иначе" (если бы был определен), с соответствующим операндом снизу условий (см. пример далее).