f# - FS0001 应该是“int32”,而是“单位”
问题描述
首先,我是函数式编程和 F# 的完全初学者。我有点进入基本概念,并尝试通过编写 Mandelbrot 集程序来开始练习我的理解。该函数iterate
应该接受一个元组,对其进行迭代,并且在退出条件infinity
被满足的情况下,它应该返回它所花费的迭代量i
。否则它用改变的元组调用自己。我收到以下错误:FS0001 Should be "int32", is "unit" instead
第 2 行
编辑: mandelbrot 接受一个元组并返回一个元组;infinity 接受一个元组并返回一个整数
let rec iterate (a, b) :int32 =
for i:int32 in 0..100 do
(a, b)
|> mandelbrot
|> match infinity with
| a when a > 16 -> i
| a when a <= 16 -> iterate (a, b)
解决方案
很难猜出你想要实现什么。然而,一些调整可以让你编译。Afor do
期望一个函数返回unit
例如一个语句。
如果你想迭代多达一百次,你可以使用你在迭代中传递的变量 i ,每次调用时都会增加它并用 0 初始化它,例如iterate (2,3) 0
let mandelbrot (a,b) = (a,b)
let infinity (a,b) = a
let rec iterate (a, b) i :int =
(a, b)
|> mandelbrot
|> infinity
|> (fun a-> if i=100 then a else
match a with
| a when a > 16 -> i
| _ -> iterate (a,b) (i+1))
推荐阅读
- python - 我们可以删除或删除字典中任何键的值吗?
- algorithm - 约束最长递增子序列
- r - 使用“过滤器”选项时如何在数据表(DT R 包)中仅显示两位小数?
- mysql - 无法在 express.js 中获取请求的 API
- php - 如何在 Magento 1.9 中更改注册表单的 Post Action Url
- r - 使用 ycinterextra R 包出错的原因是什么?
- c - 从用户模式运行内核模式系统调用
- authentication - Azure B2C - 如何测试身份验证?
- ios - 谷歌地图 iOS 当前位置默认
- java - 在这个简单的 RxJava 异步场景中,我真的需要进行异常处理吗?