繁体   English   中英

F# 函数编程

[英]F# Function programming

  1. 定义函数 add10,它接受一个整数参数,将其加 10,然后返回结果。

  2. 定义函数 add20,它使用 add10 将 20 添加到给定的整数。 (add20 不允许使用“+”。)

我不确定我是否对此考虑得太深了,有一个更简单的解决方案,例如添加他不需要的另一个功能,因为他没有指定我是否可以或不能,但只需要使用 add10 和 add20单独的功能,但我无法弄清楚如何在没有加号的情况下将 20 添加到 add10 的结果中。

每当我只使用add20函数时,它只使用 2 后面的任何整数。

代码和输出如下:

> let add10 x = x + 10;;
val add10 : x:int -> int

> add10 2;;
val it : int = 12

> let add20 add10 = add10 * 2;;
val add20 : add10:int -> int

> add20 3;;
val it : int = 6

> let j = 2 |> add10 |> add20;;
val j : int = 24
> let add20 add10 = add10 * 2;;

在这个声明中,你说add20是一个函数,它接受一个名为add10的参数,并返回值add10 * 2 如果您为参数使用了不同的名称,也许这个函数只是将其参数乘以 2 会更清楚:

> let add20 x = x * 2;;
> add20 33;;
val it : int = 66

参数名为add10事实并不意味着您正在使用具有相同名称的函数add10 请注意类型签名add20 : add10:int -> int参数add10应该是一个int ,而不是一个函数。

您似乎已经想出了如何解决这个问题的基本思路,即add20函数应该通过执行add10两次来工作。 问题是add10 * 2并不意味着“将函数add10两次” ,它的意思是“将数字add10乘以 2” ,这不是您想要的。


您真正想要做的是调用该函数两次,其中第一次调用的输出用作第二次调用的输入。 您似乎已经知道管道转发运算符|> ,因此您可以使用它:

> let add20 x = x |> add10 |> add10;;
> add20 33;;
val it : int = 53

或者,如果你看它的另一种方式,你想要的是采取功能add10组成与它本身来定义一个新的功能。 如果您熟悉函数组合运算符>> ,则可以编写:

> let add20 = add10 >> add10;;
> add20 55;;
val it : int = 75

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM