编写一个Prolog谓词everynth(N, X)
,输出列表N
的每个X
th 元素。
?- everynth(1, [1, 2, 3, 4, 5, 6]).
1 2 3 4 5 6
true.
?- everynth(2, [1, 2, 3, 4, 5, 6]).
2 4 6
true.
这是我尝试过的,虽然我不知道正确使用递归:
everynth(1, [X|_]) :-
write(X),
write(' ').
everynth(N, [_|H]) :-
M is N - 1,
everynth(M, H).
答案 0 :(得分:1)
:- use_module(library(dialect/hprolog)).
everynth(N,X) :- nth1(N,X,Elem),
write(Elem),
write(' '),
split_at(N,X,_,NewX),
everynthHelper(N,NewX).
everynthHelper(N,X) :- length(X,LengthX),
N > LengthX, !.
everynthHelper(N,X) :- nth1(N,X,Elem),
write(Elem),
write(' '),
split_at(N,X,_,NewX),
everynthHelper(N,NewX).
我实现了一个单独的帮助器,因为第一次成功调用everynthHelper / 2可以确保我们最后输出true
。