在什么情况下,循环结构需要由 Red 解释器进行评估?哪些循环结构没有?
更新(2015 年 4 月 20 日):
下面是我编写的一个小程序,用于向一些学生演示该语言。其中两个函数 'list 和 'find 中有 foreach 循环。但是 foreach 循环不会运行,除非它们被包裹在一个 do 块中。这种情况尤其是引发原始问题的原因,因为没有间接指定 foreach 循环的主体。
模型.red
Red [
Title: "Model"
Author: "Thomas Royko"
Version: 0.0.1
]
entry!: make object! [
name: ""
quantity: 0
notes: ""
display: does [
print ["-- " name]
print ["-- " quantity]
print ["-- " notes newline]
]
]
enter: func [
entries value
/local quantity notes
] [
qt: load ask "Enter quantity: "
nt: ask "Enter notes: "
append entries make entry! copy [
name: value
quantity: qt
notes: nt
]
print ""
]
find: func [
entries value
/local found entry
] [
found: false
do [
foreach entry entries [
if entry/name = value [
entry/display
found: true
break
]
]
]
if not found [
print ["** No entry with code" value newline]
]
]
list: func [
entries
] [
do [
foreach entry entries [
entry/display
]
]
]
finish: func [
entries
] [
save %inventory.db entries
quit
]
控制台.red
Red [
Title: "Console"
Author: "Thomas Royko"
Version: 0.0.1
]
#include %Bindings.red
#include %Model.red
entries: either exists? %inventory.db [
reduce load %inventory.db
] [
copy []
]
rule: [
(value: "")
1 [
["e" space copy value to end (enter entries value)] |
["f" space copy value to end (find entries value)] |
["l" to end (list entries)] |
["q" to end (finish entries)] |
[(print ["** Code not recognized" newline])]
]
]
forever [
parse ask "Command: " rule
]