2
我在Prolog中有此程序,它从列表中删除每个第n个元素的元素,如: removenth([1,2,3,4,5,6],2,R)。 它应该返回:R = [1,3,5]。Prolog不返回问值
我有这样的:
removeallNth(F, N, R):- removeallNth(F, N, 1, R).
removeallNth([], _, _, R).
removeallNth([H|T], N, C, R):- N \== C, Nc is C + 1, concat(R,H,S),
removeallNth(T, N, Nc, S).
removeallNth([_|T], N, C, R):- N == C, removeallNth(T, N, 1, R).
的问题是,它返回真代替 R = [1,3,5]。我检查了SWI-Prolog调试器,它到达了正确的结果,但它保持检查的东西。我知道这与统一有关,但我不知道如何应用它。
这是工作,谢谢!我需要充分理解Prolog中的递归。它如何从调用堆栈的结尾到开始构造所需的结果。我试图通过concat在每次迭代中创建结果列表。 – Pravel