![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#111 | |||
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]() Цитата:
| otherwise = fact (n-1) (tmp*n) fact 5 1 -- вернет 120 Рекурсия и никакой магии ) Точно также в рекурсивную функцию можно затащить getChar и если символ удовлетворителен, то вызывать рекурсивно функцию, после '=' посчитать и вернуть результат. Код:
Цитата:
Код:
Цитата:
Последний раз редактировалось Kostia; 26.01.2014 в 01:53. |
|||
![]() |
![]() |
![]() |
#112 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]() Цитата:
Есть и аналоги монад, только используются они сугубо практически, без преферанса и поэтесс, никто это гениальным решением не называет и не носится как конь с яйцами. Суть такого механизма в стыковании грязных операций с функциями. Например, операция вывода строки на экран не возвращает значения, то есть по сути это процедура, а следующая за ней функция ждет входной параметр, получается коллизия и разрыв мозга функциональщика. Чтобы все было мирно, такие вызовы и оборачивают в то, что в Хаскеле зовется монадой (при этом операция вывода на экран все равно портит воздух и считается грязной) Ну, а по вопросу, чтобы было проще понять - вот C# есть такие строки immutable (или как там правильно). При работе (если в них вносят какие-то изменения) они каждый раз пересоздаются на куче (точнее не гарантируется, что не пересоздадутся).
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() Последний раз редактировалось Utkin; 26.01.2014 в 12:31. |
|
![]() |
![]() |
![]() |
#113 | |
Участник клуба
Регистрация: 04.04.2010
Сообщений: 1,554
|
![]()
Utkin да не дело не пересоздании, как компилятор это реализует пофиг. Там главное что в пределах функции переменная иммутабельна. То есть например сначала баба была с одним мужиком, потом забыла про него, и ушла к другому. Вот это вот чистота, второй мужик может делать с ней всё что угодно и не думать про первого мужика. А первый мужик сплавлять бабу и не бояться что она вернётся. У каждого получается своя личная баба.
А если бы она с двумя одновременно была, или то к одному то ко второму то к третьему то к первому, то она грязная переменная. Или даже сразу с несколькими мужиками. Kostia, хм ну ок, понятно, вообщем то любой гуй через луп и работает. А как например в фя кэнселится функция выполняющаяся в отдельном треде. В шарпе мы можем передать переменную, через которую подадим функции команду сворачивать деятельность. Код:
Цитата:
|
|
![]() |
![]() |
![]() |
#114 |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]()
Чисто практический интерес - процедура не возвращает результат, а должна.
Например, пусть print(x) - вывод на экран. Какой результат (и какого типа) вернет print? Фундаментально программер может написать f(print(x)), по законам жанра это будет правдой. В реальности же будет открыт портал в Матрицу. Чтобы такого не было пишется что-то типа (абстрактно, разумеется, в каждом языке свой синтаксис): f( begin( print(x) z(y) ) ) Получается что f вместо print(х) получит результат z(y). Как и Kostia программа вызов грязной функции не увидела. Есть конечно различные варианты, но суть в том, что есть какие-то соглашения, которые закрывают глаза на грязную функцию, чтобы потом можно было сказать, что ничего такого и не было.
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
![]() |
![]() |
![]() |
#115 | ||||
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]() Цитата:
Код:
Цитата:
При этом монада, это просто класс типов, который требует определения пары функций: Код:
При этом монада будет считаться монадой только после соблюдения определенных правил, который компилятор самостоятельно проверить не способен. (для аппликативных функторов тоже есть правила) IO как раз такия является функтором: Код:
Цитата:
Цитата:
Код:
Код:
Последний раз редактировалось Kostia; 27.01.2014 в 10:14. |
||||
![]() |
![]() |
![]() |
#116 |
Участник клуба
Регистрация: 04.04.2010
Сообщений: 1,554
|
![]()
Ну это типа очереди комманд, а очередь та же переменная. Ну ладно, на каждый неудобный случай там есть свой костыль.
А зачем всётаки эта чистота. Ну типа у нас компилятор понимает какая часть функций чистая, а какая нет. А зачем. Мне на ум приходит только вычисление процента покрытия кода тестами ![]() |
![]() |
![]() |
![]() |
#117 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]() Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика ![]() |
|
![]() |
![]() |
![]() |
#118 | |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#119 | |
МегаМодератор
СуперМодератор
Регистрация: 27.11.2012
Сообщений: 5,711
|
![]() Цитата:
Сокрытие пр-в имен есть не только в ООП ![]() Поэтому есть пароноидальный const, singleton и пр. (я лично бы предпочел подстветку модифицируемых элементов в коде, блэкджек и ш***) В данном конкретном случае опыт предыдущих ЯП использовался мало, а математической теории - много. Поэтому получилось "оригинально", но мало пригодно: В мат. нотации нельзя написать a = a+1; Надо a1= a+1; Новое значение => новое имя. Ну а монады просто дань моде, убившая синтаксис. Kostya считает, что это имеет какое-то отношение к теме ![]()
Благими намерениями устлана дорога на programmersforum.ru
Последний раз редактировалось MihalNik; 27.01.2014 в 17:19. |
|
![]() |
![]() |
![]() |
#120 | |||
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,692
|
![]() Цитата:
Код:
![]() Цитата:
Код:
Цитата:
Но в Erlang меня сначала поразила возможность без проблем запустить программу сразу на нескольких компьютерах, т.е. рапараллелить, объединить несколько машин в одно информационное пространство. Горячее обновление, т.е. обновление частей уже работающей программы и т.д. Последний раз редактировалось Kostia; 27.01.2014 в 18:00. |
|||
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
вопросик самым опытным :-) | 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 |