给定一个列表,例如(f: f FALSE (g: g FALSE (h: h TRUE FALSE))),编写一个删除所有前导FALSEs 并仅返回以 开头的尾部的运算符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 感到困惑。有人可以告诉我如何正确使用它吗?
另外,游戏使用的这种疯狂语法是什么?我没有看到它在其他任何地方使用过。