背景
可视化λ微积分项
著名的lambda-juggler(和代码高尔夫球手)John Tromp设计了一个有趣的可视化 λ微积分项。用他的话说:
抽象(lambda)由水平线表示,变量由从其绑定lambda向下发出的垂直线表示,应用程序由连接最左侧变量的水平链接表示。
例如,λ项λf.λx.f(f(f(fx)))对应于可视化:
-------------------
| | | |
-------------------
| | | | |
| | | |----
| | |----
| |----
|----
|
从上到下阅读:
- 第一水平线代表第一λ。
- 从它开始的四行代表体内的f s。
- 类似地,第二条水平线代表第二条λ,从其下降的一条新线代表体内的x。
- 最右边的f线和x线由代表应用程序(f x)的水平线连接。
- 下一个应用是[f(f x))等。
教堂数字
在Church数是在λ演算项的特定序列,考虑以下图案:
0 = λf. λx. x
1 = λf. λx. f x
2 = λf. λx. f (f x)
3 = λf. λx. f (f (f x))
...
任务
给定输入数字n,打印一些ASCII艺术作品,以可视化第n个教堂数字。例如,上面的示例是给定n = 4时的目标输出。对于n = 0,打印:
---
---
|
|
测试用例
对于所有n≥0的整数输入,您的答案必须输出与此堆栈代码段完全相同的文本(模尾换行符):
这是 代码高尔夫球,因此以字节为单位的最短代码获胜。
.repeat
。