|
|
|
Реверт очереди за линейное время
|
|||
|---|---|---|---|
|
#18+
В предыдущем посту опечатался: foldr имеет 3 параметра fun, res, args - fun - функция, которая применяется на каждом шаге, res - результат после очередного шага, args - список, которые на вход ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2010, 14:10 |
|
||
|
Реверт очереди за линейное время
|
|||
|---|---|---|---|
|
#18+
Ёлки зелёные, так при чём жеж тут "очередь"? Да и foldr -- это самая что ни на есть рекурсия. Это классическая задачка для будущих кулхацкеллов. Код: plaintext Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2010, 14:49 |
|
||
|
Реверт очереди за линейное время
|
|||
|---|---|---|---|
|
#18+
Значит я перемудрил с тем, чтобы попонятнее написать) очень прошу извинить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2010, 15:44 |
|
||
|
Реверт очереди за линейное время
|
|||
|---|---|---|---|
|
#18+
Можно еще вопрос: что за язык реализации? И где источник, в котором можно черпать такие задачки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2010, 15:48 |
|
||
|
Реверт очереди за линейное время
|
|||
|---|---|---|---|
|
#18+
Haskell, вестимо. Конкретнее -- WinHugs. Источник именно такого рода задачек не подскажу, к сожалению; сам нахватываюсь по мелочи и по случаю, то тут то там, но вообще больше алгоритмическими задачами интересуюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2010, 16:03 |
|
||
|
Реверт очереди за линейное время
|
|||
|---|---|---|---|
|
#18+
junior idiot, Спасибо большое)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2010, 16:10 |
|
||
|
Реверт очереди за линейное время
|
|||
|---|---|---|---|
|
#18+
umniaxaБолее подробно: на вход подается список, [1,2,3,4] например. На выходе должно получится [4,3,2,1] Любой язык программирования к реализованной структурой данных типа "стек" или "дек". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2010, 23:34 |
|
||
|
Реверт очереди за линейное время
|
|||
|---|---|---|---|
|
#18+
umniaxaПолностью условие звучит так: Используя только операцию foldr и лямбда выражения ревертнуть список не использую рекурсивных функций за линейное время foldr f arg работает приблизительно так: foldr (+) 0 [1,2,3,4] = ((((0+4)+3)+2)+1) Ну раз уж пошла такая пьянка: Немного CL Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2010, 11:25 |
|
||
|
Реверт очереди за линейное время
|
|||
|---|---|---|---|
|
#18+
Извините за еще один тупой вопрос, но не могли бы вы пояснить еще один момент: что значит эта часть вашего примера: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2010, 11:40 |
|
||
|
Реверт очереди за линейное время
|
|||
|---|---|---|---|
|
#18+
Mozokreduce Есть мнение, что reduce -- это fold l , а не fold r . Если допустить использование foldl, то задача становится совсем по-детски тривиальной: Код: plaintext 1. Частично предположение об аналогии с foldl подтверждается исходниками clisp 2.48. clisp-2.48/src/sequence.d Код: plaintext 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. 30. 31. 32. 33. 34. 35. 36. 37. 38. "Частично" -- потому что тут цикл, а не рекурсия. В Prelude.hs же определение foldl явно рекурсивно: Prelude.hs Код: plaintext 1. 2. хотя, конечно, будучи хвостовым, соптимизируется в цикл, но всё же. umniaxa, операторы (двуместные функции) ($) и (.) определены в Prelude.hs: Prelude.hs Код: plaintext 1. 2. 3. 4. 5. Это аппликация и композиция соответственно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2010, 12:42 |
|
||
|
Реверт очереди за линейное время
|
|||
|---|---|---|---|
|
#18+
Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2010, 12:53 |
|
||
|
Реверт очереди за линейное время
|
|||
|---|---|---|---|
|
#18+
junior idiot Есть мнение, что reduce -- это fold l , а не fold r . Согласен, забыл про волшебный флажок :) Еще немного CL Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2010, 15:49 |
|
||
|
Реверт очереди за линейное время
|
|||
|---|---|---|---|
|
#18+
junior idiot Формально -- нет. Комбинатор неподвижной точки как раз и нужен для того, чтобы рекурсивное определение преобразовать в не рекурсивное. дело не в определении, а в вычислительном процессе, порождаемом функцией ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2010, 19:25 |
|
||
|
Реверт очереди за линейное время
|
|||
|---|---|---|---|
|
#18+
rev l = foldr (\f a b -> a (f:b)) id l [] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2012, 03:29 |
|
||
|
Реверт очереди за линейное время
|
|||
|---|---|---|---|
|
#18+
erwert, ага... Я ещё тогда забыл напомнить по поводу maytonЛюбой язык программирования к реализованной структурой данных типа "стек" или "дек".Например, на любом Forth в реализации 83 и выше: Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2012, 02:00 |
|
||
|
Реверт очереди за линейное время
|
|||
|---|---|---|---|
|
#18+
* Да уж... REVERSE - это только что определенный REVERT, и должен именно так и писАться., как revert ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2012, 02:03 |
|
||
|
Реверт очереди за линейное время
|
|||
|---|---|---|---|
|
#18+
С новым годом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2012, 02:14 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36898039&tid=1342094]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
145ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 432ms |

| 0 / 0 |
