prolog问题输出每2个元素

时间:2012-05-17 08:17:05

标签: prolog

编写一个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).

1 个答案:

答案 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