Update syntax-list-comprehensions.md

This commit is contained in:
James Napora 2022-02-13 16:36:52 -08:00 committed by GitHub
parent 64cd591b96
commit fb1c5c2f1e
Signed by: DevComp
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,6 +1,6 @@
## Summary ## Summary
Introduce a form of list comprehension using `for var in iterator do` syntax. Introduce a form of list comprehension using `n for-in-do` syntax.
## Motivation ## Motivation
@ -12,3 +12,38 @@ When traversing a table to exclude all the odd numbers you'd be creating a large
## Design ## Design
To solve these problems, I propose a `n for-in-do` expression form that is syntactically similar to a for statement, but lacks terminating `end`. To solve these problems, I propose a `n for-in-do` expression form that is syntactically similar to a for statement, but lacks terminating `end`.
The `n for-in-do` expression must match ``<identifier> for <identifier> in <expr> do``
## Drawbacks
List comprehensions may be misused.
The list comprehensions have similar drawbacks to the if expression drawbacks
https://github.com/Roblox/luau/blob/master/rfcs/syntax-if-expression.md
## Alternatives
### C#
```csharp
var list2 = from number in Enumerable.Range(0, 10) select 2*number;
```
### Rust (using cute)
```rust
let vector = c![x, for x in 1..10, if x % 2 == 0];
```
### Haskell
```haskell
[x * 2 | x <- [0 .. 99], x * x > 3]
```
### R
```r
x <- 0:100
S <- 2 * x[x ^ 2 > 3]
```
### Function syntax
List comprehensions could be implemented as functions like ``table.map`` or ``table.filter``