Nemerle などの言語は和音の概念をサポートしています。それらの実用的な用途が何であるかを知りたいです。
3 に答える
Nemerle 計算式を試す:
https://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/ComputationExpressions/
いくつかの例:
def upTo (n : int)
{
comp enumerable
{
mutable i = 0;
while (i < n)
{
i ++;
yield i
}
}
}
def manyTimes : IEnumerable [int] =
comp enumerable
{
yieldcomp upTo(2); // 1 2
yield 100; // 100
yieldcomp upTo(3); // 1 2 3
yield 100; // 100
yieldcomp upTo(10); // 1 2 3 .. 10
}
def fn(n)
{
comp async
{
if (n < 20)
returncomp fn(n + 1);
else
return n;
}
}
def f(n1, n2)
{
comp async
{
defcomp n1 = fn(n1);
defcomp n2 = fn(n2);
return $"$n1 $n2";
}
}
private HttpGet(url : string) : Async[string]
{
comp async
{
def req = WebRequest.Create(url);
using (defcomp resp = req.AsyncGetResponse())
using (stream = resp.GetResponseStream())
using (reader = StreamReader(stream))
return reader.ReadToEnd();
}
}
ここにいくつかの例があります:(ロシア語の記事ですが、英語のコードです:))http://habrahabr.ru/blogs/programming/108184/
コードは並行性のために使用されます。定義はこちらから入手できます。
あなたが探しているビット:
C# を含むほとんどの言語では、クラスのシグネチャ内のメソッドは、実装のコードと全単射で対応しています。宣言された各メソッドに対して、そのメソッドが呼び出されたときに何が起こるかについて、単一の明確な定義があります。ただし、Cω では、ボディは一連の (同期および/または非同期) メソッドに関連付けることができます。このような定義をコードと呼び、特定のメソッドがいくつかのコードのヘッダーに表示される場合があります。コードの本体は、ヘッダー内のすべてのメソッドが呼び出された後にのみ実行できます。したがって、メソッドが呼び出されると、有効なコードが 0 個、1 個、またはそれ以上存在する場合があります。
コードが有効になっていない場合、メソッド呼び出しはキューに入れられます。メソッドが非同期の場合、引数 (メッセージの内容) をキューに追加するだけです。メソッドが同期の場合、呼び出しスレッドはブロックされます。有効な chord が 1 つある場合、一致に関係する呼び出しの引数がキューから取り出され、一致に関係するブロックされたスレッドが起動され、本体が実行されます。非同期メソッドのみを含むコードが実行されると、新しいスレッドで実行されます。有効になっているコードが複数ある場合、指定されていないコードが選択されて実行されます。同様に、キューに入れられた特定のメソッドへの呼び出しが複数ある場合、一致したときにどの呼び出しがキューから取り出されるかは指定しません。