Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.168] |
|
Страницы: (11) « Первая ... 9 10 [11] все ( Перейти к последнему сообщению ) |
Сообщ.
#151
,
|
|
|
Цитата D_KEY @ Да ваще, код поменялся до неузнаваемости:Но ты убери синтаксический сахар из кода и посмотри, каким образом эта зависимость выражается на самом деле. main = putStrLn "str1" >> putStrLn "str2" Добавлено Кстати в Erlang/Elixir нет мутабельных переменных, но полно функций с побочными эффектами. Значит таки можно писать императивно (по вашему определению) без мутабельных переменных? |
Сообщ.
#152
,
|
|
|
applegame,
main = myMain $ do myPutStrLn "first" myPutStrLn "second" myPutStrLn "third" third second first impl import Control.Applicative data MyCoolIO a = MCIO (IO a) instance Functor MyCoolIO where fmap f (MCIO xIO) = MCIO $ fmap f xIO instance Applicative MyCoolIO where pure = MCIO . pure (MCIO fIO) <*> (MCIO xIO) = MCIO $ fIO <*> xIO instance Monad MyCoolIO where return = pure (MCIO xIO) >>= f = MCIO $ xIO >>= \x -> (let (MCIO r) = f x in r) (MCIO xIO) >> (MCIO yIO) = MCIO $ yIO >>= \y -> (xIO >> return y) myPutStrLn :: String -> MyCoolIO () myPutStrLn s = MCIO $ putStrLn s myMain :: MyCoolIO () -> IO () myMain (MCIO io) = io — https://ideone.com/9nbY5V Давай, расскажи ещё про порядок в do-выражении. Добавлено Цитата applegame @ Значит таки можно писать императивно (по вашему определению) без мутабельных переменных? В нашем определении есть изменяемое состояние, а не «мутабельные переменные». Добавлено Не угадал. Добавлено Цитата applegame @ Откуда такой вывод? Почему все, если я говорил о хаскельном IO, в том числе и о монаде IO? Оттуда, что do-нотация работает с любой монадой, а не только монадой IO. В Хаскелле нет функций с побочными эффектами. Попробуй ещё раз поразмыслить над фразой «синтаксис != семантика». Пример использования do-нотации с «чистыми» (не-IO) монадами. Цитата applegame @ В чистой ФП-композиции порядок может быть любым, уже обсуждали и ты вроде согласился. Опять по кругу? По-моему, это ты согласился, что (foo . bar) и (bar . foo) — не одно и то же. Или ты так и не понял, что это значит? Цитата applegame @ Ага, а то что эти критерии коррелируют с порядком стейтментов в do-нотации - это просто совпадение? Не коррелируют. |
Сообщ.
#153
,
|
|
|
Цитата korvin @ А в этих примерах нет никакой возможности проверить в каком они выполняются порядке. Можно считать что в любом, в том числе и последовательно, пофиг.Пример использования do-нотации с «чистыми» (не-IO) монадами. Цитата korvin @ А что тут рассказывать? Меняем первую и вторую строчку местами:Давай, расскажи ещё про порядок в do-выражении. main = myMain $ do myPutStrLn "second" myPutStrLn "first" myPutStrLn "third" third first second А ведь они ваще Цитата korvin @ Не коррелируют. В общем зря ты мучался, выводил инструкции задом наперед. Давай теперь программу, которая фигачит инструкции в рандомном порядке. Правда функция генерации СЧ сама будет с побочными эффектами. Придется еще сложнее мудрить код. Впрочем, подозреваю, что это таки возможно. Я даже в чистом императивном коде на D или Nim могу провернуть подобную фигню Правда хз, что это докажет. Добавлено Ладно, плевать на монады, нотации, и прочую ересь. Надоело. Вот: Цитата applegame @ Опровергайте. Кстати в Erlang/Elixir нет мутабельных переменных, но полно функций с побочными эффектами. Значит таки можно писать императивно (по вашему определению) без мутабельных переменных? |
Сообщ.
#154
,
|
|
|
Цитата applegame @ И, ой! Как такое могло случиться? Результат тоже поменялся: Чудеса, монада не поменялась, а порядок поменялся. какой же ты, всё-таки, тупой. import Control.Applicative import Data.Time.Clock.POSIX (getPOSIXTime) data MyCoolIO a = MCIO (IO a) instance Functor MyCoolIO where fmap f (MCIO xIO) = MCIO $ fmap f xIO instance Applicative MyCoolIO where pure = MCIO . pure (MCIO fIO) <*> (MCIO xIO) = MCIO $ fIO <*> xIO instance Monad MyCoolIO where return = pure (MCIO xIO) >>= f = MCIO $ xIO >>= \x -> (let (MCIO r) = f x in r) (MCIO xIO) >> (MCIO yIO) = MCIO $ do now <- getPOSIXTime if even (round now) then xIO >> yIO else yIO >>= \y -> (xIO >> return y) myPutStrLn :: String -> MyCoolIO () myPutStrLn s = MCIO $ putStrLn s myMain :: MyCoolIO () -> IO () myMain (MCIO io) = io main = myMain $ do myPutStrLn "first" myPutStrLn "second" myPutStrLn "third" Добавлено Цитата applegame @ Опровергайте. Что опровергать? Ты даже не читаешь, что тебе пишут. Добавлено Цитата applegame @ Правда хз, что это докажет. Это доказывает, что ты 1) не читаешь, что тебе пишут 2) не пытаешься понять, что тебе пишут 3) не разбираешься в том, о чём пишешь 4) продолжаешь с завидным упорством игнорировать факты |
Сообщ.
#155
,
|
|
|
Цитата korvin @ Лентяй. second-то все время посередине. Все ещё зависит от порядка инструкций. какой же ты, всё-таки, тупой. Ты просто выкинь вообще результат do-нотации, и напечатай что попало. Вот это будет супер-доказательство твоей правоты: вообще ничего не будет коррелировать. Добавлено Цитата korvin @ Этот корвин порвался, несите другого. Это доказывает, что ты 1) не читаешь, что тебе пишут 2) не пытаешься понять, что тебе пишут 3) не разбираешься в том, о чём пишешь 4) продолжаешь с завидным упорством игнорировать факты |
Сообщ.
#156
,
|
|
|
applegame, ясно-понятно, ты таки достиг уровня Серёжи. Не планируешь в Израиль переехать?
|
Сообщ.
#157
,
|
|
|
Вот сам написал:
myMain x = print "VICTORY!" main = myMain $ do print "first" print "second" print "third" Добавлено Цитата korvin @ Нет, я же за Палестину. applegame, ясно-понятно, ты таки достиг уровня Серёжи. Не планируешь в Израиль переехать? |
Сообщ.
#158
,
|
|
|
Цитата applegame @ Вообще никакой корреляции между порядком и вообще инструкциями и результатом Молодец. И нахрена ты три страницы утверждал обратное? Добавлено Цитата applegame @ Нет, я же за Палестину. Тоже неплохой вариант. Даже лучше. |
Сообщ.
#159
,
|
|
|
Цитата korvin @ Да вот, теперь сам удивляюсь. Молодец. И нахрена ты три страницы утверждал обратное? Добавлено Тут еще удивительное открытие. Оказывается в императивных языках с побочными эффектами, от порядка инструкций тоже ничего не зависит. Как так?! https://glot.io/snippets/fy5bbbksrd import std.stdio; alias myMain = x => writeln("VICTORY!!!"); void main() { myMain({ writeln("first"); writeln("second"); writeln("third"); }); } |
Сообщ.
#160
,
|
|
|
Цитата applegame @ Оказывается в императивных языках с побочными эффектами, от порядка инструкций тоже ничего не зависит. Т.е. твоё «определение», что ИП — это порядок инструкций и ничего более, оказалось несостоятельным. Поздравляю. |
Сообщ.
#161
,
|
|
|
Цитата korvin @ Хуже. Твое тоже оказалось несостоятельным. Так что и себя поздравь. И D_KEY-я не забудь. Да вообще всех поздравь, ничьё определение не оказалось состоятельным. Программирования не существует, особенно если инструкции закомментировать. ПА-БЕ-ДААА! Т.е. твоё «определение», что ИП — это порядок инструкций и ничего более, оказалось несостоятельным. Поздравляю. |
Сообщ.
#162
,
|
|
|
Цитата applegame @ Хуже. Твое тоже оказалось несостоятельным. Так что и себя поздравь. И D_KEY-я не забудь. Да вообще всех поздравь, ничьё определение не оказалось состоятельным. Программирования не существует, особенно если инструкции закомментировать. ПА-БЕ-ДААА! |
Сообщ.
#163
,
|
|
|
Я правильно понимаю, что ваш спор сводится к тому, считать ли набор локальных переменных у функции состоянием, или нет? Если это состояние, то в определении ИП по applegame состояние никуда не девается, просто оно автоматически следует из
последовательности инструкций, и, следовательно, не обязательно в явном виде подчёркивать его наличие. А если это не состояние, то тогда тем более нет никаких проблем с его определением. |
Сообщ.
#164
,
|
|
|
Цитата applegame @ Так не нужно. Вот если бы можно было так: auto z = []{ return y() + 2; }; auto y = []{ return x() + 1; }; auto x = []{ return 3; }; Следующий наводящий вопрос. А так? std::function<int()> x, y, z; z = []{ return y() + 2; }; y = []{ return x() + 1; }; x = []{ return 3; }; Добавлено Не очень легко. Но в целом запросто. Добавлено Цитата applegame @ Пффф. Даже язык такой есть. Давай теперь программу, которая фигачит инструкции в рандомном порядке. Добавлено Нет, OpenGL. Они пытаются определить чёткие грани между двумя парадигмами, не понимая, что их нет. |