首页 > 解决方案 > 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)

标签: f#

解决方案


很难猜出你想要实现什么。然而,一些调整可以让你编译。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))

推荐阅读