Pregunta

Estructura e Interpretación de programas de ordenador (SICP) Sección 2.2.3 varias funciones se definen usando:

(accumulate cons nil 
  (filter pred
         (map op sequence)))

Dos ejemplos que hacen uso de esta opera en una lista de los números de Fibonacci, even-fibs y list-fib-squares.

funciones

El acumulan, filtra y mapa se definen en la sección 2.2 también. La parte que me está confundiendo es por eso que los autores incluyen la accumulate aquí. accumulate toma 3 parámetros:

  • una función binaria que debe aplicarse

  • Un valor inicial, que se utiliza como el parámetro más a la derecha a la función

  • Una lista a la que se aplica la función

Un ejemplo de aplicación se acumulan a una lista mediante la definición en el libro:

    (accumulate cons nil (list 1 2 3))
    => (cons 1 (cons 2 (cons 3 nil)))
    => (1 2 3)

Desde el tercer parámetro es una lista, (accumulate cons nil some-list) acaba de regresar some-list, y en este caso el resultado de (filter pred (map op sequence)) es una lista.

¿Hay una razón para ello uso de accumulate distinta de la coherencia con otras funciones de estructura similar en la sección?

¿Fue útil?

Solución

Estoy seguro de que esos dos usos de accumulate son meramente ilustrativos del hecho de que "CONSING elementos para construir una lista" puede ser entendido como un proceso acumulativo de la misma manera que "números de multiplicar para obtener un producto" o " números sumando para obtener una "lata total. Tiene razón de que la acumulación es efectivamente un no-op.

(Aparte:. Obsérvese que esto podría obviamente ser una operación más útil si la salida de filter y la entrada de accumulate no era una lista, por ejemplo, si se representa una secuencia generada con pereza)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top