23 lines
685 B
VimL
23 lines
685 B
VimL
" Translated from Python. Works with: Vim 7.0
|
|
|
|
func! Lambx(sig, expr, dict)
|
|
let fanon = {'d': a:dict}
|
|
exec printf("
|
|
\func fanon.f(%s) dict\n
|
|
\ return %s\n
|
|
\endfunc",
|
|
\ a:sig, a:expr)
|
|
return fanon
|
|
endfunc
|
|
|
|
func! Callx(fanon, arglist)
|
|
return call(a:fanon.f, a:arglist, a:fanon.d)
|
|
endfunc
|
|
|
|
let g:Y = Lambx('f', 'Callx(Lambx("x", "Callx(a:x, [a:x])", {}), [Lambx("y", ''Callx(self.f, [Lambx("...", "Callx(Callx(self.y, [self.y]), a:000)", {"y": a:y})])'', {"f": a:f})])', {})
|
|
|
|
let g:fac = Lambx('f', 'Lambx("n", "a:n<2 ? 1 : a:n * Callx(self.f, [a:n-1])", {"f": a:f})', {})
|
|
|
|
echo Callx(Callx(g:Y, [g:fac]), [5])
|
|
echo map(range(10), 'Callx(Callx(Y, [fac]), [v:val])')
|