depset

Struktur data khusus yang mendukung operasi penggabungan yang efisien dan memiliki urutan traversal yang ditentukan. Biasanya digunakan untuk mengumpulkan data dari dependensi transitif pada aturan dan aspek. Untuk informasi selengkapnya, lihat di sini.

Elemen-elemen dari dependensi harus dapat di-hash dan memiliki jenis yang sama (seperti yang ditentukan oleh fungsi tipe(x) bawaan), tetapi dependensi bukan merupakan kumpulan hash dan tidak mendukung pengujian keanggotaan cepat. Jika memerlukan jenis data kumpulan umum, Anda dapat menyimulasikannya menggunakan kamus dengan semua kunci dipetakan ke True.

Depset tidak dapat diubah. Dependensi harus dibuat menggunakan fungsi konstruktor dan digabungkan atau ditambah dengan dependensi lainnya melalui argumen transitive.

Parameter order menentukan jenis traversal yang dilakukan untuk mengonversi dependensi ke iterable. Ada empat kemungkinan nilai:

  • "default" (sebelumnya "stable"): Urutan tidak ditentukan (tetapi deterministik).
  • "postorder" (sebelumnya "compile"): Pengurutan dari kiri ke kanan. Tepatnya, proses ini secara rekursif akan melintasi semua turunan paling kiri terlebih dahulu, lalu elemen langsung paling kiri terlebih dahulu.
  • "preorder" (sebelumnya "naive_link"): Praorder dari kiri ke kanan. Tepatnya, urutan ini akan melintasi elemen langsung paling kiri pertama, lalu secara rekursif melintasi turunan paling kiri terlebih dahulu.
  • "topological" (sebelumnya "link"): Urutan topologi dari root ke daun. Tidak ada jaminan dari kiri ke kanan.

Dua dependensi hanya dapat digabungkan jika kedua dependensi memiliki urutan yang sama, atau salah satunya memiliki urutan "default". Dalam kasus terakhir, urutan dependensi yang dihasilkan akan sama dengan urutan yang lain.

Depset dapat berisi nilai duplikat, tetapi nilai ini akan disembunyikan saat melakukan iterasi (menggunakan to_list()). Duplikat dapat mengganggu semantik pengurutan.

Anggota

to_list

list depset.to_list()

Menampilkan daftar elemen, tanpa duplikat, dalam urutan traversal dependensi. Perhatikan bahwa urutan tidak ditentukan (tetapi deterministik) untuk elemen yang ditambahkan lebih dari sekali ke dependensi. Urutan juga tidak ditentukan untuk dependensi yang diurutkan "default", dan untuk elemen dependensi turunan yang urutannya berbeda dengan dependensi induk. Daftar ini adalah salinan; memodifikasinya tidak akan berdampak pada dependensi dan sebaliknya.