- 1
list($ignore, $ignore, $ignore, $ignore,$ignore, $ignore, $radius, $ignore) = get_location_data($request['location']);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+123
list($ignore, $ignore, $ignore, $ignore,$ignore, $ignore, $radius, $ignore) = get_location_data($request['location']);
iipokypaop 14.10.2013 16:18 # −1
<?
$filter = array(
'ignore', 'ignore', 'ignore', 'ignore','ignore', 'ignore', 'radius', 'ignore'
);
for($i = 0 ; $i < count($filter); $i++){
$result = get_location_data($request['location']);
if ($filter[$i] === 'radius'){
$radius = $result[$i];
}
}
anonimb84a2f6fd141 14.10.2013 21:37 # 0
WGH 14.10.2013 22:05 # 0
anonimb84a2f6fd141 14.10.2013 22:33 # 0
Dummy00001 14.10.2013 23:00 # +1
(чем народ постоянно пользуется для stat()а который тоже возвращает лист.)
было бы странно если бы в питоне подобного было нельзя.
myaut 14.10.2013 23:26 # +2
radius, _, length, _, _ = get_some_data()
А в PHP до 5.4 парсер не мог осилить два типа скобок в одном выражении: http://www.phpsadness.com/sad/21
WGH 14.10.2013 23:29 # 0
К слову, в PHP до какой-то версии нельзя было "брать индекс" у произвольного выражения. Только у переменных.
Dummy00001 14.10.2013 23:41 # 0
а. да. тогда почти книжный пример:
bormand 15.10.2013 05:29 # +2
Dummy00001 15.10.2013 13:35 # 0
с другой стороны, в общем случае сам стат нужен бывает редко (что честно говоря и напрягает в те редкие моменты), потому существуют `-X` операторы.
пример который я привел именно и есть случай который на `-X` операторах сделать нельзя. лучше пример был бы проверка rwx флагов:
ЗЫ но stat() все равно пахнет, потому что mtime/atime/ctime доступны только с точностью до секунд.
bormand 15.10.2013 15:25 # 0
А на деле вроде как операционки могут огрублять их хоть до суток, в зависимости от ФС... Плюс на линухе atime'а у меня вообще отключены, чтобы диск не дрочить.
Dummy00001 15.10.2013 16:22 # 0
большинство новых ФС умеют. Granularity: FAT - 10ms, NTFS - 100ns, zfs, xfs, btrfs, ext4 - 1ns.
"Плюс на линухе atime'а у меня вообще отключены, чтобы диск не дрочить."
врешь. на линухе по умолчанию включен relatime - atime обновляется когда mtime меняется.
atime редко бывает нужен. но пару раз помогало - доказать/показать глупым юзверям какой конфиг файл на самом деле читается.
bormand 15.10.2013 16:27 # 0
А еще там (походу даже при включенном noatime?): In addition, since Linux 2.6.30, the file's last access time is always updated if it is more than 1 day old.
Dummy00001 15.10.2013 17:16 # 0
"noatime" в общем случае пользоватся нельзя. правильная опция - "relatime" (relative access time).
фишка что если приложения которые проверяют atime (например бэкапы) то могут и возникают проблемы на уровне логики. например файл был модифицирован вчера, а atime - год назад. back to the future какой-то получается.
relatime это почти тоже самое что и noatime, но при модификации файла также обновляется и atime.
bormand 15.10.2013 17:59 # 0
Может я что-то не так понимаю?
read-only операции меняют только atime (причем, при включенном relatime, только если oldatime <= ctime || oldatime <= mtime, т.е. максимум 1 раз после каждого изменения файла).
write-only операции меняют ctime + mtime.
read-write операции меняют все три таймштампа.
chmod, mv и прочие операции не трогающие контент меняют только ctime.
Сейчас проверял свое понимание на strictatime, relatime, noatime - вроде сходится. И тогда я не понимаю, чем noatime может повредить бекапилкам. Ну не узнают они, что я файл читал с момента последней модификации, и что с того?
Dummy00001 15.10.2013 18:10 # 0
уже не помню, честно говоря. если интересно, можешь поковырять LKML - Linux была первой кто ввела relatime (потому что нишевые пользователи все еще могут влиять на разработку).
PS плоды гугления ничего конкретного не говорят (помимо "совместимость с POSIX"):
http://docs.fedoraproject.org/en-US/Fedora/18/html/Power_Management_Guide/Relatime.html
и самый прикол что оказывается relatime вроде как уже включена по умолчанию:
http://unix.stackexchange.com/questions/17844/when-was-relatime-made-the-default
хотя на LWN больше написано:
http://lwn.net/Articles/244829/
и tmpwatch (про которую я слышу в первый раз) вроде есть основной пользователь atime.
bormand 15.10.2013 18:23 # 0
> и самый прикол что оказывается relatime вроде как уже включена по умолчанию
Ну это очень разумное решение, по сравнению с дискодрочильным strictatime. А после того как Линус предложил патч на "last access time is always updated if it is more than 1 day old" эти метки даже можно юзать.
anonimb84a2f6fd141 15.10.2013 06:24 # 0
myaut 15.10.2013 12:39 # +1
А вот с запятыми все сложнее - такой синтаксис уже используется:
WGH 15.10.2013 17:31 # 0
wvxvw 15.10.2013 00:20 # 0
anonimb84a2f6fd141 15.10.2013 06:23 # 0
LispGovno 15.10.2013 08:49 # +3
bormand 15.10.2013 09:41 # 0
wvxvw 15.10.2013 09:52 # 0
roman-kashitsyn 15.10.2013 09:53 # 0
можно даже
Either a b
wvxvw 15.10.2013 10:04 # 0
roman-kashitsyn 15.10.2013 10:10 # 0
P.S. Either не совсем монада.
wvxvw 15.10.2013 10:21 # 0
ОК, не монада, структура такая. Не посмотрел в справку. Но все равно это не множественные значения. Уже хотя бы потому, что все эти объекты имеют какой-то тип, которым можно манипулировать через наследование (т.е. подменить настоящее содержание чем-то другим).
roman-kashitsyn 15.10.2013 10:25 # 0
Это плохо? Если число возвращаемых аргументов неизвестно (sic!), можно возвращать список.
> тип, которым можно манипулировать через наследование
К счастью, Хаскель не поддерживает наследование.
wvxvw 15.10.2013 10:32 # 0
Каскель не поддерживает наследование? Та ну? А как же deriving?
roman-kashitsyn 15.10.2013 10:39 # 0
deriving не имеет никакого отнешения к наследованию. Это указание компилятору вывести инстансы тайпклассов для определяемого типа. Это можно сделать и руками, но зачем писать самоочевидный код, если это может сделать компилятор.
Тайпклассы тоже никоим образом не связаны с наследованием. Они определяет протоколы, которым могут удовлетворять типы, нечто вроде интерфейсов. Тип не может наследоваться от тайпкласса или другого типа. Можно только определять "инстансы" - описания, как тип X удовлетворяет протоколу A.
wvxvw 15.10.2013 10:53 # 0
roman-kashitsyn 15.10.2013 11:11 # 0
Типы ничего не знают о протоколах, реализация протокола никак не может повлиять на сам тип. Нельзя унаследоваться и переопределить поведение в наследнике.
Это принципиально отличается от того, что используется в ООП-языках: там тип знает, от каких интерфейсов он "унаследован". В хаскеле ничего подобного нет. Можно взять тип X программиста Васи, протокол Y программиста Пети, и установить соответствие между ними, не меняя изменяя исходного кода Васи и Пети.
> функция с известным ему именем применима к чему-то и дает какой-то определенный тип результатов, будучи примененной
К наследованию это никак не относится. Это называется полиморфизм.
wvxvw 15.10.2013 11:13 # 0
roman-kashitsyn 15.10.2013 11:19 # +1
wvxvw 15.10.2013 11:45 # −2
Yuuri 20.12.2013 18:59 # +2
Интерфейс I — тип. Класс A, реализующий интерфейс I — тоже тип. Переменная типа A всегда будет иметь ещё и тип I. Класс B, наследующий класс C — тоже тип. Переменная типа C будет иметь также типы B и I. В таком случае ещё говорят, что A будет подтипом I, а B — подтипом A.
Класс типов в хацкеле — НЕ тип. Поэтому реализация типом некоторого класса — НЕ насладование. instance Show MyType не делает тип MyType наследником типа Show, потому что Show — не тип. А deriving вообще что-то вроде макроса.
Мета-типов в языке никаких нет, это чьи-то фантазии. Функции в C++ не наследуются; перегрузка — это вообще другой вид полиморфизма (ad-hoc, а в наследовании — подтиповый). «Равенство» в C++ ничего не определяет и никаких гарантий не даёт, это не агда какая-нибудь.
LispGovno 21.12.2013 00:11 # −1
wvxvw 15.10.2013 10:12 # 0
roman-kashitsyn 15.10.2013 10:41 # 0
wvxvw 15.10.2013 10:57 # 0
roman-kashitsyn 15.10.2013 11:04 # 0
1. Вернуть фиксированное кол-во однородных значений (точка в пространстве, частное и остаток). Кортеж отлично с этим справляется, заодно утверждая, сколько именно значений должно вернуться и каких они типов.
2. Возврат результата и кода ошибки. Either в этом случае гораздо лучше.
В контексте того, что в топике, я предпочту , нежели
wvxvw 15.10.2013 11:17 # −1
roman-kashitsyn 15.10.2013 11:25 # +1
Вы можете привести примеры адекватного и удобного использования множественного возврата? Или реальные сложности, возникающие при использовании кортежей? Зачем вставлять в язык возможности, которые легко заменяются более простыми и удобными средствами? Мной движет лишь бритва Оккама, а не ограниченность.
wvxvw 15.10.2013 11:43 # 0
В Forth большинство "функций" (слов) возвращают больше одного значения, например. Банально строки передаются от функции к функции как два значения: указатель на выделеную память и длина строки.
roman-kashitsyn 15.10.2013 11:49 # +1
Ну это конкретное решение конкретного языка. Непонятно, почему это должно быть лучше или изящнее, чем передача типа "строка", скрывающего в себе детали реализации. То, что так сделано в Forth, ещё не значит, что этот подход чем-то лучше.
wvxvw 15.10.2013 11:58 # 0
Я говорю, что в Forth большинство функций возвращают больше одного значения, и привожу в качестве аргумента ситуацию, которая встречается очень часто (ни одна даже самая тривиальная программа ее не избежит). Но в ответ я вижу "да это единичный случай". Может стоит все-таки взять и прочитать аргумент перед тем, как отвечать?
LispGovno 15.10.2013 12:07 # 0
roman-kashitsyn 15.10.2013 12:19 # 0
Так точно, сэр. Я просил:
>> примеры адекватного и удобного использования множественного возврата? Или реальные сложности, возникающие при использовании кортежей?
Ответ:
> в Forth большинство функций возвращают больше одного значения
Ну и что с того? Это удобнее или безопаснее, чем нормальные типы и кортежи? Почему? Это даёт хороший выигрыш в производительности?
Пока что я вижу только такую цепь рассуждений:
я охуенен, я осилил форт
-> форт охуенен (ведь говно я бы осиливать не стал)
-> форт использует множественный возврат
-> множественный возврат охуенен
wvxvw 15.10.2013 13:58 # 0
Почему кортежи плохо - я уже объяснил. Потому что формализм функций плохо подходит к программированию в целом, если его ограничивать только функциями. Это порочное извращение действительности привитое дефективными языками типа Каскеля. В программировании есть процедуры, а не функции. А кортежи - это попытка через жопу сымитировать то, что на базисном уровне было зачем-то запрещено в пределах дефективного языка.
roman-kashitsyn 15.10.2013 14:12 # +1
wvxvw 15.10.2013 14:15 # 0
LispGovno 15.10.2013 16:05 # +2
bormand 15.10.2013 15:28 # 0
Это две части одной сущности ;) Друг без друга они практически бесполезны. Поэтому концептуально эти функции возвращают одно значение (хотя технически два).
Можно другой пример?
wvxvw 15.10.2013 15:42 # 0
Но тут откуда ни возьмись появляется всезнающий разум, который говорит, что это значение на самом деле одно, и что черное это просто очень темное белое, а мокрое это такая крайняя разновидность сухого и т.д.
> Можно другой пример?
Все операции работающие со стеком принимают по нескольку аргументов и возвращают столько же / или даже больше значений.
bormand 15.10.2013 16:04 # +1
Вот только не надо экстраполировать их на другие языки... Эти операции за пределами форта вообще не имеют никакого смысла, т.к. в других языках нет такой встроенной сущности как data-stack.
А если считать data-stack обычной глобальной структурой данных, то, внезапно, форт слова вообще ничего не возвращают и вообще ничего не принимают. Тот же эффект можно получить и в сишке:
wvxvw 15.10.2013 16:36 # 0
Такой вид рассуждений был описан Грайсом как "разговорная импликатура", т.е. когда из утверждения выбирается не то, что утверждалось, а какой-то аспект, который тоже мог бы быть истинным, буде изначальное утверждение истинным. Ну и дальнейшие махинации со смыслом утверждения не следующего явно из изначального утверждения в дальнейшем подаются за обоснование / опровержение первого.
bormand 15.10.2013 16:10 # +1
Ну так надо приводить яркий и наглядный пример, с которым оппонент не сможет поспорить... А не эту фигню про адрес и длину.
P.S. Тот же /mod был бы куда более ярким примером.
wvxvw 15.10.2013 16:31 # 0
С другой стороны, имеем яркий пример, не просто экзотической случай, а несколько не связаных друг с другом языков в которых кроме функций есть процедуры (лучше описаные как отношения), для которых функции являются их подклассом.
И тем не менее, в качестве контраргумента приводятся языки в которых почему-то решили пойти по пути обозначеном вышеупомянутым мудаком.
Чтобы опровергнуть предыдущее утверждение не нужно искать ущербный язык в котором что-то не реализовано, или реализовано плохо. Нужно показать, что описаная выше ситуация не случается никогда.
roman-kashitsyn 15.10.2013 15:53 # +5
bormand 15.10.2013 16:22 # +5
kegdan 16.10.2013 03:37 # 0
roman-kashitsyn 16.10.2013 08:02 # +1
откуда тебе знать
bormand 16.10.2013 08:45 # 0
> После выполнения миров не становиться N+1
Да и GC же. На старый мир ссылок нет, поэтому он удаляется.
1024-- 16.10.2013 10:42 # 0
bormand 16.10.2013 11:24 # 0
Каждая прога содержится в мире, который ей передали на вход ;) Поэтому прога может посмотреть в свой аргумент, и увидеть, что делают остальные.
LispGovno 16.10.2013 11:34 # 0
bormand 16.10.2013 11:36 # +1
С точки зрения одной проги других прог,
других машин, и даже пользователей просто не существует. Они есть только в ее воображении (в аргументе world).
kegdan 16.10.2013 12:45 # 0
это уже не функциональщина
bormand 16.10.2013 15:53 # 0
Почему? Чистые функции имеют полное право смотреть на свои аргументы и возвращать их измененные копии ;)
kegdan 16.10.2013 19:04 # 0
Вот только сказать по входным значениям что в это время с ними делают остальные нельзя
1024-- 16.10.2013 20:16 # 0
Входные значения - мир, а в мире содержатся остальные.
kegdan 16.10.2013 20:49 # 0
3.14159265 16.10.2013 20:49 # +6
kegdan 16.10.2013 21:41 # 0
1024-- 16.10.2013 21:05 # 0
ОМГ, я начал себе представлять наш фрактальный мир.
Если отказаться от квантования, можно вместить в мир ещё сколь угодное количество его копий.
Ну а вычислять поведение остальных можно с какой-то точностью, не учитывая, что другие думают о нас.
Есть ещё спорное утверждение:
К тому же, наш результат в силу нашей функциональной чистоты должен зависеть от мира, но не от наших хаотичных раздумий о нём, следовательно можно утверждать, что другие, не имея возможности просчитать эту рекурсию, не смогут дать результат, основанный на вычислении наших намерений. А потому, можно не погружаться в рекурсию, чтобы узнать, что они делают.
3.14159265 16.10.2013 21:39 # +1
/thread
kegdan 16.10.2013 21:42 # 0
1024-- 16.10.2013 22:01 # 0
Вот тут есть на это ответ: http://govnokod.ru/13938#comment200374
Земля притягивает Солнце, изменяя его положение, которое зависит от положения Земли, которое изменяется из-за притяжения Солнца, которое зависит от положения Земли. Но в реальности всё работает.
Операционный усилитель с ООС работает.
И fix $ const f работает, а не уходит в бесконечную рекурсию.
Так почему же программы должны не работать?
Stertor 16.10.2013 22:12 # −2
С уважением, Ваш кэп.
1024-- 16.10.2013 22:21 # 0
> С уважением, Ваш кэп.
Солипсизм третьей степени.
Stertor 16.10.2013 22:24 # −2
kegdan 16.10.2013 22:37 # 0
Stertor 16.10.2013 22:51 # 0
kegdan 16.10.2013 22:35 # 0
Притяжение солнца к земле и земли к солнцу это как бы одно и тоже притяжение
> Операционный усилитель с ООС работает.
не путаем физику и программирование.
> Так почему же программы должны не работать?
напиши, скомпиль да запусти.
1024-- 16.10.2013 22:52 # 0
А раздумья одной программы о других программах и их раздумья обо всех остальных - это всего лишь часть одного и того же процесса преобразования мира. Мир меняется, программы работает, значит их зависимость разрешается так же просто, как зависимость Солнца и Земли.
> не путаем физику и программирование
Путаница только в том, что нельзя создать программу, которая на 100% скопирует физический объект. Пока - из-за большого количества атомов, потом - из-за каких-нибудь ограничений квантовой физики.
А так - берём большой кусок мира, содержащий физический объект, применяем к нему функцию "физика", преобразующую мир в новый мир по найденным учёными законам - результатом этого будет мир после того, как объект что-то сделал. С нужной точностью.
Stertor 16.10.2013 22:54 # 0
я все еще не уверен, кто же из вас больше туп: ты или кенган
)
p/s/ я не говорю, что я умнее вас. Возможно, мы братья по тупостиразуму
bormand 16.10.2013 22:59 # +2
> я все еще не уверен, кто же из вас больше туп: ты или кенган
Ты так говоришь, как-будто это разные притяжения :) Эта сила действует на оба тела одинаково. Просто у солнца масса больше, поэтому оно получает меньшее ускорение, чем земля.
Stertor 16.10.2013 23:00 # 0
Я догадывался...
1024-- 16.10.2013 23:17 # 0
Выходит, не только kegdan и 1024-- - один и тот же юзер, эти два товарища - на самом деле - bormand?
Ура, я - bormand, пойду расскажу об этом Кутузову и Наполеону, а то они меня Гитлером считали, окаянные.
1024-- 16.10.2013 23:03 # 0
kegdan спокойно может группировать плохие явления в одно хорошее (как программист, он может группировать модули с циклическими зависимостями в общий модуль без оных).
Кстати, всё началось, когда bormand сгруппировал формальные аргументы нечистой функции с остальным миром, сотворив чистую функцию.
kegdan 16.10.2013 23:07 # +1
>я все еще не уверен, кто же из вас больше туп: ты или кенган
Учебником физики тебя по голове, неуч
1024-- 16.10.2013 23:14 # 0
Стертор, хоть и тролль, но дело говорит.
Аксиомы никто не доказывал, вся наука - вера в аксиомы и правила следования.
kegdan 16.10.2013 23:05 # 0
мир не меняется. Это основа фунциональщины.
>Путаница только в том, что нельзя создать программу, которая на 100% скопирует физический объект. Пока - из-за большого количества атомов, потом - из-за каких-нибудь ограничений квантовой физики.
А так - берём большой кусок мира, содержащий физический объект, применяем к нему функцию "физика", преобразующую мир в новый мир по найденным учёными законам - результатом этого будет мир после того, как объект что-то сделал. С нужной точностью.
Вот только в реальности все процессы стремятся к минимуму потенциальной энергии, а в программировании тупая рекурсия может не закончиться никогда.
1024-- 16.10.2013 23:12 # 0
Да вы же сверху обсуждали... Мир не меняется, просто создаётся новая копия, а старую забирает GC, что мы в своей речи называем "мир меняется".
Всё "мир меняется" можно заменить на "к миру применили чистую функцию "физика" и получили новый мир".
> а в программировании тупая рекурсия может не закончиться никогда.
Можно либо подогнать функцию, которая заменит рекурсию на её отсутствие (как в случае с притяжением), либо использовать функцию, которая даст нам результат с какой-то точностью (быть может, на уровне "много"-"мало"; но если другие программы будут тоже думать о нашей в терминах "много"-"мало", мы не проиграем и не упустим самой сути)
kegdan 16.10.2013 23:19 # 0
мир меняется
World.state = new State()
мир создается
World newWorld = new World()
Тут как не меняй понятия, а мир все рано не меняется. Создается на основе старого - да, но не меняется.
> которая заменит рекурсию на её отсутствие
чито я не поняль?
>которая даст нам результат с какой-то точностью
с некоторой точностью сказать, что сейчас делает другая функция?)
1024-- 16.10.2013 23:33 # 0
Я не меняю понятия, нарушая функциональную чистоту программы.
f1 (изменившийся мир) == (f1 . физика) (старый мир)
> Тут как не меняй понятия, а мир все рано не меняется.
Я и не говорю об обратном.
> чито я не поняль?
Можно считать, что положение Земли r - это функция f от положения Солнца, которое - функция F от положения Земли.
r = f(F(f(F(f(F(...(R)...)))))), а можно послушать kegdanа, понять, что это одно и то же явление, и взять функцию, которая сразу даёт нужный результат.
> с некоторой точностью сказать, что сейчас делает другая функция?)
"Другая функция сейчас выполняет свою работу." Я сказал, что делает другая функция, пользуясь нулевым приближением. Используя исходники функции (они есть в аргументе "мир") и проверив, исполняет ли её сейчас какой-то компьютер, можно ещё что-нибудь полезное сказать.
kegdan 17.10.2013 03:23 # 0
f1 (изменившийся мир) == (f1 . физика) (старый мир)
Ну так преобразований происходит много и одновременно какой из становиться новый, какие в мусорку?
> Можно считать, что положение Земли r - это функция f от положения Солнца, которое - функция F от положения Земли.
Мне кажется это пример хреновой аналитики
Вводим оба два тела.
let SunPosition, EarthPosition = RecalculatePositon Sun Earth Time
>>> которая заменит рекурсию на её отсутствие
>>чито я не поняль?
Я все равно не понял что значит заменить рекурсию на ее отсутствия. по - русски, пожалуйста
>"Другая функция сейчас выполняет свою работу."
Не факт. Мы могли просто запустить одну из многих функций. Остальные могут сейчас ничего не делать. А из функции проверить это все равно нельзя
1024-- 17.10.2013 05:53 # 0
Можно рассматривать только течение времени. Считать, что в каждый новый момент возникает новое состояние мира, которое зависит только от предыдущего состояния мира. Предыдущее (более старое состояние по времени) выбрасывать.
Исполнение программы привязывать к двум состояниям - когда программа начала исполняться и когда закончила. Кажется, что программа изменила мир, или породила новый, а на самом деле просто мир перешёл в новое состояние под действием некоторой чистой функции.
> Мне кажется это пример хреновой аналитики
Тогда я скажу, что http://govnokod.ru/13938#comment200367 - пример хреновой аналитики, поскольку там рекурсия выдута из того же пальца.
И я уже говорил про свой аналог RecalculatePositon - это функция "физика".
> Я все равно не понял, что значит заменить рекурсию на ее отсутствие. по-русски, пожалуйста
"подогнать функцию, которая заменит рекурсию на её отсутствие" -> найти такую новую функцию, которая не будет рекурсивной в отличие от старой - рекурсивной и потому плохой.
Т.е. от F(f(F(f(... перейти к RecalculatePositon; от факториала перейти к формуле Стирлинга и т.п.
> Остальные могут сейчас ничего не делать. А из функции проверить это все равно нельзя
Получив мир на вход, можно считать из памяти нужного компьютера данные, относящиеся к нужной функции и сказать, на какой стадии исполнения находится функция.
Если лень просчитывать, в каждый новый момент можно читать новое состояние мира и смотреть, что делает интересующая нас функция.
kegdan 17.10.2013 06:01 # 0
Исполнение программы привязывать к двум состояниям - когда программа начала исполняться и когда закончила. Кажется, что программа изменила мир, или породила новый, а на самом деле просто мир перешёл в новое состояние под действием некоторой чистой функции.
это совершенно другая ситуация
>Получив мир на вход, можно считать из памяти нужного компьютера данные, относящиеся к нужной функции и сказать, на какой стадии исполнения находится функция.
не в функциональном программировании
1024-- 17.10.2013 06:10 # 0
в функциональном программировании кто-то запрещает читать аргументы функции? повесить его.
А читать в какой-то новый момент времени тоже можно, поскольку во-первых, это новое состояние появилось после применения чистой функции, а во-вторых, даже если бы оно так не появилось, никого бы не волновало, что мы делаем со своим аргументом внутри.
> это совершенно другая ситуация
Значит, эти две ситуации эквивалентны.
kegdan 17.10.2013 06:44 # 0
аргумент один. мир
>это новое состояние появилось после применения чистой функции
при последовательном запуске - пожалуйста. при паралельном - нет. Функция не меняет мир, повторяю, она новый создает. Менять и фунциональщина несовместимы
>> это совершенно другая ситуация
>Значит, эти две ситуации эквивалентны.
вот это логика
1024-- 17.10.2013 16:36 # 0
Мир меняется (или пересоздаётся - не важно) сам, две параллельно работающие функции получают свой конкретный результат только потому, что так совпало, поскольку миру было угодно измениться в такую сторону. Если бы функции запустили последовательно, их результат был бы другим, но они всё ещё чистые, поскольку до этого их аргумент (мир) был другим.
> Менять и фунциональщина несовместимы
Мы тут говорили о чистых функциях, локальные вкрапления императивности и присваивания не всегда нарушают чистоту.
Иначе бы теорема Борманда об императивных программах была сразу отвергнута нами, поскольку в императивных программах меняют много, люто и бешено.
>>> это совершенно другая ситуация
>> Значит, эти две ситуации эквивалентны.
> вот это логика
Ну а какая была ситуация "та", которая не другая? По-моему, у нас по-прежнему есть мир и есть запущенные программы. Ни про что другое я не говорил.
Рекурсивное описание притяжения Солнца и Земли эквивалентно описанию через RecalculatePositon, эквивалентно гигантскому набору уравнений, описывающему каждую молекулу и их взаимодействие.
Аналогично, рекурсивная теория Кегдана эквивалентна аксиоме о стадийных переходах мира.
kegdan 17.10.2013 16:51 # 0
Важно. Очень важно
>две параллельно работающие функции получают свой конкретный результат только потому, что так совпало, поскольку миру было угодно измениться в такую сторону.
Иисус его изменил что ли?)
> Если бы функции запустили последовательно, их результат был бы другим, но они всё ещё чистые, поскольку до этого их аргумент (мир) был другим.
Давайте встанем в круг. Видение задачи изложите
>локальные вкрапления императивности и присваивания не всегда нарушают чистоту.
Как и черный цвет кожи не мешает быть арийцем
> Иначе бы теорема Борманда об императивных программах была сразу отвергнута нами, поскольку в императивных программах меняют много, люто и бешено.
Ля теорема? Приведите
>Ну а какая была ситуация "та", которая не другая? По-моему, у нас по-прежнему есть мир и есть запущенные программы. Ни про что другое я не говорил.
Рекурсивное описание притяжения Солнца и Земли эквивалентно описанию через RecalculatePositon, эквивалентно гигантскому набору уравнений, описывающему каждую молекулу и их взаимодействие.
где то в этом месте младенец Иисус плачет
Повторяю - давайте встанем в круг
Хотя если честно мне надоело. Но из принципа могу продолжить
1024-- 17.10.2013 17:20 # 0
>Важно. Очень важно
Нельзя различить изменение мира и его пересоздание. Потому и важность сомнительна.
(Если поверить в независимые итерации мира, всё становится проще.)
> Иисус его изменил что ли?)
Мир изменился сам, его изменил Иисус, или мир изменился под действием 100500 компьютеров, вычисляющих функции - эквивалентные объяснения.
Мир был одним, а стал другим. Потому, что был в одном состоянии, а перешёл в другое.
> Давайте встанем в круг. Видение задачи изложите
> Ля теорема? Приведите
Теорема: "Императивная программа принимает на вход мир, и возвращает его измененным. Поэтому она функционально чиста."
Наша задача - обсудить теорему. Есть мир, есть функции, которые исполняются где-то и магическим образом получают мир в качестве аргумента, функции возвращают какой-то новый или изменённый мир.
>Как и черный цвет кожи не мешает быть арийцем
Эта функция - не чистая? Почему?
> где то в этом месте младенец Иисус плачет
Почему же плачет? Мы строим рекурсивные формулы описания явления, основываясь на научных фактах. Эти формулы полностью описывают явление.
Далее мы строим другие формулы, которые тоже основываются на научных фактах и тоже полностью описывают явление. Поскольку каждый набор формул полностью описывает явление, можно считать эти наборы эквивалентными, если наука - не чушь.
> Хотя если честно мне надоело. Но из принципа могу продолжить
И мне надоело. Но в споре рождаются истина и лулзы.
Stertor 17.10.2013 17:25 # 0
kegdan 17.10.2013 20:16 # 0
для опровержения достаточно привести программу, которая при одинаковом входе предоставляет разный выход. В этом контексте даже банальный вывод времени не чисто функционален
>Эта функция - не чистая? Почему?
function cube(x){
var y = 1;
for(var i=0; i<3; ++i) y *= x;
return y;
}
зависит от контекста. Чистая, если Y на каждом шаге скрывает предыдущее значение, а не изменяет его
bormand 17.10.2013 21:24 # 0
Сайд-эффектов у этой функции нет, результат зависит только от аргумент x. Значит эта функция чиста. А то, что она внутри себя y и i меняет - это никого не волнует. Ибо чистота определяется интерфейсом, а не реализацией.
kegdan 17.10.2013 21:39 # 0
bormand 17.10.2013 21:46 # 0
Ну да. У меня и на сишке очень многие функции чистые. Просто потому что так удобней поддерживать/тестировать :)
kegdan 17.10.2013 21:55 # 0
Это первое что подкупает в функциональщине)
Ну и распараллеливание без лишней мороки)
Сейчас большенство языков позволяют писать функциональных код. Начал изучать фунциональшину и удивился сколько из этого я уже использовал в императивных языках
1024-- 18.10.2013 02:09 # 0
На компьютере идут часы, откуда программа берёт время для вывода. Этого аргумента достаточно для функциональной чистоты, даже мир передавать не надо.
Я думаю, искать антипример, который удовлетворит всех, надо в области квантовой физики. Предлагать какой-нибудь источник случайных чисел.
В этом случае оппонентам надо будет как минимум знать квантовую физику (что значительно снижает их количество), а единственный аргумент "учёные просто не осознали физику процесса, потому назвали его случайным" ересью попахивает.
bormand 18.10.2013 05:57 # 0
Времени нет ;) Есть только причинно-следственные связи между событиями.
kegdan 18.10.2013 06:29 # 0
1024-- 18.10.2013 11:37 # 0
> Вот человек, который меня понимает) Точнее - мою проблему)
Надо было меньше на ГК сидеть :)
crastinus 17.10.2013 10:00 # 0
kegdan 17.10.2013 12:10 # 0
crastinus 17.10.2013 14:11 # +1
bormand 17.10.2013 12:59 # 0
kegdan 17.10.2013 13:50 # 0
kegdan 17.10.2013 13:56 # 0
Stertor 17.10.2013 14:08 # 0
с уважением, Ваш кэп
crastinus 17.10.2013 14:18 # +2
Через 10 это будет гоатсе. Через 20 это будет компилятор, питух и строка существующая в разных измерениях и представляющая различные состояния одного и того же кванта, как пацаны выше обсуждали.
Stertor 17.10.2013 14:28 # −3
Мигающее, с красным анусом.
1024-- 17.10.2013 16:38 # 0
AlexanderC 14.11.2013 16:32 # 0
$radius = func()[$n]; // PHP 5.4<