The 1..9//2 structure feels like the best of the presented options to me. I 
think it reads well out loud, since .. often means "to" and / is often 
rendered as "by" so that would read 1 to 9 by 2.

To make sure I'm clear about the semantics: If I have:

```
1..x//1 |> Enum.to_list
```

Then if `x` is zero or less than zero, I get an empty list? This would 
definitely be nice, we've been bitten by the exact scenarios mentioned in 
the first post.
On Monday, March 22, 2021 at 10:26:13 AM UTC-4 [email protected] wrote:

> Yes, the `1..9//2` communicates intention a little better than `a..b..c` 
> IMO.
>
> Amos King, CEO
>
>   <https://twitter.com/binarynoggin>  
> <https://www.facebook.com/BinaryNoggin/>  
> <https://www.instagram.com/binarynoggin/>   
> <https://www.linkedin.com/company/binary-noggin>
>
> 573-263-2278 <(573)%20263-2278> [email protected]
>
>
> On Mon, Mar 22, 2021 at 9:05 AM José Valim <[email protected]> wrote:
>
>>  
>>
>>> I still find the syntax to be confusing with the step as the last 
>>> element. I really wish that we could do something like `a..b by: 3` but 
>>> that comes with other implementation issues. I like the proposals using a 
>>> different operator for the step. `a..b\\c`?
>>>
>>
>> Unfortunately a..b\\c is ambiguous because \\ is used as default 
>> arguments. So you could do "a..b\\1..3". It is semantically unambiguous in 
>> this case, but definitely syntactically ambiguous.
>>
>> Here are some approaches of what we could allow. I am considering they 
>> all represent the range from 1 to 9 by 2 and from 9 to 1 by -1:
>>
>>    - 1..2..9 and 9..-1..1 - as someone proposed, maybe having the step 
>>    in the middle is clearer
>>    
>>    - 1..9//2 and 9..1//-1 - note // is generally ambiguous in Elixir 
>>    because of the capture operator. So this will only work if ..// is 
>> defined 
>>    as a ternary operator. This means we will likely introduce the atom :..// 
>>    and the capture operator would be &..///3. I think those are acceptable 
>>    trade-offs, but worth mentioning.
>>    
>>    - Combinations with \ and /:
>>    - 1..9/\2 and 9..1/\-1
>>       - 1..9*\2 and 9..1*\-1
>>       - 1..9\/2 and 9..1\/-1
>>       - 1..9*/2 and 9..1*/-1
>>       
>>       - 1..9^^2 and 9..1^^-2
>>
>> To be honest, I like the first two. One nice bonus about 1..9//2 is 
>> because we can actually think that it is cutting the number of elements in 
>> 2, by some approximation. 1..8//1 has 8 elements. 1..8//2 has 4. :)
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "elixir-lang-core" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>>
> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4JNXVDdJG%3DJ2MuiiN9%2BxHNUm58%2Bi%3DAbPygGkZm6sZ4jEA%40mail.gmail.com
>>  
>> <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4JNXVDdJG%3DJ2MuiiN9%2BxHNUm58%2Bi%3DAbPygGkZm6sZ4jEA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/cfc0db92-7165-41dc-9241-8c9d6ef3a026n%40googlegroups.com.

Reply via email to