Lambda 列表列表、lamba和筛选结果
我想创建两个函数: 1) 函数,它在列表(int list)中查找所有小于零的元素,然后将这些元素作为(int list)类型的列表返回 2) 函数,用于查找列表(浮点列表)上的所有偶数,然后将其返回为(整数列表) 它们都应该使用至少一个lambda表达式(funx->…) 如何创建这些函数?老实说,我不知道Lambda 列表列表、lamba和筛选结果,lambda,f#,functional-programming,Lambda,F#,Functional Programming,我想创建两个函数: 1) 函数,它在列表(int list)中查找所有小于零的元素,然后将这些元素作为(int list)类型的列表返回 2) 函数,用于查找列表(浮点列表)上的所有偶数,然后将其返回为(整数列表) 它们都应该使用至少一个lambda表达式(funx->…) 如何创建这些函数?老实说,我不知道 let findnegative(d:int list list)= //maybe List.map let findeven (t:float list list) =
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)
我想你正在寻找这样的东西:
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
让findnegative(d:int list)=
D
|>List.map(乐趣x->x |>List.filter(乐趣y->y<0))
|>List.collect id
让findeven(t:浮点列表)=
T
|>List.map(乐趣x->x |>List.filter(乐趣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
let findnegative=
列表(收集)0)
设findeven=
List.collect x%2.=0.)>>List.map int
使用list |>list.collect id
将其从列表列表转换为列表。然后根据您的条件应用List.filter
。@Asti-您实际上可以使用List.filter…
而不是id
作为List.collect
的参数。collect一步完成。您试图做什么来解决问题?@kvb let findeven(t:float List List)=List.map(fun x->int(x))(List.filter)(乐趣x->x%2.0=0.0)t),但它不起作用(“浮动不匹配浮动列表”错误)还不错…你知道这个|>
运算符是什么吗?它是x%2.=0。
对我来说很奇怪是的,我几分钟前把它改了回去。我对其他语法的理解不太正确,我正在调查。啊,当我部分应用(%)2时
这是由于2。
运算符错误。我认为需要有趣的语法。借助一个简单的帮助函数flip
可以降低可读性;):let findeven=let inline flip f l r=f r l in List.collect>(=)0.)>>List.map int
%
对于浮点数,我的意思是:)