[英]F# Function programming
定义函数 add10,它接受一个整数参数,将其加 10,然后返回结果。
定义函数 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.