Я разрабатываю декларативный язык для определения сигнальных сетей. Я хочу использовать привязки переменных для представления групп узлов в сети. Мне пришло в голову, что есть два типа «назначения», которые я хочу сделать для этих переменных.
С одной стороны, переменная должна представлять вывод определенной группы операторов сигналов. Этот выход затем может быть присоединен к другому входу. Это важно для направления разных выходов в разные места, например:
a, b, c = (SignalA with three outputs)
(SignalB a)
(SignalC c)
(SignalD a)
В этом случае будет SignalA с тремя выходами, где первый и третий выходы связаны с SignalB и SignalC соответственно, а SignalD также связан с первым выходом SignalA. Существует только один экземпляр SignalA.
С другой стороны, переменная должна представлять общий шаблон операций с сигналами, чтобы можно было легко воспроизвести общую конфигурацию:
a = (SignalA (SignalB))
(SignalC a)
(SignalD a)
В этом случае я бы хотел, чтобы a
представлял композицию SignalA и SignalB, и это воспроизводит в качестве входных данных для SignalC и SignalD. Здесь есть два экземпляра SignalA.
Итак, мой вопрос в функциональном / декларативном программировании, есть ли общие термины для этих двух семантик присваивания? И на моем языке, какой из них должен получить '=', и что будет общим оператором для другого? (возможно: =?)
Я, конечно, понял, что если бы каждый Сигнал действительно представлял собой чистую функцию, то оба они были бы одинаковыми, но в моем случае возможно возникновение побочных эффектов при обработке сигнала, поэтому Мне нужно различать эти два случая.