Мой код неуклюжий:
length: length? items
count: 0
foreach item items [
count: count + 1
if count = length [
print "last item"
]
]
Есть что-то лучше?
Мой код неуклюжий:
length: length? items
count: 0
foreach item items [
count: count + 1
if count = length [
print "last item"
]
]
Есть что-то лучше?
Обычно люди используют FORALL (который лучше бы назвал FOR-NEXT), который перемещает позицию в ряду, а не дает элемент, тогда вы можете проверить его с помощью TAIL?. Недостатком является то, что вам нужно выбрать элемент из серии в текущей позиции:
forall items [
probe items/1 ;-- how to access current item
if tail? next items [ ;-- could use LAST? ITEMS in Rebol 3
print "last item"
]
]
Это примерно эквивалентно:
if not tail? items [
original: items
until [
probe items/1
if tail? next items [
print "last item"
]
items: next items
tail? items
]
items: original
]
Предупреждаем: FORALL видоизменяет свой входной ряд и пытается вернуть его в исходное положение в конце. Но у него плохо определенное поведение в случае возникновения ошибок, поэтому вы можете оставить свой ввод в середине итерации, если возникнет проблема.