0

私はこのコードを作成しました:

let rec foo1 z = function
  | [] -> []
  | x::xs when x = z -> x::(foo1 x xs)
  | x::xs -> foo1 z xs

int -> int -> boolしかし、最初の引数としてタイプの新しい関数を使用して、この関数のより複雑なバージョンが必要です。この関数は、リストのすべての要素に対して整数引数をテストします。演算子が適用されたときに true を返す要素は、戻りリストに配置する必要があります。

例:

let eq x y = x = y
let lt x y = x < y
let gt x y = x > y

foo2 eq 2 [1;2;4;2;5] => [2;2]
foo2 lt 2 [1;2;4;2;5] => [4;5]
foo2 gt 2 [1;2;4;2;5] => [1]
4

1 に答える 1

4
/// Pass a function as an argument 
let rec filterByVal fn z = function 
    | [] -> [] 
    | x::xs when fn z x -> x::(filterByVal fn z xs) 
    | _::xs -> filterByVal fn z xs

/// Use anonymous functions
filterByVal (fun z x -> z = x) 2 [1;2;4;2;5] // [2; 2]
filterByVal (fun z x -> z < x) 2 [1;2;4;2;5] // [4; 5]
filterByVal (fun z x -> z > x) 2 [1;2;4;2;5] // [1]

/// Or use symbolic infix functions
filterByVal (=) 2 [1;2;4;2;5]
filterByVal (<) 2 [1;2;4;2;5]
filterByVal (>) 2 [1;2;4;2;5]
于 2012-11-27T12:57:51.463 に答える