前回、nyagos のコマンドラインに echo $(+ 1 2 (* 3 4))
といった形で、Lisp コードを埋め込めるようにしたわけだが、電卓用途に使う時 echo $
を打つのさえ面倒くさくなった。
コマンドラインが (
で始まっている場合は
という形ににしてみた。
gmnlisp_.lua
if not nyagos then print("This is a script for nyagos not lua.exe") os.exit() end share.org_filter_for_gmnlisp = nyagos.filter nyagos.filter = function(cmdline) if string.sub(cmdline,1,1) == '(' then cmdline = string.gsub(cmdline,'"','\\"') cmdline = string.format('gmnlisp -e "(format t \\\"~a\\\" %s)"', cmdline) nyagos.exec(cmdline) print() return "" end cmdline = string.gsub(cmdline,'$%b()', function(code) code = string.sub(code,2) code = string.gsub(code,'"','\\"') code = string.format('gmnlisp -e "(format t \\\"~a\\\" %s)"', code) return nyagos.eval(code) end) if share.org_filter_for_gmnlisp then local cmdline_ = share.org_filter_for_gmnlisp(cmdline) if cmdline_ then cmdline = cmdline_ end end return cmdline end
nyagos を再起動して読み込む (読み込み方は前回分参照)
$ (+ 1 2 (* 3 4)) 15 $ (cons 1 2) (1 . 2) $
よしよし