# LengthVariation

Measure sentence-length variation.

## Source

```
extends: script
message: "This paragraph has a stdev less than 2"
link: https://tengolang.com/
scope: paragraph
script: |
text := import("text")
math := import("math")
matches := []
each := func(seq, fn) {
for x in seq {
fn(x)
}
}
sum := func(seq) {
s := 0
each(seq, func(x) {
s += x
})
return s
}
stdev := func(seq) {
size := len(seq)
mean := sum(seq) / size
sd := 0.0
each(seq, func(x) {
sd += math.pow(x - mean, 2)
})
return math.sqrt(sd / size)
}
lengths := []
for sent in text.re_split(`[.!?] `, scope, -1) {
lengths = append(lengths, len(text.fields(sent)))
}
computed := stdev(lengths)
if computed < 2 && len(lengths) >= 3 {
matches = append(matches, {begin: 0, end: len(scope)})
}
```

## Example

This obviously silly code just generates two random numbers and subtracts the
smaller from the bigger. But what's important here isn't what it does, but
rather how it's defined. Let's focus on the object literal and function
definition, as we see here: