gpt4 book ai didi

.net - 如何为在列表上执行的一组操作正确地内联 F# 函数?

转载 作者:行者123 更新时间:2023-12-03 15:10:55 25 4
gpt4 key购买 nike

所以基本上如果我在 F# 中有一个简单的列表

let ls = [3; 9; 2; 15; 3]

我想 sortDescending 然后取 3。我可以做这个链接:
let orderList ls = List.sortDescending ls
let take3 ls = List.take(3) ls
let main ls = (orderList >> take3) ls

这工作得很好,并且在使用 F# 交互式调试器时可以满足我的需求。但我试图在所有一个表达式中内联执行它,而不是正确使用语法。有可能吗,我只是没有得到语法。
let main2 ls = List.sortDescending >> List.take(3) ls

我正在摆脱更多面向对象的思维方式,在 C# 中我可以这样做:
var ls = new List<int>{ 3, 9, 2, 15, 3 };
var subset = ls.OrderByDescending(x => x).Take(3).ToList();

我只是期待你可以像流畅的语法 INLINE 一样链接 continue,但似乎我缺少语法或没有得到简单的东西。我最近才在学习 F#,但到目前为止我一直在挖掘它。我只是很难理解一些事物被链接在一起的方式。

最佳答案

>>运算符接受两个函数并生成一个函数,该函数是这两个函数的组合。
|>运算符接受一个值和一个函数并将该值传递给该函数,从而产生另一个值。

假设我们有

let addone x = x + 1
let double x = x * 2

然后 (addone >> double) 100100 |> addone |> double都是 202。你明白为什么吗?确保这很清楚。

像这样想他们。 f >> g是组成:
let compose f g =
fun x -> g (f x)

所以
(addone >> double) 100

是相同的
(fun x -> double ( addone x ) ) 100

这与
double (addone 100)

x |> f是管道:
let pipe x f = f x

所以
100 |> addone |> double

是相同的
(addone 100) |> double

是相同的
double (addone 100)

在 C# 中,将扩展方法链接在一起的业务基本上是管道运算符:
customers.Take(100).ToList()

是相同的
Enumerable.ToList(Enumerable.Take(customers, 100))

关于.net - 如何为在列表上执行的一组操作正确地内联 F# 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40028832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com