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で参照できます。