2015-07-17-лола.md 2.4 KB


published: true

layout: post

Изучая Lola

Поизучал описание языка Lola, в итоге понял, что MODULE это такая радиодеталь с ножками, вход/выход, внутренние преобразования по заданным функциям, вот это всё. Подумал над применением в программировании акторов или агентов, ведь агент это та же радиодеталь, датчики как входы, манипуляторы, как выходы. На программном урове, это всё, конечно, укладывается в понятия направленного канала сообщений и сообщения. Сообщением в LEAF можно сделать любой тип данных, передавать можно значения, или даже указатели, если они будут защищены от записи.

Придумалось тут:

UNIT Fib
    VAR res+, n- INTEGER
    VAR f Fib
PROCESS
    f.n <- n - 1
    res <- IF n # 0 THEN n + f.res ELSE 1 END
END Fib

UNIT Fact
    VAR res+, n- INTEGER
    REG x INTEGER
INIT
    x <- 1
PROCESS
    res <- IF n = 0 THEN x END
    x <- IF n # 0 THEN x*n ELSE 1 END
    n <- IF n # 0 THEN n - 1 END
END Fact

UNIT Top
    REG x, y INTEGER
    VAR fi Fib
    VAR fa Fact
PROCESS
    fi.n <- 10
    x <- IF x = 0 THEN fi.res END
    fa.n <- 10
    y <- IF y = 0 THEN fa.res END
END Top

В целом, как и в Lola, есть только инструкция присваивания. Точнее даже не присваивания, а ожидания. Вся активность модулей определяется итерациями инструкций внутри секции PROCESS. Формально, это статичное описание состояния, а не итерации, но исполнять иначе не получится. По завершению первой итерации модуль Top ожидает от Fib и Fact сообщений из выходного канала res, так как условие x = 0 истинно. Наверное, так устроены все декларативные языки.