Rebolで書くRebolコンソール2
REBOL [] forever [ error? error: catch [ if error? error: try [ set/any 'it do ask system/console/prompt if value? 'it [prin system/console/result probe :it] ][ throw error ] ] if error? error [ error: disarm :error use [type msg][ type: error/type msg: get in get in system/error type error/id print [ "**" uppercase/part to-string type 1 "Error:" either string? msg [msg][reduce bind msg in error 'arg1] ] print ["**" "Near:" error/near] ] ] ]
これでなんとか。複数行入力ができなかったりと、足りない面はいろいろありますが。
doは、ブロックを渡すとスコープ云々が関わってきますが、文字列を渡すと、その場で書いたように実行してくれるみたいです。
またエラーが変数に格納できない点は、式の中でなら可能な様子。printの結果が変数に格納できない件は、set/anyなら可能でした。エラーメッセージはsystem/errorが持っていました。bindの使い方も大体覚えた。"/:"の両辺とも式が書けずget inになるのは辛い。
副作用として、先の式の結果をitで、先のエラー情報をerrorで参照できます。