2016-11-25 4 views
0

内の指定されたプロパティを満たすサブリストを探すI持って与えられたリストから、すべての「サブリスト」を返す関数:OCamlの

例えば
let rec sublists = function 
    [] -> [[]] 
    | h::t -> let st = sublists t in 
     List.map (function l -> h::l) st @ st;; 

、あなたが

サブリスト[1をしようとした場合、4。 9; 12]

戻り値:

[[1; 4; 9; 12]。 [1; 4; 9]。 [1; 4; 12]。 [1; 4]。 [1; 9; 12]。 [1; 9]。 [1; 12]。 [1]; [4; 9; 12]。 [4; 9]。 [4; 12]。 [4]; [9; 12]。 [9]; [12]。 []]リスト内の要素のすべての可能な組み合わせです

(順番は関係ありません)

私は指定されたプロパティを果たす異なるサブリストのペアを返す関数を行う必要があります。私たちは前のリストを持っている場合、例えば、リスト*「リスト

- >「>リスト - 」( - リスト - > BOOL「>リスト」):

機能は、この型を持っている必要があります

([9; 12]、[9])これらのリストのsatisfacesが与えられたので:それが返されます

と我々は

検索(< 4)[12; 4; 9 1]を試します条件(< 4)。順序は問題ではなく、代わりに戻ることができます([9]、[12])。

私はこれでstuckedだけど、私は与えられたリストが別のリストの部分リストであるかどうかをチェック機能行っている:

let is_sublist_of l1 l2 = 
    let sub = sublists l1 in 
     List.mem l2 sub;; 

をしかし、私はそれがここに無用だと思います。誰でも私を助けてくれますか?

答えて

2

リストを最初にフィルタリングしてから、最初に2回サブリストを実行するだけでは問題になりませんか?

let filter_sublist f l = 
    let l = List.filter f l in 
    let rec sublists = function 
    | [] -> [], [] 
    | h :: t -> 
     let st1, st2 = sublists t in 
     h :: st1, st2 
    in sublists l 

ここでの問題は、私はあなたのタイプ('a list -> 'a list -> bool)を理解していないので、fはタイプ'a -> boolであるということです。それは何を表わすはずですか?

+0

私はどちらも理解していない、彼らは私にそれをそうするように頼んだ: – gmv92