reti.vim で自身を呼び出せるようにしてみた

reti.vim でこんな感じに自身を呼び出せるようにしてみました。

" Self で自身を評価
echo reti#lambda("a:1 == 1 ? a:1 : a:1 * Self(a:1 - 1)")(4)
" => 42


これを使用すれば quick sort もワンライナーで記述出来る。

let list = [3, 2, 7, 1, 9, 8, 4, 6, 5]
echo reti#lambda('a:1 == [] ? [] : Self(filter(copy(a:1), "v:val < a:1[0]")) + [a:1[0]] + Self(filter(copy(a:1), "a:1[0] < v:val"))')(list)
" => [1, 2, 3, 4, 5, 6, 7, 8, 9]