Re[99]: Мнение: объектно-ориентированное программирование —
От: AlexRK  
Дата: 12.11.19 06:46
Оценка:
Здравствуйте, samius, Вы писали:

S>>>Погодите, погодите. А что, интуитивно очевидный способ уже не работает?

S>>>Делаем очень просто:
S>>>1. Функция является грязной, если она принимает IO среди своих аргументов.
S>>>2. Функция, вызывающая грязную, является грязной.
S>>>Всё. Все остальные функции — грязные.

ARK>>Абсолютно верный, правильный и единственно разумный способ. Увы, мой собеседник не принимает такого подхода, поэтому я играю на его поле и пытаюсь продемонстрировать, что его подход является бессмысленным.


S>Я абсолютно согласен с таким подходом. Если функция обращается к миру — она грязная.


Не "если функция обращается к миру", а "если функция принимает IO среди своих аргументов" (из чего следует аксиоматически заданная грязь для встроенных функций). Ты согласен с этим подходом? По-моему, ты все это время настаиваешь на подходе "функция грязная, если она _реально_ выполняет ввод-вывод".

S>Но тут есть нюанс. putStr не обращается к миру, следовательно она сама не грязная в соответствии с таким подходом. Обращается к миру функция, возвращенная putStr-ом в качестве результата. Она — грязная.


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

Если бы ты мог в коде на хаскеле "оторвать" саму putStr от функции, которую она возвращает (вызвать putStr, но не вызывать то, что она возвращает, или вызвать этот action потом и из другого места), то разница с С была бы. Но ты не можешь.

S>Что же в этом бессмысленного?


Бессмысленно не это, а такое определение чистоты, которое невозможно проверить ("чистая функция не делает ввода-вывода"). Точнее, не оно само по себе бессмысленно, а бессмысленно его прямое применение в языках программирования.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.