我在写序言以打印列表的每个元素,只要计数器> 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]]).
答案 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).