---
name: memoize
kind: function
lang: go
domain: core
version: "1.0.0"
purity: pure
signature: "func Memoize[K comparable, V any](fn func(K) V) func(K) V"
description: "Cachea resultados de una funcion pura. Retorna una nueva funcion que almacena en un mapa interno los resultados ya calculados, evitando recalculos para la misma clave."
tags: [cache, memoize, functional, generic]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: []
params:
  - name: fn
    desc: "función pura a memorizar: K -> V; los resultados se cachean por clave"
output: "función memoizada que retorna resultados en caché para claves ya calculadas; no es thread-safe"
tested: false
tests: []
test_file_path: ""
file_path: "functions/core/memoize.go"
---

## Ejemplo

```go
fib := Memoize(func(n int) int {
    if n <= 1 {
        return n
    }
    // nota: para recursion memoizada se necesita declarar la variable antes
    return n // simplificado
})
doubled := Memoize(func(x int) int { return x * 2 })
doubled(5) // calcula: 10
doubled(5) // cache hit: 10
```

## Notas

Funcion pura generica (referencialmente transparente). El cache interno es un map[K]V sin sincronizacion, por lo que la funcion retornada es segura solo para uso en una sola goroutine. K debe ser comparable para usarse como clave del mapa.
