read
(read &optional stream)
単一の S 式を読み取って解析します。引数がない場合は標準入力から読み取ります。open または with-open-file で開いたストリームを与えると、そのストリームから読み取ります。空行とコメントのみの行はスキップされ、データムは 1 行に収まる必要があり、EOF では nil を返します。コンパイル系バックエンドが出力するランタイムリーダーはフロントエンドと同等の構文を読みます。リスト(ドット対を含む)、'、#'、文字列、シンボル、数値(比と #x/#o/#b の基数付き整数を含む)、#\ 文字リテラル、#(...)/#nA(...) 配列、#* ビットベクタ、#f(/#d( packed 浮動小数点配列、#S(...) 構造体リテラル、#|...|# ブロックコメントです。#.、#+/#-、#n=/#n# は read 時に評価器やフィーチャー集合を必要とするため、コンパイルされたリーダーは捕捉可能なエラーをシグナルします(インタプリタはこれらも解決します。標準に従い、*read-eval* を nil に束縛するとインタプリタでも #. はシグナルします)。WASM リーダーの数値はより狭い範囲です(64 ビット整数、指数表記のない 10 進浮動小数点数、固定のエラーメッセージ)— コンパイルされた read/load の制限を参照してください。
(print (read))
標準入力から (+ 1 2) という行を読み取ると、リスト (+ 1 2) に解析され、print がそれをそのまま出力します。入力の終端では read は nil を返します。実行時に読まれるシンボルはリーダーの大文字化に従い、ユーザーのシンボルも標準の名前も同様に大文字化されます(畳み込みはありません)。これはすべてのバックエンドで同一です。