最近,我偶然发现这篇文章介绍如何编写FizzBuzz在Ruby中只使用特效,因为我很无聊,认为这将是整齐的尝试和使用lambda表达式在Python中实现同样的事情。
我要在其中创建使用嵌套函数号码段,并且写了下面的Python脚本:
#!/usr/bin/env python
zero = lambda p : (lambda x: x)
one = lambda p : (lambda x: p(x))
two = lambda p : (lambda x: p(p(x)))
three = lambda p : (lambda x: p(p(p(x))))
five = lambda p: (lambda x: p(p(p(p(p(x))))))
fifteen = lambda p : (lambda x: p(p(p(p(p( \
p(p(p(p(p( \
p(p(p(p(p(x))))))))))))))))
hundred = lambda p: (lambda x: p(p(p(p(p(p(p(p(p(p( \
p(p(p(p(p(p(p(p(p(p( \
p(p(p(p(p(p(p(p(p(p( \
p(p(p(p(p(p(p(p(p(p( \
p(p(p(p(p(p(p(p(p(p( \
p(p(p(p(p(p(p(p(p(p( \
p(p(p(p(p(p(p(p(p(p( \
p(p(p(p(p(p(p(p(p(p( \
p(p(p(p(p(p(p(p(p(p( \
p(p(p(p(p(p(p(p(p(p(x)))))))))))))))))))))))))))) \
))))))))))))))))))))))))))) \
))))))))))))))))))))))))))) \
)))))))))))))))))))
def to_int(func):
return func(lambda n: n + 1)(0)
print to_int(zero)
print to_int(one)
print to_int(two)
print to_int(three)
print to_int(five)
print to_int(fifteen)
print to_int(hundred)
数字从0到15工作正常,但如果我尝试创建100号,该文件将不会因下列错误运行:
s_push:分析器堆栈溢出
的MemoryError
我必须把它注释掉,以便文件在所有运行。
这类吸的 - 是否有解决此限制的任何方式让我可以任意嵌套lambda表达式和函数调用没有Python的摔倒和运行内存不足?
或者另外,有某种拉姆达演算伎俩我可以用它来表示数字100,而无需那么多的嵌套函数?