给定一个列表,例如(f: f FALSE (g: g FALSE (h: h TRUE FALSE)))
,编写一个删除所有前导FALSE
s 并仅返回以 开头的尾部的运算符TRUE
。对于此示例,运算符应仅返回(h: h TRUE FALSE)
.
这是一个练习,实际上是一个关卡,在这个名为“功能性”的游戏中,我已经迷上了它。在之前的级别中,我们需要将 \Omega 推广到 y 组合器中,所以我想这个级别需要 y 组合器来处理FALSE
任意长度的前缀。
我可以FALSE
使用(b: c: IF b (f: f b c) c)
. 想象那个运算符,因为f
我猜答案应该看起来像(b: c: IF b (f: f b c) (Y c))
. 游戏拒绝那个抱怨“没有减少(变得太大)”的答案。
我显然对 y-combinator 感到困惑。有人可以告诉我如何正确使用它吗?
另外,游戏使用的这种疯狂语法是什么?我没有看到它在其他任何地方使用过。