Re: Factor

Factor: the language, the theory, and the practice.

Swift Ranges

Tuesday, June 10, 2014

#syntax

Looking at the documentation for the Swift programming language recently released by Apple, I noticed they have support for integer ranges, similar to how the range objects work in Factor.

In Swift, you can get a range of the integers 2 through 6 by doing 2...6 and the integers 2 through 5 by doing 2..6. Notice the use of three or two dots to indicate whether the range includes the last number, or not, respectively.

I thought it would be fun to implement a similar syntax for Factor.

First, you can show that:

IN: scratchpad 2 6 [a..b) >array .
{ 2 3 4 5 }

IN: scratchpad 2 6 [a..b] >array .
{ 2 3 4 5 6 }

Similar to how we implemented fat arrows (also known as “pair rockets” or “hash rockets”), we can define the following syntax words:

SYNTAX: .. dup pop scan-object [a..b) suffix! ;

SYNTAX: ... dup pop scan-object [a..b] suffix! ;

And then use them:

IN: scratchpad 2 .. 6 >array .
{ 2 3 4 5 }

IN: scratchpad 2 ... 6 >array .
{ 2 3 4 5 6 }