REPL
GUI版のmoshを作るに当たって、REPLを自前で実装する必要が出てきた。
REPLを実現するためにはread-eval-printの各手続きを実現する必要がある。
幸い、moshには備え付けのREPLがあるのでそれと同じ事をすれば良い。
(import (mosh) (rnrs)) (define eval-r6rs (symbol-value 'eval-r6rs)) (define (read-) (get-line (current-input-port))) (define (eval- text) (eval-r6rs (call-with-port (open-string-input-port text) read))) (define (print- obj) (display obj)(newline)) (define (repl) (display "> ") (print- (eval- (read-))) (repl)) (repl)
このスクリプトは例外を処理していないので、間違ったコードを入力すると直ぐに終了してしまう。
symbol-valueは(mosh)にある、mosh内部のシンボルにアクセスするための手続き。