Unter welchen Umständen benötigt ein Looping-Konstrukt eine Auswertung durch den Interpreter in Rot? Welche Schleifenkonstrukte nicht?Wann müssen Red-Looping-Strukturen interpretiert werden?
Update (2015.04.20):
Unten ist ein kleines Programm, das ich die Sprache zu einigen Studenten Demo geschrieben. Zwei der Funktionen "list" und "find" haben foreach Schleifen in ihnen. Aber die foreach-Schleifen werden nicht ausgeführt, wenn sie nicht in einen do-Block gehüllt sind. Insbesondere dieses Szenario hat die ursprüngliche Frage ausgelöst, da der Körper der foreach-Schleifen nicht indirekt spezifiziert ist.
Model.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
]
Console.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
]