Hello, is some kind of a looping possible in math mode? -- Sebastian Gniazdowski News: https://twitter.com/ZdharmaI IRC: https://kiwiirc.com/client/chat.freenode.net:+6697/#zplugin Blog: http://zdharma.org

```
2019-08-19 02:16:20 +0200, Sebastian Gniazdowski:
[...]
> is some kind of a looping possible in math mode?
[...]
Can you maybe be more specific as to what you're trying to do?
You can use recursion:
$ n=6 a='(n-->1 ? a*(n+1) : 1)' zsh -c 'echo $((a))'
720
(6!)
Including via math functions, but within limits.
$ n=0 a='(++n <= 255 ? a+2 : 1)' zsh -c 'echo $((a))'
zsh:1: math recursion limit exceeded: (++n <= 255 ? a+2 : 1)
And you can of course have command substitutions inside an
arithmetic expression:
$ echo $(( 1 $(for i ({2..6}) print "*$i") ))
720
--
Stephane
```

I'm writing a function that computes lengths of the lines in BUFFER and builds up an array, where each element is a sum of the previous and the current line / element. So I have: integer idx sum lines_lengths=( ${lines_lengths[@]/(#m)*/$(( sum += ${#MATCH}+1 ))} ) However, I would also like to take into account screen lines, so i.e. gradually decline ${#MATCH} by COLUMNS bit by bit, assigning a new element also for each screen-line. Like the following function does: .zed-compute-llen() { len=${#1} while (( len > COLUMNS )) { sum+=COLUMNS lines_lengths[++idx]=( $sum ) len=len-COLUMNS } sum+=len+1 lines_lengths[++idx]=( $sum ) } So basically, I would want to do this in the // substitution, like so: : ${lines_lengths[@]/(#m)*/$(( append(${#MATCH}) ))} which now thus just resolved :] I don't even need the string-math function, append should add multiple lines_lengths elements if len > COLUMNS, that's all. But thanks for the answer, I think I could use recursion for this too. On Mon, 19 Aug 2019 at 08:20, Stephane Chazelas <stephane.chazelas@gmail.com> wrote: > > 2019-08-19 02:16:20 +0200, Sebastian Gniazdowski: > [...] > > is some kind of a looping possible in math mode? > [...] > > Can you maybe be more specific as to what you're trying to do? > > You can use recursion: > > $ n=6 a='(n-->1 ? a*(n+1) : 1)' zsh -c 'echo $((a))' > 720 > > (6!) > > Including via math functions, but within limits. > > $ n=0 a='(++n <= 255 ? a+2 : 1)' zsh -c 'echo $((a))' > zsh:1: math recursion limit exceeded: (++n <= 255 ? a+2 : 1) > > And you can of course have command substitutions inside an > arithmetic expression: > > $ echo $(( 1 $(for i ({2..6}) print "*$i") )) > 720 > > -- > Stephane -- Sebastian Gniazdowski News: https://twitter.com/ZdharmaI IRC: https://kiwiirc.com/client/chat.freenode.net:+6697/#zplugin Blog: http://zdharma.org

On Mon, 19 Aug 2019 at 08:41, Sebastian Gniazdowski <sgniazdowski@gmail.com> wrote: > lines_lengths=( ${lines_lengths[@]/(#m)*/$(( sum += ${#MATCH}+1 ))} ) The line should say: lines_lengths=( ${lines[@]/(#m)*/$(( sum += ${#MATCH}+1 ))} ) > : ${lines_lengths[@]/(#m)*/$(( append(${#MATCH}) ))} The same – the line should say: : ${lines[@]/(#m)*/$(( append(${#MATCH}) ))}