2017-02-07 18 views
2

Я хочу создать две функции: 1) функция, которая находит все элементы меньше нуля в списке (список списка объектов), а затем возвращает эти элементы в виде списка (int list).Список списков, результатов lamba и фильтрации

2) функция, которая находит все числа, которые находятся даже в списке (список списков плавающих), а затем возвращает их как (список объектов).

Оба они должны использовать хотя бы одно лямбда-выражение (fun x -> ...).

Как создать эти функции? Честно говоря, я не знаю.

let findnegative(d:int list list)= 
    //maybe List.map 

let findeven (t:float list list) = 
//something with  List.filter (fun x -> x%2.0 = 0.0) 
+3

Использование списка '|> List.collect id' превратить его из список списков в список. Затем примените 'List.filter' с вашим условием. – Asti

+4

@Asti. Вы можете использовать 'List.filter ...' вместо' id' как аргумент 'List.collect', чтобы сделать это за один шаг. – kvb

+3

Что вы пытались решить, чтобы решить проблему? –

ответ

3

Я думаю, что вы ищете что-то вроде этого:

let findnegative(d:int list list) = 
    d 
    |> List.map (fun x -> x |> List.filter (fun y -> y < 0)) 
    |> List.collect id 

let findeven (t:float list list) = 
    t 
    |> List.map (fun x -> x |> List.filter (fun y -> y % 2.0 = 0.0)) 
    |> List.collect id 
    |> List.map int 

Это может быть упрощенно:

let findnegative = 
    List.collect <| List.filter ((>)0) 

let findeven = 
    List.collect <| List.filter (fun x -> x % 2. = 0.) >> List.map int 
+1

это 'x% 2. = 0.' странно для меня –

+0

Да, я изменил его назад несколько минут назад. Мое понимание другого синтаксиса не совсем правильно, я расследую. – Stuart

+0

А, когда я частично обращался с '((%) 2.)', который был с '2.' на неправильной стороне оператора. Мне нужен синтаксис 'fun'. – Stuart