Ответ 1
Цитата от Алана Перлиса Эпиграмы по программированию, которая была опубликована в 1982 году.
Смысл этой цитаты хорошо воплощен в Lisp, где есть множество функций, которые действуют и специфически относятся к спискам, и вы могли бы выполнить много просто со списками и набором функций, которые работают в списках, что делает их намного более мощными, чем любая целенаправленная структура данных.
Lua, как еще один пример использует таблицы для моделирования классов. Зачем использовать таблицу для создания объектов вместо создания классов уровня языка и объектов, таких как объектно-ориентированные языки? Поскольку ваш объект теперь является таблицей, вы можете использовать любое количество функций, определенных для таблиц на вашем объекте, бесплатно! Тем не менее, нам не пришлось загромождать язык синтаксисом класса и нужно переопределять функции из таблицы, которые мы хотим для нашего класса.
То, что сказал Перлис, определенно является выдающимся способом мышления в Lisp и функциональном программировании. Эти 100 функций в вашей одной структуре данных могут быть скомбинированы множеством уникальных способов, поскольку все они работают с одной и той же структурой данных, но вы также не можете смешивать 10 функций с 10 структурами данных, поскольку они были определены только для работы над своей конкретной структурой данных.
Более современная и более простая вариация этого - это мышление с точки зрения абстракций. Если бы мы были кодирования на Java, вы бы предпочли написать 100 функций в интерфейсе List или один и тот же набор из десяти функций, один раз для ArrayList, один раз для LinkedList, один раз для....