我想知道为什么这段代码不会以无休止的递归结束.我想这与静态成员自动初始化为默认值有关,但是有人可以"一步一步地"告诉我'a'如何获得2的值和'b'的1?
public class A
{
public static int a = B.b + 1;
}
public class B
{
public static int b = A.a + 1;
}
static void Main(string[] args)
{
Console.WriteLine("A.a={0}, B.b={1}", A.a, B.b); //A.a=2, B.b=1
Console.Read();
}
Run Code Online (Sandbox Code Playgroud) 在SWI-Prolog中是否有任何内置谓词总会失败并阻止机器回溯 - 它会阻止程序立即执行(这不是什么fail/0)?我可以使用削减,但我不喜欢它们.
做一些事情!, fail对我来说不是问题,但为了实现我想要的东西,我必须在更多的地方使用削减,这是我不喜欢的.
我试图找出这里的树木究竟是如何工作的(我理解flatten,insert和foldr).
我想在treesort中正在做的是为列表中的每个元素应用insert,从而生成一个树然后展平它.我在这里无法克服的唯一问题是列表(即函数的参数)是隐藏的(因为除了函数类型声明之外,它不会作为参数写在任何地方).
还有一件事:因为点运算符是函数组合,为什么当我改变时它是一个错误:treesort = flatten . foldr insert Leafto treesort = flatten( foldr insert Leaf )?