# `PtcRunner.Lisp.RuntimeCallable`
[🔗](https://github.com/andreasronge/ptc_runner/blob/main/lib/ptc_runner/lisp/runtime_callable.ex#L1)

Runtime callable for effectful qualified Lisp symbols.

Values such as `tool/search` are not plain functions: they need an evaluator
context to enforce limits, record traces, and call the configured runtime
executor. The persisted value only carries the qualified name. A short-lived
bound form is created at application time for higher-order runtime calls.

# `namespace`

```elixir
@type namespace() :: :tool
```

# `t`

```elixir
@type t() :: %PtcRunner.Lisp.RuntimeCallable{
  do_eval:
    (term(), PtcRunner.Lisp.Eval.Context.t() -&gt;
       {:ok, term(), PtcRunner.Lisp.Eval.Context.t()} | {:error, term()})
    | nil,
  eval_ctx: PtcRunner.Lisp.Eval.Context.t() | nil,
  name: atom(),
  namespace: namespace()
}
```

# `bind`

```elixir
@spec bind(t(), PtcRunner.Lisp.Eval.Context.t(), function()) :: t()
```

# `call`

```elixir
@spec call(t(), [term()]) :: term()
```

# `invoke`

```elixir
@spec invoke(t(), [term()], PtcRunner.Lisp.Eval.Context.t()) ::
  {:ok, term(), PtcRunner.Lisp.Eval.Context.t()} | {:error, term()}
```

# `label`

```elixir
@spec label(t()) :: String.t()
```

# `new`

```elixir
@spec new(namespace(), atom()) :: t()
```

# `serializable?`

```elixir
@spec serializable?(term()) :: boolean()
```

# `with_context`

```elixir
@spec with_context(PtcRunner.Lisp.Eval.Context.t(), function(), (-&gt; term())) :: term()
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
