Prolog递归代码返回false,将变量添加为递归列表解析的输入

时间:2020-09-30 04:14:37

标签: prolog

我在写序言以打印列表的每个元素,只要计数器> 0。

printLN([],_).
printLN(_,-1).
printLN([[x,y] | T], N) :-
    write(x), write(y), nl,
    N2 is N-1,
    printLN(T, N2).

这应该打印3对。

printLN([[1,2],[3,4],[5,6]], 2).

这应该打印3对。

printLN([[1,2],[3,4],[5,6]], 8).

这应该打印第一对。

printLN([[1,2],[3,4],[5,6]], 0).

我一直在虚假。有人知道为什么会这样吗?

同样,我该如何执行类似的操作:

getPartialList(N) :-
    getList(LIST), printLN(LIST, N).

其中getList返回一个成对的列表,如:

getList([[1,2],[3,4],[5,6]]).
    

1 个答案:

答案 0 :(得分:1)

我一直在虚假。有人知道为什么会这样吗?

两个错误: a)write(x)应该写成write(X),其中X是逻辑变量(大写)。 b)即使N <0,您的第三个子句也会保持递归调用。要更正此问题,请将测试N> 0放入此子句中。

printLN([],_).
printLN(_, -1) :- !.
printLN([[X,Y] | T], N) :-
    N > 0,
    write(X), write(Y), nl,
    N2 is N-1,
    printLN(T, N2).