### sequence function: range

```    description:
range(sp, sp)
range(sp, sp, ket)
the range function

examples:
-- range between 1 and 10:
range(|1>, |10>)
|1> + |2> + |3> + |4> + |5> + |6> + |7> + |8> + |9> + |10>

-- range between 1 and 5, using step of 0.5:
range(|1>, |5>, |0.5>)
|1> + |1.5> + |2> + |2.5> + |3> + |3.5> + |4> + |4.5> + |5>

-- specify a category, in this case 'year':
range(|year: 1981>, |year: 1985>)
|year: 1981> + |year: 1982> + |year: 1983> + |year: 1984> + |year: 1985>

-- specify the 'number' category:
range(|number: 7>, |number: 13>)
|number: 7> + |number: 8> + |number: 9> + |number: 10> + |number: 11> + |number: 12> + |number: 13>

-- if the categories are not the same, return the don't know ket |>
range(|number: 3>, |price: 7>)
|>

-- reverse-range, with step size 2, from 2018 to 2014:
range(|year: 2018>, |year: 2014>, |year: -2>)
|year: 2018> + |year: 2016> + |year: 2014>

-- if you need a sequence instead of a superposition, use sp2seq:
sp2seq range(|number: 17>, |number: 23>)
|number: 17> . |number: 18> . |number: 19> . |number: 20> . |number: 21> . |number: 22> . |number: 23>

-- alternatively, you can define the srange function:
srange (*,*) #=> sp2seq range(|_self1>, |_self2>)
srange (*,*,*) #=> sp2seq range(|_self1>, |_self2>, |_self3>)

srange(|5>, |9>)
|5> . |6> . |7> . |8> . |9>

srange(|17>, |23>, |2>)
|17> . |19> . |21> . |23>

-- filter down to prime numbers:
-- due to a quirk, which we might change later, you need a literal operator wrapper around a function operator:
is-prime |*> #=> is-prime |_self>

-- now find our primes:
such-that[is-prime] range(|2>, |40>)
|2> + |3> + |5> + |7> + |11> + |13> + |17> + |19> + |23> + |29> + |31> + |37>