|
ビーズを通した糸1本/1連。 糸の長さはメーカーなどによって異なりますが、約18~20inch(約45~50cm)のものが多いようです(シャーロットビーズの場合、通常約12inch(約30cm)です)。 これを一定量束ねたものをハンクと呼びます(12ストランドで1ハンクと呼ぶことが多い)。 |
| 関連用語:ハンク,連 |
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/26 13:32 UTC 版)
ナビゲーションに移動 検索に移動|
|
この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。(2020年8月)
|
| パラダイム | 並行論理プログラミング |
|---|---|
| 登場時期 | 1989年 |
| 設計者 | Ian Foster 他 |
| 型付け | 動的型付け |
| 主な処理系 | Strand88 |
| 影響を受けた言語 | Prolog、Relational Language、Concurrent Prolog、PARLOG、Guarded Horn Clauses |
| 影響を与えた言語 | PCN |
Strandは、1989年に発表された商用ベースの並行論理プログラミング言語である。Ian FosterとStephen Taylorにより、設計された。開発はArtificial Intelligence Limitedで行われ、1989年のBritish Computer Society Awardを受賞した[1]。販売はStrand Software Technologies Inc.から行われた。
この言語はErlang開発初期にベース言語としても使われた[2]。
Strandは並行プログラミングのためのプログラミング言語で、論理変数を介して通信を行う複数の軽量プロセスのネットワークとしてプログラムを記述する。言語仕様や考え方はそれ以前に開発されたPARLOGや第五世代コンピュータプロジェクトで開発されたGuarded Horn Clausesと非常によく似ている。
Strandではホーン節にガードを導入した以下のような規則の集まりでプログラムを記述する。
Head :- G1, ..., Gn| B1, ..., Bm. (n,m≧0)
HeadとG1, ..., Gnはプロセス書き換えのための条件、B1, ..., Bmは書き換え後のプロセスを表す。生成されたプロセスは全て並行に実行される。プロセス間の通信にはプロセスで共有する論理変数を使用する。書き換え規則の適用に十分な情報がなければ書き換えを中断し、判断に必要な情報が得られるまで待つことで、プロセス間の同期が行われる。ストリームは論理変数を含んだリストとして表現する。論理変数を共有するプロセスの数に制限はないため、ストリーム通信は1対1だけではなく1対Nのブロードキャストなど、様々な形態が可能である。
StrandはFortranやC言語とのインタフェースを持ち、また個々のプロセスを実行するプロセッサーを指定するためのプラグマを持っていた。
2本のストリームをマージして1本のストリームにするStrandプログラムの例を以下に示す。Prologと同様、A や Xs など英大文字で始まる項は変数を表す。
merge([A|Xs],Ys,Zs0) :- true | Zs0:=[A|Zs], merge(Xs,Ys,Zs).
merge(Xs,[A|Ys],Zs0) :- true | Zs0:=[A|Zs], merge(Xs,Ys,Zs).
merge([],Ys,Zs) :- true | Zs:=Ys.
merge(Xs,[],Zs) :- true | Zs:=Xs.
例えば、上記プログラムの最初の節では、最初の引数が[A|Xs]のようなリストの形になっていない場合は中断し、他のプロセスにより[A|Xs]の形に具体化された(具体的に値が決まった)場合に実行を再開する。この時点でXs自体は具体化されていなくても構わないため、リストの先頭からインクリメンタルに具体化されるストリームを素直に処理できる。
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/10/03 01:23 UTC 版)
「並行論理プログラミング」の記事における「Strand」の解説
Strand(STReam AND-Parallelism)は、Fosterらにより1989年に発表された商用ベースの言語である。ガード部に組み込み述語のみを記述できるフラットな言語で、プログラムはFlat GHCとよく似たものとなる。この言語はErlang開発初期にベース言語として使われた。マージプロセスのプログラム例を以下に示す。 merge([A|Xs],Ys,Zs0) :- true | Zs0:=[A|Zs], merge(Xs,Ys,Zs).merge(Xs,[A|Ys],Zs0) :- true | Zs0:=[A|Zs], merge(Xs,Ys,Zs).merge([],Ys,Zs) :- true | Zs:=Ys.merge(Xs,[],Zs) :- true | Zs:=Xs. Strandでは、中断のメカニズムとしてGHCと同じ入力ガード (Input Guard)を用いる。GHCと同様、多重環境の問題はない。出力となる変数の具体化はボディ部のみで行い、GHCと異なりユニフィケーションではなく代入":="を用いる。KL1と同様、物理的並列性などはプラグマ付加で指定することができる。言語の特徴を以下にまとめる。 * 同期の表現方法 入力ガード (節単位で指定)* 制約の入出力 Blocking AskとEventual Tell(Initialize)* プロセス間通信 任意の項を使用可能* 実行形態 並行実行* その他の特徴 ガードの安全性を実行時にチェック、言語仕様が単純、多重環境の管理が不要
※この「Strand」の解説は、「並行論理プログラミング」の解説の一部です。
「Strand」を含む「並行論理プログラミング」の記事については、「並行論理プログラミング」の概要を参照ください。
固有名詞の分類