我最近一直在做一些Prolog。我读过序言的艺术这本书。他们在那里有一个 Nim 游戏实现。所以我将它重写为 SWI-Prolog,除了这个 Out of local stack 错误之外,一切似乎都很好。调试后我发现它似乎在程序的这一部分永远循环:
nim_sum([N|Ns],Bs,Sum):-
binary(N,Ds), nim_add(Ds,Bs,Bs1), nim_sum(Ns,Bs1,Sum).
nim_sum([],Sum,Sum).
nim_add(Bs,[],Bs).
nim_add([],Bs,Bs).
nim_add([B|Bs],[C|Cs],[D|Ds]):-
D is (B+C) mod 2, nim_add(Bs,Cs,Ds).
有人遇到过这种问题吗?对一些替代实施有什么建议吗?