2017-11-26 2 views
0

Rebolでは、任意の構造化データを表すためにブロックを使用することが期待されています。ブロックをリスト以外のデータ構造として扱う組み込み式または標準的な方法がありますか?ブロックはRebolのさまざまなデータ構造として

私はと考えています:

  • スタック
  • (おそらくダブルエンド)のキュー
  • 別名マッピングし
  • セット。連想配列

答えて

2

Rebolには、すべて同じ方法で扱うことができる任意のデータの3つの保持者があります。

  • ブロック!高速インデックス(整数)参照のために配列として実装されています
  • list!リンクリストとして実装され、データの挿入と削除を迅速に実行します。
  • ハッシュ!両データの高速検索のために、ハッシュ参照リストとして実装され、

あなたは

insert append index? find poke select ... 

と同じ方法でそれらを操作するキーが、彼らはその結果で、特に応答時間が若干異なります。あなたのケースでは

  • ブロックを使用します!スタック用
  • list!待ち行列のために(私は思う)
  • ハッシュ!連想配列の場合

上記のように、すべて同様に動作します(ハッシュもインデックスで参照できます)。したがって、それらのいずれかを連想配列として扱うことができます。

>> x: [a one b two c 33] 
== [a one b two c 33] 
>> x/a 
== one 
>> x/c 
== 33 
>> select x 'b 
== two 
>> pick x 4 
== two 

これは、ハッシュとまったく同じ結果になります。 x: hash! [a 1 b 2 33]と定義される。新しい鍵の値のペアを追加するには:

>> x: make hash! [ a 1 b 2 c 33] 
== make hash! [a 1 b 2 c 33] 
>> append x [ key value ] 
== make hash! [a 1 b 2 c 33 key value] 
>> x/key 
== value 
>> select x 'key 
== value 
>> pick x 8 
== value 

なお、rebolにはキー値のペア、ハッシュの意味はありません。内部的にハッシュを構築する順序付けされた値のリストです。参照のための値。そのためだけにも洗練あなたはまた、オブジェクトを使用することができます連想配列の場合

>> select/skip x 33 2 
== none 

スキップ、実際にキーと値のペアのためにそれを使用するには

>> select x 33 
== key 

上の値33を、以下のものを尋ねる使用することができます!動的なフィールドを持つ必要がない場合に備えます。

+0

連想構造の場合、特定のキーに値を挿入する関数は何ですか? – dukereg

+1

@dukereg私の更新を参照してください – joing

+0

スタックの組み込み関数を使用してブロックの同じ端から挿入して削除する方法は私には分かりません。 – dukereg

関連する問題