2016-04-28 16 views
3

Prologでリストの先頭に要素を追加するにはどうすればよいですか?私はそうのように呼ばれるように最終的な結果を必要とする:Prologでリストの先頭に要素を追加する

pushFront(8, [3, 1], NewList). % NewList is now [8, 3, 1]. 

私は次のようにそれを実装しようとしています:

pushFront(Item, [], [Item|_]). %Problematic 
pushFront(Item, [OldDequeH|OldDequeT], NewDeque) :- 
    leftPush(OldDequeH, OldDequeT, [Item|NewDeque]). 

をしかし、それは動作しません、と私はTBHアイデアの出です。誰が私の実装に間違っているのか、そしてそれが適切に動作するために必要な変更を記述できますか?

答えて

7

リストだけ表記を使用し、リストの先頭に要素を追加するには:

pushFront(Item, List, [Item|List]). 

リスト表現はそれほどリスト[b,c,d]'.'(b,'.'(c, '.'(d, [])))のためだけ糖衣構文で、内部短所ファンクタ(.)を使用しています。

この表現では、別の小切手ファクタをラップするだけで項目を追加することができます。つまり、リストの前に項目を追加する場合L'.'(a, L)をラップします[a|L]となります。

+1

聖なる!それは簡単です...私は時々、ばかげています、ありがとうbtw :) –

+0

質問:なぜあなたは機能ではなくファンクタとしてconsを参照していますか? –

+1

@MathuSumMut:Prologには関数はありません( 'is'の右辺で使われているものを考慮しない限り)、ユーザプロシージャとシステム述語があります。しかしここでは、Prologが '[item、item | TailItems]と_cons_表現(ドットファンクタ' .')のように2つの表現(リスト表現)を持つ構造体(リスト)を使用しています。リストの表現か、ドットファンクタを使用する_cons_表現のどちらかを使用して、構造体(構造体)を作成します。 – gusbro

関連する問題