Lucid(プログラミング言語)

明晰
パラダイムデータフロー
デザイン:エドワード・A・アシュクロフト
ウィリアム・W・ワッジ
初登場1976
タイピングの規律型なし
主要な実装
pLucid、GIPSY
方言
グラニュラー・ルーシッド、インデクシカル・ルーシッド、テンソル・ルーシッド、フォレンジック・ルーシッド、Lucx、JOOIPL
影響を受けた
イスイム
影響を受けた
SISALPureDataLustre

Lucidは、非フォン・ノイマン型プログラミングモデルを実験するために設計されたデータフロープログラミング言語です。Bill WadgeとEd Ashcroftによって設計され、1985年に出版された書籍『Lucid, the Dataflow Programming Language 』で解説されています。[1]

pLucid はLucid の最初のインタープリターでした。

モデル

Lucidは、データ計算に需要駆動型モデルを採用しています。各ステートメントは、プロセッサのネットワークと、それらの間にデータが流れる通信回線を定義する方程式として理解できます。各変数は値の無限ストリームであり、すべての関数はフィルタまたは変換器です。反復処理は、「現在の」値と「fby」(followed byと読みます)演算子によってシミュレートされ、ストリームの合成を可能にします。

Lucidは履歴の代数に基づいており、履歴とはデータ項目の無限列を指します。操作的には、履歴は変数の値の変化の記録と考えることができます。firstやnextといった履歴操作は、その名前が示す通りの理解が可能です。Lucidは当初、規律があり、数学的に純粋な、単一代入言語として構想され、検証が簡素化されることを目指していました。しかし、データフロー解釈はLucidの進化の方向性に大きな影響を与えてきました。[1]

詳細

Lucid(および他のデータフロー言語)では、まだバインドされていない変数を含む式は、その変数がバインドされるまで待機してから処理を続行します。例えば、x + yxとyの両方がバインドされるまで待機してから、式の出力を返します。この重要な結果として、関連する値を更新するための明示的なロジックが回避され、主流の言語と比較して大幅なコード削減につながります。

Lucid の各変数は値のストリームです。式はn = 1 fby n + 1演算子「fby」( 「followed by」のニーモニック)を使用してストリームを定義します。fby は前の式の後に続くものを定義します。(この例では、ストリームは 1,2,3,... を生成します。)ストリーム内の値は、以下の演算子で指定できます(x が使用されている変数であると仮定します)。

first x
ストリームxの最初の値を取得し、
x
ストリームの現在の値、
next x
ストリーム内の次の値を取得します。
asa
指定された条件が真になるとすぐに何かを実行する演算子。
x upon p
upon は、ストリーム x の古い値を繰り返し、ストリーム p がtrue値を利用可能になった場合にのみ新しい値に更新する演算子です。(ストリーム x の速度を低下させる役割を果たします)

つまり、x upon pp の真値に基づいて新しい値が現れるストリーム x です。

計算は、時間によって変化するデータ ストリームに作用するフィルターまたは変換関数を定義することによって実行されます。

階乗

ファクト どこ n = 0 fby (n + 1); fac = 1 fby ( fac * (n + 1) ); 終わり

フィボナッチ数列

 どこ fib = 0 fby ( 1 fby fib + 次の fib ) ; 終わり

シーケンスの合計

合計 どこ 合計 = 0 fby 合計 + x 終わり;

移動平均

ランニング平均 どこ sum = first(入力) fby sum + next(入力); n = 1 fby n + 1; running_avg = 合計 / n; 終わり;

素数

プライム どこ prime = 2 fby (n 常に [[isprime]](n)); n = 3 fby n+1; isprime(n) = not(divs) asa divs or prime*prime > N どこ N は現在の n です。 divs = N mod prime eq 0; 終わり; 終わり

データフロー図

クイックソート

qsort(a) = if eof(first a) then a else follow(qsort(b0),qsort(b1)) fi ここで p = まず a < a; p の場合は常に b0 = a; p でない場合は b1 = a となる。 follow(x,y) = xdoneの場合、xdone時にy、そうでない場合はx fi どこ xdone = iseod x fby xdone または iseod x; 終わり 終わり

データフロー図

 --------> いつでも -----> qsort --------- | ^ | | | | | ない | | ^ | |---> 最初 | | | | | | | V | | |---> 少ない --- | | | | | VV ---+--------> いつでも -----> qsort -----> conc -------> ifthenelse -----> | ^ ^ | | | --------> 次 ----> 最初 ------> iseod -------------- | | | ---------------------------------------------------------

二乗平均平方根

平方根(平均(平方(a))) どこ 平方(x) = x*x; 平均(y) = 平均 どこ n = 1 fby n+1; 平均 = 最初の y fby 平均 + d; d = (次の y - 平均)/(n+1); 終わり; sqroot(z) = およそ 0.0001 の誤差 どこ Z は現在の z です。 近似値 = Z/2 fby (近似値 + Z/近似値)/2; err = abs(平方(近似)-Z); 終わり; 終わり

ハミング問題

h どこ h = 1 fby merge(merge(2 * h, 3 * h), 5 * h); merge(x,y) = xx <= yy の場合 xx、そうでない場合は yy fi どこ xx = x、xx <= yy の場合; yy = y、yy <= xx; 終わり; 終わり;

データフロー図

ハミング問題のデータフロー図
ハミング問題のデータフロー図

参考文献

  1. ^ Wadge, William W.; Ashcroft, Edward A. (1985). Lucid, the Dataflow Programming Language . Academic Press. ISBN 0-12-729650-6. 2015年1月8日閲覧
  • 明晰な
Retrieved from "https://en.wikipedia.org/w/index.php?title=Lucid_(programming_language)&oldid=1305821083"