3

Nemerle などの言語は和音の概念をサポートしています。それらの実用的な用途が何であるかを知りたいです。

4

3 に答える 3

2

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/

于 2011-03-08T08:55:28.750 に答える
2

コードは並行性のために使用されます。定義はこちらから入手できます。

あなたが探しているビット:

C# を含むほとんどの言語では、クラスのシグネチャ内のメソッドは、実装のコードと全単射で対応しています。宣言された各メソッドに対して、そのメソッドが呼び出されたときに何が起こるかについて、単一の明確な定義があります。ただし、Cω では、ボディは一連の (同期および/または非同期) メソッドに関連付けることができます。このような定義をコードと呼び、特定のメソッドがいくつかのコードのヘッダーに表示される場合があります。コードの本体は、ヘッダー内のすべてのメソッドが呼び出された後にのみ実行できます。したがって、メソッドが呼び出されると、有効なコードが 0 個、1 個、またはそれ以上存在する場合があります。

コードが有効になっていない場合、メソッド呼び出しはキューに入れられます。メソッドが非同期の場合、引数 (メッセージの内容) をキューに追加するだけです。メソッドが同期の場合、呼び出しスレッドはブロックされます。有効な chord が 1 つある場合、一致に関係する呼び出しの引数がキューから取り出され、一致に関係するブロックされたスレッドが起動され、本体が実行されます。非同期メソッドのみを含むコードが実行されると、新しいスレッドで実行されます。有効になっているコードが複数ある場合、指定されていないコードが選択されて実行されます。同様に、キューに入れられた特定のメソッドへの呼び出しが複数ある場合、一致したときにどの呼び出しがキューから取り出されるかは指定しません。

于 2009-06-21T02:37:59.173 に答える