gpt4 book ai didi

functional-programming - F# 中泛型类型的泛型函数

转载 作者:行者123 更新时间:2023-12-01 00:14:24 26 4
gpt4 key购买 nike

我正在使用 F# 学习函数式编程,并且我想编写一个函数来提高数字的幂。我用以下方式写了它:

let raiseToPower a power = 
let folding x _ = x * a
[1..power-1] |> List.fold folding a

let result = raiseToPower 2 5

我没有指定输入变量的类型 a ,所以我可以将这个函数与浮点数或整数一起使用 - 但不能同时使用
let result = raiseToPower 2.3 5 // OK // separate program
let result = raiseToPower 2 5 // OK
// separate program
let result1 = raiseToPower 2.3 5 // OK
let result2 = raiseToPower 2 5 // fail

第一个问题是:
有没有办法让它通用?

我为 F# 已经有一个内置实现的东西创建了一个函数的原因是我想使用类似的东西和自定义类型 - 例如复数。

考虑以下:
type ComplexNumber = {re: double; im: double;}

let (@*) cn1 cn2 =
{re = cn1.re * cn2.re - cn1.im * cn2.im; im = cn1.re * cn2.im + cn1.im * cn2.re}

我有一个新类型 ComplexNumber和一个新的运算符,它可以将两个复数相乘。现在我可以写一个类似的函数来提高 ComplexNumber给权力:
let raiseCnToPower a power = 
let folding x _ = x @* a
[1..power-1] |> List.fold folding a

所以第二个问题是:
有没有办法使初始函数与自定义类型和自定义运算符一起使用?

结论性问题:
我想知道您在函数式编程方面应该做什么。这是否被认为是一个问题,或者不同类型的不同功能几乎相同?有没有办法改进函数式编程和 F# 方面的解决方案?

最佳答案

一个简单的方法是声明它 inline :

let inline raiseToPower a power = 
let folding x _ = x * a
[1..power] |> List.fold folding (a / a) // <- handles power = 0

let result1 = raiseToPower 2 5
let result2 = raiseToPower 2. 5

关于functional-programming - F# 中泛型类型的泛型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54427085/

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