使用 y 组合器从布尔列表中去除 `FALSE` 前缀?难倒

问题描述

给定一个列表,例如(f: f FALSE (g: g FALSE (h: h TRUE FALSE))),编写一个运算符,删除所有前导 FALSE 并仅返回以 TRUE 开头的尾部。对于此示例,运算符应仅返回 (h: h TRUE FALSE)

这是一个练习,实际上是一个关卡,在这个名为“功能性”的游戏中,我已经着迷了。在上一个级别中,我们需要将 \Omega 推广到 y-combinator,所以我想这个级别需要 y-combinator 来处理任意长度的 FALSE 前缀。

我可以使用 FALSE 处理单个 (b: c: IF b (f: f b c) c) 前缀。将该运算符想象为 f 我猜答案应该类似于 (b: c: IF b (f: f b c) (Y c))。游戏拒绝了那个抱怨“没有减少(增长太大)”的答案。

我显然对 y 组合器感到困惑。有人可以告诉我如何正确使用它吗?

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

根据要求,指向 Steam 上功能页面链接here。我最近还在 github here 上的项目页面上发现了一个链接

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)