|
Scala : поджать списочек.
|
|||
---|---|---|---|
#18+
Вот приплыла идея. Есть такой монотонный список чисал. Заданный в оригинале строкой. Код: sql 1.
Надо его "поджать". Сделать нечто вроде. Код: sql 1.
Поскольку наркотик ФП уже проник в меня я думаю как-бы я это решал. Классическое императивное решение - это создать некий автомат с состоянием который пробежит от начала строки до конца и будет формировать структуры типа Integer или Range на выходе. Но тут надо смотреть на 2-3 шага вперед. А это неудобно в автоматах. +Еще эти пограничные кейсы. О которых думать противно. Хочется уже это сделать на reduce/fold/collect. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 14:45 |
|
Scala : поджать списочек.
|
|||
---|---|---|---|
#18+
mayton Но тут надо смотреть на 2-3 шага вперед после получения очередной лексемы из потока вперёд смотреть незачем ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 15:04 |
|
Scala : поджать списочек.
|
|||
---|---|---|---|
#18+
Вроде вообще ни один парсер никогда "вперед" не смотрит. Нормальный парсер хранит одно (обычно) предыдущее значение и изредко его откатывает. похоже mayton'у "наркотик ФП уже проник в меня" настолько, что он конечные автоматы позабыл напрочь ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 15:24 |
|
Scala : поджать списочек.
|
|||
---|---|---|---|
#18+
Чортовы наркотики ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 15:26 |
|
Scala : поджать списочек.
|
|||
---|---|---|---|
#18+
про скалу не знаю, если где натупил, соррян Код: java 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. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 15:56 |
|
Scala : поджать списочек.
|
|||
---|---|---|---|
#18+
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
По факту та же стейт машина - вид в профиль ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 16:20 |
|
Scala : поджать списочек.
|
|||
---|---|---|---|
#18+
chpasha, спасибо. А можно ли как-то еще уменьшить объем кода? Просто то императивное решение которое я себе представлял все еще компактнее чем решение с stream/collect. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 16:23 |
|
Scala : поджать списочек.
|
|||
---|---|---|---|
#18+
Если совсем буков жалко то вот так - Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 16:30 |
|
Scala : поджать списочек.
|
|||
---|---|---|---|
#18+
mayton компактнее чем решение с stream/collect. я не знаю как еще упростить - весь код это по сути только метод accumulate, остальное предварительные расшаркивания ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 16:36 |
|
Scala : поджать списочек.
|
|||
---|---|---|---|
#18+
забыл ник, паша, спасибо друзья. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 16:38 |
|
Scala : поджать списочек.
|
|||
---|---|---|---|
#18+
(раскачиваясь взад-вперед) Не нравится мне этот метод. Код: java 1.
Он написан ... как бы это сказать... не в духе ФП. Он - модифицирует свой собственный аргумент. Возможно это контракт коллектора? Можно ли переписать с reduce? Понимаю что накладные будут. Ну ... это так. Ворчу просто. Ворчун я. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 17:08 |
|
Scala : поджать списочек.
|
|||
---|---|---|---|
#18+
Вообще можно как-то так, если память/процессор не жалко: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 17:20 |
|
Scala : поджать списочек.
|
|||
---|---|---|---|
#18+
mayton Он написан ... как бы это сказать... не в духе ФП. Он - модифицирует свой собственный аргумент. Нет, там ничего не меняется. Объекты новые создаются, это да, но по минимуму. Самое что ни на есть тру ФП mayton Можно ли переписать с reduce? Можно, но это тот же fold. И оба в конце концов сводятся к рекурсивному методу handleNumber mayton Понимаю что накладные будут. На самом деле не такие огромные, списки не копируются а элементы хвоста и более того шарятся, оставаясь при этом иммутабл ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 17:34 |
|
Scala : поджать списочек.
|
|||
---|---|---|---|
#18+
Вариация на тему ренжей, только через Seq-и: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 17:48 |
|
Scala : поджать списочек.
|
|||
---|---|---|---|
#18+
Тут в общем выбор: иммутабельность или затраты на память ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2021, 17:53 |
|
Scala : поджать списочек.
|
|||
---|---|---|---|
#18+
SpringMan, спасибо. Уже есть пища для размышлений. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2021, 01:46 |
|
Scala : поджать списочек.
|
|||
---|---|---|---|
#18+
кто то решил прокачать скилы гадилити? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2021, 19:25 |
|
|
start [/forum/topic.php?fid=59&gotonew=1&tid=2120527]: |
0ms |
get settings: |
7ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
158ms |
get topic data: |
4ms |
get first new msg: |
3ms |
get forum data: |
1ms |
get page messages: |
499ms |
get tp. blocked users: |
1ms |
others: | 8ms |
total: | 688ms |
0 / 0 |