When input is
N2≡λs.λz.s(s(z))
N3≡λs.λz.s(s(s(z)))
N2 N3
it outputs
(λz.(λz.(((z(z(zz)))((z(z(zz)))((z(z(zz)))(z(z(zz))))))(((z(z(zz)))((z(z(zz)))((z(z(zz)))(z(z(zz))))))(((z(z(zz)))((z(z(zz)))((z(z(zz)))(z(z(zz))))))((z(z(zz)))((z(z(zz)))((z(z(zz)))(z(z(zz)))))))))))
En aquesta tasca heu de permetre la definició de macros amb notació infixa. En aquests cas els noms seran símbols no alfabètics i la seva implementació serà similar a les macros amb notació prefixa. Veieu l’exemple següent:
`
? N2≡λs.λz.s(s(z))
N2 ≡ (λs.(λz.(s(sz))))
? N3≡λs.λz.s(s(s(z)))
N2 ≡ (λs.(λz.(s(sz))))
N3 ≡ (λs.(λz.(s(s(sz)))))
? +≡λp.λq.λx.λy.(px(qxy))
N2 ≡ (λs.(λz.(s(sz))))
N3 ≡ (λs.(λz.(s(s(sz)))))
In the statement: 'La funció ha de tenir un paràmetre que limiti el nombre de reduccions a un màxim per evitar els casos en que les crides recursives no acaben.'
Give an option to reduct a macro.
For example:
N18≡ (((λp.(λq.(λx.(λy.((px)((qx)y))))))(((λp.(λq.(λx.(λy.((px)((qx)y))))))(((λp.(λq.(λx.(λy.((px)((qx)y))))))(λs.(λz.(s(s(sz))))))(λs.(λz.(s(s(sz)))))))(((λp.(λq.(λx.(λy.((px)((qx)y))))))(λs.(λz.(s(s(sz))))))(λs.(λz.(s(s(sz))))))))(((λp.(λq.(λx.(λy.((px)((qx)y))))))(λs.(λz.(s(s(sz))))))(λs.(λz.(s(s(sz)))))))
/reduct N18
N18=(λu.(λo.(u(u(u(u(u(u(u(u(u(u(u(u(u(u(u(u(u(uo))))))))))))))))))))