我正在设计一种用于定义信号网络的声明性语言。我想使用变量绑定来表示网络中的节点组。我突然想到,我希望为这些变量做两种类型的“赋值”。
一方面,一个变量应该代表一组特定信号运算符的输出。然后可以将此输出附加到另一个输入。这对于将不同的输出引导到不同的地方很重要,例如:
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 实例。
所以我的问题是,在函数式/声明式编程中,这两种赋值语义是否有通用术语?在我的语言中,哪一个应该得到'=',而另一个的通用运算符是什么?(也许:=?)
我当然意识到,如果每个 Signal 真的代表一个纯函数,那么这两种情况都是一样的,但是在我的情况下,处理信号时可能会出现副作用,所以我需要区分这两种情况。