2016-11-26 7 views
0

私はすべてのリストを読み込むPrologプログラムに取り組んでいます。nthリストを別のリストに読み込む必要があります。たとえば、次のpredは私が実装しようとしてるの述語であるProlog - リストのn番目の要素をすべて指定する

?- pred([a,b,c,d,e,f,g,h,i,j],3,R) => 
R = [c,f,i] 

しかし、私は正直なところ、それを行う方法を知らない。nth(list、number、result)のように、/ 3述語にまとめられた/ 4述語になります: - nth(list、number、result)数字、結果、カウンター)または類似している。

しかし、頭に自分自身をリセットできる位置番号を与える方法はわかりません。 nn=3、これはリスト内のcとしましょう)が論理的に1に戻って3までカウントアップしなければならないからです。

実装でこれらの特定の問題を回避するにはどうすればよいですか?

答えて

1

これを実装する方法の例:

nth_pos(L, N, R):- 
    nth_pos(L, 1, N, [], R). 

nth_pos([], I, N, Acc, Acc). 

nth_pos([H|T], I, N, Acc, R):- 
    I =:= N, 
    append(Acc, [H], Acc2), 
    I2 is 1, 
    nth_pos(T, I2, N, Acc2, R). 

nth_pos([H|T], I, N, Acc, R):- 
    I < N, 
    I2 is I + 1, 
    nth_pos(T, I2, N, Acc, R). 

テスト・ラン:

?- nth_pos([a,b,c,d,e,f,g,h,i,j],3,R). 
R = [c, f, i] . 

?- nth_pos([a,b,c,d,e,f,g,h,i,j],1,R). 
R = [a, b, c, d, e, f, g, h, i|...] 

しかし、私は正直にそれを行う方法がわかりません。私は、 nth(リスト、数、結果)のように、 が頭の現在の位置を表すカウンタを必要としていることを知っていますので、 /4述語をa/3にまとめます。リスト、番号、結果、カウンター)または のようなものです。

はい、適切なトラックにありますが、アキュムレータを使用してリストを構築すると、pred/5となります。それが役に立てば幸い。これだけでは解決できないことに注意してください。

関連する問題