---
breaks: false
tags: public-tech
---
# 対話型インタプリタのディレクティブ(`#...`)が便利
この記事は [OCaml Tips Advent Calendar 2022](https://adventar.org/calendars/8396) の15日目です。
`ocaml` コマンドや `utop` コマンドで起動できる対話型インタプリタでは
`#` から始まるディレクティブを使うことで、インタプリタに特殊な動作をさせる
ことができます。一覧は公式ドキュメントに[あります](https://v2.ocaml.org/manual/toplevel.html)が、
その中からいくつか便利なものを抜粋します。
- `#quit;;`
- インタプリタを終了させる[^quit]。
- `#help;;`
- ディレクティブの一覧を表示する。
- `#use "file-name";;`
- 指定した OCaml コードをインタプリタ内に読み込む。`dune utop` を使うまでもないときに便利。
- `#trace function-name;;`
- 指定した関数のトレース(呼び出し時の引数と戻り値)を出力する。(単純な)再帰関数の挙動を調べるのに便利で、例えば次のように使用する。
```
# let rec fib n = if n <= 1 then n else fib (n - 1) + fib (n - 2);;
val fib : int -> int = <fun>
# #trace fib;;
fib is now traced.
# fib 10;;
# #untrace fib;; (* トレースをやめる *)
```
[^quit]: ほかに `Ctrl+D` でも(EOF を発行して)終了させられます。
`utop` コマンドでのみ使えるディレクティブとしては、次のようなものがあります。
- `#require "package-name";;`
- 指定した(外部)パッケージを読み込む。
## 参考
- https://v2.ocaml.org/manual/toplevel.html