|
Сделать дерево плоским списком
|
|||
---|---|---|---|
#18+
Визитор и рекурсия, близнецы-братья ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 14:12 |
|
Сделать дерево плоским списком
|
|||
---|---|---|---|
#18+
ЕвгенийВВизитор и рекурсия, близнецы-братья Ниче подобного ) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 15:05 |
|
Сделать дерево плоским списком
|
|||
---|---|---|---|
#18+
hVosttЕвгенийВВизитор и рекурсия, близнецы-братья Ниче подобного ) Если решаем проблему двойной диспетчеризации, то да, нет рекурсии. А если нужно все же обойти дерево, то вот она родненькая! ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 16:48 |
|
Сделать дерево плоским списком
|
|||
---|---|---|---|
#18+
hVosttЕвгенийВ, Так в этом и смысл. При добавлении класса, его нужно добавить в интерфейс посетителя, что неумолимо приведёт к необходимости написать реализацию. К сожалению, функциональщики этого факта не понимают, по этому со своим аргументом "код в три строки" идут лесом :) Визитор может обойти иерархию и сделать что-нибудь, нахаляву получишь сформированный плоский список. Не понимаю, что ты наехал на функциональщиков, но современные функциональные языки легко сводят рекурсию к циклам, если это возможно, сохраняя при этом "код в три строки". Вот пример, это после компиляции превращается в (на c#). Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2018, 17:01 |
|
Сделать дерево плоским списком
|
|||
---|---|---|---|
#18+
ЕвгенийВНе понимаю, что ты наехал на функциональщиков, но современные функциональные языки легко сводят рекурсию к циклам, если это возможно, сохраняя при этом "код в три строки". Наезд на функциональщиков здесь не относится к циклам, а к необходимости писать реализации при развитии иерархии классов. Функциональщики просто будут тупо ловить исключения и ошибки отсутствия ошибки обработки новых типов, и никто им тут не поможет. Стандартный посетитель обязывает на уровне компиляции. Да, больше строк кода, но гарантии, сэр. Гарантии. ЕвгенийВВот пример, это после компиляции превращается в (на c#). Ну блин. Компилятор в состоянии разворачивать хвостовые рекурсии и в C#, и даже на C++. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2018, 01:35 |
|
Сделать дерево плоским списком
|
|||
---|---|---|---|
#18+
ЕвгенийВЕсли решаем проблему двойной диспетчеризации, то да, нет рекурсии. А если нужно все же обойти дерево, то вот она родненькая! Да ничего подобного. Реализация посетителя может планировать обход в стуктуру типа стек, это зависит от того, как это реализовано. Отсюда, как я и сказал, по возможности рекурсии надо избегать. Концепция красивая, да. Но нафиг она не нужна, даже если кажется, что ну здесь же не может быть большой глубины. Может. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2018, 01:37 |
|
Сделать дерево плоским списком
|
|||
---|---|---|---|
#18+
ЕвгенийВ...современные функциональные языки легко сводят хвостовую рекурсию к циклам, если это возможно, сохраняя при этом "код в три строки". ... |
|||
:
Нравится:
Не нравится:
|
|||
02.09.2018, 02:56 |
|
Сделать дерево плоским списком
|
|||
---|---|---|---|
#18+
авторЕсть класс, хранящий дерево элементов. Дочерние элементы хранятся в поле списка List<BaseTreeData> Child. Хочу вывести это дерево как "плоский" (линейный) список всех элементов Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Я деревья по другому рисую Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 10:34 |
|
Сделать дерево плоским списком
|
|||
---|---|---|---|
#18+
Arm79, hVostt Продемонстрируйте пожалуйста оптимизацию хвостовой рекурсии в C#? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 11:44 |
|
Сделать дерево плоским списком
|
|||
---|---|---|---|
#18+
ЕвгенийВ, Компилируй в x64, получишь свою оптимизацию. Компилируй в x86 (AnyCPU), получишь кукиш :) Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 12:25 |
|
Сделать дерево плоским списком
|
|||
---|---|---|---|
#18+
hVostt, Нифига ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 12:51 |
|
Сделать дерево плоским списком
|
|||
---|---|---|---|
#18+
ЕвгенийВhVostt, Нифига Чё нифига? У меня этот код, под x32 падает с StackOverflowException, под x64 отлично работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2018, 13:53 |
|
|
start [/forum/topic.php?fid=20&msg=39696741&tid=1399257]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
139ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 9ms |
total: | 231ms |
0 / 0 |