Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 这个错误意味着什么?如何修复它?_F# - Fatal编程技术网

F# 这个错误意味着什么?如何修复它?

F# 这个错误意味着什么?如何修复它?,f#,F#,这是我的密码 let rec Interest a b c = if (c=0) then b else Interest(a ((1.0+a)*b) (c-1));; 错误是: 如果(c=0),则b其他利息(a((1.0+a)*b)(c-1)) -------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 标准输入(2,26):错误FS0001:类型不匹配。期待 “但是给了一个 'a->int->'a当统一'a'和'a->int->'a

这是我的密码

let rec Interest a b c =
    if (c=0) then b else Interest(a ((1.0+a)*b) (c-1));;
错误是:

如果(c=0),则b其他利息(a((1.0+a)*b)(c-1))

-------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

标准输入(2,26):错误FS0001:类型不匹配。期待 “但是给了一个 'a->int->'a当统一'a'和'a->int->'a'时,结果类型将是无限的 >


您已将
Interest
定义为一个接受三个参数的函数,但传递的参数与此不匹配。按照它的编写方式,您只需将一个参数传递给递归调用,即带括号的表达式
a((1.0=a)*b)(c-1)
。这里,
a
被推断为两个参数的函数,
((1.0=a)*b)
(c-1)

长话短说,这抛弃了类型推断算法,直到它放弃了说它无法知道要给
兴趣
什么类型

你想要的是:

let rec Interest a b c =
    if (c=0) then b else Interest a ((1.0=a)*b) (c-1)
您还将遇到
(1.0=a)
的问题。这将计算为一个布尔值,您稍后要将其与
b
相乘。不确定目的是什么,但您可能正在寻找类似于
(如果1.0=a,那么1其他0)


与支持“bools”和int之间隐式转换的类C语言不同,F#要求您将所有转换都显式化以确保正确性(这也适用于数字类型之间的转换)。

您将
兴趣定义为一个包含三个参数的函数,但传递的参数与此不匹配。按照它的编写方式,您只需将一个参数传递给递归调用,即带括号的表达式
a((1.0=a)*b)(c-1)
。这里,
a
被推断为两个参数的函数,
((1.0=a)*b)
(c-1)

长话短说,这抛弃了类型推断算法,直到它放弃了说它无法知道要给
兴趣
什么类型

你想要的是:

let rec Interest a b c =
    if (c=0) then b else Interest a ((1.0=a)*b) (c-1)
您还将遇到
(1.0=a)
的问题。这将计算为一个布尔值,您稍后要将其与
b
相乘。不确定目的是什么,但您可能正在寻找类似于
(如果1.0=a,那么1其他0)


与支持“bools”和int之间隐式转换的类C语言不同,F#要求您将所有转换显式化以确保正确性(这也适用于数字类型之间的转换)。

它不是元组。没有逗号。它将
a
视为两个参数的函数。谢谢,所以在3个参数周围加括号会导致问题,但是没有办法在参数周围加括号。。。要冗余地明确传递了3个参数?P.S.编辑了(1.0=a)。。这是一个打字错误,括号改变了这里的意思。您可以使用需要在参数周围加括号的方式编写此函数,但这将是一个类型(和用法特征)稍有不同的函数。请看这里关于curried函数和uncurried函数之间的区别:(同样,这会使您的问题重复;))这很有意义。。所以“兴趣a b c”接受3个参数,而“兴趣(a b c)”接受1个参数,这是一个元组?是的,除了它是
Interest(a,b,c)
-用逗号分隔元组元素(如前面的评论所指出的)。它不是元组。没有逗号。它将
a
视为两个参数的函数。谢谢,所以在3个参数周围加括号会导致问题,但是没有办法在参数周围加括号。。。要冗余地明确传递了3个参数?P.S.编辑了(1.0=a)。。这是一个打字错误,括号改变了这里的意思。您可以使用需要在参数周围加括号的方式编写此函数,但这将是一个类型(和用法特征)稍有不同的函数。请看这里关于curried函数和uncurried函数之间的区别:(同样,这会使您的问题重复;))这很有意义。。所以“兴趣a b c”接受3个参数,而“兴趣(a b c)”接受1个参数,这是一个元组?是的,除了它是
兴趣(a,b,c)
-用逗号分隔元组元素(如前面的注释中所指出的)。可能重复的可能重复