Skip to content
hikalium edited this page Mar 6, 2017 · 16 revisions

LANG01

  • nv/experimentalのデフォルト言語
  • (nv/experimentalでは、構文や演算子を自由に追加する機能は重視されていない(できるけれども))

等しいことと等しくないこと

二種類の考え方がある

  1. IDが等しい(完全に同一のオブジェクトを指している)
  2. そのIDが表現するデータが、値として等しい(IDは等しくなくてもいい)

1が成立するなら2も成立するが、逆は成り立たない。

それぞれ以下の関数で表現される。

  1. int NV_ID_isEqual(const NV_ID *a, const NV_ID *b);
  2. int NV_ID_isEqualInValue(const NV_ID *a, const NV_ID *b);

関係(Relation)

関係は、以下の3つのIDをデータとして持つノードである。

  1. from: 関係の元となるノードID
  2. rel: どのような関係なのかをあらわすノードID
  3. to: 関係の先となるノードID

「関係」を取得すること

二種類のものが取得できる。

  1. その関係性が指すノードのID(RelNode.to.id)
  2. その関係性を表現する(RelNode.id)

「関数」の実行

nvでは、関数は存在せず、コードブロックという形で存在する。コードブロックは、単なる配列である。 直前にコードブロックがある状態で(演算子が発動した場合、これは関数呼び出しを意味する。

nvのスコープ

nvのスコープは、動的ブロックスコープである。ある変数は、その変数が宣言されたブロックの実行が終了する際に破棄される。 スコープとは、実質的に、構造体である。この構造体には、現在実行中のブロックや、そのブロックを起動した際のスコープへの参照が保存されている。

Clone this wiki locally