nptclのブログ

Common Lisp処理系nptの開発メモです。https://github.com/nptcl/npt

2020-10-01から1ヶ月間の記事一覧

バイナリストリームの実装

npt

nptでstring-streamのbyteバージョンを作りました。 Common Lispでは、文字列をストリームに対応させた input-stream, output-streamというものが存在しますが、 characterではなく(unsigned-byte 8)に対応したという話です。 あらかじめ言っておくと、npt以…

Common Lispのソースで日本語を使う

あまり考えたことが無かったのですけど、 Unicodeに対応している処理系だと、 symbolに日本語が使えます。 次のコードを例に挙げます。 (defun 何回か乗算する (回数 値) (let ((答え 1)) (dotimes (無視 回数 答え) (setq 答え (* 答え 値))))) (何回か乗算…

prompt-forを完成させる

前回の投稿で登場したprompt-forに restartをつけて豪華にしてみましょう。 prompt-for関数はこんな感じで紹介しました。 (defun prompt-for (type prompt &optional (stream *query-io*)) (finish-output stream) (format stream "~&~A" prompt) (finish-ou…

restartを始めよう

restartとは何か? ずっとよく分かっていませんでした。 でもCommon Lispを作って行けばおのずと理解できると思って、 一通り作っても依然としてrestartが理解できませんでした。 invoke-restartもrestart-bindもC言語で作ったのに いまだに理解できないとは…

lambda式で関数生成しない場合を考える

最近知ったのですが、lambda式はクロージャーが値を捕捉していない場合は 実行するたびにいちいち関数生成なんてしないで、 グローバルの関数を返却すればいいんだそうです。 どういうことかというと、例えば次の関数を考えてみます。 (defun aaa () (lambda…