14/12/2019, 18:15
foldR
di altre funzioni. Solo foldL
non mi riesce... Veniamo al sodo.# FUNZIONI FONDAMENTALI SU LISTE
head = lambda xs: xs[0]
tail = lambda xs: xs[1:]
nil = []
# foldR
foldR = lambda f, xs, v: v if xs == nil else f(head(xs), foldR(f, tail(xs), v))
# foldL (in termini ricorsivi)
foldL = lambda f, xs, v: v if xs == nil else foldL(f, tail(xs), f(v, head(xs)))
# Ma foldL come foldR?
15/12/2019, 00:22
def foldl(f, xs, v):
def g(h, r):
return lambda z: r(f(z, h))
return foldr(g, xs, id)(v)
15/12/2019, 08:20
>>> foldl(lambda x,y: x+y, [1,2,3], 0)
94234912400288
15/12/2019, 18:04
def foldl(f, xs, v):
return foldR(lambda h, g: lambda x: g(f(x, h)), xs, lambda x: x)(v)
def print_args(x, y):
print(x, y, x + y)
return x + y
foldl(print_args, [1, 2, 3], 0)
# 0 1 1
# 1 2 3
# 3 3 6
# Out[27]: 6
15/12/2019, 19:18
17/12/2019, 10:27
lambda v: foldl(f, xs, v) == foldr(g, xs, h)
lambda v: v == h
lambda v: foldl(f, tail(xs), f(v, head(xs)) == g(head(xs), foldr(g, tail(xs), h))
lambda v: foldr(g, tail(xs), h)(f(v, head(xs)) == g(head(xs), foldr(g, tail(xs), h))
g(H, R) = lambda v: R(f(v, H))
Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000—
Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.
Powered by phpBB © phpBB Group - Privacy policy - Cookie privacy
phpBB Mobile / SEO by Artodia.