Форум
Декларативное программирование
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, VoidEx, Вы писали: VE>Здравствуйте, samius, Вы писали: VE>>>foo :: Memory -> Ptr Int -> (Ptr Int, Memory) VE>>>Вторая - чистая. Вы не можете вычислить две foo, кроме как последовательно их соединив, и в этом смысле они referential transparent. VE>>>Для иллюстрации вы можете имплементировать Ptr как Int, а Memory как [Byte]. S>>Вот что в этом аспекте интересно, а почему в хаскеле любую функцию (например, конкретно map) не оформили в виде монады Memory a? VE>Потому же, почему и runST не надо оформлять в виде монады IO - referential transparency. VE>Потому же, почему и withTemporaryFile не нужно оформлять в виде монады IO - referential transparency. VE>Приведённая же функция foo с деструктивным присваиванием - в общем случае грязная. VE>Если от withTemporaryFile вам нужен именно её "побочный эффект" в виде ввода-вывода, язык должен позволять это указать, тогда это будет IO функция с вводом-выводом и выполняться будет каждый раз. VE>Что именно важно: результат функции (полученный как угодно) или её эффект - определять должен программист. VE>Ситуация чем-то напоминает мне вопрос о том, "исключительная ли ситуация, если openFile не смог открыть файл?" VE>Файл-то чёрт с ним, но вот parse и tryParse существуют прямо здесь и прямо сейчас. А ещё всякие foo и fooAsync. VE>Вакханалия какая-то. VE>>>Не закроем. Фукнция создаёт файл с уникальным доступом, пишет, читает, в конце возвращает результат. Результат будет неизменен, хоть 100 раз вызови. S>>А ввод? Детерминированность это не только гарантия повторения результата. Уже устал повторять. VE>А я устал повторять, что чтение памяти ничем не отличается от чтения файла, кроме того, что одно IO, потому что считается IO, а другое не IO, потому что таковым не считается. S>>Мне непонятно что значит "более детерминирован". Результат, завязанный на работу с файлом недетерминирован по определению. С памятью - зависит от остального. VE>По определению "недетерминирован, потому что считается таковым". Это не определение, а чушь какая-то. S>>>>Извини, у меня нет определения, которое бы дало совершенно четкие указания о том, считать ли нагрев VE>>>Именно. Поэтому это определение смысла не имеет. S>>А какой смысл в хаскеле делать вид что его функции чисты? Или он как-то с памятью по-особому работает? VE>Они referential trasparent. unsafePerformIO видел? Так вот она unsafe (как и unsafeCoerce) потому, что ответственность лежит на программисте. S>>referential transparency определяется через те же эффекты, что и чистота. Непонятно, что вдруг чистота куда-то девается, а referential transparency, определенная на той же детерминированности - нет. VE>Не через те же. VE>An expression is said to be referentially transparent if it can be replaced with its value without changing the behavior of a program (in other words, yielding a program that has the same effects and output on the same input). VE>Я настаиваю на том, что если вы считаете идентичными программы, одна из которых выделяет памяти до гигабайта, а другая до мегабайта (потому что в ней что-то там замемоизовали благодаря referential trasparent), то можно считать идентичными и те, одна из которых 3 раза создаёт использует с нуля временный файл, а другая лишь один (потому что можно работу с файлом мемоизовали). VE>Более того, я считаю, что важность эффекта определяется не википедией, а программистом. VE>Т.е. конкретно в данном примере я считаю, что первые две программы по эффектам отличаются сильнее, чем вторые две. VE>Кстати говоря, вы что, никогда не видели ситуации, как мемоизуют функции с побочными эффектами (в вашем определении)? Получается то же самое. Ну да, ну да, там же этого программист захотел. А в отношении withTemporaryFile мне запрещает этого хотеть википедия? S>>Оно по крайней мере допускает наличие чистых функций в хаскеле (кроме действий). Твои же определения - наоборот, говорят что лишь действия IO a чисты (ну и может быть еще что-то, что не оперирует санками). VE>Мои определения ничего такого не говорят. VE>>>Ты можешь считать достаточно чистой функцию вычисления суммы списка чисел. Можешь даже убедить в этом меня. Только не жалуйся, что для выполнения чистой функции не хватило памяти ([b]_|_[/b]). S>>Дык это нормально. Чистой функции никто не запрещает жрать память. Портить левую - нельзя. А жрать - сколько влезет. VE>И какую такую левую функцию портит withTemporaryFile, которой не хватило прав?
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …