J'essaie de faire fonctionner pour calculer la somme des éléments de la liste et la longueur de la liste dans le calcul lambda.
Exemple d'une liste: a := [1, 2, 3] = λcn.c 1 (c 2 (c 3 n))
sum a
doit retourner 6 et len a
devrait revenir 3.Somme des éléments de la liste et longueur de la liste dans le calcul lambda
j'ai écrit versions récursives:
len = λl.if (empty l) 0 (plus 1 (len (tail l)))
sum = λl.if (empty l) 0 (plus (head l) (sum (tail l)))
où, si, vide, plus, la queue sont d'autres fonctions de lamda.
Alors je l'ai fait un truc avec combinateur point fixe:
len = λl.if (empty l) 0 (plus 1 (len (tail l)))
len = λfl.if (empty l) 0 (plus 1 (f (tail l))) len
len = Y λfl.if (empty l) 0 (plus 1 (f (tail l)))
où Y = λf.(λx.f(x x))(λx.f(x x))
Juste la même chose pour la somme. Alors maintenant j'ai des versions non récursives. Mais je ne peux pas obtenir la forme bêta normale en utilisant la réduction bêta ici.
Je me demande s'il existe des formes bêta-normales de ces fonctions et à quoi elles ressemblent.
Alors, quand vous dites '1', '2',' 3', etc, sont ceux destinés à représenter les chiffres de l'église ' λf.λx.fx', 'λf.λx.f (fx)', 'λf.λx.f (f (fx))', etc.? – naomik
@naomik oui, exactement – Some
gallais vous offre une réponse parfaite – naomik