2010-12-06 1 views
4

特定の数以下のものをすべて削除して数値のリストをフィルタリングする関数を書いてみたいと思います。この関数は、2つのパラメータ、つまり数値のリストとフィルタリングする数値を取ります。この関数は、フィルタ番号より大きいすべての数値を持つリストを返します。いつかこのようなプロローグ内のリストから多数のフィルタを外す

filter_num_list(L1,N,L2) :- ... 

test_filter_num_list :- filter_num_list([1,2,3,4,5,6,7,8,9],5,[5,6,7,8,9]). 

答えて

1

は次のようなものを試してください:

filter_num_list([],N,[]) :- true. 
filter_num_list([H|T],N,[H|S]) :- H > N,filter_num_list(T,N,S). 
filter_num_list([H|T],N,S) :- N >= H, filter_num_list(T,N,S). 
5

のようなライブラリ述語は/ 3、および/ 3を除外も参照してください:

?- include(=<(5), [1,2,3,4,5,6,7,8,9], Is). 
Is = [5, 6, 7, 8, 9]. 
+1

私は 'exclude/3'と' include/3'については分かりませんでした。 – sharky

+0

'include/3'と' exclude/3'はほんのわずかな** Prologシステムのライブラリ述語です。しかし、これは一般的なPrologの質問であり、使用されているシステムの表示はありません。いくつかのシステムでのみ動作する回答を提供したい場合は、少なくともそれらのシステムをリストします。 –

+1

有用な定義を含むこのような基本的なライブラリ述語の素敵なリストについてはRichard O'Keefeの[document](http://www.cs.otago.ac.nz/staffpriv/ok/pllib.htm)をお勧めします。 – mat

2

tfilter/3とし、化身のの制約(#<)/3、あなたはを維持し、あなたがすぐに欲しいものを表現することができます!コードはモノトーンであるように、我々はまた、より一般的なクエリを尋ねると、論理的に音回答を得ることができ

?- tfilter(#<(5),[1,2,3,4,5,6,7,8,9],Xs). 
Xs = [6,7,8,9].        % succeeds deterministically 
false. 

:- use_module(library(clpfd)). 

ここで私はSWI-Prologバージョン7.1.37で走ったクエリがあります。

+0

CLP(FD)は** ** ** Prologシステムでのみ利用可能なライブラリです。しかし、これは一般的なPrologの質問であり、使用されているシステムの表示はありません。いくつかのシステムでのみ動作する回答を提供したい場合は、少なくともそれらのシステムをリストします。 –

+0

あなたはその答えを提供しています。 Prologシステムまたはシステムをテストした場所を一覧表示するだけではいかがですか? –