2

给定一个列表,例如(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 感到困惑。有人可以告诉我如何正确使用它吗?

另外,游戏使用的这种疯狂语法是什么?我没有看到它在其他任何地方使用过。

根据要求,此处提供了 Steam 上功能性页面的链接。我最近还在这里发现了 github 上的项目页面链接。

4

1 回答 1

0

试试这个:Y(f: x: (FST x) x (f(SND x)))

x通过使用 Y-combinator,如果 head ( FST x) 为 TRUE ,则返回整个列表 ( ),否则递归调用自身,将 tail ( SND x) 作为参数。

于 2021-08-27T06:28:47.510 回答