темы. Я настолько привык к джс, что мозг с трудом признал таки, что f и \x -> f x - это равные функции.
Потому что в джс функция и лямбда над исходной функцией - это 2 разных объекта / сущности.
Где с этим столкнулся? Когда пытался написать моноид для стрелки.
почему 2 разных? они обе имеют тип function
Потому что движок в джс создаст 2 разных объекта функциональных в 2 разных местах памяти. И сам джс будет говорить , что при их сравнении будет false
да, и в Хаскеле так же, и в любом реальном языке программирования. потому что в общем случае нельзя проверить 2 произвольные функции на равенство
но в мозге это можно доказать. мозг-то умнее, чем JS
так что нельзя программно утверждать о равенстве этих функций. разве что квикчеком протестировать. это проблема не в JS, а в подходе к понятию "равенство функций"
у них еще и семантика разная
Кстати в схеме (с которой некоторые идеи жс украл) синтаксис (define (foo a b) ...) это то же что и (define foo (lambda (a b) ...)). Но вот равенство функций как выше написали это дело сложное чисто философски, в спеке схемы пишут что оно не определено и implementation defined
Обсуждают сегодня