Ruby поддерживает рекурсивные массивы (то есть самосохраняемые массивы):
a = []
# => []
a << a
# => [[...]]
a.first == a
# => true
Это по-настоящему круто, но с чем вы можете работать?
Ruby поддерживает рекурсивные массивы (то есть самосохраняемые массивы):
a = []
# => []
a << a
# => [[...]]
a.first == a
# => true
Это по-настоящему круто, но с чем вы можете работать?
A ориентированный граф с недифференцированными ребрами может иметь каждую вершину, представленную просто как массив вершин, доступных из этой вершины. Если график имел циклы, у вас был бы "рекурсивный массив", особенно если ребро могло вернуться к той же вершине.
Например, этот график:
... может быть представлена в коде как:
nodes = { a:[], b:[], c:[], d:[] }
nodes[:a] << nodes[:a]
nodes[:a] << nodes[:b]
nodes[:b] << nodes[:a]
nodes[:b] << nodes[:c]
p nodes
#=> {:a=>[[[...], []], [...]], :b=>[[[...], [...]], []], :c=>[], :d=>[]}
Обычно представление каждой вершины было бы более "надежным" (например, экземпляр класса со свойствами для имени и массива исходящих ребер), но не представляется возможным представить себе случай, когда вам нужно очень легкое представление ваших данных (для очень больших графиков) и поэтому необходимо использовать минимальное представление, подобное этому.
Ruby поддерживает рекурсивные массивы
Для меня вопрос, почему он не должен его поддерживать?
Массив - это просто набор ссылок. Если он проверяет каждый элемент и выдает ошибку, если один из имен относится к самой коллекции, то предотвратите рекурсию или используйте ее для графиков, например, пример Phrogz.
Поэтому я не думаю, что это функция, но если бы это было так, большинство языков, которые я знаю, есть, даже Java.. Просто используйте объекты как элементы массива.