0

シグナルネットワークを定義するための宣言型言語を設計しています。ネットワーク内のノードのグループを表すために変数バインディングを使用したいと思います。これらの変数に対して実行したい「割り当て」には2つのタイプがあることに気付きました。

一方では、変数は信号演算子の特定のグループの出力を表す必要があります。この出力は、別の入力に接続できます。これは、さまざまな出力をさまざまな場所に送信するために重要です。たとえば、次のようになります。

a, b, c = (SignalA with three outputs)
(SignalB a)
(SignalC c)
(SignalD a)

この場合、3つの出力を持つSignalAがあり、1番目と3番目の出力はそれぞれSignalBとSignalCにリンクされ、SignalDもSignalAの最初の出力にリンクされます。SignalAのインスタンスは1つだけです。

一方、変数は信号操作の一般的なパターンを表す必要があります。これにより、一般的な構成を簡単に再現できます。

a = (SignalA (SignalB))
(SignalC a)
(SignalD a)

aこの場合、 SignalAとSignalBの構成を表現したいと思います。これは、SignalCとSignalDの入力として再現されます。ここにはSignalAの2つのインスタンスがあります。

だから私の質問は、機能的/宣言型プログラミングでは、これらの2つの割り当てセマンティクスに共通の用語がありますか?そして私の言語では、どちらが「=」を取得する必要があり、もう一方の一般的な演算子は何でしょうか?(おそらく:=?)

もちろん、各信号が純粋関数を表す場合、どちらも同じであることに気づきましたが、私の場合、信号の処理時に副作用が発生する可能性があるため、この2つの場合を区別する必要があります。

4

1 に答える 1

0

就寝時刻を過ぎているので、よく読んでいないのかもしれません。しかし、2番目のケースは無名関数に似ていますか?あなたの構文はすでにlispのように見えるので、ラムダ関数のlispのショートカット構文があなたが望むものかもしれないのではないかと思います。

a = '(SignalA (SignalB))

あなたの使用法が実際にラムダと意味が似ていない場合、それはおそらくより多くの混乱を引き起こすでしょう。

ところで、最初のケースでは、リスト割り当ての左側についてPerlのアイデアに従うことができます。 (a, b, c) = (SignalA with three outputs)

これが役立つかどうかはわかりません。私はperlやCのような命令型言語以外ではそれほど経験がありません。

于 2009-12-06T08:50:30.010 に答える