首页 > 解决方案 > F# 函数编程

问题描述

  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

标签: functionf#

解决方案


> let add20 add10 = add10 * 2;;

在这个声明中,你说的add20是一个函数,它接受一个名为 的参数add10,并返回 value 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两次功能”,而是意味着“将数字乘以add102”,这不是您想要的。


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

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

或者,如果您换一种方式看待它,您想要的是获取该函数add10并将其与自身组合以定义一个新函数。如果你熟悉函数组合操作符>>,你可以这样写:

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

推荐阅读