2017-03-14 9 views
0

こんにちは私はプロローグでかなり新しいです、そして、私がやっていることを理解することに問題があります。 私の仕事はかなりシンプルなようです。私はリストのリストからリストを取得したいと思います。リストのリストから

リストを作成するには、リストのリストのすべてのリストのNieme(N番目)要素を取得したいと思います。

1タスク例:

ListList([[1,2],[3,4],[5,6]]) 

リターンのみ[1,2]

2タスク例:

ListList([[1,2],[3,4],[5,6]], N) %Where N is the index i want ex:2 

リターンのみ[2,4,6]

ありがとう

編集:今まで私が入手したもの:

まだウェブを閲覧しています。私は第1の仕事のために働くnth1を見つけました。次のようなものもあります。

match([Elem|_],Num,Num,Elem) :- 
    !. 
match([_|Tail],Num,Count,MatchedNumber) :- 
    Count < Num, 
    Count1 is Count+1, 
    match(Tail,Num,Count1,MatchedNumber). 

これまでのところ、これまでの2番目のタスクはまだありません。私は再帰の二重の並べ替えを使用する必要があります

+2

述語は何も返しません。それは変数を統一する... –

+0

うん、それは申し訳ありません。私はそれを関数に渡すという別の議論に格納するようなものでした。ListList([1,2]、[3,4]、[5,6]]、List)のようなもの – Fred

+4

(a)述語は小文字で始める必要があります。 (b)何を試しましたか? –

答えて

0

最初の問題に取り組みましょう。指定されたリストの頭だけが必要です。それで全部です。リストは[H|T]と書くことができ、Hは先頭(または最初の要素)、Tはテール(リストの結果自体、リスト)です。

リストがある場合、[a,b,c][H|T]と統合すると、Prologは面白いことをします。プロローグのプロンプトでこれを試してください:

?- [a,b,c] = [H|T]. 

あなたが得るものを観察してください。また、述部の先頭で統一を行うこともできます。

これは別の試みです。プロローグに移動し、次のように入力します。

?- [user]. 
head_tail(L, Head, Tail) :- 
    L = [Head | Tail]. 

foo([H|T], H, T). 

Ctrl^D 
true. 

が次に試してみてください。

?- head_tail([a,b,c], H, T). 

をも試してみてください。

?- foo([a,b,c], H, T). 

をそして、あなたが何を得る参照してください。これを使用して、最初の問題を解決する方法を理解することができます。

2番目の問題では、統一を使用することもできます。しかし、この場合、あなたは今あなたのリストを再帰的に歩いています。

match([], ...).   % Handle the empty list 
match([H|T], ...) :- % Handle the general case with recursion 
    % do something here with H and/or T 
    ... 
    match(T, ...). 

それぞれ...のように見えます。

関連する問題