1

私はプロローグリストの最初の2つの要素を再帰的に書き込もうとしています..例:

私が持っている場合

List:[a,b,c,d,e,f]

私が入るとき

first_two(F,S,List).
It returns 
F:a, S:b ;
F:b, S:c ;
F:c, S:d ;
F:d, S:e ;
F:e, S:f .

私はこれを次のようにしようとします:

first_two(F,S,[F|[S|Tail]]):-first_two(F,S,Tail).

しかし、それは失敗します。

どうもありがとうございます..

4

2 に答える 2

2

最初の2つだけが必要な場合、ソリューションはかなり近いですが、再帰は必要ありません。

first_two( F, S, [F|[S|_]] ).
于 2012-04-15T01:22:02.143 に答える
2

再帰の基本ケース、つまり終了条件を忘れました。

first_two(F, S, [F, S|_Tail]).
first_two(F, S, [_|Tail]) :-
    first_two(F, S, Tail).

また、わかりやすい構文と間隔を使用して、ルールを簡略化しました。

私はもっ​​と単純なコードを読むほうが好きですよね?

于 2012-04-15T06:29:30.460 に答える