Pull to refresh

Comments 24

Для обозначения списков будем использовать нотацию, похожую на Haskell: x:xs

При чем тут lisp?
Ну при всём :) Всё-таки, устоявшаяся нотация уже.
Казалось бы, при чём тут Haskell? А car/cdr не только в лиспе, если что.
При том, что в статье написано, что вдохновение пришло от него.
Ай, вот что за занудство. Уже и полиспоманствовать нельзя.
Не люблю лисп. У меня от него в глазах рябит. А вот хаскель прикольный.
Не люблю хаскелль. У меня от него в глазах рябит. А вот лисп прикольный.
head/tail не только в Haskell)
сar и cdr это тяжелое наследие лиспа, причем нифига не семантичное, в отличии от head и tail
c*r, чтобы были семантичны производные конструкции — caddr, cadar и т.п.
с head и tail такое будет неинтуитивно
А c*r интуитивно? С таким же успехом нынче можно назвать эти функции zxz и zyz. Будет удобно писать zxxyxxz.
При работе с любым языком программирования, какую-то часть информации так или иначе придётся тупо заучить.
А потом уже опираться на выученное.

В лиспе надо просто запомнить CAR, CDR, зато после запоминания это даёт возможность сжимать цепочку вызовов этих функций.
Где-то используется head/tail — это легче запомнить, зато возможности сжатия нет.
Ну вот я, например, привык к функциями ffirst, fnext, nfirst, nnext. Названия легко запомнить (не заучить), они обладают вполне очевидным смыслом. И Вы действительно считаете, что c*r лучше?

Но самое смешное, что я эти функции почти не использую. Ну просто не надо. А про всякие caaadr я просто молчу.

Вы не задумывались, что надобность в таких функциях явно не украшает язык?
Полезно посмотреть бы на зависимость съеденной памяти от длины списка из nil-ов.
Хотя бы на нескольких длинах: 1000, 10 000, 100 000, 1 000 000, 10 000 000.
Чем чёрт не шутит, представление структур данных функциями может оказаться практичным инструментом.
Оверхед по сравнению с массивом линейный, около 135 байт на объект (V8).
Раз уж в Haskell стиле, то не reduce, а foldl/foldr. А еще, для полноты картины, полезно поупражняться и реализовать map/filter через foldl.
Все-таки в подобных решениях есть какое-то изящество и простота, помогает учиться мыслить немного иначе :)
А здесь (тест) тоже немного, но зато с практическим смыслом — для работы с протоколом SLIME в (изначально) моём проекте swank-js. Чтобы браузером из Емакса рулить (причём когда-то мне удавалось эту штуку даже с IE7 подружить).
Я считаю что эта попытка достойна отдельного поста!!!
Sign up to leave a comment.

Articles