给定一个列表,例如(f: f FALSE (g: g FALSE (h: h TRUE FALSE))),编写一个运算符,删除所有前导FALSE,只返回以TRUE开头的尾部。在本例中,操作符应该只返回(h: h TRUE FALSE)。
这是一个练习,实际上是一个级别,在这个被称为“功能”的游戏中,我已经变得痴迷。在上一层中,我们需要将Omega泛化到y-组合器中,所以我认为这一层需要y-组合器来处理任意长度的FALSE前缀。
我可以用(b: c: IF b (f: f b c) c)处理单个FALSE前缀。假设这个运算符是f,我猜答案应该类似于(b: c: IF b (f: f b c) (Y c))。这个游戏拒绝了这个答案,抱怨“没有减少(变得太大)”。
我显然被y-combinator搞糊涂了。有人能教我如何正确使用它吗?
另外,这个游戏使用的疯狂语法是什么?我没看到它在其他地方使用过。
发布于 2021-08-27 06:28:48
试试这个:Y(f: x: (FST x) x (f(SND x)))。
通过使用Y组合器,如果头部(x)为真,则返回整个列表(FST x),否则以尾部(SND x)为参数递归调用自身。
https://stackoverflow.com/questions/68506626
复制相似问题