我正在穿过一组嵌套块,并希望在找到我正在寻找的值时停止步行。
由于超出此问题范围的原因,我不能使用 PARSE 解决这个特定问题,也不能使用 FOREACH 作为循环器:
walk: func [series [block!] criteria [block!]][
use [value] compose/deep [
while [not tail? series][
value: pick series 1
either block? value [
walk value criteria
][
(to paren! criteria)
]
series: next series
]
]
]
如果我找到这个特定的值,我想打破。
walk [a [b c [d e] f] g] [if value = 'e [return value]]
; returns 'e
但是,我也想做不会爆发的操作:
walk [a [b c [d e] f] g] [
collect [if find [c e] value [keep value]]
]
; returns [c e]
想尝试解决包括 Red 在内的任何 Rebol 口味的问题。任何关于效率的想法(因为我使用块而不是函数)等也会受到欢迎。