programa lenguaje funciones estructuras estructura cuál con arreglo array data-structures quotations

data structures - lenguaje - ¿Por qué es mejor tener 100 funciones para operar en una estructura de datos que 10 funciones en 10 estructuras de datos?



funciones con estructuras en c (2)

Estructura e Interpretación de Programas de Computación (SICP) responde a su pregunta de la siguiente manera:

Puede ver el contenido original de la versión en línea del libro aquí

EDITAR (incluido desde el comentario):

"En Pascal, la plétora de estructuras de datos declarables induce una especialización dentro de las funciones". La especialización es mala porque inhibe la "casualidad / creatividad", diría yo, con mis propias palabras.

En otras palabras, si las funciones son demasiado especiales, entonces no pueden reutilizarse de formas que no se conocían en el momento de la creación de la función.

Buen ejemplo es fold ( https://hackage.haskell.org/package/base-4.8.1.0/docs/Data-Foldable.html ) que es una estructura de datos agnóstica, función de orden superior general. Se puede usar en un árbol, por ejemplo

data Tree a = Empty | Leaf a | Node (Tree a) a (Tree a).

He visto esto citado en muchos lugares:

"Es mejor tener 100 funciones operando en una estructura de datos que 10 funciones en 10 estructuras de datos". -Alan Perlis

Pero nunca lo he visto explicar por qué esto debería ser cierto. ¿Es solo la idea de que debe tratar de derivar las otras 9 estructuras de datos de la primera para evitar duplicar los datos? Siento que me falta algo de contexto.


La cita es de Epigrams on Programming , de Alan Perlis, que se publicó en 1982.

El significado de esta cita se expresa bien en Lisp , donde existen multitud de funciones que operan y se ocupan específicamente de listas , y se puede lograr mucho solo con listas y la variedad de funciones que operan en las listas, lo que las hace mucho más poderosas. que cualquier estructura de datos de propósito único.

Lua , como otro ejemplo, usa tablas para simular clases . ¿Por qué utilizar una tabla para crear objetos en lugar de crear clases y objetos de nivel de lenguaje como los lenguajes orientados a objetos? Como su objeto es una tabla ahora, puede usar cualquier número de funciones definidas para las tablas de su objeto, ¡sin cargo! Mejor aún, no tuvimos que saturar el lenguaje con sintaxis específica de clase y tenemos que redefinir funciones de la tabla que queremos para nuestra clase.

Lo que Perlis dijo es definitivamente un modo prominente de pensamiento en Lisp y en la programación funcional en general. Esas 100 funciones en su única estructura de datos pueden componerse juntas de muchas maneras únicas, ya que todas operan en la misma estructura de datos, pero tampoco puede realmente mezclar las 10 funciones en 10 estructuras de datos, ya que solo se definieron para trabajar en su estructura de datos particular.

Una variación más moderna y simple de esto es pensar en términos de abstracciones . Si estuviéramos codificando en Java, preferiríamos escribir 100 funciones en la interfaz List , o el mismo conjunto de diez funciones, una para ArrayList, una para LinkedList, una para ...