|
|
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
Alibek B.BazistГугли функцию Анкермана, будешь приятно удивлен. Погуглил. Не удивлен. Какая связь описанного мною и условно бесконечной рекурсией? Суть проблемы не в бесконечности, а в том, что условием является внешнее событие. Еще раз. Есть набор данных, возвращаемых SQL-запросом. Нужно вывести его на печать. Если форматирование текста осуществляется за пределами программы, то чистым ФП задачу не решить. Например, внешний отчет в качестве входного параметра принимает строку данных, форматирует данные и выводит на печать, и возвращает текущую вертикальную позицию на листе. Т.е. спрогнозировать событие "начать новую страницу" можно только построчной обработкой и проверкой возвращаемого из внешнего отчета значения. Цикл и ветвление. И что с того ? Для тебя удивительно, но вся операционная система это однажды запущенная функция Main которая не успела выполнится, тото и всего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:01 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNBazistпропущено... а где здесь ты увидел побочный эффект ? Разве моя функция меняет чтото кроме аргументов которые ей передали ? в фп. ф-я имеет всегда один и тот же результат для того же аргумента ф-я не делает побочных эффектов(не меняет даже то, что передают в качестве аргумента), да и нет такого понятия как "менять" в фп. такие дела. а оно все тюринг полное. просто затащить камень на гору - не является решаемой задачей для тюринг полного языка. Это сути моего решения не меняет, моя прога может вернуть копию обнуленного массива, что не противоречит условиям задачи. А вот то что задача с точки зрения ФП по твоему не решаема, то это действительно плохо. Это означает что ты теории там чото почитал, а применить ее беспомощен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:04 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Edd.DragonВ том то и дело, что чем дальше ты от них, тем легче "писать программы". Есть программы и есть программные продукты. Программы писать легче. Но в топике под термином "программы" говорят именно о программных продуктах. Везде, где есть интерактивное взаимодействие с пользователем, необходимо сохранять контроль над выполнением программы. И поэтому ФП применим только в частных случаях, а не в общих. Я не против того, что ФП не очень пригоден в целом в "реальной" жизни. Я наоборот - за. Но фраза "цикл есть решением задачи" не корректна даже по смыслу (решением есть результат, данные), а фраза "для такой задачи вам необходим цикл" ограниченна в мышлении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:06 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNрешить. на хаскеле же решают. без циклов. На чистом ФП это не решается. Можно передать результат во внешний отчет, который сам все отформатирует. Можно использовать костыли, нарушающие чистоту ФП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:08 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
Edd.DragonAlibek B.пропущено... Есть программы и есть программные продукты. Программы писать легче. Но в топике под термином "программы" говорят именно о программных продуктах. Везде, где есть интерактивное взаимодействие с пользователем, необходимо сохранять контроль над выполнением программы. И поэтому ФП применим только в частных случаях, а не в общих. Я не против того, что ФП не очень пригоден в целом в "реальной" жизни. Я наоборот - за. Но фраза "цикл есть решением задачи" не корректна даже по смыслу (решением есть результат, данные), а фраза "для такой задачи вам необходим цикл" ограниченна в мышлении. Везде ФП нормально пригоден, просто соображать нужно чуточку больше. ФП по сути мигрировал в императивную парадигму в виде шаблонов проектирования и инкапсуляции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:09 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
Alibek B.ZyK_BotaNрешить. на хаскеле же решают. без циклов. На чистом ФП это не решается. Можно передать результат во внешний отчет, который сам все отформатирует. Можно использовать костыли, нарушающие чистоту ФП. Это решается, польску язык Тьюринг полный. Если математика говорит что решается значит решается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:10 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
Edd.DragonНо фраза "цикл есть решением задачи" не корректна даже по смыслу (решением есть результат, данные), а фраза "для такой задачи вам необходим цикл" ограниченна в мышлении. Если программа является частью другой программы, то задачей вполне может быть организация правильного цикла. Например есть кольцевая база данных (RRD), в которой имеется ряд архивов (RRA), охватывающих разные интервалы с разным шагом (например суточный архив с шагом 5 секунд, недельный архив с шагом 1 минута, месячный архив с шагом 5 минут). Нужно пройтись по всем датам, которые являются элементом любого архива (т.е. от -30 суток до -7 суток с шагом 5 минут, от -7 суток до -1 суток с шагом НОД для 5 минут и 1 минуты, и т.д.). Вот в такой задаче решением и будет неравномерный цикл по датам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:16 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
BazistЕсли математика говорит что решается значит решается. Какая еще математика? Еще раз. Невозможно вычислить, когда нужно начинать новую страницу. Эта информация становится доступной только после того, как одна строка данных была обработана внешней программой, которая и возвращает такую информацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:17 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
авторЕще раз. Невозможно вычислить, когда нужно начинать новую страницу. Наймем экстрасенса. Были бы деньги! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:20 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
Alibek B.BazistЕсли математика говорит что решается значит решается. Какая еще математика? Еще раз. Невозможно вычислить, когда нужно начинать новую страницу. Эта информация становится доступной только после того, как одна строка данных была обработана внешней программой, которая и возвращает такую информацию. И что с того ? GetSomethingCalculation(aSystemVariable); { .... } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:24 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
Я бы даже так сказал Program1(Program2()); Итого первая программа ждет обработанной строки от второй программы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:27 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Например есть кольцевая база данных (RRD), в которой имеется ряд архивов (RRA), охватывающих разные интервалы с разным шагом (например суточный архив с шагом 5 секунд, недельный архив с шагом 1 минута, месячный архив с шагом 5 минут). Нужно пройтись по всем датам, которые являются элементом любого архива (т.е. от -30 суток до -7 суток с шагом 5 минут, от -7 суток до -1 суток с шагом НОД для 5 минут и 1 минуты, и т.д.). Кстати, такая задача в императивном программировании решается очень легко. Самый простой способ — для всех RRA получить массивы дат, соединить в один массив и отсортировать. А вот в ФП в общем случае она не решается вообще, т.к. нельзя вычислить моменты перевода часов на летнее/зимнее время и високосные/невисокосные года. Ее можно решить только для частного случая, когда принимается какое-то приближение (високосный год считается по формуле (n\4)&&(n\400)&&(!n\100), летнее время не используется). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:27 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
BazistProgram1(Program2()); Итого первая программа ждет обработанной строки от второй программы. Я вроде бы про это и говорил. Программа должна ждать результата обработки от внешнего источника. Причем обработка осуществляется построчно. Цикл и есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:29 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Alibek B.Например есть кольцевая база данных (RRD), в которой имеется ряд архивов (RRA), охватывающих разные интервалы с разным шагом (например суточный архив с шагом 5 секунд, недельный архив с шагом 1 минута, месячный архив с шагом 5 минут). Нужно пройтись по всем датам, которые являются элементом любого архива (т.е. от -30 суток до -7 суток с шагом 5 минут, от -7 суток до -1 суток с шагом НОД для 5 минут и 1 минуты, и т.д.). Кстати, такая задача в императивном программировании решается очень легко. Самый простой способ — для всех RRA получить массивы дат, соединить в один массив и отсортировать. А вот в ФП в общем случае она не решается вообще, т.к. нельзя вычислить моменты перевода часов на летнее/зимнее время и високосные/невисокосные года. Ее можно решить только для частного случая, когда принимается какое-то приближение (високосный год считается по формуле (n\4)&&(n\400)&&(!n\100), летнее время не используется). Что тебе мешает дату передать в качестве аргумента в функцию вычисления ? Это както противоречит ФП ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:30 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
Скажем так. Чистое ФП возможно в тех случаях, когда сразу имеются все исходные данные и они не зависят от внешних факторов. Если какие-то данные, влияющие на обработку, могут быть получены только в процессе работы программы и их нельзя вычислить/предсказать, то это уже не ФП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:32 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
Alibek B.BazistProgram1(Program2()); Итого первая программа ждет обработанной строки от второй программы. Я вроде бы про это и говорил. Программа должна ждать результата обработки от внешнего источника. Причем обработка осуществляется построчно. Цикл и есть. Помойму ты плохо понимаешь ФП и то что императивное программирование это по сути подмножество ФП, а это означает что на ФП впринципе может быть смоделирован любой конечный автомат без противоречий ФП, включая потоки, переключения контекстов, обратные вызовы, использование переменных окружения и тд тп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:32 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
BazistЧто тебе мешает дату передать в качестве аргумента в функцию вычисления ? Это както противоречит ФП ? Мешает то, что функция может быть только для приближенного случая. Для общего случая функции не существует, т.к. величина корректировки (високосный или невисокосный год) является стохастической величиной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:34 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Скажем так. Чистое ФП возможно в тех случаях, когда сразу имеются все исходные данные и они не зависят от внешних факторов. Если какие-то данные, влияющие на обработку, могут быть получены только в процессе работы программы и их нельзя вычислить/предсказать, то это уже не ФП. С чего ты взял что это не ФП ? Я же тебе показал как с помощью ФП можно смоделировать цикл, тамже можно смоделировать и бесконечный цикл. А в цикле можешь вызывать функцию и в качестве параметра передать постоянно параметр который должен изменить внешняя программа. Все тоже самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:34 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
Bazistа это означает что на ФП впринципе может быть смоделирован любой конечный автомат без противоречий ФП, включая потоки, переключения контекстов, обратные вызовы, использование переменных окружения и тд тп. Реализуешь в ФП генератор случайных чисел? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:36 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
Alibek B.BazistЧто тебе мешает дату передать в качестве аргумента в функцию вычисления ? Это както противоречит ФП ? Мешает то, что функция может быть только для приближенного случая. Для общего случая функции не существует, т.к. величина корректировки (високосный или невисокосный год) является стохастической величиной. бред какойто. Все вычислимо в одной единственной функции, а если чегото не хватает то передается в качестве параметров и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:36 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
Alibek B.Bazistа это означает что на ФП впринципе может быть смоделирован любой конечный автомат без противоречий ФП, включая потоки, переключения контекстов, обратные вызовы, использование переменных окружения и тд тп. Реализуешь в ФП генератор случайных чисел? Почему нет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:37 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
BazistПочему нет ? Потому что это будет не ФП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:40 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
Alibek B.BazistПочему нет ? Потому что это будет не ФП. Ну обьясни, почему функция Rand(systemtime) Противоречит фп ? Она чтото меняет внутри себя ? - нет Она меняет параметр ? - нет Она возвращает один результат ? - да В чем проблема то ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:43 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
BazistВсе вычислимо в одной единственной функции, а если чегото не хватает то передается в качестве параметров и все. Ну вычисли UNIX Timestamp (число секунд с 00:00:00 UTC 01.01.1970) для диапазона дат от 01.01.2000 до 01.01.20000 с шагом 100 секунд для часового пояса MSK. Вернее покажи формулу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:43 |
|
||
|
Зачем писать программы сложно и долго, когда можно просто и легко?
|
|||
|---|---|---|---|
|
#18+
BazistНу обьясни, почему функция Rand(systemtime) Противоречит фп ? Она чтото меняет внутри себя ? - нет Она меняет параметр ? - нет Она возвращает один результат ? - да В чем проблема то ? Проблема в том, что ты не понимаешь смысла задаваемых вопросов. 1. Функция Rand (согласно условиям ФП) для определенного systemtime всегда должна возвращать один и тот же результат. То есть возвращаемое значение — это не случайное число. 2. Случайное число вообще не должно зависеть от каких-то внешних факторов, поэтому у функции Rand не должно быть аргументов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.03.2012, 03:46 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=37719206&tid=1342261]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
184ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 507ms |

| 0 / 0 |
