小编gio*_*ida的帖子

使用 mfix 避免无限递归

让:

{-# LANGUAGE RecursiveDo #-}

test :: [a] -> Maybe Int
test []       = Just 0
test (_ : xs) = mdo
    unless (i == 0) Nothing -- 1
    i <- test xs            -- 2
    Just i
Run Code Online (Sandbox Code Playgroud)

我正在寻找解释为什么调用 eg 会test "hey"导致无限循环,以及通常如何在处理mfix. 另外,有没有办法在不交换(1)和(2)的顺序的情况下纠正前面的玩具示例?

recursion haskell

5
推荐指数
0
解决办法
69
查看次数

为什么数组元素似乎逃脱了空检查?

显然不可空是新的默认值,所以我选择了它。考虑下面的代码:

public class C { }
        
public static C f()
{
    return null;
}
Run Code Online (Sandbox Code Playgroud)

编译器会警告可能返回空引用。但如果我改写:

public static C f()
{
    C[] a = new C[10];
    return a[0]; // null
}
Run Code Online (Sandbox Code Playgroud)

然后编译器保持沉默。我检查了一下返回的值实际上是null. 这只是推理机的弱点吗?

c#

5
推荐指数
1
解决办法
110
查看次数

标签 统计

c# ×1

haskell ×1

recursion ×1