Prolog谓词无法识别递归中传递的参数
我试图编写一个prolog语法来删除列表中的每个第n个元素。我的代码如下:Prolog谓词无法识别递归中传递的参数,prolog,Prolog,我试图编写一个prolog语法来删除列表中的每个第n个元素。我的代码如下: deletenth([], _, _, []). deletenth([_H | T], N, 1, T) :- deletenth(T, N, N, T). deletenth([H | T], GlobalN, LocalN, [H | T]) :- LocalN \= 0, TMP is LocalN - 1, deletenth(T, GlobalN, TMP, T). 我的问题
deletenth([], _, _, []).
deletenth([_H | T], N, 1, T) :-
deletenth(T, N, N, T).
deletenth([H | T], GlobalN, LocalN, [H | T]) :-
LocalN \= 0,
TMP is LocalN - 1,
deletenth(T, GlobalN, TMP, T).
我的问题是,如果在递归过程中得到<代码> Loaln=1</Case>参数,它将无法识别中间的谓词。只有从终端手动调用它。也许我的代码根本不适合这个任务,但这件事一直困扰着我。我希望有人能帮助我。您的问题是,在第三个子句中,您在head和deletenth/4的递归调用中都使用了T作为输入和输出。您可能希望
deleteneth(T,GlobalN,TMP,NewT)
并在头部将第四个参数替换为[H|NewT]
。哦,我明白了。。。现在我已经更改了它,它可以正常工作,但是除了正确的结果之外,它还提供了其他结果:))thx要获得帮助,我可能需要查看torolk/4
的代码才能获得更多帮助。我鼓励您使用succ(TMP,LocalN)
而不是TMP是LocalN-1
,虽然这可能不是问题。哎呀,我忘了翻译那段代码,它与deletenth相同,只是匈牙利语:))啊,所以您的条件是LocalN\=0,但基本情况是LocalN=1,所以您永远无法达到它。将您的条件更改为LocalN\=1
。