:sig
bool DValue::is_list() const

:params
return value : true when the node is a sequential, numerically indexed container

:see
>types
0_DValue
is_array
push
each
dv_values

:content
Tests whether a map-shaped `DValue` represents a list: its keys are the numeric strings `"0"`, `"1"`, `"2"`, ... in unbroken sequence. This is a read accessor: it is `const`, never creates or modifies nodes, and dereferences internal references automatically.

Containers built with `push()` are lists. An empty container counts as a list when it was created with `set_array()` or `push()`; a keyed map (or a map with gaps in its numeric keys) is `is_array()` but not `is_list()`.

```cpp
DValue items;
items.push(first_item);
items.push(second_item);
// items.is_list() == true

items["custom"] = "x";
// items.is_list() == false, items.is_array() == true
```

`dv_map()` and `dv_filter()` use this distinction: list inputs re-index from zero, while map inputs keep their original keys.

## Related Concepts

- PHP: `array_is_list()`
- JavaScript: `Array.isArray()`
