RosettaCodeData/Task/Loops-Wrong-ranges/Icon/loops-wrong-ranges.icon
2025-08-11 18:05:26 -07:00

39 lines
1.4 KiB
Text

procedure main()
testdata := [
# args Comment
# start stop incr
[[-2, 2, 1], "Normal"],
[[-2, 2, 0], "Zero increment"],
[[-2, 2, -1], "Increments away from stop value"],
[[-2, 2, 10], "First increment is beyond stop value"],
[[ 2, -2, 1], "Start more than stop: positive increment"],
[[ 2, 2, 1], "Start equal stop: positive increment"],
[[ 2, 2, -1], "Start equal stop: negative increment"],
[[ 2, 2, 0], "Start equal stop: zero increment"],
[[ 0, 0, 0], "Start equal stop equal zero: zero increment"]
]
range := proc("...",3) ; # range(i,j,k) same as "i to j by k"
every argcom := !testdata do{
write("\n",argcom[2])
writes("range(",seqimage(argcom[1]),")")
&error := 1
every elements := [] & put(elements, range ! argcom[1])
if &errornumber then{
write(" --->")
write("\tRun-time error ", &errornumber)
write("\t",&errortext)
write("\toffending value: ", image(&errorvalue))
errorclear()
}else{
&error := 0
if *elements ~= 0 then write(" = ",seqimage(elements))
else write(" (no result)")
}
}
end
procedure seqimage(L)
every result := "" & result ||:= image(!L) || ", "
return result[1:-2]
end