Как lisp'ы, предпочитающие first и rest машине и cdr, приближаются к таким комбинациям, как cdaddr?

Один из больших расколов в сообществе Лиспа заключается в том, должны ли мы иметь car и cdr или first и rest. Одним из преимуществ традиционных car и cdr является то, что мы можем комбинировать их для создания произносимых функций, таких как cdaddr. Как Лиспы, которые не используют car и cdr, такие как Clojure, обычно образуют такие комбинации с first и rest? Есть ли консенсус?


person J. Mini    schedule 30.01.2021    source источник
comment
Извините, но я не вижу раскола, Clojure более поздний, поэтому здесь и там был небольшой исторический багаж, но это, однако, довольно незначительная деталь.   -  person coredump    schedule 31.01.2021
comment
Если есть lisps (я думаю, есть один), у которых есть только first и rest, они обращаются с conses как с вещами, из которых вы можете создавать структуры, которые не являются просто списками как чем-то второстепенным. Например, список — это список (first / rest) пар (car / cdr), а не список списков. (Это не делает все cdaaaaddaddr чем-то большим, чем исторический курьез.)   -  person    schedule 31.01.2021


Ответы (1)


Clojure, во всяком случае, просто не нуждается в caddaadr и его друзьях, потому что никто не строит структуры данных только из cons-ячеек. В языке есть комбинации любых двух first и next, называемые ffirst, fnext, nnext и nfirst, которые были добавлены очень рано, я полагаю, потому что предполагалось, что нам понадобится что-то вроде cadr, но я никогда не видел, чтобы они использовались в реальная жизнь. Вместо этого довольно часто используется деструктуризация.

В тех редких случаях, когда вам нужно глубоко проникнуть в структуру, построенную из вложенных последовательностей, деструктуризация часто по-прежнему создает читаемый код, но его запись от руки не представляет большого труда. Это также хороший намек на то, что, возможно, вам следует немного больше абстрагироваться, а не работать напрямую с таким количеством слоев примитивных комбинаторов.

person amalloy    schedule 30.01.2021
comment
@ J.Mini Все документы в основном такие же, как и (x (y it))` - и источник такой же (с некоторыми опциями для его встраивания) - person cfrick; 30.01.2021
comment
(а) Найти такую ​​документацию в Google действительно легко, и (б) она совсем не информативна. - person amalloy; 30.01.2021
comment
Также деструктурирование помогает проникнуть в суть вещей. - person cfrick; 30.01.2021
comment
@cfrick Хороший вопрос. Я предлагаю добавить это как ответ или отредактировать его в моем. - person amalloy; 30.01.2021