169 похожих чатов

Привет. Считается ли хотя бы одна из этих функций "чистой"? Они

ведь никак не меняют окружающее их состояние, но при этом результат их выполнения будет каждый раз разный.

Это не Хаскель, а Go, но я подумал, что вы тут в этом разбираетесь лучше.

15 ответов

7 просмотров

ну что, хаскелисты, наведете душноты?

Наверное, кто-то спросит, а что вообще такое "чистая функция" (в Go)?

Первая функция недетерминированная, свойство ссылочной прозрачности не соблюдается, поэтому функция не является чистой

(ну, там производится вызов time.Now(). думаю, в Haskell без грязных хаков из чистой функции получить текущее время нельзя)

synalice- Автор вопроса
ㅤ Атеист
Наверное, кто-то спросит, а что вообще такое "чист...

Если без сложных формулировок, мне кажется, что что-то, что не меняет окружающее состояние и всегда при выполнении выдаёт на один и тот же вход один и тот же выход. А такое, в общем-то, в любом языке провернуть можно.

synalice
Если без сложных формулировок, мне кажется, что чт...

> Если без сложных формулировок, мне кажется, что что-то, что не меняет окружающее состояние и всегда при выполнении выдаёт на один и тот же вход один и тот же выход. исходя из этой формулировки — нет, потому что time.Now() будет возвращать разное значение (выход разный), хотя входные данные одинаковые

нет

ㅤ Атеист
(ну, там производится вызов time.Now(). думаю, в H...

правильно думаете. потому что вы не хотите работать с чистой функцией, зависящей от текущего времени. если вычисление зависит от времени, то это уже процедура, и вы захотите работать с таким вычислением именно как с процедурой

Ни одна. Что в первой, что во второй, r переданый в функцию, после её вызова будет изменён. Первая ещё и .Now() вызывает, которая не является чистой, потому что каждый раз возвращает разный результат.

Ссылочная прозрачность подразумевает, что любой вызов функции с заранее известным аргументом можно заменить на результат вызова раз и навсегда и смысл программы при этом не поменяется. Ни первую, ни вторую функции заменить нельзя. Первая не деретминирована, замена второй перестанет менять внешнее состояние

Вот "каждый раз возвращает разный результат" - враки же? Не так определение даете или натягиваете сову на глобус? Func a b = a+b чистая ?

Похожие вопросы

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
How to create an OS in C? what to study?
Linus
18
а как бы вылезти из ИО, что то типа IO -> Ether или в какую сторону смотреть ? что то туплю
Fedor
9
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
Карта сайта