# memory

```sh
gleam add memory
```

为函数提供记忆，不支持递归缓存。

不支持javascript端

缓存会单独开启一个进程，如果在并发场景使用的话上一个函数调用会阻塞下一个。

原本并行调用的函数经过处理后变成了串行调用。

# Example

```gleam
import memory

pub fn fibonacci(i: Int) -> Int {
  case i < 0 {
    True -> todo
    False -> fibonacci_loop(0, 1, i)
  }
}

fn fibonacci_loop(a: Int, b: Int, i: Int) -> Int {
  case i {
    0 -> a
    1 -> b
    _ -> fibonacci_loop(b, a + b, i - 1)
  }
}

pub fn main() {
  let assert Ok(#(fibonacci, cache)) = memory.new(fibonacci, 10)

  fibonacci(4) // Ok(3)
  fibonacci(-2) // Error(CallPanic)
  fibonacci(3) // Ok(2)
  
  // 关闭缓存
  memory.closure(cache)

  fibonacci(5) // Error(CallClosed)
}
```

[![Package Version](https://img.shields.io/hexpm/v/memory)](https://hex.pm/packages/memory)
[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://memory.hexdocs.pm/)

## Development

```sh
gleam run   # Run the project
gleam test  # Run the tests
```
