function - F# 函数编程
问题描述
定义函数 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
,并返回 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
两次功能”,而是意味着“将数字乘以add10
2”,这不是您想要的。
您真正想要做的是两次调用该函数,其中第一次调用的输出用作第二次调用的输入。您似乎已经知道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
推荐阅读
- android - 在动态生成的组件中创建 react native app、开发和生产差异
- python - Pandas,Wide_to_Long 正在创建额外错误的行和额外的错误列
- python - 使用 CNN 的验证码识别没有给出预期的结果
- maven - Maven 构建失败(无法从以下候选 [Application, pfc.app.Application] 中找到单个主类)
- python - 在 Python 中获取 TypeError
- sql - SQL Server 2008:: 执行以下查询的有效方法
- windows - 安装程序,将所有需要的文件从 Internet 直接下载到安装文件夹
- ios - UIKeyboardDidShow 触发太频繁?
- reactjs - 组件属性上的 setNativeProps
- python - python中单个图形中的多图趋势