2

everynth(N, X)リストのすべての要素を出力するNプロローグ述語を書きますX

?- 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).
4

1 に答える 1

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、最後に出力されることが保証されるため、別のヘルパーを実装しました。

于 2012-05-17T12:32:21.117 に答える