REBOL [
Title: "Walk VID"
Date: 19-Jun-2011
Author: "Christopher Ross-Gill"
]
walk-vid: use [level][
level: 0
func [[catch] face [object!] callback [function!] /deep][
unless in face 'pane [throw make error! "Not a face"]
level: either deep [level + 1][bind second :callback 'level 0]
do [callback face]
case [
block? face/pane [
foreach pane face/pane [walk-vid/deep pane :callback]
]
object? face/pane [
walk-vid/deep face/pane :callback
]
]
level: either deep [level - 1][0]
face
]
]