|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
24.01.2014, 23:16 | #91 |
Участник клуба
Регистрация: 04.04.2010
Сообщений: 1,554
|
Kostia чё то я не понял про чистоту. Давай на каком-нибудь примере. Давай возьмём программу, которая берёт аргументы и тупо пишет их в лог прибавляя время. как будет выглядеть то же самое но на функциональном языке и с чистотой.
Код:
|
25.01.2014, 06:17 | #92 | |||||
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
Цитата:
Цитата:
Цитата:
Цитата:
1. То что я сам не удалил объект, а это сделала среда исполнения - значит все-таки объекты изменяемы ? 2. Пересоздание списка по масштабам внутренних изменений вызывает гораздо больше всяких революций внутри среды исполнения чем просто его модификация. Поэтому если модификация списка создана через задний проход это не означает, что все хорошо. 3. Даже если считать, что не ты меняешь мир, а сам мир меняется под твои желания общий итог все равно один и тот же . 4. C# тоже имеет сборку мусора, там тоже можно не вытирать за собой, но все равно не тру. Цитата:
Код:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика Последний раз редактировалось Utkin; 25.01.2014 в 08:41. |
|||||
25.01.2014, 12:31 | #93 |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
PHP красив и понятен
|
25.01.2014, 15:26 | #94 | |||||
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
А теперь зачем нужна монада IO. Компилятор по умолчанию считает что все функции чистые будь то IO или любая другая. Функции в Хаскеле не могут менять внешний мир, но это могут делать функции лежащие за его пределами, функции OS например. Если бы не использовали бы монаду IO, то функции вызывались бы как попало и программа работала бы всегда не правильно, т.к. компилятор бы считал что раз функции передается всегда один и тот же аргумент, то и вернуть можно всегда только одно и тоже значение ), например chars = [getChar, getChar] если один из(может вызваться любой) getChar вернет "ё", то следующий без лишних вопросов тоже вернет "ё". И любой последующий вызов getChar без аргументов будет возвращать "ё", до тех пор, пока не остановим программу и не запустим по новой. Монада IO, задает связь между данными, что гарантирует выполнение IO действий последовательно а также любой последующий вызов того же getChar будет выполнен с другим аргументом, что не умоляя общности о чистоте всех функций предоставит возможность к вводу данных. Операции вывода, такие как putStrLn или writeFile и т.д. тоже возвращаются всегда одно и тоже значение IO (), также не умоляя общности о чистоте функций в Хаскеле. Хотя операции вывода также могут возвращать разные значения, т.к. IO гарантирует их вызов всегда с другими аргументами. gatChar вернет IO Char, что бы преобразовать его в простой Char, то достаточно выполнить связывание например так: c <- gatChar c теперь имеет тип Char Собственно при желании можно организовать IO и без монады IO, но придется поднапрячь мозги чтобы заставить компилятор выполнять действия последовательно и всегда с разными аргументами для функций выполняющий чтение/запись, иначе получится каша. Компилятор считает что все функции чистые, без исключений! |
|||||
25.01.2014, 16:02 | #95 | ||||
МегаМодератор
СуперМодератор
Регистрация: 27.11.2012
Сообщений: 5,678
|
Цитата:
Цитата:
Цитата:
Цитата:
И это уже идет вразрез с реальностью, то есть не фича, а баг, заставляющий писать костыли Хотели как лучше, получилось как всегда: 1. Придумываем красивый простой язык. 2. Пишем тупой компилятор. 3. Патчим под него язык, превращая в Г.
Благими намерениями устлана дорога на programmersforum.ru
Последний раз редактировалось MihalNik; 25.01.2014 в 16:08. |
||||
25.01.2014, 16:39 | #96 | ||||
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
Цитата:
Цитата:
Цитата:
Цитата:
|
||||
25.01.2014, 16:46 | #97 |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
об чем сыр-бор?
|
25.01.2014, 17:14 | #98 |
МегаМодератор
СуперМодератор
Регистрация: 27.11.2012
Сообщений: 5,678
|
О языке с костылями, не позволяющими видеть костыли
Безусловно. В том виде, в котором существует - Г. Сапожник без сапог. Так Вы определитесь. Все функции действительно являются чистыми или это "мнение" разработчика компилятора, требующее всякий раз городить оболочку для ввода/вывода? Не переусердствуйте. А то вылезет грыжа - монада=)
Благими намерениями устлана дорога на programmersforum.ru
Последний раз редактировалось MihalNik; 25.01.2014 в 17:30. |
25.01.2014, 17:49 | #99 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
Код:
Код:
Смысл от этого не изменится. Вы явно меняете объект Form1, вместо того чтобы создать новый с измененным заголовком и вернуть его. |
25.01.2014, 18:02 | #100 | |
МегаМодератор
СуперМодератор
Регистрация: 27.11.2012
Сообщений: 5,678
|
Цитата:
Вам было бы удобно, если у Вас на работе считалось бы, что 2*2= 5, а 5+3=7, но 4+4=10?
Благими намерениями устлана дорога на programmersforum.ru
Последний раз редактировалось MihalNik; 25.01.2014 в 18:04. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
вопросик самым опытным :-) | Doholyan | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 1 | 25.08.2009 17:13 |
Проблема с синтаксисом? | Geddar | PHP | 1 | 30.06.2008 16:44 |
Казус с синтаксисом???... | Sota | Общие вопросы C/C++ | 6 | 17.07.2007 19:15 |