Само-собой какой-нибудь 3DsMax или AutoCAD вряд-ли в скором времени уйдут в веб и облака
AutoCAD имел свою облачную версию аж в 2010-ом. Урезанную, естественно, но достаточно практичную и скромную по отношению к средним ресурсам того времени. В настоящем времени, «в облаках» популярна почти вся инженерная линия Autodesk.
С 3DsMax-ом и ему подобными ситуация немного другая. В отличие от инженерии, визуализация тут является не опцией, а конечным продуктом, таким, что десктопному приложению зачастую не осилить. Рендер-фермы же — серьезные затраты. То есть, проблема тут далеко не в реализации.
Говорить «сначала выполни все, что левее меня» — тоже ошибка, потому что приоритет «работает» в обоих направлениях:
Совершенно верно. Это был лишь пример другого «искажения» противоречащего с первым.
в книгах пишут «сначала правее» подразумевая, что оператор $ — правоассоциативный.
Отличие между оператором $ и обычным применением, конечно, не только в приоритете, но и в ассоциативности (в предыдущем комментарии я поторопился и пропустил это). Однако ассоциативность оператора с самым низким приоритетом может быть задействована, после того, как всё остальное в выражении приведено в нормальную форму. В этом и заключается «искажение»: вербальное подчеркивание именно ассоциативности по неволе затмевает важность приоритета вычисления. А это, в свою очередь, приводит к недопониманию в процессе изучения, о чем я собственно и написал.
Есть еще замечательный оператор $ который как бы говорит хаскеллю: «сначала выполни все, что правее меня, а результат подставь на мое место».
По моему такое определение отражает суть оператора $ с искажением. В противном случае, в выражении
take 3 . reverse . filter even $ [1..10]
логично было бы убрать $, однако компилятор в таком случае выдаст ошибку:
take 3 . reverse . filter even [1..10]
-- take 3 . reverse . [2,4,6,8,10]
-- ошибка: применение композиции (.) к списку
Получается что оператор $ в данном примере говорит хаскеллю: «сначала выполни все, что левее меня, а результат подставь на мое место». А версия со скобками выглядит так:
(take 3 . reverse . filter even) [1..10]
Даже в одной из книг, помню, было определение типа «сначала выполни все что справа, потом примени». Со временем появились сомнение, и выяснилось, что '$' такой же оператор применения как ' ' (пробел), только первый имеет самый низкий приоритет — 0, а второй — самый высокий — 10.
К слову, оператор композиции (.) имеет приоритет 9, что объясняет ошибку компилятора в примере выше.
Спасибо за статью, с удовольствием прочитаю продолжение!
AutoCAD имел свою облачную версию аж в 2010-ом. Урезанную, естественно, но достаточно практичную и скромную по отношению к средним ресурсам того времени. В настоящем времени, «в облаках» популярна почти вся инженерная линия Autodesk.
С 3DsMax-ом и ему подобными ситуация немного другая. В отличие от инженерии, визуализация тут является не опцией, а конечным продуктом, таким, что десктопному приложению зачастую не осилить. Рендер-фермы же — серьезные затраты. То есть, проблема тут далеко не в реализации.
Отличие между оператором $ и обычным применением, конечно, не только в приоритете, но и в ассоциативности (в предыдущем комментарии я поторопился и пропустил это). Однако ассоциативность оператора с самым низким приоритетом может быть задействована, после того, как всё остальное в выражении приведено в нормальную форму. В этом и заключается «искажение»: вербальное подчеркивание именно ассоциативности по неволе затмевает важность приоритета вычисления. А это, в свою очередь, приводит к недопониманию в процессе изучения, о чем я собственно и написал.
По моему такое определение отражает суть оператора $ с искажением. В противном случае, в выражении
логично было бы убрать $, однако компилятор в таком случае выдаст ошибку:
Получается что оператор $ в данном примере говорит хаскеллю: «сначала выполни все, что левее меня, а результат подставь на мое место». А версия со скобками выглядит так:
Даже в одной из книг, помню, было определение типа «сначала выполни все что справа, потом примени». Со временем появились сомнение, и выяснилось, что '$' такой же оператор применения как ' ' (пробел), только первый имеет самый низкий приоритет — 0, а второй — самый высокий — 10.
К слову, оператор композиции (.) имеет приоритет 9, что объясняет ошибку компилятора в примере выше.
Спасибо за статью, с удовольствием прочитаю продолжение!