2017-04-14 16 views
1

プロローグでさまざまなことをしようとしていて、最後の要素を削除したいと思います。プロローグで最後の1つの要素を削除する必要があります

これは私のコードです:

without(X,[X,_],[]). 
without(X,[K|Xs],[K|AlmoustLast]) :- 
    without(X,Xs,AlmoustLast). 

そして、これはコンパイル時に私が受け取るものです。

?- without(X,[1,2,3,4,5],A). 
X = 4, 
A = [1, 2, 3] . 

私が達成しようとしていますanswearがA = [1,2,3,5]です。

+0

[関連](http://stackoverflow.com/q/36685680/772868)。 – false

+0

'without(1、[1,2]、L)'を見てください! – false

答えて

2

は、次の

without(X,[X,Y],[Y]). 
without(X,[K|Xs],[K|AlmostLast]) :- 
    without(X,Xs,AlmostLast). 

はあなたに

?- without(X,[1,2,3,4,5],A). 

A = [1,2,3,5] 
X = 4 
+0

ありがとう!私は最後の2つの数字の合計を計算したが、私はここでそれを使用するとは思わなかった... – UnKn0wn27

2

Rafalonた修正の結果、私が提供するよに与える、ほとんど右

実際に
without(X,[X,_],[]). 
without(X,[K|Xs],[K|AlmoustLast]) :- 
    without(X,Xs,AlmoustLast). 

と一緒にいました説明。

あなたしているベースケースルールロジックは欠陥がある:

without(X,[X,_],[]). 

ここであなたが最後けど[X,_]から1を削除した場合、その後、あなたは要素Xとリスト[]を得ることを言っているが、それは」doesnの論理的な音、それですか? _には何が起こったのですか?気にしない匿名変数をここで使用していますが、本当に気にしています! Rafalonが示すように、このルールは次のようになります。

without(X, [X,Y], [Y]). 

リスト[X, Y]の最後が、1つはあなたの要素Xとリスト[Y]を与えるよう。

+0

それは事実です(sumf(X、Y、[X、Y]、_)。私はそれを説明したはずです。あなたの説明に+1。 – Rafalon

関連する問題